分类: BSD
2010-08-21 00:51:17
手册三
2、删除不必要的预置用户和组
禁止操作系统中不必要的预置帐号(每次升级或安装完都要检查一下)。FreeBSD系统中就提供这样一些你可能不需要的预置帐号。如果确实不需要这些帐号,就把它们删掉。系统中有越多的帐号,就越容易受到攻击。
bash-2.03# cat passwd
---------------------snip----------------------
# $FreeBSD: src/etc/master.passwd,v 1.25 1999/09/13 17:09:07 peter Exp $
#
root:*:0:0:Charlie &:/root:/usr/local/bin/bash
toor:*:0:0:Bourne-again Superuser:/root:
daemon:*:1:1:Owner of many system processes:/root:/sbin/nologin
operator:*:2:5:System &:/:/sbin/nologin
bin:*:3:7:Binaries Commands and Source,,,:/:/sbin/nologin
tty:*:4:65533:Tty Sandbox:/:/sbin/nologin
kmem:*:5:65533:KMem Sandbox:/:/sbin/nologin
games:*:7:13:Games pseudo-user:/usr/games:/sbin/nologin
news:*:8:8:News Subsystem:/:/sbin/nologin
man:*:9:9:Mister Man Pages:/usr/share/man:/sbin/nologin
bind:*:53:53:Bind Sandbox:/:/sbin/nologin
uucp:*:66:66:UUCP pseudo-user:/var/spool/uucppublic:/usr/libexec/uucp/uucico
xten:*:67:67:X-10 daemon:/usr/local/xten:/sbin/nologin
pop:*:68:6:Post Office Owner:/nonexistent:/sbin/nologin
nobody:*:65534:65534:Unprivileged user:/nonexistent:/sbin/nologin
---------------------snip----------------------
可以看到系统中预置了不少账户,其中如games账户并不是必要的,我们可以用rmuser命令删除它:
bash-2.03# rmuser –y games
对系统中的组也应该做相应处理,用vipw编辑/etc/group,删除不需要的组。
3、改变系统的核心变量达到对外屏闭服务器没有使用的端口
#sysctl -w net.inet.tcp.log_in_vain=1
#sysctl -w net.inet.udp.log_in_vain=1
这会把尝试向你的机器要求你没有的服务的连接请求记录起来。例如,如果在系统上没有跑 DNS server,而又有个人想要向你的机器要求 DNS 服务,这时候你就会看到
Connection attempt to UDP yourIP:53 from otherIP:X
(X 是某个 high port #)
你用 "dmesg" 命令就可以看到这一行。Dmesg 显示出的是系统的 kernel message buffer。然而,这个 buffer 的空间是有限的, 所以系统也会把这些信息写入到 /var/log/messages 里面去:
bash-2.03# tail -1 /var/log/messages
Jun 12 19:36:03 ugh /kernel: Connection attempt to UDP yourIP:53 from otherIP:X
这对发现可能的入侵企图是很有帮助的。
4、关闭对广播类型的响应
#sysctl -w net.inet.icmp.bmcastecho=0
过滤icmp响应这后,服务器无法ping通,这有助提高部份安全性能。
5、对udp包的校验和计算
#sysctl -w net.inet.udp.checksum=1
可以防止不正确的udp包的攻击。
6、设置取消ctrl-alt-del组合键重启系统
为了防止用户无意中重新启动系统,还需要取消Ctrl-Alt-Del热键的重新启动能力,这需要重新定制内核时使用以下选项。
bash-2.03# cd /usr/src/sys/i386/conf
bash-2.03# ls
GENERIC LINT NEWCARD
bash-2.03# grep SC_DISABLE_REBOOT LINT
options SC_DISABLE_REBOOT # disable reboot key sequence
可以把以上的内核选项加入到自己定制的内核配置文件中。
四、参考FreeBSD技巧
1、更改shell并在配置文件中做设置
a.用chsh或者vipw命令,将root所使用的shell改成bash,如:
[root@redhat /root]#chsh
---------------------snip----------------------
#Changing user database information for root.
Login: root
Password: U1fRnHvjHLdU6
Uid [#]: 0
Gid [# or name]: 0
Change [month day year]:
Expire [month day year]:
Class:
Home directory: /root
Shell: /usr/local/bin/bash
---------------------snip----------------------
b.更改/root/.bashrc
[root@redhat /root]# cat .bashrc
---------------------snip----------------------
umask 077
PS1="[\u@\h \W]\\$ "
alias ls='ls -F'
alias ps='ps -auxf'
---------------------snip----------------------
c.建立/root/.bash_profile
---------------------snip----------------------
PATH=/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/bin:/usr/local/sbin:$HOME/bin; export PATH
umask 077
PS1="[\u@\h \W]\\$ "
alias ls='ls -F'
---------------------snip----------------------
2、更改telnet banner
修改/etc/gettys中有default的行,改成如下:
default:\
:cb:ce:ck:lc:fd#1000:im=\r\nRed Hat Linux release 6.2 (Zoot)\r\nKernel 2.2.14-50 on an i686\r\n:sp#1200
这是更改telnet的banner,令人telnet时看到的是:
---------------------snip----------------------
[root@redhat /etc]# telnet localhost
Trying 127.0.0.1...
Connected to localhost.netguard.com.cn.
Escape character is '^]'.
Red Hat Linux release 6.2 (Zoot)
Kernel 2.2.14-50 on an i686
login:
---------------------snip----------------------
3、更改ftp banner
修改/usr/src/libexec/ftpd/ftpd.c
将其中static char version[]的定义改为
static char version[] = "Version wu-2.6.0(1) Mon Feb 28 10:30:36 EST 2000";
然后
[root@redhat ftpd]# make;make install
我们来看看效果:
---------------------snip----------------------
[root@redhat ftpd]# ftp
ftp> o localhost
Connected to localhost.netguard.com.cn.
220 redhat.netguard.com.cn FTP server (Version wu-2.6.0(1) Mon Feb 28 10:30:36 EST 2000) ready.
Name (localhost:quack):
---------------------snip----------------------
五、参考安全工具
1、tripwire
作为一个优秀的完整性检查工具,tripwire可以对系统做一个快照,当怀疑系统遭受入侵的时候,系统管理员可以通过事前备份保存的快照文件与当前系统作比较,从而得出系统被更改文件列表。为事后审查做一个比较好的准备。
2、john
口令检查工具,由于部份帐号使用者可能使用简单帐号,john有几种模式,对简单密码很容易能够判断,这样可以一定程度上防止口令攻击。
3、nmap
nmap是一个端口扫描及操作系统堆栈判断工具,能够辅助系统管理员检查自己域内机器端口开放情况。
3,目前本系统的补丁情况
一、FreeBSD补丁方法
1、下载并检查完整性
比如:
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd-crypto.patch
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/patches/SA-01:49/telnetd-crypto.patch.asc
使用自己的pgp工具对文件完整性进行检查
2、patch源文件
# cd /usr/src/
# patch -p < /path/to/patch
3、编译安装
# cd /usr/src/secure/libexec/telnetd
# make depend && make all install
4、攻击测试
# ./telnet_exploit -c localhost
7350854 - x86/bsd telnetd remote root
by zip, lorian, smiler and scut.
check: FAILED
aborting
二、FreeBSD补丁下载地点
http://www.freebsd.org/security/
ftp://ftp.freebsd.org/pub/FreeBSD/CERT/advisories/
三、FreeBSD官方安全邮件列表
有两个FreeBSD的官方安全邮件列表
freebsd-security General security related discussion
freebsd-security-notifications Security notifications (moderated mailing list)
发送邮件到majordomo@FreeBSD.ORG,主题是"subscribe freebsd-security"就可以了。
% echo "subscribe freebsd-security" | mail majordomo@FreeBSD.org
4,系统应用程序可能存在的安全问题
从1996年至今(2001年8月),与FreeBSD操作系统相关的系统及应用程 序漏洞共167条,全部可在FreeBSD官方网站上获得基本资料,根据这些情况分析,使用FreeBSD操作系统时,需要对运行于其上的应用程序做基本 安全审核。这通常需要具体情况具体分析,对系统运行的所有进程及其程序的安全行做基本考察。比如所有版本的FreeBSD 4.x prior to 4.4中,tcpdump都存在一个format string的漏洞,入侵者可以通过构造特殊的字串来对系统进行攻击,导致tcpdump崩溃,甚至有可能可以执行任意代码。而tcpdump通常是由 root身份运行的,因此远程用户可以通过这一漏洞获取系统最高权限。存在同样问题的应用程序或者服务在最近一段期间有licq、xinetd等等许多。 有些会导致远程的root级别的威胁,有些则是suid程序,会导致本地用户有可能越权执行程序或任务。
同样情况,在FreeBSD上如果运行了Apache、php、Mysql等各种服务或者应用程序,用户需要对这些应用程序的安全性有一定程序的了解,而不仅依赖于操作系统的安全性。
5,施工注意事项
一、配置
1、对极其重要,不能中止服务的主机
必需要做的项目如下:
a. 设单用户模式需要密码
b. 关闭或者修补telnetd服务器
c. 关闭或者修补ftpd服务器
d. 在inetd.conf及rc.conf中去除不必要的服务
e. 强烈建议用ssh及scp替代telnet和ftp
2、对可以暂时停止服务进行配置工作的主机
除了以上选项之外
a. 建议重新编译内核加入ipfilter支持。
b. 建议使用sysctl对系统核心参数做进一步调整。
二、审核
1、如何发现入侵
如果的系统已经被入侵者控制,或者入侵者已经获得了一些权限,那么系统总会有一些症状反映出来,有些症状也往往暗示着有人正在打你系统的主意,你的系统将被入侵。
a.异常的访问日志
入侵者在入侵并控制系统之前,往往会先用自动或者手动扫描这个系统,以获取更多的信息,了解并入侵您的系统。
系统被扫描的征兆:
a-1.一个IP连续多次出现在系统的各种服务日志中,并试图访问越权访问管理程序,这很有可能是入侵者在试图寻找并尝试漏洞。
a-2.一个IP连续多次在同一系统多个服务建立了空连接,这很有可能是入侵者在搜集服务的版本信息。
a-3.有人访问了系统不必要的服务,或者系统不存在的但是有严重安全隐患的漏洞。
比如:finger、rpc.statd。
a-4.有人telnet、ftp、pop3、su等服务日志连续出现了大量的连续性失败登入日志,着很有可能是入侵者在尝试猜测系统的密码。
b.网络流量增大
如果一台服务器突然间流量大了许多,这就预示着你的系统有可能已经被入侵者控制,并用来扫描和攻击其它的服务器。事实证明,流量突然过大不容忽视,许多入侵者都用中间主机下载并提供扫描软件,对远程主机扫描、分析和测试漏洞,进而造成网络流量突然增大。
c.非法访问
如果你发现某个用户试图访问控制并修改/etc/shadow、系统日志和系统配置文件,那么很有可能这个用户已经被入侵者控制,并且试图夺取更高的权限。
d.正常服务终止
比如系统的日志服务突然奇怪的停掉了,你的syslogd程序突然终止,这暗示着入侵者试图停掉这些有威胁的服务,在系统上留下空日志来逃避管理员的追查。
e.可疑的进程,非法服务
系统中任何可疑的进程都应该仔细检查,比如以root启动的httpd服务,系统中本来关闭的服务重新被启动。这些可疑进程和服务,很有可能是入侵者启动的攻击进程、后门进程、sniffer进程。
f.系统文件或用户数据被更改
入侵者通常会更改系统中的配置文件来逃避追查,或者加载后门、攻击程序之类,比如修 改syslog.conf文件去掉secure的条目来躲避login后门的审计;修改hosts.deny、hosts.allow来解除 tcpwrapper对入侵者IP的过滤;增加一个条目在rc.d里面,以便系统启动的时候,同时启动后门程序;增加了一个用户、一个suid程序都意味 着你的系统已经被入侵着控制了。
g.可疑的数据
系统中出现了诸如" "(空格空格)、".. "(点点空格)、"..^M"(点点ctrl+M)、"..."(点点点)这样可疑的目录,入侵者经常在这样的目录中使用和隐藏文件.系统命令被修改(比 如安装了lrk,ps输出有变化),有些目录里面(特别是/tmp)出现了常用扫描器的产生的临时文件,攻击程序,磁盘空间突然变小,主页被修改,用户数 据被修改。
h.系统被sniffer
系统入侵发生时,入侵者经常在UNIX系统上安装一个网络监视程序,通常称为 sniffer,用于捕获用户账号和密码信息。是否有进程把任何网络设备置成混杂模式是判断sniffer存在的证据,如果任一网络设备处于混杂模式,那 系统中就有sniffer程序在运行。传统的sniffer不能在交换环境成功使用,交换环境通过mac地置发送数据,这就产生了各种ARC欺骗工 具,sniffer和snoop永远都是同时存在的。
2、紧急处理需知
a.立刻断开网络连接
入侵着控制了系统,往往得到的都是root权限,如果不把被入侵的主机从网络上断 开,入侵者可能连入这台主机并撤销你所做的恢复工作。他们知道了管理员发现了自己,也可能会做出一些破坏性举动,诸如发出 rm -rf / &等指令来彻底清除自己的罪证,为了防止这种情况发生,请先断开网络连接,并且启用备份域服务器。紧急情况下可以直接拔掉自己的网线,关掉相关的 网络设备,如交换机和路由器等。
b.制作遭受入侵的系统的镜象
如果你有一块备用的磁盘,大小和型号都与被入侵主机上的磁盘相同,可以使用UNIX的dd命令制作被入侵系统的一个额外拷贝。如果你有磁带机可用ufsdump为系统做一个0级备份。
例如,在一个有两个SCSI硬盘的Linux系统,以下命令将在相同大小和类型的备份硬盘(/dev/sdb)上复制被侵入系统(在/dev/sda盘上)的一个精确拷贝。
# dd if=/dev/sda of=/dev/sdb
建立一个备份非常重要,你可能会需要将系统恢复到侵入刚被发现时的状态。它对法律调查可能有帮助。记录下备份的卷标、标志和日期,然后保存到一个安全的地方以保持数据的完整性。
c.报案、通知cert
向当地公安局报案,使你的损失在以后能得到赔偿。通知cert,引起大家注意,以免internet上其他主机也收到同样的攻击。
3、如何进行审核
a.检查入侵者对系统软件和配置文件的修改
二进制文件,系统配置文件都是黑客喜欢更改的地方。
b.检查被修改的数据
比如web cgi程序,很可能会被植入后门。
c.检查入侵者留下的工具和数据
搜索主要可以集中于以下方向
检查UNIX系统/dev/、man目录下意外的ASCII文件。一些特洛伊木马二进制文件使用的配置文件通常在这些目录中。
仔细检查系统中的隐藏文件和隐藏目录。如果入侵者在系统中建立一个一个新的帐户,那么这个新帐户的起始目录以及他使用的文件可能是隐藏的。
检查一些名字非常奇怪的目录和文件,例如:...(三个点)、..(两个点)以及空白(在UNIX系统中)。入侵者通常会在这样的目录中隐藏文件。对于NT,应该检查那些名字和一些系统文件名非常接近的目录和文件。
d.审查系统日志文件
/etc/syslogd.conf下定义的日志文件。
e.检查网络嗅探器
判断系统是否被安装了嗅探器,首先要看当前是否有进程使你的网络接口处于混杂 (Promiscuous)模式下。如果任何网络接口处于promiscuous模式下,就表示可能系统被安装了网络嗅探器。注意如果你重新启动了系统或 者在单用户模式下操作,可能无法检测到Promiscuous模式。使用ifconfig命令就可以知道系统网络接口是否处于promoscuous模式 下(注意一定使用没有被侵入者修改的ifconfig):
正常输出:
su-2.05# ifconfig ed0
ed0: flags=8843
inet 192.168.168.52 netmask 0xffffff00 broadcast 192.168.168.255
inet 192.168.168.54 netmask 0xffffff00 broadcast 192.168.168.255
inet 192.168.168.55 netmask 0xffffff00 broadcast 192.168.168.255
ether 00:80:c8:f6:0d:61
处于混杂模式下的输出:
su-2.05# ifconfig ed0
ed0: flags=8943
inet 192.168.168.52 netmask 0xffffff00 broadcast 192.168.168.255
inet 192.168.168.54 netmask 0xffffff00 broadcast 192.168.168.255
inet 192.168.168.55 netmask 0xffffff00 broadcast 192.168.168.255
ether 00:80:c8:f6:0d:61
f.检查是否有kld后门
小组开发的ksec软件,可以部份地检查出FreeBSD系统中存在的kld后门。
g.检查网络上的其它系统
除了已知被侵入的系统外,你还应该对网络上所有的系统进行检查。主要检查和被侵入主机共享网络服务(例如:NIX、NFS)或者通过一些机制(例如:hosts.equiv、.rhosts文件,或者kerberos服务器)和被侵入主机相互信任的系统。