我们有的理由怀疑自己的主机早被感染了恶意程序。大部分人都是采用重打包后的镜像来安装的盗版系统;用的不知从哪儿下回来的工具激活的系统;平常在网上下载的工具奉行的都是能用就行的原则。而我们也都抱着侥幸心理——大家都在用,应该没问题,大不了装了杀软再扫一遍。何况,杀软都没检查出来,这让我们也很无奈啊,还有什么办法呢?带着这样的问题,笔者细细琢磨了下,并依照自己的想法做了一个有趣的实验。
杀软主要是通过扫描文件来发现系统是否被感染,扫描策略大部分是静态特征扫描,这个方式对发现已知病毒程序很有效,然而对于发现高级或未知的病毒程序就没那么有效了。那还有什么方式来检测呢?
笔者是这样想的,假设我的主机已被感染,病毒程序会寻求与C&C(命令与控制)服务器的通信。我们可以对主机对外通信的目的IP地址进行审计,基于开源的威胁情报,排查目的IP地址的恶意性。那也就是说,我们可以从数据包的层面来检测主机是否被病毒感染。
为验证笔者的想法,笔者做了如下实验准备:
1.数据采集
笔者在夜深人静的时候,重启了5台电脑,每台电脑上采用wireshark抓包(重启电脑,是为了保证流量的纯粹性),一直采集到笔者第二天一大早来将抓取的数据包保存。期间未有对电脑的任何其他操作。这么做,是尽可能地排除一些干扰项,便于后面的分析。
2.IP地址分析接口
对数据包的解析和基于威胁情报的查询需要借助一些工具完成。笔者基于以前的积累,采用Python的dpkt库对数据包进行解析。主要分为两步,一是提取数据包中的IP地址,二是对IP地址进行去重。
IP地址恶意性查询接口,笔者选用的是国外的开源威胁情报社区AlienVault。这个社区的威胁情报做的很全面,而且具有开源精神,不会限制查询次数(基于对国内厂商的认识,我很想说三遍),API查询接口的使用也非常方便。
首先在AlienVault上注册一个账号,只需要邮箱验证,注册成功后,访问:https://otx.alienvault.com/api,在API接口网页的右边会有生成好的API_KEY,如下图所示。
同时,在页面上点击Python SDK,如下图所示,会直接进入基于Python的查询开源程序。
按照github上的安装说明,安装OTXv2依赖库即可。下面,来讲解实验的具体实施过程。
实验步骤共分为3步,第一步获取数据包中的IP地址;第二步解析IP地址的地理信息(总觉得国外IP地址嫌疑更高,原谅,有种执念);第三步查询IP地址的恶意性。笔者将这三步都在Python脚本程序中实现。解析IP地址和IP地址地理信息查询可以借鉴笔者的[这个项目]。这里重点说一下如何利用AlienVault的API接口对IP地址的恶意性进行查询。废话不多说,直接上代码,首先在全局变量API_KEY中替换成自己的key,然后直接调用AlienVault的函数接口,其中的CheckIp()函数即是AlienVault给出的样例函数,如感兴趣,可以在源代码中查看。
下面开始运行程序:
python hot_ip.py—pcapfile=./data/out500.pcap -d –c #-d为提取目的IP地址,-c为对ip地址进行检测。
考虑到时间因素,这里只取了部分网络数据包进行解析,由动图可看出,首先得到了去重的目的IP地址,在程序中会以out_IP.txt保存下来;然后解析IP地址的地理信息,在程序中会以ip_location.txt保存下来;最后排查IP地址的恶意性,解析为疑似恶意的IP地址,会存在malicious_results.txt文件中。下面打印出malicious_results.txt的结果。
得到了疑似恶意的IP地址,下面就开始对这几个IP进行分析。
可以看到,出现了5个疑似恶意的IP地址,如114.114.114.114,我们都知道是国内的域名服务器,这条威胁情报,在微步在线和AlienVault上都能查到,说明这台域名服务器曾经被利用来做过些什么。
下面,笔者举一例,分析一个IP地址,其他IP地址就可以类似的分析了。对104.18.24.243美国的这个IP进行分析,首先访问https://otx.alienvault.com/indicator/ip/104.18.24.243,这是AlienVault对这个IP地址的分析,由下图可以看到,疑似是木马的通信地址。
进一步,点击Trojan这一条信息,进去页面,在reference标签处发现这是一条由微步在线发布的情报信息。由下图所示。
同时,这个IP地址在数据包中,体现出如下通信过程。
就这些查询都看不出太多异常。那么是否可以通过这个IP地址,找到产生它的程序文件呢?当然可以。具体可经由下面的步骤得到,首先,通过IP地址查到进程号,打开dos或者powershell命令窗口,运行命令:netstat -ano | findstr “104.18.24.243”,有如下结果。
可以看到,该进程的进程号为5200,再通过进程号关联到进程的名字,运行命令:tasklist | findstr “5200”,有如下结果。
可以看到,是WinStore.App.exe这个程序在执行。继续深挖,可以通过命令查询到启动文件的路径,运行命令:wmic process list full | findstr”WinStore.App.exe”,有如下结果。
这就直接找到了产生这个IP地址的启动文件,由图中可以看到,在C:\Program Files\WindowsApps\这个目录下。下一步就可以对这个文件的恶意性进行分析。可以人工逆向分析,也可以上传到云沙箱分析。如发现异常,就需要对这台电脑来次彻底检查了。本文到此为止,整个分析流程就介绍完了,感兴趣的朋友还可以对其他IP地址或自己本机上产生的IP地址进行分析,在此过程中,相信会发现很多不一样的东西。最后,给出笔者这次实验的程序代码。
实验代码:https://github.com/scu-igroup/check_ip
本文所描述的实验,表示我们可以不依赖于杀软来进行排查,为发现主机异常提供了另一种方式。结合当前流行的威胁情报,也可以自己来排查主机中的异常;但同时也必须指出,威胁情报只是提供了一条可能的线索,是否是真正的异常还需一定的专业知识来确认。同时,对主机的安全性分析还有很多其他方法和途径,笔者近期在这方面正在耕耘,大家如有新的想法,欢迎一起交流。
*本文作者:scu-igroup,本文属 FreeBuf 原创奖励计划,未经许可禁止转载。