-
-
[讨论]怎样检测系统中的row socket?
-
发表于:
2011-4-13 16:58
6769
-
据《rootkits: subvering the windows kernel》一书,有两种方法使用row socket进行远程通信。在R3层使用系统API,如socket(AF_INET, SOCK_RAW, IPPROTO_IP),可以创建row socket。 在R0可以直接使用NDIS接口,进行raw socket通信。这两种通信方式,tcpview之类的工具都没有办法检测出来。
在R3层创建的raw socket由于持有句柄,所以可以通过NtQuerySystemInformation把其句柄信息查找出来(procexp里就实现了),也可以通过内核里的一些其他句柄遍历方法查找出其句柄。但是这样能够得到的关于raw socket的信息只有句柄名称和进程ID,非常不全面。
由于工作需要查找出这两种raw socket, 遍搜网络两天,看了很多资料,都没有找到非常好的方案。极度郁闷。
TCP,UDP的信息可以分别从\device\tcp, \device\udp查出来,那么raw socket的信息可不可以从\device\rawip查出来呢?没有找到任何这方面的资料。
\device\ip与\device\rawip的区别又是什么,按理说,raw socket是直接操纵数据包的,应该是绕过TDI的,为啥还要有个\device\rawip呢? 我的理解是R3层的raw socket使用了IP协议,所以需要TDI层的这么个东西。
看了reactos的相关代码,没有看出头绪来。
tdifw里有使用filter监控rawip的行为,可以发查处raw socket的相关信息,但是这块没有深入研究,不到最后不想考虑通过挂钩反查的方案。
对于直接走NDIS的通信,目前没有找到任何检测的方案
悲剧啊
求这里的大牛过来给点意见
, 不胜感激。
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课