跳到主要內容區塊

ntuccepaper2019

專題報導

尋找駭客的鳳凰計劃-Web Shell 重生機制研究
  • 卷期:v0057
  • 出版日期:2021-06-20

作者:許凱平 / 計算機及資訊網路中心作業管理組副組長


 

資安不就裝個防毒軟體就好了嗎?有系統被入侵,不就是工程師偷懶才被駭嗎?雖說防禦的技術進展很快,但是,駭客進步更快。幾番折騰後,我們終於理解,資安不能單靠工具、專家與甩鍋,還是要大家一起提升對於什麼是資安的認知。簡而言之,工具可以幫你阻擋絕大部分的惡意軟體,聰明一點的還能理解什麼是惡意行為。就算沒擋下來,工具也可以幫我們更容易梳理前因後果,檢討改進。反過來,駭客也會使用這些工具,找出這些工具的缺點,繞過檢測。道高一尺,魔高一丈,工具有其極限,但善用這些工具可以看到更多更深,普通人也有機會發現資安工具找不到的潛藏惡意程式。

 

前言

在資安領域打滾了數年後,終究會發現一項事實,我們都是希臘神話裡的薛西弗斯:想要將系統推到安全的峰頂,但巨石仍然一次又一次無情地滾下。即使求助資安公司,進行事件調查與系統補強,雖然資安事件的確明顯變少,但仍然會發現被攻破的痕跡。佈防後的常見的資安事件有兩類,一是在更新特徵碼後經由掃描發現的惡意檔案,另一種是惡意行為時的攔截。進行追蹤後,我們發現了兩類的交集就是Web Shell[1]。

 

Web Shell

Web Shell 顧名思義,就是用來對遠端主機下達命令的工具程式(Shell:命令殼層)。這種工具使用的是標準的Web 的技術,只要在伺服器端放置接收命令的程式,就可以接收並執行從任何一種瀏覽器下達的指令。與傳統用透過telnet(需開啟 port 23,預設關閉)來執行Shell的方式相較,更容易穿透防火牆(port 80/443一般都是開放的)。
Web Shell 提供的便利性,可以讓系統管理者不用登入防火牆就可以對所管理的伺服器下達各種指令,當然也就容易被駭客利用來竊取資料、取得系統控制權。Web Shell 的另一個特性是短小易於變造,可以輕易逃過防毒軟體利用特徵值檢測方法。防毒軟體查到的Web Shell,從檔案日期來看,通常都已經存在一段時間,掃描後仍不能保證能找到系統中所有的Web Shell。
除了掃描外,我們也常在追查惡意行為攻擊途徑時才找到Web Shell。要注意的是,防駭軟體在駭客執行高風險指令,例如竊取密碼的時候,才會推論到這個程式是惡意程式。因為在偵測、推論到攔截之間有時間落差,還是存在被攻破的可能性。只能說,至少你知道被駭了,還有機會避免災害跨大。例如駭客執行了複製了密碼,還是可以攔下密碼被送出。沒攔下送出,至少你知道要通知那些人換掉密碼。Web Shell 植入的對象必須有網頁應用程式的執行能力,常見的標的除了Apache、IIS 等Web Server 外,就是Microsoft Exchange[2]。

 

Microsoft Exchange

Microsoft Exchange是微軟開發的郵件伺服器軟體,讓使用者可以透過郵件軟體收發信件,以網頁的方式透過Outlook Web Application元件使用。為什麼駭客會挑選Exchange,因為收發信需要認證,所以Exchange與儲存帳密的Domain Controller必須存在連線。一旦遭植入Web Shell,駭客就能長期進行機密竊取。
據入侵痕跡推測,駭客對於Exchange的內部架構非常清楚,應該對Exchange有長時間的研究。因為有些國家的政府會要求軟體供應商提供原始碼供檢核,我們也很難排除駭客早就駭入政府部門,取得Exchange的原始碼的可能性。

 

Web Shell重生機制的發現

去年 7 月微軟公告 KB4569509 DNS 伺服器弱點CVE-2020-1350[3],攻擊者可無須認證就可遠端執行任意程式碼。在清查DNS的過程中,我們發現了一個假裝是 DNS 的服務。


名稱:DNS Role Server
描述:此服務承載用於 DNS升級、降級和克隆的 DNS角色服務器。如果禁用了此服務,這些操作將失敗。

該程式的專案名稱為 Exchange RCT,猜測應該是專為Exchange開發的Remote Control Toolkit。執行機制如下:

1. 自我排程,每八小時自我喚醒執行一次,無須系統排程。除了減少被系統管理者發現的機會外,這段程式碼也解釋了我們在網路入侵偵測系統的發現:伺服器每八小時問候raw.githubusercontent.com。
2. 從raw.githubusercontent.com網站下載 payload,github是版本控制的原始碼代管服務平台,2018 年被微軟收購,一般不會被視為惡意網站。
3. Payload 以AES加密,解密後可以看到內容分成switch、file_path_name 與 file_content 三個部分。如果switch 為on,該程式就會根據file_path_name在指定的目錄以file_content建立檔案。
4. 副檔名為aspx,檔案內容為Web Shell。
5. 該Web Shell因為又做了編碼,所以可以躲過防駭軟體的特徵偵測。
6. Github有版本控制的功能,所以駭客可以透過更版的方式,在相同的網址置入不同的內容。該專案在Github共有五個版本,file_content都一樣,猜測因為各大掃毒程式都掃不到,所以不需更改(上傳到virustotal,58種掃毒程式都是未檢出)。檔案路徑則每個版本都不同;檔名部分,除了shell外,使用premium與 resources與目錄名稱一樣的檔名。最後一個版本的switch為off,猜測應該是駭客知道我們發現了Web Shell,就進行蜇伏,讓管理者以為已經處理完剩餘風險,避免重生機制被發現。

Web Shell的放置路徑與檔案名稱

7. 設定Web Shell的建立時間與修改時間,改成與 logon.aspx檔案相同,logon.aspx的完整路徑如下。
E:\microsoft\exchange server\frontend\httpproxy\owa\auth\logon.aspx


圖表 1 Payload


圖表 2 Obfuscation Web Shell Content

 

建議

1. 檢查伺服器是否有對預期之外的網域名稱進行查詢,例如raw.githubusercontent.com。
2. 檢查系統服務是否有不明的服務
3. 檢查所管理的Exchange伺服器,是否有以上的檔案
4. 檢查與logon.aspx一樣的建立時間與修改時間的檔案

 

進階駭客行為?

這個重生機制可以逃過資安工具與專家的檢測,我們也是碰巧在處理安全漏洞時發現的。早期我們碰到的惡意軟體與駭客,幾乎都是用現成的套件,所以無論用檔案或行為的特徵值,都可以偵測出來。資安專家會針對駭客行為擬定對策了,駭客當然也會針對資安專家的對策擬定對策。駭客投入心血找漏洞,但這些漏洞終究也會被別人發現。一旦被堵上,之前努力就成了一場空。駭客取得系統控制權後,雖然可以加特權帳號,但加帳號太容易被發現了,不如放不容易被發現的Web Shell。最終Web Shell還是有可能被發現,因此駭客更進一步地擬定重生計畫,深埋於系統服務中,伺機重生。

 

結語

資安不是個結果,而是個沒有盡頭的過程。長期關注資安議題,善用防駭軟體,一個普通的系統管理者,還是有機會找到資安工具與資安專家也找不到的惡意軟體。

 

參考資料

[1] Web Shells
https://en.wikipedia.org/wiki/Web_shell
[2] Microsoft Exchange Server
https://en.wikipedia.org/wiki/Microsoft_Exchange_Server
[3] 漏洞警訊公告,微軟Windows DNS伺服器存在安全漏洞(CVE-2020-1350),
https://www.nccst.nat.gov.tw/VulnerabilityDetail?lang=zh&seq=1130
[4] Virus total
https://www.virustotal.com/gui/file/59f9305651f8ba54458414e32b9aea07690917d46ee0887bccd84b8747de149d/detection