横向移动是网络攻击过程中的关键步骤。这是一个足够广泛的类别,它有自己的杀链步骤。虽然这是一个广泛的战术,本章将调查一个特殊的方法,可能是由一个对手执行。
一、指标的搜索
你用来寻找横向运动的数据集的类型取决于你寻找的是什么,进而,你的假设是什么。为了确定远程访问协议的使用,您将主要关注网络会话元数据,包括:
•Netflow(通用的“流”数据)
•防火墙日志(日志记录包括允许/接受数据包)
•Bro Conn日志
要识别用户访问控制(UAC)事件,您需要关注身份验证日志,包括:
•活动目录日志/Windows安全事件日志
•EventID
•528或4624表示登录成功
•529或4625是登录失败
•552和4648表示攻击者试图使用runas命令或针对远程主机的身份验证作为替代用户,# privilegeEscalation。
•602和4698表示计划的任务创建
•601和4697表示服务创建
•账户功能
•服务帐户
•交互式登录
•Linux安全事件日志
•OSX安全事件日志
•多因素身份验证(MFA)日志
•如果存在,额外的UAC应用程序
二、技术使用
在建立了正确的假设并选择了必要的数据集之后,猎人仍然必须知道使用什么技术来调查假设。在这里,我们将调查三种类型的技术,您可以使用它们来调查上述问题。
与在狩猎中使用指示器的所有情况一样,这种方法的值将受到指示器值的影响。本地来源的指标通常会提供较高的价值,因为它们往往与您可能要保护的网络或系统相关,并且是及时的。这些类型的指标可以从以前的事件或内部威胁情报团队收集。
同样重要的是要记住,对于攻击者来说,更改他们用来进行攻击的远程基础设施是相对容易的;如果您使用指示器进行搜索,那么您应该意识到指示器可能不再与特定的攻击者或攻击工具相关。
一些常用的网络会话指标包括:
•IP地址
•端口
•顶级域名(TLD)
•URI
•连接中唯一的字符串
一些常见的基于主机的指标包括:
•文件哈希表
•文件名
•注册表修改
•过程注入
三、Virustotal
你可以向Virustotal提交一个文件散列或URL,让它被扫描或返回现有的结果,如果文件/URL之前已经提交,并附带了额外的高级信息:
VT还包含大量关于文件的有趣信息,但是您可以使用上面的链接来查看这些附加信息。
四、使用Snort检测PsExec活动
Snort可用于检测恶意SMB活动。Snort是一个开源的入侵检测和预防系统,旨在通过模式匹配签名检测攻击。下面是一个旨在检测PsExec使用的Snort规则示例(Emerging Threats, 2011 http://doc.emergingthreats.net/2010781):
五、利用Bro检测PsExec活动
PsExec是一个Windows管理工具,使用管理凭证通过SMB连接到网络上的不同系统。SMB被合法地用于提供文件共享功能,然而,错误的配置会允许恶意软件在整个网络中传播。把PsExec和Mimikatz的密码窃取能力结合起来,你就得到了一个横向移动的等式。
使用Bro检测PsExec活动的一种技术是使用定制的Bro脚本查找PsExec对C$、ADMIN$和/或IPC$共享的使用。这些共享在Bro通知日志中添加了“可能恶意使用管理共享”的通知消息。使用PsExec可以在目标系统上创建一个名为PSEXESVC.exe的可执行文件。修改代码为我的使用。代码来自https://www.sans.org/reading-room/whitep/detection -malicious-smb-activity-bro-37472
除了通过PsExec删除SMB控制之外,攻击者还会将其他二进制文件上传到受害系统或使用更多的meterpreter模块。例如,用于从内存中转储密码的工具Mimikatz可以通过C$、ADMIN$和IPC$共享上载到远程系统。Bro能够检测到Mimikatz通过SMB被转移,并且能够检查它的散列是否被病毒感染。
如果您没有将您的Bro日志转储到SIEM或其他日志聚合平台,我建议使用一个简单的grep命令来搜索PsExec使用流量,“grep -iE”、“C$|”、“C$| IPC$”。
五、堆叠
堆叠技术常用于许多不同种类的狩猎。在寻找命令和控制活动的情况下,猎人将需要为异常的入站或出站流量实例进行堆叠。同样的元数据类型从指标搜索上面可以用于堆叠,包括:
• EventID
• UserName
• Account Type
• Hostname
要查找横向移动,您需要关注双向或外部的入站连接流。使用堆叠的有效性取决于是否拥有一个完美的输入。太少不会揭示出足够的信息,太多会淹没你梳理出有意义偏差的能力。如果给定的结果集太大,则考虑对输入数据集进行进一步筛选(例如,将您的重点放在特定的内部子网上)。或者,更改正在堆叠的元数据(例如,从堆叠主机名更改为堆叠EventID和用户名)。
六、机器学习
一个更先进的技术涉及使用机器学习来隔离横向运动活动。监督机器学习使用标记的训练数据来预测未标记的数据。给定一组已知的好示例和已知的坏示例,您可以创建一个二进制分类器,该分类器能够接收新的事务,并判断它们是否更类似于好的训练集或坏的训练集。在对分类器进行了训练之后,假设您已经完成了工作,您可以通过它向您的网络和UAC数据提供数据,并获得需要分析人员注意的更小的记录集。关于使用机器学习进行狩猎的更多信息,我们强烈建议观看David Bianco和Chris McCubbin的演讲“practical cyborgism: Started with machine learning for Incident Detection”(于BSides DC 2016年展示)。
七、狩猎例子
下面的示例说明了如何使用上面列出的假设和列举的数据和技术。
后期移动(Windows环境)
1、你正在查找什么?(假设)
假设:
攻击者可能在C2通道上操作,该通道在公共网络端口上使用自定义加密(非普通协议)。
寻找:
被监视的网络端口通道中的异常,即没有与您正在查看的公共端口相关的协议工件的连接。例如,查找端口443/TCP上没有可识别的SSL元数据的连接。
2. 调查(数据)
数据集:
为了识别通用协议的使用,您将主要关注应用协议元数据,包括:
•代理日志,IIS日志
•dns解析日志
•Bro HTTP, SSL, DNS, SMTP日志
3.发现模式和lOCs(技术)
1 .通过查看协议元数据,使用搜索来识别要检查的各种公共端口上的合法协议连接
2. 如果查看端口80,则搜索给定时间段内存在的任何HTTP协议记录
3.获取步骤1的输出,并从公共端口上的会话数据中删除公共协议连接。这将在公共端口上留下不常见的协议连接
4. 根据步骤2的结果,将有助于调查你的假设的数据堆叠起来
5. 例如:传输的目标IR字节、连接持续时间/长度等。
4. 通知并丰富分析
您发现的C2活动中涉及的目标IP地址可以作为lOCs并添加到指示器数据库中,以便扩展自动检测系统。您还可以创建包级别的签名,以在您发现的自定义协议可能再次出现的情况下触发警报。
永远记住,对于每一个狩猎实例,猎人总是可以采取多种不同的路径来解决给定的假设。那么,在像Sqrrl这样的威胁捕获平台中,这种活动实际上是什么样子的呢?
首先,我需要定义不同数据源之间的关系。例如,我的网络数据和身份验证事件数据都包含IP地址字段。这意味着我可以在不同的数据集之间创建一个关系,如下所示。
八、在不同的数据集之间创建关系
图1显示了我在数据中的不同实体之间创建的所有关系。这是关系的高级可视化。图2中的可视化扩展了高级可视化,并举例说明了每个数据源与每个实体之间的所有低级字段映射。这是身份验证数据和网络数据之间IP地址字段的实际映射。
最后,在完成了所有的工作之后,图2显示了PSExec从192.168.1.100移动到192.168.1.104的事件,以及合并PSExec的Bro警报以添加进一步的验证。虽然这张图片只显示了我所描述的活动,为了便于阅读,这是我所期望的狩猎的最终结果。所有额外的数据和可能的连接都经过了调查,并从原始的大型数据集中排除,直到只剩下异常/可疑/恶意事件。
我认为这是一次成功的狩猎。如果我什么都没找到,我也会认为这是成功的,因为搜寻的目的不是每次都是真正的积极的恶意事件,而是验证一个假设,用灵活的“是”或“不是”回答一个问题。