惡意軟件利用API Hammering 技術規避沙盒檢測
研究人員在最近發現的 Zloader 和 BazarLoader 樣本中發現了沙盒規避技術 API Hammering 的新實現。攻擊者將 API Hammering 對 Windows API 的大量調用作為休眠的一種實現形式,用以規避沙盒檢測。
惡意軟件休眠形式
惡意軟件最簡單的休眠方式就是調用 Windows API Sleep,另一種較為隱蔽的方式是 ping sleep 技術,惡意軟件會在循環中不斷將 ICMP 數據包發送到指定的 IP 地址,發送和接收這些無用的 ping 消息需要一定的時間,惡意軟件會間接實現休眠。這兩種方法都已經很容易被沙盒檢測出來。
什么是 API Hammering?
API Hammering 也是一種已知的沙盒規避技術,研究人員最近發現 Zloader 與 BazarLoader 都使用了新的 API Hammering 技術來保持隱蔽。
API Hammering 會大量調用無用的 Windows API 函數,這些調用執行的時間就會延遲惡意軟件實際功能的執行,這也間接實現了休眠功能。
BazarLoader 中的 API Hammering
BazarLoader 的舊變種會使用固定的 1550 個 printf 函數調用來實現休眠,而在新版本中有了更加復雜的實現。
如下所示為新的 BazarLoader 樣本是如何實現休眠的,其利用了一個隨機計數的循環,在循環中不斷重復訪問隨機的 Windows 注冊表項。

△BazarLoader 實現
為了生成隨機循環與注冊表項,樣本文件會從 System32 目錄讀取與預定義大小匹配的首個文件。如下所示,并對文件進行編碼以刪除其中大部分空字節,根據該文件的第一個空字節的偏移量計算用于控制循環的隨機數。注冊表項的列表是通過編碼文件的固定長度塊生成的。

△BazarLoader 編碼
對于不同版本的 Windows 操作系統以及不同補丁的小版本,System32 目錄中有不同的文件,這也導致了 BazarLoader 在不同機器上會執行不同的循環次數與訪問不同的注冊表項。
如下所示,BazarLoader 的 API Hammering 函數包含在加殼程序中。這會延遲 Payload 的脫殼過程來躲避檢測,如果脫殼未能完成,看起來 BazarLoader 樣本只是在隨機訪問注冊表而已,這種行為很多良性軟件中也會存在。

△延遲脫殼
Zloader中的API Hammering
BazarLoader 的樣本依賴循環實現 API Hammering,但 Zloader 不依賴循環而是使用四個大函數來實現的,其中包含非常多較小函數的嵌套調用,如下所示。

△Zloader 大函數
每個較小的函數內部都包含四個與文件 I/O 相關的 API 函數調用,為 GetFileAttributesW、ReadFile、CreateFileW 和 WriteFile。

△Zloader 小函數
通過調試器可以計算出對四個文件 I/O 函數的調用次數,如下所示。樣本一共會調用超過一百萬次 API,而無需 BazarLoader 實現的單個大循環。

△調試日志
統計如下所示:

△API調試統計
四個大函數的執行時間很長,大大延遲了 Zloader Payload 的注入行為。如果沒有完整地執行完這些函數,該樣本看起來就只是一個執行文件 I/O 的良性樣本。
以下反匯編代碼顯示了 API Hammering 的過程:

△注入行為之前
結論
惡意軟件為了規避沙盒檢測使用了各種各樣的方法,API Hammering 不會是最后一個,以后也會有各種各樣的變種。
IOC
ce5ee2fd8aa4acda24baf6221b5de66220172da0eb312705936adc5b164cc052
44ede6e1b9be1c013f13d82645f7a9cff7d92b267778f19b46aa5c1f7fa3c10b
參考來源
https://unit42.paloaltonetworks.com/api-hammering-malware-families/