圖片來源: 

臺灣資安大會

縱觀全球大型資安會議,除了匯集專家來探討攻擊、防禦、管理相關議題,能否在此公開揭露資安弱點與概念驗證攻擊手法,也是重要指標,而在今年的臺灣資安大會,首度設立了「漏洞研究室」系列論壇,匯集各方資安好手,前來深入剖析未來值得關注的資安漏洞。

而在這系列的活動中,我們看到IBM 軟體工程師陳孝勇首度公開他發現的Blind SSRF漏洞,出現在眾所皆知的協同作業平臺Slack,在進行X-Forwarded-For處理時有可乘之機,預計將會在漏洞懸賞平臺HackOne公開更多細節;TXOne Networks 資安威脅研究員馬聖豪發表了兩項全新概念驗證攻擊手法,可用於Windows相容32位元應用程式的WoW64(Windows-on-Windows 64-bit)架構,無論是Windows 7到Windows 8的WoW64,或Windows 8.1以後,以及現今Windows 10的WoW64,皆能適用,此外,現行內建輕量主動式防禦機制的防毒軟體,可能也將因此無法檢測出這類異常行為。

關於這個主題與兩個攻擊手法,馬聖豪會在5月27日的HITB資安大會(Hack In The Box Security Conference)提出更完整的說明。

WoW64濫用非新聞,微軟雖在後續更新改變Win系統記憶體配置,但仍有可乘之機

透過在32位元處理程序中執行64位元程式碼,企圖繞過防毒軟體偵測來傳遞惡意軟體的手法,資安界稱為「Heaven’s Gate(天堂之門)」,在2000年代中期被公開揭露,之後這些被用於多個惡意攻擊當中。不過,這個問題到了Windows 8.1之後,隨著微軟更動了WoW64的記憶體配置,使得先前陸續被揭露的這類攻擊手法不敷使用,等於這座「天堂之門」形同被毀,

而馬聖豪(aaaddress1/adr)在研究所有相關研究之後,重新提出不同於以往的迴避偵測方式,也因此,他將在臺灣資安大會發表的演講,定名為「重建天堂之門:從 32bit 地獄一路打回天堂聖地」,在HITB大會則取名為「WoW Hell: Rebuilding Heavens Gate」,而兩支概念驗證攻擊程式,則取名為天堂聖杯(wowGrail),以及天堂注入器(wowInjector)

關於天堂之門手法的研究,目前主要有5個文獻可供參考,為了讓大家了解這個手法的運作方式,馬聖豪主要引用的內容,是2020年11月由資安廠商FireEye發表的部落格文章,名為〈WOW64!Hooks: WOW64 Subsystem Internals and Hooking Techniques〉,用其解釋何謂32位元地獄與天堂之門。

WoW64架構會載入32位元與64位元等兩種ntdll模組,ntdll會執行NtResumeThread函數,而這個函數會呼叫Wow64SystemServiceCall,接著執行Wow64Transition,最後以KiFastSystemCall完成32位元與64位元的過渡。不過,早期這樣的分段切換,是以手動方式執行,而且64位元shellcode可被寫入,用來設定syscall。

隨著防毒軟體主動式防禦機制的普及,若惡意軟體想在Windows的32位元執行環境、亦即4GB以內的記憶體進行掛機(hooks),而不被察覺,可說是相當困難,或許,也因此,使得32位元版Windows執行環境被比喻成「地獄(Hell)」。

不過,相對於Win32動輒得咎,若是經由WoW64的轉換,就能把32位元Windows程式的系統中斷請求,翻譯成64位元的系統中斷請求,此時,即可執行到原生的NtResumeThread程式碼,能讓WoW64層使用的32位元syscall stub段落,直接執行64位元的syscall stub,完全跳過整個應用程式的執行鏈。而且,這麼一來,這勢必會嚴重影響資安產品或是追蹤工具的檢查——因為,這些stub段落的任何就地掛機處理(hooks),都會被略過。

知道與如何運用這種偷天換日作法的惡意軟體作者,也會以此作為旁路,讓惡意軟體以掛機在syscall stub之姿,擺脫32位元可能處處受到掣肘的局限,而以夾帶到64位元Windows環境執行的方式混入系統當中運作,卻不會被防毒軟體偵測到異狀,也因此,這種伎倆被稱為天堂之門。

更甚者,根據馬聖豪運用逆向工程來進行解析的結果來看,「只要有辦法洩漏出 64位元的ntdll記憶體位址,就能無痛直接呼叫」,有心人士能在不經由WOW64架構去呼叫64位元架構的請求碼、不透過微軟提供的「32-64位元翻譯機」函數的狀況下,靠自己的努力找到64位元的函數(ntdll的對應導出函數),並對其直接呼叫,便能直接繞過那些僅針對處理程序記憶體存取進行的監控機制。

事實上,這樣的迴避偵測手法,對於市面上一些強調具有輕量級主動防禦功能的防毒軟體,影響較大,因為這類產品大多數的監控機制,都聚焦在32位元的ntdll函數。馬聖豪表示,輕量級防毒軟體的監控都設置在惡意程式的記憶體存取,它們的hooks僅攔截位於記憶體執行的處理程序所用的系統函數,但並不會掛鉤於整個系統核心(kernel) 中的系統函數,因此惡意軟體若要拔除自身的掛鉤,或是以上述方式繞過防毒軟體的偵測,都是相對容易的;然而,若是防毒軟體可同時涵蓋到系統的掛鉤,惡意軟體就可能無法直接繞過,而較能解決這類攻擊手法。

兩支全新WoW64概念驗證攻擊程式,搶先在臺灣資安大會展示

為了驗證濫用WoW64的新方法是否真能躲過防毒軟體的偵測,馬聖豪分別以兩套防毒軟體,分別驗證wowGrail和wowInjector是否能順利在Windows 10電腦執行。

如何證明兩套防毒軟體的主動式防禦有效?馬聖豪透過預錄影片呈現測試過程與結果,同時,他也在受測Windows電腦上,預先放置了以執行程序掏空手法(process hollowing)著稱的RunPE,以及在PowerShell以WGET指令下載密碼擷取器Mimikatz,作為對照組。

在wowGrail的測試當中,他在Windows命令列提示字元的指令介面執行RunPE.exe,隨即被防毒軟體擋下、並跳出已刪除此檔的警示視窗;接下來,他同樣在命令列提示介面執行wowGrail.exe,結果出現「小算盤」應用程式,接著,他將視窗最大化,可同時顯示另一支名為皮卡丘打排球的遊戲程式竟被默默執行起來,以此證明這項相容機制被濫用、繞過防毒軟體的可能性。

至於wowInjector的測試,他在Windows的指令碼環境PowerShell當中,輸入WGET指令下載Mimikatz,並嘗試執行它,此時,防毒軟體的主動防禦果然發現他正打算執行一支惡意程式, 而且也以紅字警示這是駭客工具包,而予以阻擋。接下來,他執行wowInjector,當中可使用下列幾種手法:

首先是濫用WoW64,洩漏相關的暫存器與Threadcontext記憶體位址,直接控制任何32位元程式的ThreadContext的方法,來執行shellcode;接著執行程序掏空手法,將一個具有彈出式訊息視窗(MessageBox)的應用程式,注入「記事本」應用程式;

他在這支概念驗證程式裡面,也加入「滴管(dropper)」功能,並以此從網路下載Mimikatz,將它注入Windows命令列提示字元的執行檔CMD.EXE,並以系統服務的方式執行Mimikatz,這麼一來,Mimikatz會執行在CMD.EXE裡面,我們無法從工作管理員或Process Explorer看出端倪,而且,在這整個進行的過程當中,防毒軟體的主動防禦完全沒有任何警示,這意味著概念驗證程式成功繞過防毒軟體的監測。


熱門新聞

Advertisement