如何利用日志数据来检测横向渗透行为

匿名者  1130天前

所谓横向渗透,是指攻击者通过在多个系统和账户之间进行跳转,从而改善对环境的访问权限,从而更接近其目标的各种技术。同时,攻击者也可能会安装自己的远程访问工具来完成横向渗透,或者使用窃取的凭证与本地网络和操作系统工具结合使用,因为这些工具能更好的潜伏到正常的系统管理活动中。

为了检测横向渗透行为,不仅需要在源系统和目标系统上设计相应的检测方法,同时,还要考察多种类型事件(如网络事件与进程执行事件)之间的相关性,以捕获远程执行的上下文。

在本文中,我们将通过实例讲解如何利用开源搜索引擎Elastic的事件查询语言(EQL)的相关功能,来检测与横向渗透相关的各种行为。

横向渗透是如何进行的

横向渗透通常由以下步骤组成:

  1. 对目标主机进行远程身份验证(需要有效的访问凭证);
  2. 将命令投放到需要在其上执行的远程主机,或投放到可访问的其他资源(例如InternetURL或网络文件共享)的目标主机;
  3. 通过可访问的远程服务和协议(服务、任务调度器、WinRM、WMI、远程注册表),在目标主机上远程触发已植入程序的执行(立即执行或计划任务的形式执行);
  4. 清理植入的payload和任何其他痕迹,以避免引起怀疑(可选)。

请注意,投放程序(第2步)并不总是必要的,因为通常有暴露的服务可用于与目标主机进行远程交互,如PowerShell Remoting和远程桌面(RDP)服务等。

横向渗透工具的传输

在进行横向渗透的过程中,可以将文件从一个系统复制到另一个系统,以实现横向渗透工具或其他文件的传输。常见的传输方式包括利用SMB/Windows管理共享,通过使用内置的系统命令,如copy、move copy-item等。

1.png

图1  通过系统命令复制文件

在源机器上,攻击者也可以通过其他方式来复制文件,这样做的好处是:无需执行容易引起怀疑的命令。不过,寻找容易发现的检测机会还是很重要的。

下面的图2显示了一个EQL查询,该查询可用于检测与攻击者向远程主机传输文件相一致的行为:

  •     执行一个命令解释器,其process.args关键字数组与文件复制(copy、move)和隐藏的文件共享有关(前缀为$符号,如c$ admin$);
  •     通过影子副本卷投递数据(通常与通过投放NTDS.dit或注册表SAM键访问存储的账户密码哈希值的凭证访问有关)。

1.png

图2  EQL示例,用于检测通过隐藏文件共享从源机器传输文件的行为

在目标机器上,我们观察到,所有通过服务器消息块(SMB)复制的文件都是由虚拟进程System(总是有一个静态的process.pid值等于4,代表Windows内核代码和加载的内核模式驱动程序)的文件创建事件来表示。

1.png

图3  在Kibana的Discover视图中显示的文件创建事件细节,这是通过SMB传输文件的结果。

当然,仅靠一个文件创建事件是远远不够的(系统进程可能会创建与本地活动相关的文件),我们无法由此得出这个活动与横向渗透有关的结论。因此,我们需要将其与传入的SMB网络事件进行关联:

1.png

图4  通过隐藏文件共享从目标主机搜索文件传输的EQL

上面的查询用于查找这样的事件:首先通过远程网络连接到tcp端口445(SMB),然后立即创建或修改文件(可以限制为可执行文件扩展名,以减少误报),而且这两个事件都是由同一个(process.entity_id)虚拟System进程执行的。

1.png

图5  目标主机横向渗透工具传输的检测预警示例

上述警报包含了关于被复制的文件的详细信息,以及横向渗透活动的source.ip地址。同样的逻辑也会被PSExec所触发,PSExec是一个经常被攻击者滥用的远程执行工具,用于同样的目的。

1.png

图6  目标主机的PSEXEC上的横向渗透工具传输的触发情况

我们还可以利用EQL的相关性来检测通过SMB复制的文件被立即执行的实例:

1.png

图7  用于检测通过文件共享实现远程执行的EQL

上面的EQL用于检测一个事件序列,在这个序列中,首先是一个文件被虚拟System进程创建/修改事件,然后是一个进程事件,其中process.executable等于file.path。下面是一个警报示例:

1.png

图8  目标主机通过文件共享进行远程执行的检测警报

另一个通过SMB传输文件被滥用于远程执行的例子是将一个恶意的可执行文件、脚本或快捷方式复制到目标主机的启动文件夹中。这将导致被引用的程序在用户登录时自动执行,并且是在该用户的上下文中执行:

1.png

图9  通过启动文件夹检测横向渗透的EQL

以下是通过启动文件夹对横向渗透进行检测预警的例子:

1.png

图10  通过启动文件夹对横向渗透的检测警报

远程计划任务

攻击者也可以利用计划任务进行远程执行攻击,例如通过内置的系统实用程序(如schtasks.exe)或直接通过任务调度器API——这样做的好处是,由于可见性有限,有助于实现隐身。

下面是一个通过MoveScheduler渗透测试工具创建远程任务的例子。

1.png

图11  通过MoveScheduler进行横向渗透

schtasks.exe和直接使用自定义实现都会导致进程加载任务调度器COM API (taskschd.dll),并生成一个出站网络连接,其中source.port和destination.port都等于或大于RPC动态端口(49152到65535),并且它们都来自同一个process.entity_id,下面,我们将其翻译成相应的EQL查询:

1.png

图12  在源主机上查询出站任务调度器活动情况的EQL

当然,上面的查询方法也可用于检测计划任务方面的事件。下面是一个警报的例子,我们可以观察到用户名、源和目的IP,以及用于执行远程任务活动的进程名称。

 1.png

图13  源主机上通过调度任务进行横向渗透的检测警报

在目标主机上,我们可以通过两个选项来寻找远程计划任务的创建/修改事件:

  1. 通过任务调度服务(svchost.exe)传入DCE/RPC(通过TCP/IP)网络事件,后面是创建任务xml配置文件(C:\\Windows\\System32\Tasks\task_filename)的事件。
  2. 通过任务调度服务(svchost.exe)传入的DCE/RPC(通过TCP/IP)网络事件,后面是任务缓存的Action值的注册表变更事件(HKLM\\SOFTWARE\\Microsoft\\WindowsNT\\CurrentVersion\\Schedule\\TaskCache\\Tasks\\{GUID}\\Actions)。

其中,选项A为我们提供了任务名称(等于被修改/创建的文件的file.name),选项B为我们提供了任务操作本身(等于任务调度服务缓存任务操作配置的Action注册表值的base64解码数据)。

 1.png

图14  在目标主机上检测创建任务(选项A)事件的EQL查询

1.png

图15  在目标主机上检测创建任务(选项B)事件的EQL查询

选项B的优点是提供了任务操作的相关细节,这些细节往往在进行分类的时候非常有用(设置为从可疑路径执行程序、LOLBAS进程等)。

 1.png

图16  通过目标主机上的计划任务检测横向渗透的警报

对于注册表Action基于base64进行编码的数据,进行相应的解码之后,能够为我们提供关于创建的任务操作方面的详细信息。

1.png

图17  调度任务操作注册表值的base64解码数据

远程注册表事件

此外,攻击者也可能会利用远程注册表服务来绕过防御机制,或实现远程执行。一个简单的场景是修改远程系统上的Run注册表项,导致系统启动或用户登录时执行特定的程序。

 1.png

图18  通过注册表实用程序远程修改Run注册表项

我们可以从源机器中通过寻找利用含有\\*的process.args来执行reg.exe的情况来检测这种行为,但同样的操作也可以通过API调用来实现,这样就可以避免基于进程.command_line的检测方法。

 1.png

图19  源主机上的Reg.exe进程执行事件示例

请注意,Reg.exe并没有进行任何网络连接——相反,而是虚拟System进程在445端口(SMB上的DCE/RPC)上向目标主机发送了出站网络连接请求。

在目标主机上,我们可以看到以下一系列关键事件:

  1.     虚拟System进程(process.pid等于4)在tcp端口445(SMB上的DCE/RPC)上发出网络连接请求;
  2.    RemoteRegistry服务进程启动(svchost.exe的process.args包含字符串RemoteRegistry);
  3.    RemoteRegistry服务进程完成注册表的更改。

 1.png

图20  目标主机上与远程注册表操作相关的事件

下面的EQL可以通过远程注册服务的host.id和process.entity_id来关联(2)和(3):

 1.png

图21  通过Regsvc检测目标主机上的远程注册表修改情况的EQL

如果我们在上述序列中包含(1)来捕获source.ip地址,那么,它可能会在不相关的传入SMB连接上被触发,因为三个事件之间的唯一共同元素仅限于host.id值。

1.png

图22  目标主机上通过Regsvc进行远程注册表修改的检测警报

此外,攻击者还可能试图通过WindowsManagement Instrumentation(WMI)注册表提供程序(StdReg)达到相同的结果,但是,这时的行为会有所不同:

  1. WMI服务(svchost.exe,其process.args包含Winmgmt字符串)接受传入的DCE/RPC(通过TCP/IP)网络连接,其中source.port和destination.port均大于或等于RPC动态端口(49152至65535)。
  2. WMI提供程序主机的新实例(process.name等于WmiPrvSe.exe,user.name等于Local Service或user.id等于S-1-5-19)被启动。
  3. 启动的WMI提供程序主机会加载注册表提供程序的StdProv.dll模块。
  4. WMI提供程序主机完成注册表更改。

我们可以用下面的EQL来表示(1)、(2)和(4)的相关性:

 1.png

图23  检测通过目标主机上的Regsvc进行远程注册表修改事件的EQL

如果启用了StdProv.dll模块加载的日志记录,我们还可以在序列中添加(3)以减少潜在的误报:

 1.png

图24  在目标主机上检测通过Regsvc进行远程注册表修改(库事件)事件的EQL

下面是一个检测预警的例子,我们可以看到远程修改的注册表细节和远程源.ip:

 1.png

图25  检测通过目标主机上的WMI实现远程注册表修改事件

关于SharpRDP

SharpRDP是一个横向渗透工具,它利用远程桌面协议(RDP)执行经过认证的命令,而且不需要图形交互。

通过身份验证后,SharpRDP能够通过名为SendKeys的方法向远程系统发送虚拟按键:首先,它会在目标主机上打开运行对话框,然后输入指定的命令,从而在目标主机上执行相关的命令。

对于这个工具来说,来自源主机的主要指标,是一个异常进程(托管SharpRDP代码)加载了实现RDP客户端功能的远程桌面服务ActiveX客户端(MsTscAx.dll),随后,会建立到RDP tcp端口3389的出站网络连接,并且,这两个事件都来自同一个process.entity_id。

 1.png

图26  用于检测可疑的RDP客户端的EQL

下面是一个与我们的EQL相匹配的例子,在这里,我们可以看到一个异常进程(除了mstsc.exe和类似的已知RDP客户端之外)加载了远程桌面服务ActiveX客户端(MsTscAx.dll),并创建了出站网络连接。

 1.png

图27  可疑RDP客户端检测结果

在目标主机上,会在一分钟的时间窗口内发生以下注册表相关的事件:

  1. RDP服务(TermService svchost.exe)在3389端口接受了一个传入的网络连接。
  2. 在RunMRU注册表项下,一个新的(或更新现有的)字符串值被设置为cmd、powerhell、taskmgr或tsclient(取决于所选择的SharpRDP执行方法),这是通过SendKeys方法在Run对话框中键入命令而引发的。
  3. 根据执行方式的不同,还可能会创建一个新的进程(即攻击者的命令),其process.parent.name为cmd.exe、powerhell.exe、taskmgr.exe,或者是从tsclient挂载点(RDP客户端主机与RDP目标服务器的共享驱动器)运行的随机可执行文件。

对于事件(2)来说,我们需要注意的是,当从运行对话框中运行任何命令时,将在HKCU/Software/Microsoft/Windows/CurrentVersion/Explorer/RunMRU处创建一个注册表条目,用来显示在运行对话框中输入的内容。

上述事件序列可以用下面的EQL进行表示:

1.png

图28  用于在目标主机上检测SharpRDP行为的EQL

下图展示的是在目标主机上的检测警报及其组成事件的详细信息:

 1.png

图29  目标主机上SharpRDP的检测警报(TermService网络连接)

 1.png

图30  目标主机上的SharpRDP的检测警报(RunMRU被设置为Powershell)

 1.png

图31  目标主机上SharpRDP的检测警报(PowerShell子进程)

小结

利用事件查询语言(EQL)提供的相关功能,我们能够检测各种与横向渗透技术相关的复杂攻击行为。概括来说,检测步骤如下所示:

  1. 理解某项技术的理论和构建模块(网络协议、加载模块、服务、进程名称和参数)。
  2. 识别构成某种行为的关键事件及其顺序(包括源主机和目标主机)。
  3. 识别可用于关联攻击(序列)的共同值——识别更多的共同点可以减少假阳性误报。
  4. 识别丰富的可能性,例如序列中对警报分类有用的额外事件。
  5. 评估相关的时间窗口——使用较短的时间窗口(例如,30秒而非1秒)可以减少假阳性误报,但也可能会引入由网络延迟或系统缓慢而引起的假阴性误报。
  6. 使用不同的方法和工具进行测试,并相应地调整检测逻辑,或者在某些情况下,通过重复逻辑以捕获边缘案例。

另外,本文中的某些示例性EQL检测规则可以在Elastic的检测规则存储库中找到,这些规则可检测下列事件:

  • 将远程文件复制到隐藏共享
  • 横向工具传输
  • 通过文件共享实现远程执行
  • 通过启动文件夹进行横向渗透
  • 通过PowerShell进行的出站计划任务活动
  • 远程计划任务创建
  • 潜在SharpRDP行为
  • 已加载可疑的RDP ActiveX客户端
  • 通过TSClient挂载点执行

 

原文地址: https://www.elastic.co/blog/hunting-for-lateral-movement-using-event-query-language

最新评论

昵称
邮箱
提交评论