暴漲3倍!通過(guò)受感染 USB 竊密的事件愈發(fā)變多
2023 年上半年,Mandiant 觀察到使用受感染 USB 驅(qū)動(dòng)器竊取機(jī)密數(shù)據(jù)的事件至少增加了3倍。此前,Mandiant 披露了在菲律賓的一次攻擊行動(dòng)。本文將會(huì)介紹研究人員發(fā)現(xiàn)的兩外兩次基于 USB 驅(qū)動(dòng)器的網(wǎng)絡(luò)間諜行動(dòng)。
通過(guò) USB 閃存驅(qū)動(dòng)器感染 SOGU 惡意軟件
這是使用 USB 閃存驅(qū)動(dòng)器的間諜攻擊,也是針對(duì)全球各行業(yè)垂直領(lǐng)域的公共與私營(yíng)部門的攻擊行動(dòng)。攻擊者使用 USB 閃存驅(qū)動(dòng)器加載 SOGU 惡意軟件,來(lái)竊取主機(jī)的敏感信息。
Mandiant 將攻擊行動(dòng)歸因于 TEMP.Hex 攻擊團(tuán)伙,針對(duì)歐洲、亞洲與美國(guó)的多個(gè)行業(yè)進(jìn)行攻擊,對(duì)建筑、工程、商業(yè)服務(wù)、政府、衛(wèi)生、運(yùn)輸與零售行業(yè)構(gòu)成威脅。
通過(guò) USB 閃存驅(qū)動(dòng)器傳播 SNOWYDRIVE 惡意軟件
攻擊者使用 USB 閃存驅(qū)動(dòng)器傳播 SNOWYDRIVE 惡意軟件。一旦加載成功,就會(huì)在失陷主機(jī)上創(chuàng)建后門,攻擊者可以遠(yuǎn)程發(fā)送命令,使惡意軟件傳播到其他閃存驅(qū)動(dòng)器上以在整個(gè)網(wǎng)絡(luò)中擴(kuò)散。
Mandiant 將攻擊行動(dòng)歸因于 UNC4698,這是一個(gè)針對(duì)亞洲石油與天然氣公司進(jìn)行攻擊的團(tuán)伙。一旦獲取了訪問(wèn)權(quán)限,就可以執(zhí)行任意命令、修改注冊(cè)表等。
SOGU 惡意軟件
研究人員首先發(fā)現(xiàn)該攻擊行動(dòng),在攻擊者用于存放惡意軟件、攻擊工具或?qū)嵱贸绦虻拈_(kāi)放目錄中尋找可疑文件寫入。
受害者國(guó)家分布
image.png-212.8kB
受害者行業(yè)分布
最初的感染
受感染的 USB 閃存驅(qū)動(dòng)器是最初始的感染媒介,其中包含多個(gè)惡意軟件,旨在通過(guò) DLL 劫持將惡意 Payload 加載到內(nèi)存中。
image.png-136.6kB
攻擊鏈
立足點(diǎn)
完整的感染鏈通常由三個(gè)文件組成:合法的可執(zhí)行文件、惡意 DLL 加載文件與加密的 Payload 文件。如下顯示了整個(gè)攻擊周期發(fā)現(xiàn)的惡意軟件文件與路徑:
image.png-43.6kB
常利用的合法可執(zhí)行文件為安全軟件
在合法的可執(zhí)行文件執(zhí)行時(shí),會(huì)加載一個(gè)惡意 DLL 文件(KORPLUG)。隨后 KORPLUG 將會(huì)加載加密的 dat 文件中的 Shellcode 數(shù)據(jù),并在內(nèi)存中執(zhí)行。Shellcode 是一個(gè)用 C 語(yǔ)言編寫的后門,被命名為 SOGU。
偵察
通過(guò)將批處理文件放入 RECYCLE.BIN 路徑下繼續(xù)進(jìn)行偵察。該批處理文件會(huì)探測(cè)主機(jī)并將結(jié)果輸出到名為 c3lzLmluZm8 的文件中。通過(guò) base64 解碼后,c3lzLmluZm8 為 sys.info。腳本執(zhí)行以下命令收集系統(tǒng)特定元數(shù)據(jù):
- tasklist /v
- arp -a
- netstat -ano
- ipconfig /all
- systeminfo
隨后,惡意軟件會(huì)在 C 盤檢索以下擴(kuò)展名的文件:
- .doc
- .docx
- .ppt
- .pptx
- .xls
- .xlsx
惡意軟件會(huì)加密每個(gè)文件的副本,并且使用 base64 對(duì)原始文件名進(jìn)行編碼,再將加密的文件放入以下目錄:
- C:\Users\\AppData\Roaming\Intel\\
- :\RECYCLER.BIN\\
持久化
為了保持持久化,惡意軟件需要?jiǎng)?chuàng)建一個(gè)偽裝成合法程序的目錄,并將該目錄的屬性設(shè)置為隱藏。然后,將主要組件都復(fù)制到該目錄下。常用的文件路徑如下所示:
- C:\ProgramData\AvastSvcpCP
- C:\ProgramData\AAM UpdatesHtA
- C:\ProgramData\AcroRd32cWP
- C:\ProgramData\Smadav\SmadavNSK
隨后創(chuàng)建一個(gè)與之前創(chuàng)建的目錄同名的 Run 注冊(cè)表項(xiàng),該表項(xiàng)用于在用戶登錄時(shí)自動(dòng)運(yùn)行程序:
- Value: AvastSvcpCP
- Text: C:\ProgramData\AvastSvcpCP\AvastSvc.exe
- Value: AAM UpdatesHtA
- Text: C:\ProgramData\AAM UpdatesHtA\AAM Updates.exe
- Value: AcroRd32cWP
- Text: C:\ProgramData\AcroRd32cWP\AcroRd32.exe
- Value: SmadavNSK
- Text: C:\ProgramData\Smadav\SmadavNSK\Smadav.exe
某些 SOGU 變種,可能會(huì)創(chuàng)建一個(gè)額外的計(jì)劃任務(wù)(SCHTASKS.exe /create /sc minute /mo 10 /tn "Autodesk plugin" /tr """"C:\ProgramData\Smadav\SmadavNSK\Smadav.exe""" 644" /f)。每十分鐘運(yùn)行一次惡意軟件,以進(jìn)行持久化。
完成任務(wù)
攻擊的最后階段,惡意軟件將會(huì)回傳所有數(shù)據(jù)。通信使用 HTTP、HTTPS、TCP 或者 UDP 的自定義協(xié)議以及 ICMP。該惡意軟件還支持多種命令,包括文件傳輸、文件執(zhí)行、遠(yuǎn)程桌面、屏幕截圖、反向 Shell 與鍵盤記錄。
該惡意軟件還可以復(fù)制到失陷主機(jī)新的可移動(dòng)設(shè)備上,使惡意軟件能夠傳播到其他設(shè)備,這樣也能夠穿越氣隙網(wǎng)絡(luò)回傳數(shù)據(jù)。
SNOWYDRIVE 攻擊亞洲石油與天然氣公司
用戶被引誘在 USB 驅(qū)動(dòng)器上執(zhí)行惡意軟件時(shí),通常會(huì)發(fā)現(xiàn)命令行檢索可疑文件夾路徑。雖然這種類型的威脅并不罕見(jiàn),但研究人員堅(jiān)持發(fā)現(xiàn)了特殊的間諜行動(dòng)。
最初的感染
受感染的 USB 閃存驅(qū)動(dòng)器是初始感染媒介,受害者被引誘點(diǎn)擊為轉(zhuǎn)成合法可執(zhí)行文件的惡意軟件。執(zhí)行后,就會(huì)觸發(fā)一系列惡意行為。
image.png-587.2kB
攻擊鏈
立足點(diǎn)
感染鏈通常從可執(zhí)行文件開(kāi)始,將惡意文件寫入磁盤并啟動(dòng)。例如,名為 USB Drive.exe 的惡意程序?qū)⒁韵录用芪募懭?C:\Users\Public\SymantecsThorvices\Data:
- aweu23jj46jm7dc
- bjca3a0e2sfbs
- asdigasur3ase
- sf33kasliaeae
- sf24acvywsake
加密文件包含在目錄 C:\Users\Public\SymantecsThorvices\Bin 中提取與寫入的可執(zhí)行文件和 DLL 文件。
image.png-176.6kB
組件情況
這些文件一共分為四個(gè)部分,每部分都是由合法的可執(zhí)行文件通過(guò) DLL 順序劫持加載的惡意 DLL 文件組成。如下所示,每個(gè)組件負(fù)責(zé)攻擊中的一部分任務(wù)。
image.png-137.6kB
組件列表
命令與控制
名為 SNOWYDRIVE 的基于 Shellcode 的后門會(huì)根據(jù)系統(tǒng)名稱、用戶名與卷序列號(hào)生成唯一標(biāo)識(shí)。該標(biāo)識(shí)符會(huì)在 C&C 通信時(shí)被當(dāng)成唯一 ID,而且 C&C 域名通常被硬編碼在 Shellcode 中。
image.png-480.5kB
硬編碼域名
后門支持以下命令:
image.png-64.4kB
支持命令
持久化
惡意軟件使用 HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\ushsguaei1hgba 注冊(cè)表項(xiàng)進(jìn)行持久化,存儲(chǔ) Silverlight.Configuration.exe 的路徑。
橫向平移
該惡意軟件會(huì)將自身復(fù)制并插入失陷主機(jī)的可移動(dòng)驅(qū)動(dòng)器中。首先創(chuàng)建文件夾 <drive_root>\Kaspersky\Usb Drive\3.0,再?gòu)?fù)制包含惡意組件的加密文件。從文件 aweu23jj46jm7dc中提取可執(zhí)行文件并寫入 <drive_root>\<volume_name> .exe,該文件負(fù)責(zé)提取并執(zhí)行加密文件的內(nèi)容。
影響
Mandiant 確定打印店、印刷店與酒店都是攻擊的重點(diǎn),這些攻擊可能都是長(zhǎng)期收集信息的一部分,也可能是針對(duì)國(guó)家級(jí)攻擊者后續(xù)行動(dòng)的一部分。
組織應(yīng)該優(yōu)先考慮對(duì) USB 驅(qū)動(dòng)器等外部設(shè)備的訪問(wèn)進(jìn)行限制,如果不能限制則至少應(yīng)該先掃描是否存在惡意代碼。
Yara
SOGU
rule M_Code_SOGU
{
meta:
author = "Mandiant"
description = "Hunting rule for SOGU"
sha256 = "8088b1b1fabd07798934ed3349edc468062b166d5413e59e78216e69e7ba58ab"
strings:
$sb1 = { 8B [2] C7 ?? 01 03 19 20 8B [2] C7 ?? 04 01 10 00 00 8B [2] C7 ?? 08 00 00 00 00 8B [2] C7 ?? 0C 00 00 00 00 0F B7 }
$sb2 = { 8B ?? 0C C7 ?? 01 03 19 20 8B ?? 0C C7 ?? 04 00 10 00 00 6A 40 E8 [4] 83 C4 04 8B ?? 0C 89 ?? 08 8B ?? 0C C7 ?? 0C 00 00 00 00 C7 [2] 00 00 00 00 EB 09 8B [2] 83 ?? 01 89 [2] 8B ?? 0C 8B [2] 3? ?? 08 7? ?? 68 FF 00 00 00 E8 [4] 83 C4 04 8B [2] 03 [2] 88 ?? 10 EB D4 }
condition:
(uint16(0) == 0x5A4D) and (uint32(uint32(0x3C)) == 0x00004550) and (uint16(uint32(0x3C)+0x18) == 0x010B) and all of them
}
FROZENHILL
rule M_Code_FROZENHILL
{
meta:
author = "Mandiant"
description = "Hunting rule for FROZENHILL"
sha256 = "89558b4190abcdc1a2353eda591901df3bb8856758f366291df85c5345837448"
strings:
$str1 = "path_symantec" ascii
$str2 = "symantec_dir" ascii
$str3 = "name_svchost" ascii
$str4 = "run_cmd" ascii
$str5 = "usb_dll_name" ascii
$str6 = "name_mutex" ascii
$str7 = "cmd /c \"%s\" %d" wide
$str8 = { 8B 85 [4] 83 ?? 01 89 85 [4] 8B 85 [4] 3B 45 0C 74 ?? 8B 45 ?? 03 85 [4] 0F B6 08 33 8D [4] 81 E1 [4] 8B 95 [4] C1 EA ?? 33 94 8D [4] 89 95 [4] EB }
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and all of them
}
ZIPZAG
rule M_Code_ZIPZAG
{
meta:
author = "Mandiant"
description = "Hunting rule for ZIPZAG"
sha256 = "8a968a91c78916a0bb32955cbedc71a79b06a21789cab8b05a037c8f2105e0aa"
strings:
$str1 = { C6 45 ?? 55 C6 45 ?? 8B C6 45 ?? EC C6 45 ?? 81 C6 45 ?? EC C6 45 ?? 08 C6 45 ?? 01 C6 45 ?? 00 C6 45 ?? 00 C6 45 ?? C7 C6 45 ?? 45 C6 45 ?? FC C6 45 ?? 78 C6 45 ?? 56 C6 45 ?? 34 C6 45 ?? 12 C6 45 ?? 68 C6 45 ?? 04 C6 45 ?? 01 C6 45 ?? 00 C6 45 ?? 00 C6 45 ?? 8D C6 45 ?? 85 C6 45 ?? F8 C6 45 ?? FE C6 45 ?? FF C6 45 ?? FF C6 45 ?? 50 C6 45 ?? FF C6 45 ?? 75 C6 45 ?? FC C6 45 ?? B8 C6 45 ?? 79 C6 45 ?? 56 C6 45 ?? 34 C6 45 ?? 12 C6 45 ?? FF C6 45 ?? D0 C6 45 ?? FF C6 45 ?? 75 C6 45 ?? FC C6 45 ?? B8 C6 45 ?? 7A C6 45 ?? 56 C6 45 ?? 34 C6 45 ?? 12 C6 45 ?? FF C6 45 ?? D0 C6 45 ?? 8D C6 45 ?? 85 C6 45 ?? F8 C6 45 ?? FE C6 45 ?? FF C6 45 ?? FF C6 45 ?? 50 C6 45 ?? B8 C6 45 ?? 7B C6 45 ?? 56 C6 45 ?? 34 C6 45 ?? 12 C6 45 ?? FF C6 45 ?? D0 C6 45 ?? C9 C6 45 ?? C3 }
$str2 = "shellcode_size" ascii
condition:
uint16(0) == 0x5A4D and uint32(uint32(0x3C)) == 0x00004550 and all of them
}
SNOWYDRIVE
rule M_Code_SNOWYDRIVE
{
meta:
author = "Mandiant"
description = "Hunting rule for SNOWYDRIVE"
sha256 = "964c380bc6ffe313e548336c9dfaabbd01a5519e8635adde42eedb7e1187c0b3"
strings:
$str1 = { C6 45 ?? 6B C6 45 ?? 65 C6 45 ?? 72 C6 45 ?? 6E C6 45 ?? 65 C6 45 ?? 6C C6 45 ?? 33 C6 45 ?? 32 C6 45 ?? 2E C6 45 ?? 64 C6 45 ?? 6C C6 45 ?? 6C }
$str2 = { C6 45 ?? 47 C6 45 ?? 65 C6 45 ?? 74 C6 45 ?? 50 C6 45 ?? 72 C6 45 ?? 6F C6 45 ?? 63 C6 45 ?? 41 C6 45 ?? 64 C6 45 ?? 64 C6 45 ?? 72 C6 45 ?? 65 C6 45 ?? 73 C6 45 ?? 73 }
$str3 = { C6 85 ?? FD FF FF 4C C6 85 ?? FD FF FF 6F C6 85 ?? FD FF FF 61 C6 85 ?? FD FF FF 64 C6 85 ?? FD FF FF 4C C6 85 ?? FD FF FF 69 C6 85 ?? FD FF FF 62 C6 85 ?? FD FF FF 72 C6 85 ?? FD FF FF 61 C6 85 ?? FD FF FF 72 C6 85 ?? FD FF FF 79 C6 85 ?? FD FF FF 41 }
$str4 = { C6 85 ?? FC FF FF 57 C6 85 ?? FC FF FF 61 C6 85 ?? FC FF FF 69 C6 85 ?? FC FF FF 74 C6 85 ?? FC FF FF 46 C6 85 ?? FC FF FF 6F C6 85 ?? FC FF FF 72 C6 85 ?? FC FF FF 53 C6 85 ?? FD FF FF 69 C6 85 ?? FD FF FF 6E C6 85 ?? FD FF FF 67 C6 85 ?? FD FF FF 6C C6 85 ?? FD FF FF 65 C6 85 ?? FD FF FF 4F C6 85 ?? FD FF FF 62 C6 85 ?? FD FF FF 6A C6 85 ?? FD FF FF 65 C6 85 ?? FD FF FF 63 }
condition:
uint16(0) != 0x5A4D and uint32(0) != 0x464c457f and uint32(0) != 0xBEBAFECA and uint32(0) != 0xFEEDFACE and uint32(0) != 0xFEEDFACF and uint32(0) != 0xCEFAEDFE and all of them
}
狩獵規(guī)則
rule hunting_T1091_User Execution: Malicious File
{
meta:
rule_name = "Replication Through Removable Media"
description = "This rule detects a file write event from a RECYCLER/S named path to another directory"
author = "Mandiant Managed Defense"
mitre_technique_name = "User Execution: Malicious File"
mitre_technique = "T1204"
mitre_tactic_name = "Execution"
platform = "Windows"
events:
$e.target.process.path = ":\RECYCLER.BIN\" nocase or
$e.target.process.path = ":\RECYCLERS.BIN\" nocase
}
condition:
$e
}
rule hunting_T1091_Replication_Through_Removable_Media
{
meta:
rule_name = "Replication Through Removable Media"
description = "This rule detects windows explorer process execution with a suspicious folder path specified on the command line"
author = "Mandiant Managed Defense"
mitre_technique_name = "Replication Through Removable Media"
mitre_technique = "T1091"
mitre_tactic_name = "Lateral Movement,Initial Access"
platform = "Windows"
events:
$e.target.process = "explorer.exe" and
{
re.regex($e.principal.process.command_line, = `/explorer.exe?(\")?\s+(\")?[A-BD-Za-bd-z]:\\/`) nocase and
re.regex($e.principal.process.full_path, `:\\[^\\]+\.exe$`) nocase
}
condition:
$e
}