OceanLotus APT樣本分析(一)
一、概述
海蓮花(OceanLotus)是高度組織化的、專業化的境外國家級黑客組織。自2012年4月起針對中國政府的海事機構、海域建設部門、科研院所和航運企業,展開了精密組織的網絡攻擊,很明顯是一個有國外政府支持的APT(高級持續性威脅)行動。
OceanLotus樣本分析,這個樣本其實很多大佬都已經分析過了,但是我還是覺得自己記錄一下比較好吧...該樣本是一個DLL文件,DLL被load起來的時候會申請一段內存把資源段上的shellcode代碼拷貝到內存中并加載,然后執行shellcode,shellcode會創建一個線程用于服務的自啟動,其次會創建svchost.exe進程,往進程里面申請內存并寫入惡意代碼,SetThreadContext設置線程上下文的形式去執行svchost.exe的shellcode,最后請求C&C。
二、樣本分析
(一)樣本基礎情況
樣本類型Hash

(二)樣本分析
DLL加載后會從資源段中讀取惡意代碼,通過分配內存的形式把惡意代碼拷貝到內存中去執行。


執行隱藏在資源段上的惡意代碼

執行資源段上的shellcode

進入shellcode后第一個call eax是為了啟動一個線程

該線程的功能主要是用于服務啟動

隨后通過loadLibrary的形式加載User32.dll、shell32.dll、paapi.dll、ntdll.dll

通過call edi的形式GetProcAddress獲取多個API地址,若獲取失敗直接跳轉到ret

設置處理異常

獲取svchost.exe路徑的字符串長度

第二次LoadLibrary,這一次通過Getprocaddress通過call esi的形式獲取API,獲取失敗就ret


擴展環境變量字符串并將它們替換為為當前用戶定義的值。

通過CreateProcess創建svchost.exe

判斷進程是32位還是64位

獲取系統信息

第三次LoadLibrary,通過call esi執行GetProcAddress獲取API,獲取失敗就Ret

GetProcessID函數獲取進程ID 0x1b98是svchost.exe



通過VirtualAllocEx函數在svchost.exe中申請內存空間,并具有讀寫執行的權限。申請的內存空間為地址是eax寄存器的數值。 
觀察svchost.exe的內存空間

VirtualAllocEx的第一參數是hprocess,此處是svchost.exe的進程句柄,第二次也是在svchost.exe中申請內存空間。并具有讀寫執行的權限。函數返回值是180000

觀察svchost.exe在內存中的地址空間。

通過WriteProcessMemory函數往svchost.exe中地址180000的內存寫入數據,寫入的數據內容在22291DB地址上。

通過觀察發現shellcode已經寫入了svchost.exe中

獲取進程的快照并通過Thread32First和Thread32Next遍歷線程



OpenThread打開線程ID是0x1b40對應是svchost的線程ID 69 
SuspendThread掛起線程

GetThreadContext保存線程的上下文

第二次WriteProcessMemory往svchost.exe中地址170000的內存寫入數據,寫入的數據內容在55F214地址上。

執行完后觀察svchost.exe 0x170000已寫入惡意代碼

通過SetThreadContext設置svchost.exe線程上下文去執行shellcode

恢復svchost.exe線程繼續執行,隨后dll結束進程。

三、Svchost.exe內存代碼分析
將EIP設置180000處的,加載shellcode進行調試

VirtualAlloc申請內存

申請的內存為AB0000,解密數據放到申請的內存當中

使用VirtualProtect函數讓地址AB0000有可執行的權限。

通過call eax去執行解密后的shellcode

解密請求頭

這里選擇不跳轉
看到堆棧情況有C&C和請求頭,很明顯是作為參數去調用跟進去看。

設置 Internet 選項

使用InternetOpenA請求C2:185.225.19[.]22


最后通過微步發現C&C是屬于海蓮花APT黑客組織的。 