安全文库

【技術分享】重磅!一種惡意軟體繞過殺軟的新方法


【技術分享】重磅!一種惡意軟體繞過殺軟的新方法

blueSky

【技術分享】重磅!一種惡意軟體繞過殺軟的新方法

譯者: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 systemshttps://www.winehq.org/


【技術分享】重磅!一種惡意軟體繞過殺軟的新方法 【技術分享】重磅!一種惡意軟體繞過殺軟的新方法

本文由 安全客 翻譯,轉載請註明「轉自安全客」,並附上鏈接。
原文鏈接:https://research.checkpoint.com/beware-bashware-new-method-malware-bypass-security-solutions