一次linux肉鸡入侵检测

ゝ一纸荒年。 2022-08-11 03:59 414阅读 0赞

原贴:http://www.hacker.com.cn/article/view\_14673.html

一次linux肉鸡入侵检测

黑客 发布日期:2008-9-20 0:10:36 共有 953 人次浏览













<script type=”text/javascript”>put(appCommon.toUploadPic(‘’,null,null,1,10,’no’));</script>


一次linux肉鸡入侵检测


昨天答应了给wzt找几个linux肉鸡测试程序的,打

http://www.milw0rm.com/webapps.php ,找了个include漏洞的程序试了一下,很快就得到一个webshell,没什么好说的,redhat9的机器,然后localroot了一下。



插句话,本文中的ip地址和主机名都被替换了,请不要对号入座,本文手法仅供参考,在正规的入侵检测操作中,我们还是需要注意很多流程和细节上的问题。另外本文对一些基本概念或者程序之类的不做解释,如果有不明白的地方,请教google。



进了肉鸡,换上我们的ssh后门,具体的方法可以

http://baoz.net

http://xsec.org 上找到,带视频教程 如果看完视频之后还有疑问,可以

http://cnhonker.com/bbs/ 的linux版交流一下。



一进ssh,哦,奇怪,米国人民问候韩国人民?有异样……

Last login: Fri Nov 17 08:21:14 2006 from ac9e2da9.ipt.aol.com

好奇,扫一下。



引用:

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



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

来,看看:

##检查是不是vmware的机器



引用:

[root@victim root]# ifconfig -a | grep -i -e “00-05-69” -e “00-0C-29” -e “00-50-56” ; dmesg | grep -i vmware  



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



引用:

[root@victim root]# cat /proc/cpuinfo | grep name ;cat /proc/meminfo | grep MemTotal

model name : Intel(R) Xeon(TM) CPU 2.80GHz

model name : Intel(R) Xeon(TM) CPU 2.80GHz

model name : Intel(R) Xeon(TM) CPU 2.80GHz

model name : Intel(R) Xeon(TM) CPU 2.80GHz

MemTotal: 1030228 kB





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



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



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@victim root]# ls -alh

ls: invalid option — h

Try ls --help' for more information.&nbsp;&nbsp; <br> <br> <br> 呵呵,ls被替换了。在看看netstat <br> <br> 引用: <br> [root@victim root]# netstat -anp <br> Active Internet connections (servers and established) <br> Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name <br> tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1702/httpd <br> tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1516/sshd <br> tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1540/ <br> tcp 0 300 123.123.123.123:22 10.20.30.40:2245 ESTABLISHED 6097/sshd: <br> tcp 0 0 123.123.123.123:22 10.20.30.40:2247 ESTABLISHED 6815/sshd: <br> Active UNIX domain sockets (servers and established) <br> Proto RefCnt Flags Type State I-Node PID/Program name Path <br> unix 2 [ ACC ] STREAM LISTENING 121430 6815/sshd: /tmp/ssh-vfJj6815/agent.6815 <br> unix 2 [ ACC ] STREAM LISTENING 116904 6097/sshd: /tmp/ssh-weHq6097/agent.6097 <br> unix 6 [ ] DGRAM 1560 1476/syslogd /dev/log <br> unix 2 [ ] DGRAM 1771 1570/crond <br> unix 2 [ ] DGRAM 1728 1549/ <br> unix 2 [ ] DGRAM 1714 1540/ <br> unix 2 [ ] DGRAM 1568 1480/klogd <br> <br> 看起来貌似还算正常。 <br> <br> 不管3721,直接搞两个检查rootkit的东西回来看看,chkrootkit和rkhunter。 <br> 先爽一下chkrootkit: <br> 注意,我们现在是在根本不可信的环境下检查的,可能有朋友会问“为什么要在不可信的环境里检查啊”,原因是这样的,因为我们先在一个不可信的环境里检查, 得出一份结果,然后再在稍微可信的环境里检查,再得到一份结果,这样我们前后对比,大致就可以知道这位道友是否有使用LKM或者更高级的rootkit 了。 <br> 检查完之后,我们发现下面有趣的信息: <br> <br> 引用: <br> [root@victim chkrootkit-0.47]# ./chkrootkit <br> Checkingifconfig’… INFECTED

Checking pstree'... INFECTED <br> Searching for t0rn's v8 defaults... Possible t0rn v8 /(or variation/) rootkit installed <br> Searching for Showtee... Warning: Possible Showtee Rootkit installed <br> Searching for Romanian rootkit... /usr/include/file.h /usr/include/proc.h <br> Checkingbindshell’… not infected

Checking `lkm’… You have 2 process hidden for ps command

chkproc: Warning: Possible LKM Trojan installed  





我们再找rkhunter爽一下:

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



引用:

[root@victim chkrootkit-0.47]# /usr/local/bin/rkhunter -c —createlogfile

Rootkit ‘SHV4’… [ Warning! ]

Rootkit ‘SHV5’… [ Warning! ]

Rootkit ‘Suckit Rootkit’… [ Warning! ] —>还有这个高级货啊,偷偷的汗了一下。

Filesystem checks

Checking /dev for suspicious files… [ Warning! (unusual files found) ]

Unusual files:

/dev/srd0: ASCII text —> /dev下有ascii文件……

—————————————— Scan results ——————————————

MD5

MD5 compared: 51

Incorrect MD5 checksums: 6

File scan

Scanned files: 342

Possible infected files: 3

Possible rootkits: SHV4 SHV5 Suckit Rootkit

Application scan

Vulnerable applications: 4

Scanning took 751 seconds

Scan results written to logfile (/var/log/rkhunter.log)

———————————————————————————————————-





扫完了,来个总结,这个比chkrootkit人性化多了。

我们可以看到,这两个程序报告的有低级的rookkit,比如t0rn,SHV5,还有高级的rootkit:suckit。先看在眼里,别太在意,因为 rkhunter和chkrootkit这样的程序都只能检测一些默认安装的rootkit,也不排除把这个rootkit报成那个rootkit的可 能。





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





引用:

[root@victim root]# export PATH=/root/…/static/:$PATH  





ok,我们现在再看看ls





引用:

[root@victim /]# ls -alh /tmp/mc-root/

total 8.0K

drwx——— 2 root root 4.0K Nov 8 19:36 .

drwxrwxrwt 9 root root 4.0K Nov 18 10:47 ..  





现在我们的程序暂时还是相对比较信得过的。

继续做上面两组检测。

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

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

[11:20:04] /bin/ls Hash NOT valid (My MD5: 0a07cf554c1a74ad974416f60916b78d, expected: dbc1a18b2e447e0e0f7c139b1cc79454)



我们把SHV和suckit相关的信息弄出来看看



引用:

[11:20:53] **
Start scan SHV4

[11:20:53] - File /lib/lidps1.so… WARNING! Exists.



[11:21:12]
Start scan SHV5

[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]
Start scan Suckit Rootkit **

[11:21:15] - File /usr/share/locale/sk/.sk12/sk… WARNING! Exists.

[11:21:15] - Directory /usr/share/locale/sk/.sk12… WARNING! Exists.  



看到这里,基本上就知其所以然了。我们继续一个一个的看



引用:

[root@victim root]# file /lib/lidps1.so

/lib/lidps1.so: ASCII text

[root@victim root]# cat /lib/lidps1.so

ttyload

shsniff

shp

shsb

hide

ttymon

scanner  



看到这里,我忍不住ps和netstat了一下,发现了这两个东西



引用:

root 1584 0.0 0.0 1852 68 ? S Nov17 0:00 /sbin/ttyload -q

root 1586 0.0 0.0 1500 168 ? S Nov17 0:26 ttymon tymon

[root@victim root]# netstat -anp

Active Internet connections (servers and established)

Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name

tcp 0 0 0.0.0.0:31338 0.0.0.0:
LISTEN 1584/ttyload

tcp 0 0 0.0.0.0:80 0.0.0.0: LISTEN 1702/httpd

tcp 0 0 0.0.0.0:22 0.0.0.0:
LISTEN 1516/sshd

tcp 0 0 127.0.0.1:25 0.0.0.0: LISTEN 1540/

raw 0 0 0.0.0.0:1 0.0.0.0:
7 1586/ttymon

raw 1312 0 0.0.0.0:1 0.0.0.0: 7 1586/ttymon





我们注意一下pid为1584和1586的两个进程,它们一个开了31338端口,一个起了raw socket,估计两个都是后门,一个bindport的,一个是sniffer的后门,接着我们lsof看看,呵呵,都现形了吧。



引用:

[root@victim root]# lsof -n -p 1584

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

3 1584 root cwd DIR 8,3 4096 2 /

3 1584 root rtd DIR 8,3 4096 2 /

3 1584 root txt REG 8,3 652620 212994 /tmp/sh-DJYK3MJABRP (deleted) —>这个是upx压缩后的特征之一。

3 1584 root mem REG 8,3 103044 12828674 /lib/ld-2.3.2.so

3 1584 root mem REG 8,3 91604 12828689 /lib/libnsl-2.3.2.so

3 1584 root mem REG 8,3 23668 12828683 /lib/libcrypt-2.3.2.so

3 1584 root mem REG 8,3 12696 12828711 /lib/libutil-2.3.2.so

3 1584 root mem REG 8,3 1531064 13991938 /lib/tls/libc-2.3.2.so

3 1584 root 0u CHR 1,3 67051 /dev/null

3 1584 root 1u CHR 1,3 67051 /dev/null

3 1584 root 2u CHR 1,3 67051 /dev/null

3 1584 root 3u IPv4 1798 TCP
:31338 (LISTEN)



[root@victim root]# lsof -n -p 1586

COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME

ttymon 1586 root cwd DIR 8,3 4096 2 /

ttymon 1586 root rtd DIR 8,3 4096 2 /

ttymon 1586 root txt REG 8,3 93476 43663399 /sbin/ttymon

ttymon 1586 root mem REG 8,3 103044 12828674 /lib/ld-2.3.2.so

ttymon 1586 root mem REG 8,3 52472 12828695 /lib/libnss_files-2.3.2.so

ttymon 1586 root mem REG 8,3 1531064 13991938 /lib/tls/libc-2.3.2.so

ttymon 1586 root 3u raw 1799 00000000:0001->00000000:0000 st=07  



验证一下那两个后门:

[root@victim root]# nc localhost 31338

SSH-1.5-2.0.13

明显,这个ssh后门,估计是读那个/etc/sh.conf作为密码的。raw socket那个我暂时想不到咱们验证,因为一来不知道他抓的什么包,icmp or tcp,二来也不知道他抓的包的特征。霸王硬上弓吧。先执行一下。



引用:

[root@victim root]# /sbin/ttymon

[root@victim root]# /sbin/ttymon —help

[root@victim root]# /sbin/ttymon -h  



这么不听话?strings你。我这里略去一些没用的信息



引用:

[root@victim root]# strings /sbin/ttymon

Usage: %s <dst> <src> <size> <number>

Ports are set to send and receive on port 179

dst: Destination Address

src: Source Address

size: Size of packet which should be no larger than 1024 should allow for xtra header info thru routes

num: packets

Could not resolve %s fucknut

ICMP

jess

tc: unknown host

3.3.3.3

mservers

lamersucks

skillz

ttymon

./0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ  

通过他的关键字找找,不难发现ttymon应该是一个修改过的ddos程序,是一个打路由器的东西,看来这位兄弟心挺大的。

Dameonic.c is a theoretical router based denial of service attack that exploits a weakness within the Border Gateway Protocol (BGP). If a malicious user sends spoofed malformed packets to a neighboring router, the peer will ignore it and possibly kill the session entirely. Written on a Ultra 5 running Linux Zoot, this has been compiled on Linux, OpenBSD, Solaris without problems.

程序在



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

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



引用:

[fatb@baoz ~]$ ./a

Daemonic - BGP Killer [Theories in DoS] www.AntiOffline.com/TID/

Usage: ./a <radd> <sradd> <bgsize> <number>

Ports are set to send and receive on port 179

radd: Address of router running BGP [victim]

sradd: Source address of neighbor router running BGP [attacker]

bgsize: Size of packet which should be no larger than 1024 should allow for xtra header info thru routes

num: pulverizations per second  



对比两个地方,一个是直接执行程序返回的信息,前者是不显示任何信息,后者显示帮助,第二个就是strings的输出,明显前者输出内容多,我猜测后面部 分包含控制密码。还有更重要的是,这个ttymon起了raw socket听包,这个raw socket必定是用来接收控制者指令,并执行相应的ddos操作的一个通道,后面的事情大家自己想象吧,呵呵。





引用:

[root@victim root]# file /etc/sh.conf

/etc/sh.conf: ASCII text

[root@victim root]# cat /etc/sh.conf

6465d1b20c0c4cd408e34e68e630bc7a -  



这个应该是md5之后的ssh密码了。



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



引用:

[root@victim root]# file /dev/srd0

/dev/srd0: ASCII text

[root@victim root]# 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@victim root]# ls -alh /usr/lib/libsh

total 104K

drwxr-xr-x 6 root root 4.0K Nov 17 16:45 .

drwxr-xr-x 133 root root 68K Nov 18 10:13 ..

drwxr-xr-x 2 root root 4.0K Nov 8 19:33 .backup

-rwxr-xr-x 1 122 114 2.4K Jan 30 2006 .bashrc

-rwxr-xr-x 1 122 114 1.8K Feb 19 2003 hide

drwxr-xr-x 2 root root 4.0K Nov 8 19:33 .owned

-rwxr-xr-x 1 122 114 1.3K Feb 19 2003 shsb

drwxr-xr-x 2 root root 4.0K Nov 8 19:33 .sniff

drwxr-xr-x 2 root root 4.0K Feb 19 2003 utils



[root@victim root]# ls /usr/lib/libsh/.backup/

dir find ifconfig ls lsof md5sum netstat ps pstree slocate top  





下面就是大名鼎鼎的sk了,看到sk,首先关注的就是他的prefix,启动方式和版本。。。。废话。。。呵呵

引用:

[root@victim root]# ls -alh /usr/share/locale/sk/

total 40K

drwxr-xr-x 5 root root 4.0K Sep 7 02:02 .

drwxr-xr-x 110 root root 4.0K Nov 8 2005 ..

-rw-r—r— 1 root root 6 May 9 2000 charset

-rw-r—r— 1 root root 1.3K Nov 18 2002 entry.desktop

drwxr-xr-x 2 root root 16K Nov 8 2005 LC_MESSAGES

drwxr-xr-x 2 root root 4.0K Nov 8 2005 LC_TIME

drwxr-xr-x 2 root root 4.0K Sep 7 02:02 .sk12  





sk没启动,因为.sk12都显示出来了,.sniffer文件里也没记录到什么密码,但我对这个sk12还是充满好奇心,sftp托到我本地机器玩玩。



引用:

[fatb@baoz ~]$ strings sk | grep -i fuck

[fatb@baoz ~]$ file sk

sk: ELF invalid class invalid byte order (SYSV)

[fatb@baoz ~]$ ./sk

Password:

Go away with that, poor boy!

[fatb@baoz ~]$ ls -al sk sk2rc2/sk

-rwxr-xr-x 1 fatb perlish 30799 Nov 11 18:04 sk

-rwxr—r— 1 fatb perlish 30279 Nov 17 06:06 sk2rc2/sk  



从上面看来,这个不是sk12,应该是sk2,否则应该有fuck字样并且没有密码的,并且他用ef加密了。和公开的sk2rc2对比一下,发现他比 rc2文件要大一点。。。。YY中,呵呵,我猜他应该是更新的版本的。1点多了。。。还没吃饭,快饿晕了,先吃饭去,回来继续……



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



引用:

[root@victim root]# grep ttyload /etc/inittab

#0:2345nce:/usr/sbin/ttyload

[root@victim root]# cat /usr/sbin/ttyload

/sbin/ttyload -q >/dev/null 2>&1

/sbin/ttymon >/dev/null 2>&1  





花开两朵,各表一支,话说刚才我们确定了这个一定是sk2,在一段时间的挣扎之后,决定还是回头在《linux后门掠影》里再仔细介绍他。



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



引用:

[root@victim root]# ls /usr/lib/libsh/.backup/

dir ifconfig lsof netstat pstree top

find ls md5sum ps slocate





去掉启动的东西,擦掉日志中关于ac9e2da9.ipt.aol.com的记录,shadow抓回来跑跑,reboot,交给wzt测试代码去了,呵呵。

如果有什么疑问,可以

http://cnhonker.com/bbs/ 的linux版交流

本文不断更新中,欲获得最新版本,请关

http://baoz.net

http://xsec.org的更新信息。



说在最后:

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



早睡早起身体好,睡觉去咯

发表评论

表情:
评论列表 (有 0 条评论,414人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Linux 入侵检测分析技术

    1. 概述 最好的安全防护当然是“御敌于国门之外”, 通过安全防护技术,来保证当前主机不被非授权人员入侵,但是“道高一尺,魔高一丈”, 再好的防护手段、往往也会有疏漏的地方。

    相关 linux 入侵检测

    最近遇到了很多服务器被入侵的例子,为了方便日后入侵检测以及排查取证,我查询了一些linux服务器入侵取证的相关资料,并在此总结分享,以便日后查询。   一般服务器被入侵的迹象