主机入侵检测系统系列:这一篇讲述检测外连行为的原理和技术,可统一检测宿主机和docker子机
一台主机入侵后,入侵者往往会把数据发送出去或启动reverse shell。一般在IDC
的出口防火墙都会有检测异常外连行为,可能由于中间有NAT
,并不一定知道是哪台机器过来,但即使是知道哪台机器过来的,也不知道是该台机器哪个程序发起的外连行为。
通常的操作,都是用netstat
命令来获取
[root@bogon-agent test]# netstat -anp4
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 127.0.0.1:42485 0.0.0.0:* LISTEN 33041/node
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1640/sshd
tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 1885/master
tcp 0 0 127.0.0.1:55622 127.0.0.1:42485 ESTABLISHED 25101/sshd: buckxu@
tcp 0 0 127.0.0.1:42485 127.0.0.1:50352 ESTABLISHED 33041/node
tcp 0 0 127.0.0.1:42485 127.0.0.1:55622 ESTABLISHED 25171/node
tcp 0 0 127.0.0.1:50354 127.0.0.1:42485 ESTABLISHED 128902/sshd: buckxu
tcp 0 0 192.168.190.129:45782 192.168.190.128:1514 ESTABLISHED 2109/ossec-agentd
tcp 0 0 127.0.0.1:50352 127.0.0.1:42485 ESTABLISHED 128902/sshd: buckxu
tcp 0 0 192.168.190.129:22 192.168.190.1:62331 ESTABLISHED 25087/sshd: buckxu
tcp 0 0 127.0.0.1:42485 127.0.0.1:50354 ESTABLISHED 128969/node
tcp 0 0 127.0.0.1:42485 127.0.0.1:55620 ESTABLISHED 33041/node
tcp 0 0 192.168.190.129:22 192.168.190.1:52429 ESTABLISHED 128898/sshd: buckxu
tcp 0 0 127.0.0.1:55620 127.0.0.1:42485 ESTABLISHED 25101/sshd: buckxu@
udp 0 0 0.0.0.0:68 0.0.0.0:* 103880/dhclient
但如果放在HIDS(主机入侵检测系统)
实现,就不可能调用命令,原因如下:
-
有些Linux机器可能没有安装
netstat
命令 -
即使有
netstat
命令,也可能由于之前的操作,导致netstat
运行时依赖的so库缺失或符号缺失,导致无法执行这个命令 -
netstat
命令执行有异常,变成僵尸进程 -
netstat
命令在宿主机是没办法查到docker里的外连行为
按照Unix哲学
,一切皆文件,像端口和进程信息这些内容都可以从/proc
文件系统下找到,所以HIDS
是会/proc
获取这些信息。
下面拿上面命令结果的2109/node
来做例子展示这种手段。
-
由于一个
socket
在Linux里是一个fd
,先看一下/proc/2109/fd
的内容[root@bogon-agent ~]# ls -l /proc/2109/fd total 0 lrwx------. 1 root root 64 Jan 4 18:35 0 -> /dev/null lrwx------. 1 root root 64 Jan 4 18:35 1 -> /dev/null lrwx------. 1 root root 64 Jan 4 18:35 2 -> /dev/null lrwx------. 1 root root 64 Jan 4 18:35 3 -> socket:[26069] lr-x------. 1 root root 64 Jan 4 18:35 4 -> /dev/urandom lrwx------. 1 root root 64 Jan 4 18:35 5 -> /var/ossec/queue/rids/005 lrwx------. 1 root root 64 Jan 4 18:35 6 -> /var/ossec/queue/rids/sender_counter lrwx------. 1 root root 64 Jan 4 18:35 7 -> socket:[18173675] lrwx------. 1 root root 64 Jan 4 18:35 8 -> socket:[2986416]
-
取这一行
lrwx------. 1 root root 64 Jan 4 18:35 7 -> socket:[18173675]
其中2969198是
inode
。到/proc/2109/net
找一下这个inode
是在哪个文件有使用[root@bogon-agent ~]# grep -rIn "18173675" /proc/2109/net /proc/2109/net/tcp:9: 7: 81BEA8C0:B2D6 80BEA8C0:05EA 01 00000000:00000000 00:00000000 00000000 983 0 18173675 1 ffff9259346e3640 20 4 30 10 7
更多内容请关注个人公众号“debugeeker", 链接为最后防线:Linux主机入侵外连行为检测