/ Enterprise Securty

打造免费企业安全:便宜没好货吗?(三)

(写在前面:虽然是2016年的帖子系列,但译者相信这里面还是有一些细节值得借鉴。)

在我们前面的帖子中,我们重点讨论了使用“便宜货”在网络中收集和分析信息。然而,除了网络之外,还有另一片天地。实际上,一系列更加丰富的信息蕴含在你所在企业的主机和服务器上。这包括运行着的进程,活动的网络连接,监听着的端口,文件系统上的artifact,用户日志,启动项等等。唯一困难的点可能就在于从何下手了。一旦你确定了需要关心的目标,你可以收集数据,寻找可疑的离群点,进行高阶的分析。在这一篇终章中,我们会给出一些在主机上寻找线索的建议。这些技巧是一些指引,来帮助你寻找主机/服务器上潜在的恶意行为的证据,在这个过程当中,我们不一定会用到IOC(入侵标志)和文件签名。重要的是,这一切都是免费的!

使用IOC搜索

一个常见的起始点就是在你所有的主机上寻找IOC。有的人叫它追踪,然而这其实不过只是搜索而已。甚至更不利的是,你面对的是一系列变化和变异的标志。
一个IOC的寿命在目前的网络安全环境中已经大大下降。许多信息安全从业者都知道这个事实,而且这也在Verizon的2016数据泄露调查报告中得到了体现。
虽然是这样,不过维持对最新IOC的搜索,目前来说仍然是必不可少的第一步。下面这些网站一直在公开发布各种形式的威胁情报资源。

一些有效期比较长的IOC是巧妙撰写的Yara签名。Yara应用二进制模式和序列来检测系统中的“鬼”。Yara与Grep类似,都使用一系列事先定制好的模式列表来匹配。但是Yara还有独门绝技,那就是搜索磁盘和内存。一个高水平的恶意软件分析师编写的Yara签名不仅仅能探测其分析的那一个恶意软件,还能检测到其他的变种,新的版本,甚至整个家族中新的变种。由于这个原因,我们比较喜欢的开源IOC搜索工具就是Yara,没有之一。

Yara实战

Yara规则是一种根据文本或者二进制序列来描述恶意模式的方式。下面是一套检测Mimikatz的行之有效的代码。(这个签名实际上是Mimikatz的作者自己编写的...)

你可以在本地运行Yara,但从远程运行它的方式更强大。Powershell可以帮助你做到这一点。(前提是开启了Powershell-Remoting)

将Yara可执行文件和规则传输到目标主机

PS> copy yara.exe \\TARGET-HOST\C$\TEMP\yara.exe

PS> copy rules.yara \\TARGET-HOST\C$\TEMP\rules.yara

PS> Invoke-Command -ComputerName TARGET -ScriptBlock { c:\TEMP\yara.exe c:\TEMP\rules.yara c:\targetdir } -credential USER

你可以自由扩展上述命令来对全盘或者其他主机进行扫描。

上述方法是强大的,但不是没有缺点。我们都知道特征签名是不可靠的。这不仅仅会带来误报,还会由于恶意软件迭代太快带来巨大的人力成本。只是,相比较于搜索哈希值,文件名等其他的特征签名,Yara在这方面做得更成熟和可靠

没有威胁情报,如何空手套白狼?(误)

即使是基于IOC搜索作为一个良好的开端。要发现所有企业内的恶意行为恐怕是不够的。主动搜猎在这方面可以带来不错的收益。主动追踪是一种系统性和主动的追寻过程。这代表我们需要从数据中挖掘潜在的模式和可疑点。就像上面所说的那样,主机中有许多点可以着手挖掘,我们在这里建议首先分析autoruns(自启动项)。对手通常会希望在系统多次重启之后仍然在系统中存在。分析启动项对于加固企业网络在长远来说是非常有利的。

有几方面的原因自启动项是一个寻找离群点和可疑点的不错选择。首先自启动项在一个同质的网络中通常是基本不变的,这为纯离群点分析提供了可能性。另外
,为了在网络中维持自身的存在,恶意活动一定会向存储器中写入文件(译者注:并不一定是文件)。例如有的活动一眼就可以将其归入可疑的类别:在TEMP目录下执行奇怪的文件。一个好的猎手可以在不同的环境下发现恶意的启动项。当恶意启动项被发现之后,更深入的分析就可以继续了。

收集启动项

就现在来说,对手要在一台windows机器上维持自身的存在就有100多种方法,包括注册表启动项、服务、驱动、浏览器和Office插件等等不一而足。除了这些位置之外,分析这些林林总总的信息的格式无疑是令人头疼的。微软工程师维护的Sysinternals解决了这个问题,这个工具帮你列出了大多数自启动项的位置,将其哈希且允许一些基本的二次操作(比如查询VirusTotal)。

我们推荐将autoruns的命令行版本和Powershell一起使用来进行远程信息收集。

将autoruns的二进制文件和其必须的msvcr100.DLL用WindowsSMB转移到目标机器

PS> copy autorunsc.exe \\TARGET-HOST\C$\TEMP\autorunsc.exe

PS> copy msvcr100.dll \\TARGET-HOST\C$\TEMP\msvcr100.dll

执行程序
PS> Invoke-Command -ComputerName TARGET -ScriptBlock { c:\TEMP\autorunsc.exe –a (??) –h (>> c:\TEMP\autoruns-output.txt) } -credential USER

收集信息
PS> copy \\TARGET-HOST\C$\TEMP\autoruns-output.txt c:\directory

跟上例一样,这可以被用于多台机器上的信息收集。

分析数据

我们推荐的第一步是提交所有的Autoruns哈希值到VirusTotal。这样可以快速过滤出明显的恶意软件。无论是使用Sysinternal内置的功能还是根据Virustotal开发一套API,这都是非常简单的。

排除了启动项中的已知威胁之后,又到了寻觅未知威胁的时刻。接下来有许多方法可以选择,不过一个最简单的方法是:将哈希值堆叠排序,寻找离群点(译者注:统计是寻找未知威胁很好的方法)。要做到这一点,将所有autoruns项如上述列出,并将HASH值写在旁边,如下例所示(注意在实战中你会有比这多得多的启动项):

用你习惯使用的分隔符分割这两个字段

cat hash-map.txt | cut -d’:’-f2 > hashes.txt

根据出现次数进行排序,找出异常。


在这个例子中,我们有42个系统和一大堆启动项,许多启动项在每台机器上都存在,有的只存在于单个机器,这些就是可疑的点,根据这些可疑启动项存在的机器进行单独排查将带来更多线索。下图显示了名为svcchost.exe的进程从C:\Windows\temp\启动。

下图显示了文件名只有一个字符的二进制文件从回收站启动。

除了简单的统计哈希值,你还有许多其他的方法,比如将所有数据在Elasticsearch中进行索引,来进行快速的搜索(译者注:可以结合ELK,使用Kibana进行快速可视化的分析,使用Logstash进行批量定期的信息收集),定期监测启动项的历史变化。当然,真正的搜猎范围不仅限于启动项,还有日志/进程/网络活动等等。

总结

在这个系列中我们提供了若干使用开源/免费软件进行企业网络中追踪威胁的方法。例如从被动DNS中获取数据,进行统计化的分析等。我们知道了追踪未知威胁不能只依赖于那些在时刻变化的IOC。所有组织中的安全人员和研究员都应该开始主动地对未知的威胁进行追踪,Have Fun!