2019年3月,一個新的惡意軟體樣本被上傳到流行的線上掃描服務網站VirusTotal。 macOS OceanLotus網路犯罪組織。此後門可執行檔與我們先前研究過的惡意軟體版本具有相同的功能。 macOS但它的結構發生了變化,變得更難檢測。遺憾的是,我們未能找到與該樣本相關的滴管,因此我們目前尚不清楚感染途徑。
我們最近發布了 以及營運商如何努力確保持久性、加快程式碼執行速度並最大限度地減少在系統中留下的痕跡。 Windows另據了解,該網路組織還包含一個用於…的組成部分。 macOS本文詳細介紹了最新版本惡意軟體的變更。 macOS 與先前的版本相比(),也介紹如何在分析過程中使用 IDA Hex-Rays API 自動解密字串。

分析
接下來的三部分描述了使用 SHA-1 雜湊對樣本的分析 E615632C9998E4D3E5ACD8851864ED09B02C77D2。 該檔案名為 手電筒d,ESET防毒產品將其偵測為OSX/OceanLotus.D。
反調試和沙箱保護
和大家一樣 macOSOceanLotus 二進位檔案樣本使用 UPX 打包,但大多數打包辨識工具無法辨識。這可能是因為它們大多包含依賴於“UPX”字串的特徵碼。此外,Mach-O 特徵碼較不常見,更新頻率也較低。這項特性使得靜態偵測變得困難。有趣的是,解包後,入口點位於該段的開頭。 __cfstring 在該段中 .TEXT。 此部分具有標誌屬性,如下圖所示。

圖 1. MACH-O __cfstring 節屬性
如圖2所示,該部分的程式碼位置 __cfstring 允許您透過將程式碼顯示為字串來欺騙某些反彙編工具。

圖 2. IDA 偵測到的後門代碼作為數據
執行後,二進位檔案將創建一個執行緒作為反偵錯器,其唯一目的是不斷檢查偵錯器是否存在。 對於此流程:
— 嘗試取消任何調試器,調用 ptrace с PT_DENY_ATTACH 作為請求參數
- 透過呼叫函數檢查某些獨佔埠是否開啟 task_get_exception_ports
- 透過檢查標誌是否存在來檢查偵錯器是否已連接,如下圖所示 P_TRACED 在目前流程中

圖 3. 使用 sysctl 函數檢查偵錯器連接
如果看門狗偵測到偵錯器的存在,則呼叫該函數 exit。 此外,該範例還透過執行兩個命令來檢查環境:
ioreg -l | grep -e "Manufacturer" и sysctl hw.model
然後,此範例根據已知虛擬化系統的硬編碼字串清單檢查傳回值: 阿克萊, VMware的, VirtualBox的 或 相似之處。 最後,下一個指令檢查機器是否是以下「MBP」、「MBA」、「MB」、「MM」、「IM」、「MP」和「XS」之一。 這些是系統型號代碼,例如,「MBP」表示 MacBook Pro,「MBA」表示 MacBook Air 等。
system_profiler SPHardwareDataType 2>/dev/null | awk '/Boot ROM Version/ {split($0, line, ":");printf("%s", line[2]);}
基本補充
雖然自趨勢科技研究以來後門命令沒有發生變化,但我們確實注意到了一些其他修改。 此範例中使用的 C&C 伺服器相當新,已建立於 22.10.2018 年 XNUMX 月 XNUMX 日。
daff.faybilodeau[.]com
sarc.onteagleroad[.]com
au.charlineopkesston[.]com
資源 URL 已變更為 /dp/B074WC4NHW/ref=gbps_img_m-9_62c3_750e6b35.
發送到C&C伺服器的第一個資料包包含有關主機的更多信息,包括下表中的命令收集的所有資料。

除了此組態變更之外,此範例未使用網路過濾庫 ,但是一個外部函式庫。 為了找到它,後門嘗試使用 AES-256-CBC 和金鑰來解密目前目錄中的每個文件 gFjMXBgyXWULmVVVzyxy,用零填滿。 每個文件都被解密並保存為 /tmp/store,並嘗試使用該函數將其作為庫加載 。 當解密嘗試導致呼叫成功時 dlopen,後門提取導出函數 Boriry и ChadylonV,它們顯然負責與伺服器的網路通訊。 我們沒有來自範例原始位置的滴管或其他文件,因此我們無法解析該庫。 此外,由於該元件已加密,因此基於這些字串的 YARA 規則將與磁碟上找到的檔案不符。
正如上面文章中所描述的,它創建了 客戶端ID。 此 ID 是以下命令之一的回傳值的 MD5 雜湊值:
ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformSerialNumber/ { split($0, line, """); printf("%s", line[4]); }'
ioreg -rd1 -c IOPlatformExpertDevice | awk '/IOPlatformUUID/ { split($0, line, """); printf("%s", line[4]); }'
ifconfig en0 | awk '/ether /{print $2}' (取得MAC位址)
- 未知團隊(“x1ex72x0a"),在先前的範例中使用過
在散列之前,會在傳回值中新增「0」或「1」以指示 root 權限。 這 clientID的 儲存在 /Library/Storage/File System/HFS/25cf5d02-e50b-4288-870a-528d56c3cf6e/pivtoken.appex,如果程式碼以 root 身分運行,或在所有其他情況下在 ~/Library/SmartCardsServices/Technology/PlugIns/drivers/snippets.ecgML 中運行。 該檔案通常使用該功能隱藏 ,使用命令更改其時間戳 touch –t 具有隨機值。
解碼字串
與先前的選項一樣,字串使用 AES-256-CBC 進行加密(十六進位金鑰: 9D7274AD7BCEF0DED29BDBB428C251DF8B350B92 用零填充,IV 用零填充)通過函數 。 金鑰與先前的版本相比有所變化,但由於該群組仍然使用相同的字串加密演算法,因此可以自動解密。 除了這篇文章之外,我們還發布了一個 IDA 腳本,該腳本使用 Hex-Rays API 來解密二進位檔案中存在的字串。 該腳本可能有助於將來對 OceanLotus 的分析以及對我們尚未獲得的現有樣本的分析。 該腳本基於接收傳遞給函數的參數的通用方法。 此外,它還會尋找參數分配。 可以重複使用此方法來取得函數參數列表,然後將其傳遞給回呼。
了解函數原型 解碼,腳本找到該函數的所有交叉引用、所有參數,然後解密資料並將純文字放置在交叉引用地址的註釋中。 為了使腳本正常運作,必須將其設定為 Base64 解碼函數使用的自訂字母表,並且必須定義一個包含密鑰長度的全域變數(在本例中為 DWORD,請參見圖 4)。

圖 4. 全域變數 key_len 的定義
在“函數”視窗中,您可以右鍵單擊解密函數,然後按一下“提取並解密參數”。 該腳本應將解密的行放在註解中,如圖 5 所示。

圖 5. 解密後的文字放在評論中
這樣解密後的字串就可以方便地放在 IDA 視窗中 外部參照 函數如圖 6 所示。

圖 6. f_decrypt 函數的外部引用
最終腳本可以在以下位置找到 .
產量
正如已經提到的,OceanLotus 正在不斷改進和更新其工具包。 這次,該網路組織改進了惡意軟體,使其能夠與 Mac 用戶配合使用。 程式碼沒有太大變化,但由於許多 Mac 用戶忽略了安全產品,因此保護惡意軟體免於偵測是次要的。
ESET 產品在研究時已偵測到此檔案。 由於用於 C&C 通訊的網路庫現在已在磁碟上加密,因此攻擊者使用的確切網路協定尚不清楚。
妥協指標
妥協指標以及 MITRE ATT&CK 屬性也可在 .
來源: www.habr.com
