科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航



ZDNet>网络频道>ZD评测>一次惊心动魄的linux肉鸡入侵检测经历

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

这是一篇网友的亲身经历,从中我们或许能学习一些东西,希望对大家有所帮助。

来源: 2007年10月11日

关键字:肉鸡 入侵 检测 Linux

  这是一篇网友的亲身经历,从中我们或许能学习一些东西,希望对大家有所帮助。昨天答应了给wzt找几个linux肉鸡测试程序的,打开http://www.milw0rm.com/webapps.php,找了个include漏洞的程序试了一下,很快就得到一个webshell,没什么好说的,redhat9的机器,然后localroot了一下。

  插句话,本文中的ip地址和主机名都被替换了,请不要对号入座,本文手法仅供参考,在正规的入侵检测操作中,我们还是需要注意很多流程和细节上的问题。

  进了肉鸡,换上我们的ssh后门,具体的方法可以在http://baoz.net或http://xsec.org上找到,带视频教程如果看完视频之后还有疑问,可以到http://cnhonker.com/bbs/的linux版交流一下。

  一进ssh,哦,有异样……

  Lastlogin:FriNov1708:21:142006fromac9e2da9.ipt.aol.com

  

  好奇,扫一下。

  引用:

  [fatb@baoz~]$nmap-P0ac9e2da9.ipt.aol.com-O

  

  进了机器第一个事就是看看是不是vmware,是的话赶紧跑路了,别掉到人家的破罐子里去了,呵呵

  来,看看:

  ##检查是不是vmware的机器

  引用:

  [root@victimroot]#ifconfig-a|grep-i-e"00-05-69"-e"00-0C-29"-e"00-50-56";dmesg|grep-ivmware

  

  如果没输出的话,还好。。。。就算是个honeypot,好歹也是投资了点设备的honeypot。继续看看他投资了什么设备:

  引用:

  [root@victimroot]#cat/proc/cpuinfo|grepname;cat/proc/meminfo|grepMemTotal

  modelname:Intel(R)Xeon(TM)CPU2.80GHz

  modelname:Intel(R)Xeon(TM)CPU2.80GHz

  modelname:Intel(R)Xeon(TM)CPU2.80GHz

  modelname:Intel(R)Xeon(TM)CPU2.80GHz

  MemTotal:1030228kB

  

  还可以的机器,虽然4CPU却只有1G的内存,有点怪,但是还是勉强了,跑个密码什么的也行。

  关于anti-honeynet,下面有两个文章不错,不过都是针对vmware或者UserModeLinux的了,如果人家用真实机器,那还得靠人品啊,呵呵。

  http://xsec.org/index.php?module=arc...ew&type=3&id=5

  http://xsec.org/index.php?module=arc...ew&type=3&id=6

  关于honeynet和anti-honeynet的讨论,可以来这里聊聊

  http://cnhonker.com/bbs/thread.php?fid=15&type=1

  废话少说,接下来第二个事就是看看有没道友在上面,有的话就不好意思了,得请出去

  一般我都会先打几个命令看看,因为有些rootkit他改的不好,或者是因为版本的问题,反正不管什么原因,有一些被替换了的程序的一些参数会没有的。

  引用:

  [root@victimroot]#ls-alh

  ls:invalidoption--h

  Try`ls--help'formoreinformation.

  

  呵呵,ls被替换了。在看看netstat

  引用:

  [root@victimroot]#netstat-anp

  ActiveInternetconnections(serversandestablished)

  ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname

  tcp000.0.0.0:800.0.0.0:*LISTEN1702/httpd

  tcp000.0.0.0:220.0.0.0:*LISTEN1516/sshd

  tcp00127.0.0.1:250.0.0.0:*LISTEN1540/

  tcp0300123.123.123.123:2210.20.30.40:2245ESTABLISHED6097/sshd:

  tcp00123.123.123.123:2210.20.30.40:2247ESTABLISHED6815/sshd:

  ActiveUNIXdomainsockets(serversandestablished)

  ProtoRefCntFlagsTypeStateI-NodePID/ProgramnamePath

  unix2[ACC]STREAMLISTENING1214306815/sshd:/tmp/ssh-vfJj6815/agent.6815

  unix2[ACC]STREAMLISTENING1169046097/sshd:/tmp/ssh-weHq6097/agent.6097

  unix6[]DGRAM15601476/syslogd/dev/log

  unix2[]DGRAM17711570/crond

  unix2[]DGRAM17281549/

  unix2[]DGRAM17141540/

  unix2[]DGRAM15681480/klogd

  

  看起来貌似还算正常。

  不管3721,直接搞两个检查rootkit的东西回来看看,chkrootkit和rkhunter。

  先爽一下chkrootkit:注意,我们现在是在根本不可信的环境下检查的,可能有朋友会问“为什么要在不可信的环境里检查啊”,原因是这样的,因为我们先在一个不可信的环境里检查,得出一份结果,然后再在稍微可信的环境里检查,再得到一份结果,这样我们前后对比,大致就可以知道这位道友是否有使用LKM或者更高级的rootkit了。

  检查完之后,我们发现下面有趣的信息:

  引用:

我们再找rkhunter爽一下:

rkhunter的输出信息比较人性化也比较多,--quite选项输出又有点问题,我就rip比较有用的信息出来,日志在/var/log/rkhunter.log。

引用:
[root@vctimchkrootkit-0.47]#/usr/local/bin/rkhunter-c--createlogfile
Rootkit'SHV4'...[Warning!]
Rootkit'SHV5'...[Warning!]
Rootkit'SuckitRootkit'...[Warning!]-->还有这个高级货啊,偷偷的汗了一下。
*Filesystemchecks
Checking/devforsuspiciousfiles...[Warning!(unusualfilesfound)]
Unusualfiles:
/dev/srd0:ASCIItext-->/dev下有ascii文件……
--------MD5
MD5cmpared:51
IncorrectMD5checksums:6
Filescan
Scannedfile:342
Possibleinfectedfiles:3
Possiblerootkits:SHV4SHV5SuckitRootkit
Applicationscan
Vulnerableapplications:4
Scanningtook751seconds
Scanresultswrittentologfile(/var/log/rkhunter.log)
扫完了,来个总结,这个比chkrootkit人性化多了。我们可以看到,这两个程序报告的有低级的rookkit,比如t0rn,SHV5,还有高级的rootkit:suckit。先看在眼里,别太在意,因为rkhunter和chkrootkit这样的程序都只能检测一些默认安装的rootkit,也不排除把这个rootkit报成那个rootkit的可能。

折腾了一下,心里大概有个数了,回过头来想想,他必定不只替换了一个ls的,找个静态工具包回来,并且修改一下PATH变量,优先使用我们的静态程序。

引用:
[root@victimroot]#exportPATH=/root/.../static/:$PATH
ok,我们现在再看看ls

引用:
[root@victim/]#ls-alh/tmp/mc-root/
total8.0K
drwx------2rootroot4.0KNov819:36.
drwxrwxrwt9rootroot4.0KNov1810:47..
现在我们的程序暂时还是相对比较信得过的。

继续做上面两组检测。

我们把得到的结果和刚才的相比,chkrootkit对elf的检测没有报警了,隐藏进程也没有了,我们大致可以判断道友隐藏的手段比较低级,但是想起那个suckit的报警。。。。心里不敢大意。还不知道有没模块什么的。

为了更清楚一点,我们分析一下/var/log/rkhunter.log这个日志文件看看。看了日志,我们就会清楚为什么rkhunter的两次的检测报告试一样的了,因为他是用md5来校验的,他有一个数据库,而chkrootkit是检测输出信息。
[11:20:04]/bin/lsHashNOTvalid

(MyMD5:0a07cf554c1a74ad974416f60916b78d,expected:dbc1a18b2e447e0e0f7c139b1cc79454)
我们把SHV和suckit相关的信息弄出来看看

引用:
[11:20:53]***StartscanSHV4***
[11:20:53]-File/lib/lidps1.so...WARNING!Exists.
[11:21:12]***StartscanSHV5***
[11:21:12]-File/etc/sh.conf...WARNING!Exists.
[11:21:12]-File/dev/srd0...WARNING!Exists.
[11:21:12]-Directory/usr/lib/libsh...WARNING!Exists.
[11:21:15]***StartscanSuckitRootkit***
[11:21:15]-File/usr/share/locale/sk/.sk12/sk...WARNING!Exists.
[11:21:15]-Directory/usr/share/locale/sk/.sk12...WARNING!Exists.
看到这里,基本上就知其所以然了。我们继续一个一个的看

引用:
[root@victimroot]#file/lib/lidps1.so
/lib/lidps1.so:ASCIItext
[root@victimroot]#cat/lib/lidps1.so
ttyload
shsniff
shp
shsb
hide
ttymon
scanner
看到这里,我忍不住ps和netstat了一下,发现了这两个东西

引用:
root15840.00.0185268?SNov170:00/sbin/ttyload-q
root15860.00.01500168?SNov170:26ttymontymon
[root@victimroot]#netstat-anp
ActiveInternetconnections(serversandestablished)
ProtoRecv-QSend-QLocalAddressForeignAddressStatePID/Programname
tcp000.0.0.0:313380.0.0.0:*LISTEN1584/ttyload
tcp000.0.0.0:800.0.0.0:*LISTEN1702/httpd
tcp000.0.0.0:220.0.0.0:*LISTEN1516/sshd
tcp00127.0.0.1:250.0.0.0:*LISTEN1540/
raw000.0.0.0:10.0.0.0:*71586/ttymon
raw131200.0.0.0:10.0.0.0:*71586/ttymon
我们注意一下pid为1584和1586的两个进程,它们一个开了31338端口,一个起了rawsocket,估计两个都是后门,一个bindport的,一个是sniffer的后门,接着我们lsof看看,呵呵,都现形了吧。

引用:
[root@victimroot]#lsof-n-p1584
COMMANDPIDUSERFDTYPEDEVICESIZENODENAME
31584rootcwdDIR8,340962/
31584rootrtdDIR8,340962/
31584roottxtREG8,3652620212994/tmp/sh-DJYK3MJABRP(deleted)-->这个是upx压缩后的特征之一。
31584rootmemREG8,310304412828674/lib/ld-2.3.2.so
31584rootmemREG8,39160412828689/lib/libnsl-2.3.2.so
31584rootmemREG8,32366812828683/lib/libcrypt-2.3.2.so
31584rootmemREG8,31269612828711/lib/libutil-2.3.2.so
31584rootmemREG8,3153106413991938/lib/tls/libc-2.3.2.so
31584root0uCHR1,367051/dev/null
31584root1uCHR1,367051/dev/null
31584root2uCHR1,367051/dev/null
31584root3uIPv41798TCP*:31338(LISTEN)
[root@victimroot]#lsof-n-p1586
COMMANDPIDUSERFDTYPEDEVICESIZENODENAME
ttymon1586rootcwdDIR8,340962/
ttymon1586rootrtdDIR8,340962/
ttymon1586roottxtREG8,39347643663399/sbin/ttymon
ttymon1586rootmemREG8,310304412828674/lib/ld-2.3.2.so
ttymon1586rootmemREG8,35247212828695/lib/libnss_files-2.3.2.so
ttymon1586rootmemREG8,3153106413991938/lib/tls/libc-2.3.2.so
ttymon1586root3uraw179900000000:0001->00000000:0000st=07
验证一下那两个后门:
[root@victimroot]#nclocalhost31338
SSH-1.5-2.0.13
明显,这个ssh后门,估计是读那个/etc/sh.conf作为密码的。rawsocket那个我暂时想不到咱们验证,因为一来不知道他抓的什么包,icmportcp,二来也不知道他抓的包的特征。霸王硬上弓吧。先执行一下。
引用:
[root@victimroot]#/sbin/ttymon
[root@victimroot]#/sbin/ttymon--help
[root@victimroot]#/sbin/ttymon-h
这么不听话?strings你。我这里略去一些没用的信息

引用:
[root@victimroot]#strings/sbin/ttymon
Usage:%s
Portsaresettosendandreceiveonport179
dst:DestinationAddress
src:SourceAddress
size:Sizeofpacketwhichshouldbenolargerthan1024shouldallowforxtraheaderinfothruroutes
num:packets
Couldnotresolve%sfucknut
ICMP
jess
tc:unknownhost
3.3.3.3
mservers
lamersucks
skillz
ttymon
./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
通过他的关键字找找,不难发现ttymon应该是一个修改过的ddos程序,是一个打路由器的东西,看来这位兄弟心挺大的。
Dameonic.cisatheoreticalrouterbaseddenialofserviceattackthat

exploitsaweaknesswithintheBorderGatewayProtocol(BGP).Ifamalici

oususersendsspoofedmalformedpacketstoaneighboringrouter,thepeerwill

ignoreitandpossiblykillthesessionentirely.WrittenonaUltra5runningLinuxZ

oot,thishasbeencompiledonLinux,OpenBSD,Solariswithoutproblems.
程序在

http://packetstormsecurity.org/0008-exploits/daemonic.c

出于对这位道友野心的好奇,我下了这个程序回来编译一下

引用:
[fatb@baoz~]$./a
Daemonic-BGPKiller[TheoriesinDoS]www.AntiOffline.com/TID/
Usage:./a
Portsaresettosendandreceiveonport179
radd:AddressofrouterrunningBGP[victim]
sradd:SourceaddressofneighborrouterrunningBGP[attacker]
bgsize:Sizeofpacketwhichshouldbenolargerthan1024shouldallowforxtraheaderinfothruroutes
num:pulverizationspersecond
对比两个地方,一个是直接执行程序返回的信息,前者是不显示任何信息,后者显示帮助,第二个就是strings的输出,明显前者输出内容多,我猜测后面部分包含控制密码。还有更重要的是,这个ttymon起了rawsocket听包,这个rawsocket必定是用来接收控制者指令,并执行相应的ddos操作的一个通道,后面的事情大家自己想象吧,呵呵。

引用:
[root@victimroot]#file/etc/sh.conf
/etc/sh.conf:ASCIItext
[root@victimroot]#cat/etc/sh.conf
6465d1b20c0c4cd408e34e68e630bc7a-
这个应该是md5之后的ssh密码了。

下面的是t0rnV8里的东西了,12点多了,还没吃饭,没什么心情去跟这个低级的rootkit了,也不想知道下面的内容是什么,估计是encode之后的ssh密码吧,我猜的。

引用:
[root@victimroot]#file/dev/srd0
/dev/srd0:ASCIItext
[root@victimroot]#cat/dev/srd0
j+JNfnYdtqa7trq6gh+4ixPhLDBbLT6Ku5uVVJ/mxxzobTlPUCEeEzdxglyNos
4IvejtbRNdAMxP/d7NhBeFseisPX5oloDE5z1e2ZjQtsM
S0uF0BrCRaiyuNhbD+TxyiCkfPxeS6/f3KYGvy0+9uf96H
ZCHbJRHzwU0BoEWZW66Kw9fmiWgMTnPV7ZmNC2ww
DrWCrrUVHlVO0ETRpEzDLr4+eRoYKQ4cF1IYuZIuKJvpL8
u0zFWEQVd4aHHRV8MZ6Kw9fmiWgMTnPV7ZmNC2ww
m8Y0WvJzHApXJkPWqGlLXkQEgP7I+Z00g5rfl4JVTHHVS3
ccyoWJvoHxARS2Az4+6Kw9fmiWgMTnPV7ZmNC2ww
Nx2BGzQcgwNk5wkHvIbDS+akciYGKpBOpkfbml2dEhlnyl
baCJUtkIZtodypSCex6Kw9fmiWgMTnPV7ZmNC2ww
7Tuu8KGtjaBucg6CylE0jLx5gHLMf67ZIFShF/vnuKNoRf
JqqJhR5/4k+4vDqwlW6Kw9fmiWgMTnPV7ZmNC2ww
aeC6nDWmqSBSLAn74IG+scDyaeQhcyttGosc5AHjaJjsS7
dk2xyaySZVyBz4xsJLvejtbRNdAMxP/d7NhBeFseisPX5o
loDE5z1e2ZjQtsM
Z1Adpyun9XhDlWlkphlGxvqi7D+VzU2gaIcSV3F5SvtUf
b9WXOCPgW4fLKozFRr18GdivriXhV99Urg+qyUS5OisPX
5oloDE5z1e2ZjQtsM
XnGWwt8gbkh3WioGunOBNlnN29dPwkm4N1UqS3mZ7V5C2D
SuxCWu5vgapmla+YFx6Kw9fmiWgMTnPV7ZmNC2ww
+KrS/TlnD5nr0P/iOvN/aN+jWY2xtLoIpAN70/2NlvfnnA
pDPhNqf9Y82i7BX/UHVWRY+R8hmtWPTN9aYJrjduisPX5oloDE5z1e2ZjQtsM
继续看,这个就是他的老巢了,SHV5的默认目录,里面来来去去就那些东西,.backup里的是原来的elf程序,回头我们把这些东西cp回去就完事了。

引用:
[root@victimroot]#ls-alh/usr/lib/libsh
total104K
drwxr-xr-x6rootroot4.0KNov1716:45.
drwxr-xr-x133rootroot68KNov1810:13..
drwxr-xr-x2rootroot4.0KNov819:33.backup
-rwxr-xr-x11221142.4KJan302006.bashrc
-rwxr-xr-x11221141.8KFeb192003hide
drwxr-xr-x2rootroot4.0KNov819:33.owned
-rwxr-xr-x11221141.3KFeb192003shsb
drwxr-xr-x2rootroot4.0KNov819:33.sniff
drwxr-xr-x2rootroot4.0KFeb192003utils
[root@victimroot]#ls/usr/lib/libsh/.backup/
dirfindifconfiglslsofmd5sumnetstatpspstreeslocatetop
下面就是大名鼎鼎的sk了,看到sk,首先关注的就是他的prefix,启动方式和版本。。。。废话。。。呵呵

引用:
[root@victimroot]#ls-alh/usr/share/locale/sk/
total40K
drwxr-xr-x5rootroot4.0KSep702:02.
drwxr-xr-x110rootroot4.0KNov82005..
-rw-r--r--1rootroot6May92000charset
-rw-r--r--1rootroot1.3KNov182002entry.desktop
drwxr-xr-x2rootroot16KNov82005LC_MESSAGES
drwxr-xr-x2rootroot4.0KNov82005LC_TIME
drwxr-xr-x2rootroot4.0KSep702:02.sk12
sk没启动,因为.sk12都显示出来了,.sniffer文件里也没记录到什么密码,但我对这个sk12还是充满好奇心,sftp托到我本地机器玩玩。

引用:
[fatb@baoz~]$stringssk|grep-ifuck
[fatb@baoz~]$filesk
sk:ELFinvalidclassinvalidbyteorder(SYSV)
[fatb@baoz~]$./sk
Password:
Goawaywiththat,poorboy!
[fatb@baoz~]$ls-alsksk2rc2/sk
-rwxr-xr-x1fatbperlish30799Nov1118:04sk
-rwxr--r--1fatbperlish30279Nov1706:06sk2rc2/sk
从上面看来,这个不是sk12,应该是sk2,否则应该有fuck字样并且没有密码的,并且他用ef加密了。和公开的sk2rc2对比一下,发现他比rc2文件要大一点。。。。YY中,呵呵,我猜他应该是更新的版本的。1点多了。。。还没吃饭,快饿晕了,先吃饭去,回来继续……

还有一个可以说明这个sk12是sk2,我查找了/etc下的文件,没找到他启动的地方,/sbin/init也没改。到是在/etc/inittab里发现了ttymon的启动方式:

引用:
[root@victimroot]#grepttyload/etc/inittab
#0:2345nce:/usr/sbin/ttyload
[root@victimroot]#cat/usr/sbin/ttyload
/sbin/ttyload-q>/dev/null2>&1
/sbin/ttymon>/dev/null2>&1
花开两朵,各表一支,话说刚才我们确定了这个一定是sk2,在一段时间的挣扎之后,决定还是回头在《linux后门掠影》里再仔细介绍他。

整理一下思路,我们已经找到了他们替换的elf程序了,现在替换回去就是了,具体步骤就不写下来了,无非就是cp一下。

引用:
[root@victimroot]#ls/usr/lib/libsh/.backup/
dirifconfiglsofnetstatpstreetop
findlsmd5sumpsslocate
去掉启动的东西,擦掉日志中关于ac9e2da9.ipt.aol.com的记录,shadow抓回来跑跑,reboot,交给wzt测试代码去了,呵呵。

如果有什么疑问,可以到http://cnhonker.com/bbs/的linux版交流

本文不断更新中,欲获得最新版本,请关注http://baoz.nethttp://xsec.org的更新信息。

说在最后:上面说到的方法只是一些最基本的方法,并且rkhunter,chkrootkit这样的程序都是只能检测默认安装的rootkit,修改过的rootkit或者没公开的rootkit,它们是基本找不到的。怎么办?自动化查找不行了,就只有靠我们手动分析了,这个就是体现安全管理员水平高低的时候了。
推广二维码
邮件订阅

如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

重磅专题