逃避手段再開花——從一個能逃避AppLocker和AMSI檢測的Office文檔講起
幾天前,Cybaze-Yoroi ZLAB團隊遇到了一個十分“異類”的Office文檔,它當中包含的一些特性引起了研究人員的興趣。文檔中攜帶的payload能繞過Microsoft現今一些高級別的安全機制,如AppLocker(應用程序控制策略),或是較新版本的防惡意軟件掃描接口AMSI——這是一個與供應商無關的安全接口,可以對運行的腳本、宏代碼甚至內存塊進行反病毒控制,旨在解決混淆和無文件威脅。
因此,Cybaze-Yoroi ZLAB決定對檢測樣本進行更進一步的分析。
技術分析
表1.樣本信息
初始文檔界面如下圖所示,表面上是提示用戶啟用宏以顯示文檔的實際內容,實際上感染鏈已在后臺悄悄啟動。
圖1.初始文檔界面
幾秒鐘后,將顯示一個彈出窗口,提示文檔解密失敗,然后自動關閉Word文檔。
此時,不知情的受害者可能認為文檔有問題,什么都沒有發生,但實際上惡意軟件已經在秘密潛入的過程中了。仔細看,會注意到文檔左側小框中的可疑字符塊:
圖2.彈出窗口
圖3.放大后的字符串
名為“Kplkaaaaaaaz”的框中包含一個base64編碼的payload,由宏執行提取并分配給“dopzekaoooooooo”變量,它將用于填充下一階段的bat文件。這種將部分payload放置在Word Label或單元格對象中的技術,能隱藏代碼并將更多代碼直接嵌入攻擊向量中,從而降低被檢測的風險。
此外,惡意軟件采用了一種逃避技術來確定它是否在沙箱環境中執行。它會檢查機器的域名是否與計算機的名稱相同,如果此條件成立,則先前的“Kplkaaaaaaaz”變量將設置為以下文字:“此文檔中已包含VBA。”,并讓感染鏈停止。此項技術可以繞過所有主要的沙箱服務,如Any.run和Hybrid Analysis。
圖4.混淆的宏代碼
在反混淆階段之后,惡意軟件的行為將顯現。“%temp%\ errors.bat”腳本中包含了需要執行的下一個操作,并由存儲在%appdata%文件夾中的“cmd.exe”副本執行,該副本名為“msutil.exe”。
圖5.反混淆的宏函數
上面的代碼是彈出窗口的指令(圖2),這是一個簡單的Visual Basic MsgBox。與大多數惡意軟件不同之處在于,該惡意軟件使用了另一種技術在文檔打開時自動啟動宏代碼:它不使用Workbook_Open或Auto_Open函數,而是利用Word InkEdit對象來調用InkEdit1_GotFocus函數,該函數會在InkEdit1(圖1)顯示時立即生效。
“errors.bat”文件中包含一個Base64編碼的powershell腳本,它能關閉初始Word文檔的進程并將原文件從文件系統中刪除。而該腳本對系統上可用的內存量的檢測則展示了另一種規避技術——如果檢測到可用內存小于1 GB,則惡意軟件會終止執行并刪除所有感染痕跡。
圖6.啟動宏的函數
圖7.“errors.bat”文件中的Powershell代碼
對可用內存的檢查是通過CIM(公共信息模型)服務器實例完成的。奇怪的是,此cmdlet的返回值被分配給名為“diskSizeGB”的變量,即使該函數返回的是可用RAM的數量而不是磁盤的數量(這可能是作者犯的錯誤)。
在評估了前面的條件之后,BAT文件會繼續設置一個新的注冊表項,以受害者的用戶名命名,并在其中存儲一個隨機值。
隨機值是創建新的TXT文件所必需的,該文件將填充base64的payload。 然后使用“certutil”Windows實用程序解碼文件內容,最后使用以下指令執行:
start /b regsvr32 /u /n /s /i:%appdata%\9711.txt scrobj.dll
圖8.惡意軟件設置的RegKey
這種技術被稱為“Squiblydoo”,它能繞過Windows AppLocker。AppLocker是微軟Windows 7操作系統引入的應用程序白名單技術,可以限制用戶可以通過組策略執行哪些程序,就好比企業管理員可以在企業域的每臺機器上禁用腳本執行。因此,使用該技術可以啟動任何腳本。
繞過技術的基本部分是“scrobj.dll”,屬于Windows Utility DLL。它能夠使用腳本語言(如VBScript和JScript)創建COM組件。而圖8中的“9711.txt”則是能生成新的COM對象的腳本文件,它能使用“regsvr32”實用程序進行注冊。