如何將惡意軟體修改為非惡意
譯者:blueSky
預估稿費:200RMB
投稿方式:傳送郵件至linwei#360.cn,或登陸網頁版線上投稿
前言
隨著越來越多的網路攻擊、資料庫漏洞、間諜軟體以及敲詐軟體頻繁的出現在新聞頭條上,每家商業公司也開始在其企業網中部署安全產品。一般地,他們往往會投入人力物力來制定適合自己公司的資訊保安策略以及尋找最佳的解決方案來對付這些網路攻擊行為。
最近,我們發現一種新的令人震驚的繞過殺軟的方法,該方法允許任何已知的惡意軟體繞過最常見的安全解決方案,例如下一代防病毒軟體,安全檢測工具以及反勒索改軟體等。這種技術被稱為Bashware,該技術在實現上利用了Windows 10系統上一個新的、稱為Subsystem for Linux(WSL)的功能,此新功能可以使Windows作業系統使用者使用流行的bash終端,而且該功能還可以使Windows使用者在本機作業系統上執行Linux作業系統的可執行檔案。該功能能夠允許Linux和Windows系統中的程序在同一時間執行,由於現有的安全解決方案還不能夠監視在Windows作業系統上執行的Linux可執行檔案的程序,因此該技術可能為那些希望執行惡意程式碼的網路犯罪分子提供了便利,他們可以利用WSL來繞過尚未整合正確檢測機制的安全產品。
觀看攻擊演示:
https://youtu.be/fwEQFMbHIV8
Bashware是一個非常令人震驚的技術,任何惡意軟體利用WSL機制都可以很容易的繞過安全產品。我們在大多數知名的防病毒和安全產品上測試了這種技術,並使用該技術成功地繞過了上述所有的安全產品,由此可見Bashware對全球目前執行的4億臺Windows 10 PC 的影響還是很大的。在發現該技術之後,我們立馬更新了我們的SandBlast威脅防護解決方案,以保護我們的客戶免受Bashware的攻擊。因此安全同行們也應立即採取行動並修改其安全解決方案,以防止這種網路攻擊的新方法。
Bashware技術在實現上利用了Windows Subsystem for Linux(WSL)的底層機制,該功能是Windows 10系統中的一個新功能,允許本機Linux ELF二進位制檔案在Windows上執行。在正式介紹Bashware的細節之前,我們首先回顧一下WSL的內部原理。
WSL概述
Windows Subsystem for Linux(簡稱WSL,如圖1所示)是一個為在Windows 10上能夠原生執行Linux二進位制可執行檔案(ELF格式)的相容層,該相容層包含了使用者模式和核心模式,可用於執行Linux二進位制可執行檔案,而無需啟動任何的虛擬機器。
Microsoft打算實現一種在隔離環境中以低開銷執行應用程式的方法來在單個程序的使用者模式地址空間內執行目標應用程式和作業系統。為了達到這個目的,Microsoft在Windows 10系統中引入了Pico程序,該程序是允許在Windows作業系統上執行ELF二進位制檔案的容器,這些新引進的程序在結構上往往是比較小的,缺少Windows NT程序(PEB,TEB,NTDLL等)中常見的結構塊。通過將未修改的Linux二進位制檔案放在Pico程序中,WSL可以將Linux系統中的呼叫引導到Windows核心,lxss.sys和lxcore.sys驅動程式將Linux系統呼叫轉換為NT APIs並模擬Linux核心。
WSL概念最初是在Astoria專案和Drawbridge專案中才開始出現,目的是想在Windows系統上執行原生的Android應用程式。在WSL的初始版本中發現多個問題後,Microsoft決定以beta模式提供此專案,並在其GitHub頁面上新增技術支援板塊,以收集社羣中發現的實時問題。在修復了社羣提出的大多數問題並達到一個穩定的版本之後,微軟正式在2017年7月28日釋出了WSL。雖然WSL已經成為一個穩定的功能,其許多問題現在也得到了解決,但似乎行業仍然沒有適應這種允許Linux和Windows系統中的程序在同一時間執行的這個奇怪想法。並且這在一定程度上為那些希望執行惡意程式碼的網路犯罪分子提供了便利,他們可以利用WSL功能來繞過尚未整合正確檢測機制的安全產品。有關WSL元件的詳細資訊請參見“附錄A”。
Bashware
Bashware是一種通用和跨平臺技術,該技術在實現上利用了WSL,使得惡意軟體能夠以隱藏的方式執行,從而繞過當前大多數安全產品的檢測。該技術的關鍵在於Pico程序結構的設計,雖然Pico程序與常見的Windows程序特徵不同,甚至該程序沒有任何特徵可以將其標識為一個常見的NT程序,但是Pico程序卻具有與常見NT程序相同的功能,並且不會造成任何的威脅。下面我們將從4個步驟來介紹Bashware是如何載入惡意軟體payloads的,如下圖所示:
步驟1:載入WSL元件
為了利用WSL,Bashware必須首先驗證WSL功能是否已經啟用,該操作是通過檢查Pico驅動程式的狀態來實現的(檢查lxcore.sys和lxss.sys是否存在於Windows驅動程式的路徑中)。在功能被禁用的情況下,Bashware將使用DISM程式來載入驅動程式。這種方法是最簡單的,也不會引起任何安全軟體的懷疑。在載入WSL元件之後,Bashware將會進入下一步操作。
步驟2:啟用開發者模式
只有啟用了開發者模式才可以使用WSL元件功能,進入開發者模式需要設定以下這些登錄檔項:
HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/AppModelUnlock/AllowAllTrustedApps
HKLM/SOFTWARE/Microsoft/Windows/CurrentVersion/AppModelUnlock/AllowDevelopmentWithoutDevLicense
雖然這些值由TrustedInstaller設定,但也可以由任何擁有管理員許可權的使用者(或應用程式)完成設定。由於機器系統或任何高階安全檢查沒有驗證這些是否被修改,因此Bashware可以通過開啟並使用這些登錄檔項,以執行惡意軟體的payloads,一旦Bashware的操作完成,登錄檔項將會被關閉,使得這個操作對使用者而言實際上是不可見的。
步驟3:安裝Linux
雖然Bashware現在啟用了WSL並進入開發者模式,但Linux例項仍然不包含任何的檔案系統。因此,Bashware的下一步是從Microsoft的伺服器下載並解壓縮Linux檔案系統。正常情況下,使用者可以使用“Lxrun”命令列程式來下載linux檔案系統(Ubuntu 16.04),並使用/install選項將檔案系統安裝到在Windows PC上。Bashware利用Lxrun.exe程式從Microsoft伺服器下載Linux檔案系統並將其安裝到Windows系統上,整個操作看似都是合法的。有趣的是,根據我們的研究發現這個安裝過程在某種條件下容易受到網路攻擊,這部分內容我們會在下面的內容中進行闡述。
步驟4:Wine
現在,Bashware已經在Windows系統上建立了一個完整的Linux環境,並且能夠在兩個環境中執行任何操作,下一步該怎麼辦?我們的最終目的是:儘管惡意軟體不是跨平臺的,我們也可以從Linux程式中執行惡意軟體來攻擊Windows系統。經過分析和研究,我們發現Winehq專案是一個完美的解決方案,該專案是一個免費的開源相容層,可以允許Microsoft Windows程式在類Unix作業系統上執行。對於那些不熟悉它的人來說,Wine不是一個模擬器,而是將Windows API呼叫轉換成POSIX(Portable Operating System Interface)。這正是我們所需要的,因為使用Wine可以在WSL環境中靜默執行Windows惡意軟體。Bashware使用Winehq專案功能,並將優化後的Wine專案安裝到WSL Linux環境中。
接下來,Wine對EXE格式的檔案進行轉換,將其NT系統呼叫轉換為POSIX系統呼叫。之後,lxcore.sys驅動程式會將這些POSIX系統呼叫轉換到NT系統呼叫,並將lxcore轉換為此程序的實際呼叫者。這樣一來,在Windows作業系統上執行的檔案就可以在Linux作業系統執行任何惡意軟體的payloads,並繞過大多數安全產品的檢測。
結論
隨著“Bashware”完成了上述四個步驟,它成為執行任何惡意軟體,繞過最常見的防病毒安全產品、安全檢測工具,除錯工具等的完美工具。
基於我們的研究發現,Bashware並沒有利用WSL設計中的任何邏輯或實現上的漏洞。事實上,WSL的功能設計的很好。而導致Bashware可以執行任意惡意軟體的原因主要有以下兩個方面:一是在Windows作業系統中這是一種相對較新的技術;二是各種安全廠商缺乏對該技術進行檢測的意識。我們認為,安全廠商應該要行動起來了,在支援這項至關重要的新技術的同時也要想法設法去阻止諸如Bashware這樣的網路威脅。
Microsoft已採取措施,協助安全廠商處理由WSL引入的新的安全問題,例如Microsoft提供了Pico APIs,這些API介面可由AV公司呼叫以用來對這些型別的程序進行監控。
進一步分析
在WSL的安裝過程中, LxRun.exe程式負責從Microsoft伺服器上下載和解壓縮Linux檔案系統。之後,檔案系統被命名為lxss.tar.gz,並儲存在%APPDAT%目錄下的隱藏資料夾中。在獲取到檔案系統的壓縮包之後,LxRun.exe將其解壓縮到同一目錄中。解壓後的資料夾中包含了完整的Linux檔案系統,WSL和Bash.exe稍後會使用該檔案系統。
雖然微軟已經花了很大的努力來保護Linux檔案系統本身,例如防止Linux初始化被篡改,防範常見的注入技術等安全保護,但檔案系統本身的保護機制呢?
根據我們的研究和分析發現Linux檔案系統在安裝過程中是存在安全隱患的,如果攻擊者在下載後(在提取檔案系統壓縮包之前)修改檔案系統的壓縮包,由於系統不會對檔案系統的真實性進行檢查。因此,它允許攻擊者完全更改檔案系統並載入任何Linux檔案系統。
與實現此技術相關的主要問題是識別存檔被解壓的確切時間。幸運的是,對於我們來說,微軟為下載的檔案系統計算出了一個SHA256值,該值在下載過程完成之後(解壓檔案之前)被儲存到一個檔案中。但是,這個SHA256雜湊值除了用於識別檔案系統的壓縮包是何時被解壓之外,並沒有其他用途。
當使用者希望使用WSL時,他會執行“Bash.exe”,該程式是在使用者許可權下執行的。在每個執行的WSL中,NTFS分割槽會被自動掛載到Linux環境中的/mnt中,從而被授予從WSL內讀寫和執行NTFS的能力,具體如下圖所示:
如果一個網路攻擊者利用管理員許可權啟動了Bash.exe程式,那麼Bash.exe 以及其子程序都將以管理員的許可權來執行,這樣在Windows系統中,網路攻擊者就可以輕易的繞過UAC,而在Linux系統端,網路攻擊者可以通過提取操作以擁有超級管理員的許可權,具體如下圖所示:
參考文獻
1. Official Microsoft's Blog and GitHub on WSL:
https://blogs.msdn.microsoft.com/wsl
https://github.com/Microsoft/BashOnWindows
2. Alex Ionescu's repository on GitHub:
https://github.com/ionescu007/lxss – Dedicated to research, code, and various studies of the Windows Subsystem for Linux used as great source of information and inspiration for this project.
3. Wine project – a free open-sourcecompatibility layer that allows Microsoft Windows programs to run on Unix-like operating systems. https://www.winehq.org/