|
发表于 2011-6-10 15:48:39
|
显示全部楼层
可以考虑使用auditd.
auditd可以监控系统调用.通常,发送ARP数据包的程序,需要直接操作数据链数层数据.它们一般会包含如下的系统调用:- socket(PF_PACKET, SOCK_DGRAM, 0)
复制代码 然后使用sendto,recvfrom等套接字函数处理数据.
我们可以编写一个简单的audit规则来监视上面这个系统调用. 这里,PF_PACKET对应的协议族号码是17,SOCK_DGRAM对应的套接字类型是2.
编辑/etc/audit/audit.rules(如果不存在这个文件,请先安装audit. yum install audit)- #64位系统
- -a entry,always -F arch=b64 -F a0=17 -F a1=2 -S socket -k SOCKET
- #32位系统上,请使用这个
- #-a entry,always -F arch=b32 -F a0=17 -F a1=2 -S socket -k SOCKET
复制代码 然后,重启auditd
/etc/init.d/auditd restart
然后,可以启动一些程序来测试。注意,通常程序只有启动时才会创建socket。所以,为了检测出可疑进程,可能需要reboot,然后才能看到它启动后所作的socket调用。
之后,可以看看audit报告:- ausearch -i -ts today -k SOCKET
复制代码 如下是我在我系统上一个输出的样本- type=SYSCALL msg=audit(2011年06月10日 15:03:17.876:74) : arch=x86_64 syscall=socket success=yes exit=3 a0=11 a1=2 a2=0 a3=0 items=0 ppid=2191 pid=11553 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=arping exe=/sbin/arping key=SOCKET
- ----
- type=SYSCALL msg=audit(2011年06月10日 15:05:36.326:75) : arch=x86_64 syscall=socket success=yes exit=3 a0=11 a1=2 a2=300 a3=0 items=0 ppid=2191 pid=11588 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=arpspoof exe=/usr/sbin/arpspoof key=SOCKET
- ----
- type=SYSCALL msg=audit(2011年06月10日 15:13:52.843:76) : arch=x86_64 syscall=socket success=yes exit=3 a0=11 a1=2 a2=300 a3=0 items=0 ppid=2191 pid=11604 auid=root uid=root gid=root euid=root suid=root fsuid=root egid=root sgid=root fsgid=root tty=pts0 ses=1 comm=tcpdump exe=/usr/sbin/tcpdump key=SOCKET
复制代码 从上面的输出,可以看到我运行过arping, arpspoof, tcpdump,它们都直接操作底层套接字。进程的pid等信息,也包含在输出中。可以从这些日志中,再进一步分析出可疑进程。
实际上,通常只有root能够操作原始套接字.可以ps找出所有以root身份运行的进程。然后对可疑的进程作strace,监控他们的socket通信- strace -p process_id -e trace=network
复制代码 |
|