攻击的善后工作
1. 日志系统简介
如果攻击者完成攻击后就立刻离开系统而不做任何善后工作,那么他的行踪将很快被系统管理员发现,因为所有的网络操作系统一般都提供日志记录功能,会把系统上发生的动作记录下来。所以,为了自身的隐蔽性,黑客一般都会抹掉自己在日志中留下的痕迹。想要了解黑客抹掉痕迹的方法,首先要了解常见的操作系统的日志结构以及工作方式。Unix的日志文件通常放在下面这几个位置,根据操作系统的不同略有变化
/usr/adm——早期版本的Unix。
/Var/adm新一点的版本使用这个位置。
/Varflort一些版本的Solaris、 Linux BSD、 Free BSD使用这个位置。
/etc,大多数Unix版本把Utmp放在此处,一些Unix版本也把Wtmp放在这里,这也是Syslog.conf的位置。
下面的文件可能会根据你所在的目录不同而不同:
acct或pacct-一记录每个用户使用的命令记录。
accesslog主要用来服务器运行了NCSA HTTP服务器,这个记录文件会记录有什么站点连接过你的服务器。
aculo保存拨出去的Modems记录。
lastlog记录了最近的Login记录和每个用户的最初目的地,有时是最后不成功Login的记录。
loginlog一记录一些不正常的L0gin记录。
messages——记录输出到系统控制台的记录,另外的信息由Syslog来生成
security记录一些使用 UUCP系统企图进入限制范围的事例。
sulog记录使用su命令的记录。
utmp记录当前登录到系统中的所有用户,这个文件伴随着用户进入和离开系统而不断变化。
Utmpx,utmp的扩展。
wtmp记录用户登录和退出事件。
Syslog最重要的日志文件,使用syslogd守护程序来获得。
2. 隐藏踪迹
攻击者在获得系统最高管理员权限之后就可以随意修改系统上的文件了(只对常规 Unix系统而言),包括日志文件,所以一般黑客想要隐藏自己的踪迹的话,就会对日志进行修改。最简单的方法当然就是删除日志文件了,但这样做虽然避免了系统管理员根据IP追踪到自己,但也明确无误地告诉了管理员,系统己经被人侵了。所以最常用的办法是只对日志文件中有关自己的那一部分做修改。关于修改方法的具体细节根据不同的操作系统有所区别,网络上有许多此类功能的程序,例如 zap、 wipe等,其主要做法就是清除 utmp、wtmp、Lastlog和 Pacct等日志文件中某一用户的信息,使得当使用w、who、last等命令查看日志文件时,隐藏掉此用户的信息。
管理员想要避免日志系统被黑客修改,应该采取一定的措施,例如用打印机实时记录网络日志信息。但这样做也有弊端,黑客一旦了解到你的做法就会不停地向日志里写入无用的信息,使得打印机不停地打印日志,直到所有的纸用光为止。所以比较好的避免日志被修改的办法是把所有日志文件发送到一台比较安全的主机上,即使用loghost。即使是这样也不能完全避免日志被修改的可能性,因为黑客既然能攻入这台主机,也很可能攻入loghost。
只修改日志是不够的,因为百密必有一漏,即使自认为修改了所有的日志,仍然会留下一些蛛丝马迹的。例如安装了某些后门程序,运行后也可能被管理员发现。所以,黑客高手可以通过替换一些系统程序的方法来进一步隐藏踪迹。这种用来替换正常系统程序的黑客程序叫做rootkit,这类程序在一些黑客网站可以找到,比较常见的有LinuxRootKit,现在已经发展到了5.0版本了。它可以替换系统的ls、ps、netstat、inetd等等一系列重要的系统程序,当替换了ls后,就可以隐藏指定的文件,使得管理员在使用ls命令时无法看到这些文件,从而达到隐藏自己的目的。
3. 后门
一般黑客都会在攻入系统后不只一次地进入该系统。为了下次再进入系统时方便一点,黑客会留下一个后门,特洛伊木马就是后门的最好范例。Unix中留后门的方法有很多种,下面介绍几种常见的后门,供网络管理员参考防范。
<1>密码破解后门
这是入侵者使用的最早也是最老的方法, 它不仅可以获得对Unix机器的访问, 而且可 以通过破解密码制造后门. 这就是破解口令薄弱的帐号. 以后即使管理员封了入侵者 的当前帐号,这些新的帐号仍然可能是重新侵入的后门. 多数情况下, 入侵者寻找口令 薄弱的未使用帐号,然后将口令改的难些. 当管理员寻找口令薄弱的帐号是, 也不会发 现这些密码已修改的帐号.因而管理员很难确定查封哪个帐号.
<2>Rhosts + + 后门
在连网的Unix机器中,象Rsh和Rlogin这样的服务是基于rhosts文件里的主机名使用简 单的认证方法. 用户可以轻易的改变设置而不需口令就能进入. 入侵者只要向可以访 问的某用户的rhosts文件中输入"+ +", 就可以允许任何人从任何地方无须口令便能进 入这个帐号. 特别当home目录通过NFS向外共享时, 入侵者更热中于此. 这些帐号也成 了入侵者再次侵入的后门. 许多人更喜欢使用Rsh, 因为它通常缺少日志能力. 许多管 理员经常检查 "+ +", 所以入侵者实际上多设置来自网上的另一个帐号的主机名和 用户名,从而不易被发现.
<3>校验和及时间戳后门
早期,许多入侵者用自己的trojan程序替代二进制文件. 系统管理员便依靠时间戳和系 统校验和的程序辨别一个二进制文件是否已被改变, 如Unix里的sum程序. 入侵者又发 展了使trojan文件和原文件时间戳同步的新技术. 它是这样实现的: 先将系统时钟拨 回到原文件时间, 然后调整trojan文件的时间为系统时间. 一旦二进制trojan文件与 原来的精确同步, 就可以把系统时间设回当前时间. Sum程序是基于CRC校验, 很容易 骗过.入侵者设计出了可以将trojan的校验和调整到原文件的校验和的程序. MD5是被 大多数人推荐的,MD5使用的算法目前还没人能骗过.
<4>Login后门
在Unix里,login程序通常用来对telnet来的用户进行口令验证. 入侵者获取login.c的 原代码并修改,使它在比较输入口令与存储口令时先检查后门口令. 如果用户敲入后门 口令,它将忽视管理员设置的口令让你长驱直入. 这将允许入侵者进入任何帐号,甚至 是root.由于后门口令是在用户真实登录并被日志记录到utmp和wtmp前产生一个访问 的, 所以入侵者可以登录获取shell却不会暴露该帐号. 管理员注意到这种后门后, 便 用"strings"命令搜索login程序以寻找文本信息. 许多情况下后门口令会原形毕露. 入侵者就开始加密或者更好的隐藏口令, 使strings命令失效. 所以更多的管理员是 用MD5校验和检测这种后门的.
<5>Telnetd后门
当用户telnet到系统, 监听端口的inetd服务接受连接随后递给in.telnetd,由它运行 login.一些入侵者知道管理员会检查login是否被修改, 就着手修改in.telnetd. 在in.telnetd内部有一些对用户信息的检验, 比如用户使用了何种终端. 典型的终端 设置是Xterm或者VT100.入侵者可以做这样的后门, 当终端设置为"letmein"时产生一 个不要任何验证的shell. 入侵者已对某些服务作了后门, 对来自特定源端口的连接产 生一个shell .
<6>服务后门
几乎所有网络服务曾被入侵者作过后门. Finger, rsh, rexec, rlogin, ftp, 甚至 inetd等等的作了的版本随处多是. 有的只是连接到某个TCP端口的shell,通过后门口 令就能获取访问.这些程序有时用刺娲□?Ucp这样不用的服务,或者被加入inetd.conf 作为一个新的服务.管理员应该非常注意那些服务正在运行, 并用MD5对原服务程序做 校验.
<7>Cronjob后门
Unix上的Cronjob可以按时间表调度特定程序的运行. 入侵者可以加入后门shell程序 使它在1AM到2AM之间运行,那么每晚有一个小时可以获得访问. 也可以查看cronjob中 经常运行的合法程序,同时置入后门.
<8>库后门
几乎所有的UNIX系统使用共享库. 共享库用于相同函数的重用而减少代码长度. 一些 入侵者在象crypt.c和_crypt.c这些函数里作了后门. 象login.c这样的程序调用了 crypt(),当使用后门口令时产生一个shell. 因此, 即使管理员用MD5检查login程序, 仍然能产生一个后门函数.而且许多管理员并不会检查库是否被做了后门.对于许多入 侵者来说有一个问题: 一些管理员对所有东西多作了MD5校验. 有一种 办法是入侵者对open()和文件访问函数做后门. 后门函数读原文件但执行trojan后门 程序. 所以 当MD5读这些文件时,校验和一切正常. 但当系统运行时将执行trojan版本 的. 即使trojan库本身也可躲过 MD5校验. 对于管理员来说有一种方法可以找到后门, 就是静态编连MD5校验程序然后 运行. 静态连接程序不会使用trojan共享库.
<9>内核后门
内核是Unix工作的核心. 用于库躲过MD5校验的方法同样适用于内核级别,甚至连静态 连接多不能识别. 一个后门作的很好的内核是最难被管理员查找的, 所幸的是内核的 后门程序还不是随手可得, 每人知道它事实上传播有多广.
<10>文件系统后门
入侵者需要在服务器上存储他们的掠夺品或数据,并不能被管理员发现. 入侵者的文章 常是包括exploit脚本工具,后门集,sniffer日志,email的备分,原代码,等等. 有时为 了防止管理员发现这么大的文件, 入侵者需要修补"ls","du","fsck"以隐匿特定的目 录和文件.在很低的级别, 入侵者做这样的漏洞: 以专有的格式在硬盘上割出一部分, 且表示为坏的扇区. 因此入侵者只能用特别的工具访问这些隐藏的文件. 对于普通的 管理员来说, 很难发现这些"坏扇区"里的文件系统, 而它又确实存在.
<11>Boot块后门
在PC世界里,许多病毒藏匿与根区, 而杀病毒软件就是检查根区是否被改变. Unix下, 多数管理员没有检查根区的软件, 所以一些入侵者将一些后门留在根区.
<12>隐匿进程后门
入侵者通常想隐匿他们运行的程序. 这样的程序一般是口令破解程序和监听程序 (sniffer).有许多办法可以实现,这里是较通用的: 编写程序时修改自己的argv[] 使它看起来象其他进程名. 可以将sniffer程序改名类似in.syslog再执行. 因此 当管理员用"ps"检查运行进程时, 出现 的是标准服务名. 可以修改库函数致使 "ps"不能显示所有进程. 可以将一个后门或程序嵌入中断驱动程序使它不会在进程表 显现. 使用这个技术的一个后门 例子是amod.tar.gz :
http://star.niimm.spb.su/~maillist/bugtraq.1/0777.html
也可以修改内核隐匿进程.
<13>网络通行后门
入侵者不仅想隐匿在系统里的痕迹, 而且也要隐匿他们的网络通行. 这些网络通行后 门有时允许入侵者通过防火墙进行访问. 有许多网络后门程序允许入侵者建立某个端 口号并不用通过普通服务就能实现访问. 因为这是通过非标准网络端口的通行, 管理 员可能忽视入侵者的足迹. 这种后门通常使用TCP,UDP和ICMP, 但也可能是其他类型报 文.
<14>TCP Shell 后门
入侵者可能在防火墙没有阻塞的高位TCP端口建立这些TCP Shell后门. 许多情况下,他 们用口令进行保护以免管理员连接上后立即看到是shell访问. 管理员可以用netstat 命令查看当前的连接状态, 那些端口在侦听, 目前连接的来龙去脉. 通常这些后门可 以让入侵者躲过TCP Wrapper技术. 这些后门可以放在SMTP端口, 许多防火墙允许 e-mail通行的.
<15>UDP Shell 后门
管理员经常注意TCP连接并观察其怪异情况, 而UDP Shell后门没有这样的连接, 所以 netstat不能显示入侵者的访问痕迹. 许多防火墙设置成允许类似DNS的UDP报文的通 行. 通常入侵者将UDP Shell放置在这个端口, 允许穿越防火墙.
<16>ICMP Shell 后门
Ping是通过发送和接受ICMP包检测机器活动状态的通用办法之一. 许多防火墙允许外 界ping它内部的机器. 入侵者可以放数据入Ping的ICMP包, 在ping的机器间形成一个 shell通道. 管理员也许会注意到Ping包暴风, 但除了他查看包内数据, 否者入侵者不 会暴露.
<17>加密连接
管理员可能建立一个sniffer试图某个访问的数据, 但当入侵者给网络通行后门加密 后,就不可能被判定两台机器间的传输内容了.