系列文章链接
在之前的文章中,我们专注于追踪和分析从网络中得到的数据。 但事实上 ,在网络中追踪不是唯一的选项。在企业的主机和服务器上有大量的数据集来发掘未知的恶意行为 , 包括运行的进程,活动的网络连接,监听端口,文件系统遗留,用户日志,自动运行等等。 而 这些数据,难点 只 在于决定关注哪些点来开始你的追踪进程。一旦你决定关注的领域,你可以收集数据,查找可疑的异常,然后做进一步调查。
在这个系列的最后一部分,我们将会描述利用免费工具在主机上进行追踪的一些要点。这些技术首先会帮你发现主机上恶意行为的一些线索——不管你有没有签名或者IOC。你可以自由的使用这些,同时感受追踪的强大功能。
一个通用的起始点是在你的主机上搜索IOC。虽然许多人认为这是追踪,但这仅仅是搜索。不仅仅是搜索,但是为了快速和多变的指标进行搜索。 事实上,由于对手行为趋势IOC的有效生命周期不断下降。大部分安全专业人员都知道这些,并且在 Verizon’s DBIR 上周的发布上强调。也就是说,在你的系统上搜索已知的IOC仍然是必要的,这仍然是常用的步骤。下面是几个网站公布的几种格式的威胁情报信息。
你的主机上一个扩展性更好的常用IOC是写得好的Yara签名。 Yara用二进制模式和序列来检测和分类你系统上的恶意程序。Yara和Grep很像,都采用了一系列已知的模式然后进行搜索匹配。但是Yara做得更多,在文件,硬盘和内存中搜索二进制模式。一个好的病毒分析师能够手写Yara签名来检测恶意软件的拷贝和变种,新的版本,甚至通过一个二进制模式来找到相同家族的恶意软件。基于这些原因,Yara是识别恶意软件最著名的开源工具之一,并且是免费的。
Yara规则是基于二进制序列或文本对已知恶意软件模式进行结构化的一个很好的方法。下面是用来检测 Mimikatz (攻击者从内存中提取windows认证信息的工具)病毒的Yara签名的一个片段。这个特殊的签名其实是 Mimikatz 工具的作者编写的。
你可以在本地运行Yara,但是如果在远程或者多台机器上运行功能会更强大。 Powershell 能够让操作更方便。利用 Powershell 运行Yara可以通过下面这几个简单的步骤,假设你已经有登录凭证并且 Powershell 已经远程开放了。
将Yara二进制传到目标机器上 w/ 原生windows功能
PS> copy yara.exe //TARGET-HOST/C$/TEMP/yara.exe
规则 传输
PS> copy rules.yara //TARGET-HOST/C$/TEMP/rules.yara
执行扫描w/反弹命令
PS> Invoke-Command -ComputerName TARGET -
ScriptBlock { c:/TEMP/yara.exe c:/TEMP/rules.yara c:/targetdir } -credential USER
这会对运行一组Yara规则产生影响(上面例子中的 rules.yara )在给定的目录(上面例子中的 c:/targetdir )。这样就可以搜索很多主机的硬盘来标识提取出匹配二进制签名的文件。
这很强大,但并非没有缺点。正如我们知道的,签名很容易失效。不单单是因为Yara签名写得不好导致的误报,并且由于恶意软件变种很快,规则需要经常更新不然就会失效。这非常消耗时间和资源。然而,跟在IOC中搜索hash值,文件名,或者一些通用的标识相比,使用Yara要强大的多。
即使你有IOC作为入口点,IOC不足以发现你的企业中的所有可能的恶意行为。现在就轮到追踪登场了。追踪是对未知威胁进行系统的主动的追击。这需要在你的数据中标识模式和疑点来找到你网络中可能的恶意程序。正如前面所述,主机上有许多可以追踪的点。我们建议从自动运行的程序开始。 攻击 者通常需要在你重启之后持续潜伏在系统中。这样做可以长期在网络中隐藏。 自启动 项是一个很好的查找异常和疑点的地方,由于 以 下几个原因。 通过网络的异常值分析来看,自启动项往往是一致的。出现的自启动项中只有一小部分是恶意的,所以从需要分析的地方把它找出来很难。另外,为了长期运行,需要释放文件到硬盘中。有些行为很明显是可疑的 -比如在%TEMP%文件夹外执行了奇怪的文件名。在许多环境下,恶意自动运行的软件很突出很容易被好的追踪器检测到。一旦恶意运行被检测到,进一步的分析会着手进行确认和处理。
在现代的操作系统中,有上百个攻击者可能隐藏的地方。这些包括启动注册表,服务,驱动,浏览器, Office扩展,很其他更少人知道的地方和方法。除了大量的位置,抓取到的数据对于分析也很有意义,因为操作系统格式化数据的方式。 Sysinternals (由微软维护)创建了一个叫 Autoruns的工具来处理这个问题,免费的。虽然不完美,这个工具在windows系统上从 自启动项 提取数据已经做的很好了,并取得hash值,允许一些基本的处理(比如上传到 VirusTotal )。
我们推荐结合 Powershell 和 autoruns的命令行来使用,这样可以远程从你的系统抓取数据。这些可以通过以下几个步骤完成:
将自动运行的二进制和msvcr100.DLL传到目标主机 w/原生windows函数
PS> copy autorunsc.exe //TARGET-HOST/C$/TEMP/autorunsc.exe
PS> copy msvcr100.dll //TARGET-HOST/C$/TEMP/msvcr100.dll
执行w/ 反弹命令(w/输出选项)
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
正如之前,这样可以通过网络来获取许多系统上的数据。
我们推荐你先把 自启动项 的 hash值上传到 VirusTotal 。可以知道这是不是一个恶意软件,然后你可以有针对性的分析。幸运的是, Sysinternals 可以帮你完成这些,或者你可以用 VirusTotal 的 API写一些东西。
所以你已经收集到了所有的 自启动项 并且判断哪些是恶意软件。这是一个很好的开始,但是还不够。你需要追踪未知的恶意软件并且在数据中找到异常。这里有好多方法可以实现,但是我们推荐hash的第一个栈,然后查找数据中不匹配一般族群的异常。先取得 自启动项 的hash值,然后以这样的格式列出HOST:HASH。下面提供了一个具体的例子,看起来大概是这样的(在真实的环境中你可能会有更多的自启动项。)
一个简单的步骤是用冒号(:)来描述输出
# cat hash-map.txt | cut -d’:’-f2 > hashes.txt
然后在你的系统上进行归纳和排序来快速识别异常。
在这个例子中,我有 42个系统。每个系统上都出现许多 自启动项 。几只出现在一个上。这个异常是很可疑的。最合理的步骤是先看看那个主机上自动运行输出的细节。你会看到奇怪的描述,奇怪的文件名,奇怪的自动运行位置,以及更多的信息。下面的例子展示了 “svcchost.exe” 在开机的时候从 C:/WINDOWS/temp 目录启动。
下一个例子展示了一个程序在启动的时候从回收站执行,只有单字符的文件名,很清楚的显示一些奇怪的东西在执行。
这里你不仅仅可以从自动运行数据获取可疑的信息。还有很多方法。你可以进行进一步的研究,比如在 Elasticsearch (另一个免费工具)中建立数据索引,定期从你的终端收集自动运行信息,查看自动运行的变化,搜索相关的数据。当然,还有很多的终端线索可以用于追踪。一个好的追踪器需要覆盖日志,进程,网络信息,以及其他。
通过这个系列的三篇文章,我们提供了使用免费软件在主机上和网络上进程进行追踪的几种方法。 追踪技术不依赖于时刻变化的签名和 IOC,因此提供方法来更好的匹配复杂的模型和攻击技术。每个组织和研究者可以开始主动的检测网络中未知的威胁。从被动DNS到自动运行,我们已经覆盖了很多方面并且描述了多种免费而强大的方法来在主机和网络上追踪。
*参考来源: endgame ,FB小编老王隔壁的白帽子翻译,转载请注明来自FreeBuf黑客与极客(FreeBuf.COM)