摩訶草APT團伙新腳本類攻擊樣本分析報告
「摩訶草」組織,又稱Hangover、Viceroy Tiger、Patchwork、Dropping Elephant、MONSOON,國內其他安全廠商也稱其為白象、豐收行動。
該組織是一個以長期針對中國、巴基斯坦及其他部分南亞國家從事網路間諜活動的APT組織。從2013年5月16日由國外安全廠商Norman首次曝光以來,該組織的網路攻擊活動異常的活躍,並被國內外不少安全廠商相繼發現其攻擊事件和使用的惡意代碼。
360公司也曾在2016年8月4日發布了《摩訶草組織(APT-C-09)來自南亞的定向攻擊威脅》一文【1】,詳細介紹了該組織發起的歷史4次攻擊行動,並對其歷史使用的攻擊工具和基礎設施的關聯性進行比較和總結。
「摩訶草」組織主要針對我國的政府機構、科研教育領域以及軍事領域的目標人員進行攻擊,其主要使用魚叉攻擊,也使用基於即時通訊工具和社交網路作為惡意代碼的投遞途徑。其攻擊使用的惡意代碼主要針對Windows系統,歷史也出現過針對其他平台的惡意代碼。
360威脅情報中心在近期對「摩訶草」組織的攻擊活動監測過程中,發現其投入使用的新的攻擊樣本,我們決定發布此篇子分析報告,揭露該組織最新的攻擊技術細節。
背景概述
「摩訶草」組織的攻擊活動從2013年5月16日首次曝光以來,其歷史的攻擊行動及使用的攻擊工具和資源也被國內外安全廠商多次揭露,但從360威脅情報中心對該組織的持續監測顯示,該組織的攻擊行動從未停止,並持續保持著一個比較高的頻度活躍。
自我們上一次公開發布「摩訶草」組織的完整分析報告,已經過去了一年多,我們發現該組織在過去一年依然延續了過去的一些攻擊模式,但使用的攻擊工具和惡意代碼還是出現了一些顯著變化。
我們發現,「摩訶草」組織最近發起了一次可能是針對東歐部分國家的攻擊事件,並使用了其新製作的一些基於腳本的攻擊惡意代碼文件,和過去常見的採用誘導漏洞文檔類的攻擊載荷手法出現了一些明顯變化,並且已經有部分烏克蘭用戶遭受此類攻擊並被植入遠控木馬。
目前我們尚不能確定該攻擊事件背後的攻擊動機,但為了預防該組織在未來的攻擊行動中進一步大規模使用該類攻擊惡意代碼,我們決定披露其部分技術細節並預警,以便能更好的防禦其未來使用該類攻擊技術。
下面我們將重點分析「摩訶草」組織最新的腳本類攻擊惡意代碼技術。
基於腳本的攻擊載荷投放
在「摩訶草」組織最新製作的攻擊惡意代碼中,我們發現其主體模塊使用JS和PowerShell腳本進行編寫,並利用多次解密、拼接來釋放和載入下一階段的攻擊載荷。
下圖為該惡意代碼的結構和執行流程。
Dropper JS – dog.js
Dropper JS是一個96KB的腳本,其會釋放一個中間JS腳本。其前面部分為hex形式的附加數據被作為注釋語句存放;後面的腳本會先獲取當前正在執行腳本的路徑,並讀取自身文件數據,找到前面注釋的附加數據拼接起來,轉換成二進位形式,保存到」%temp%laksasokpaslkak.js」,最後通過WScript容器執行這個腳本。
中間JS腳本 – laksasokpaslkak.js
該腳本會首先判斷目標主機是否存在卡巴和NOD32程序,如果存在則腳本退出;如果不存在,會把腳本里的「dllData」和「code」兩個數據一起寫入到一個PowerShell腳本文件中,其名字為隨機生成的5個位元組。最後執行該PowerShell腳本。
隨機名稱PowerShell腳本
該PowerShell腳本以數組形式亂序放置Base64編碼的數據,通過Base64解碼並解壓成PowerShell腳本後,採用了一種Bypass UAC的形式來執行該腳本。其使用的Bypass UAC技術在另一個APT組織「海蓮花」的攻擊工具中也曾使用【2】。其通過修改註冊表鍵值劫持eventvwr.exe,調用SC命令創建一個服務,並指向解密後的PowerShell腳本。
PowerShell Loader
PowerShell Loader腳本也是隨機生成的名字,其主要功能是載入主體遠控模塊。
該腳本從內存中載入payload,如下為載入代碼流程:
其中「strexp」保存的為遠控模塊的文件數據,經過base64decode解碼得到原始文件內容為一個DLL文件,其導出模塊名為socksbot.dll。最後使用ReflectiveLoader技術載入。
通過對載入的部分代碼分析,我們推測其可能參考了開源的代碼實現【3】,並添加了在64位Windows系統下的兼容性代碼。
遠控模塊分析
載入入口 – ReflectiveLoader
該函數首先獲取當前函數的地址,然後往前搜索PE頭部「MZ」標誌以定位該DLL模塊的基地址。
通過hash獲取3個函數LoadLibrary、GetProcAddr、VirtualAlloc的地址。
然後調用VirtualAlloc分配一片內存空間。
把該DLL模塊複製到新申請的內存中。
然後執行DllMain。
執行入口 – DllMain
DllMain會首先獲取一些硬體信息計算出機器碼。機器碼是根據驅動器信息、電腦名和用戶名算出來的:
然後會獲取GetProcAddress和LoadLibraryA的地址,並把sub_1000234A代碼通過複寫進程的方式注入svchost.exe宿主中,如圖:
注入後的代碼會初始化網路套接字,發送一次touch包,然後創建一個主線程函數,如下:
在主線程中會連接C&C伺服器地址5.8.88.64:80。
控制協議
這裡我們詳細分析該遠控模塊使用的控制通信協議,其基於HTTP協議實現控制通信。
- touch包
遠控模塊會發送touch數據包,其會根據機器碼生成對應的php路徑用作HTTP訪問的請求路徑,其將機器碼和隨機生成的密鑰加密並附上密鑰信息。
其具體演算法實現如下:
計算後生成的機器碼字元串是放到HTTP數據包的GET數據里,例如生成的字元串為j2ylvj50suxr8vzss17s3.php,那麼加密後的機器碼數據為j2ylvj50suxr8vzss17s3。其前16位元組是機器碼加密後的數據,從16位元組開始到末尾是隨機生成的密鑰信息,密鑰長度在5-16位元組隨機,數值的範圍在0-35隨機,然後通過編碼成可見字元。
當伺服器接收到該字元串會採用如下方式解密還原機器碼:
- 分割出加密的機器碼和密鑰
- 通過解密演算法去解密前面16位元組的機器碼。
例如這裡對j2ylvj50suxr8vzss17s3.php進行解密。
分割j2ylvj50suxr8vzs為加密的16位元組機器碼,s17s3為隨機生成的密鑰。解密演算法如下。
從而解密還原出原始的機器碼:
其隨後構造成HTTP格式的數據包發送出去。
如圖為構造HTTP數據包的函數,UserAgent是通過ObtainUserAgentString函數生成的。
- 指令下發
遠控伺服器是通過不同的HTTP狀態碼來下發控制指令,受控端會進行判斷。
在返回的HTTP數據包頭中,Date欄位中存放伺服器返回的機器碼。
受控端會對伺服器下發的控制信息進行解密,解密演算法如下:
其解密密鑰為136位元組。
EC1ABCB66F641126C2250C5CF26C9902BD53043EAAF5FE0374597261674FD732E2C0498A9FA06203C5641323C3B4DDCB5CD8A22A0EDCAE39A11D7E98A2B1B6276C595E7CC1E1A0C743B8C075416C7DB3CB509AB5059556E99D2818BDDDEEE508AC871474239CC4B5527A8AED49949D5A421C785484ED084F1FCD3D3CFD1D8D8B
- 回傳數據
受控端接受到控制伺服器下發的指令後,會根據HTTP返回的狀態碼確定要執行的命令,例如返回碼是203的時候就會上傳執行,返回碼是202的時候就會截屏和獲取進程列表。
並且上傳數據按如下格式構造:
4個位元組長度 + 1位元組token + 加密後的內容。
例如這裡執行獲取屏幕截屏和進程快照信息,並加密發送到控制伺服器。
功能小結
該遠控模塊實現了以下控制命令,包括:
- 上傳執行腳本
- 上傳執行PE
- 回傳屏幕截屏
- 回傳進程列表
其使用HTTP協議進行控制通信,採用這種控制協議也更便於攻擊者使用Web頁面來可視化控制和管理失陷主機,其HTTP協議通信步驟如下:
- 機器中木馬後,會每隔不定時間間隔去連接C&C伺服器的80埠,根據HTTP協議發送touch包,發送的http數據包的GET數據中包括編碼後的長度隨機的機器碼。
- 伺服器收到touch包後,會記錄下來最近一次活躍時間,判斷是否在線。
- 伺服器如果需要對受控端進行控制,就會回一個202或者203的HTTP狀態碼,下髮指令。下發的指令是在http數據段裡面,數據包格式為4個位元組長度+1個位元組token+加密後的內容。
- 受控端收到命令後,會判斷伺服器返回的http狀態碼,根據不同的狀態碼去解析數據包去執行不同的命名,然後把執行後的結果回傳給伺服器。
- 控制者可以通過對服務端的Web界面對受害者進行控制。
交互操作可以總結為如下圖:
關聯分析與回溯
360威脅情報中心通過對PowerShell Loader腳本中的關鍵字搜索,發現了其在一個VPS主機上搭建的Web控制端頁面。
主控端的界面如下,最後一次測試時間應該在2017年6月,已經在近半年以前。
通過該Web管理後台可以對受控機器進行控制操作。
另外一個Loots頁面保存了控制端發送控制指令後的一些日誌數據,包括執行命令、上傳文件、截屏、下載文件、執行腳本的功能。
我們從日誌數據中找到了一個名為setup.js的腳本文件,其代碼和我們分析的laksasokpaslkak.js的代碼大致一樣。
通過把該腳本中的DLL數據用同樣的方法解密出來後,發現和前面分析的遠控模塊socksbot.dll完全一樣,其C&C為46.166.163.243,與測試機IP 46.166.163.242屬於同一網段。
查詢360威脅情報平台數據確定其屬於「摩訶草」組織。
我們可以看到測試機執行命令後的一些結果日誌。
執行ipconfig命令的結果。
我們還發現攻擊者曾在測試機上測試上傳其另外的遠控木馬程序和從遠程地址下載惡意載荷。
這個Web版木馬控制端程序的網站域名(http://yds.deckandpatio.ca)綁定的IP地址為91.235.129.203。
這個IP的別名為:vds8262.hyperhost.name。
我們發現其是在一個烏克蘭的服務商上申請註冊的VPS伺服器,其服務商官網為https://hyperhost.ua/ru。而http://yds.deckandpatio.ca這個域名應該是其提供的一個免費的二級域名。
總結
通過分析「摩訶草」組織最新製作並投入使用的攻擊惡意代碼,攻擊者選擇腳本類語言來重新實現攻擊載荷的投放組件,可能源於其對開發工具的便利性和效率的傾向性。
雖然我們沒有明確線索證實該次針對烏克蘭人員的攻擊事件中該類攻擊腳本是如何誘導受陷用戶下載和運行的,但根據其過去的攻擊模式推測,其可能採用如下幾種方式。
- 構造包含有惡意腳本的自解壓執行的壓縮包;
- 魚叉攻擊,並附帶有包含惡意腳本的壓縮包文件或附有惡意腳本壓縮程序下載的釣魚鏈接;
- 在社交網路上發送附有惡意腳本壓縮程序下載的釣魚鏈接;
也不排除其可能通過入侵網站,在頁面植入惡意腳本代碼的方式。
從「摩訶草」過去採用的攻擊模式和使用的惡意代碼技術來看,該組織比較偏好於使用腳本和C#來開發攻擊工具的習慣。我們推測其更傾向於選擇能夠快速開發和實現攻擊的方式,並且通過不斷更新和變化的攻擊工具來逃避檢測和隱藏其攻擊行徑。攻擊者還製作了可用於Web管理的控制後台程序來方便大規模管理和控制受陷主機。
從我們發現的攻擊者註冊的VPS伺服器及其Web控制頁面,攻擊者發起新的攻擊和使用新的惡意代碼工具至少會提前半年進行準備和測試。
目前我們還無法推測其發起此次攻擊事件的動機,可能是該組織針對東歐部分國家發起的定向攻擊,也不排除是其發起的一次基於新製作的攻擊武器的一次實戰演練。所以我們在此對該類惡意代碼的部分技術細節進行披露,以便於提前防禦該組織在未來的攻擊行動中進一步大規模使用該類攻擊惡意代碼。
參考鏈接
【1】2016.8.4 360威脅情報中心
https://ti.360.net/blog/uploads/2017/09/21/6286ad3a711b98acf1fe49cafc3d1669.pdf
【2】2017.11.30 360威脅情報中心
https://ti.360.net/blog/articles/exploit-kit-in-oceanlotus-group/
【3】PowerShell ReflectivePEInjection腳本
https://github.com/clymb3r/PowerShell/blob/master/Invoke-ReflectivePEInjection/Invoke-ReflectivePEInjection.ps1
IOC列表
C&C伺服器
5.8.88.64文件名laksasokpaslkak.js互斥體Global[num]stpGlobal[num]nps解密密鑰EC1ABCB66F641126C2250C5CF26C9902BD53043EAAF5FE0374597261674FD732E2C0498A9FA06203C5641323C3B4DDCB5CD8A22A0EDCAE39A11D7E98A2B1B6276C595E7CC1E1A0C743B8C075416C7DB3CB509AB5059556E99D2818BDDDEEE508AC871474239CC4B5527A8AED49949D5A421C785484ED084F1FCD3D3CFD1D8D8B
本文由安全客原創發布
登錄安全客 - 有思想的安全新媒體www.anquanke.com/,或下載安全客APP來獲取更多最新資訊吧~
推薦閱讀:
※蘋果中國員工私下出售iPhone用戶敏感信息,這個會被判幾年?
※CISSP現在在國內是什麼情況?
※Android 應用有哪些常見,常被利用的安全漏洞?
※實例講解如何繞過 Office 文檔的反分析技術