淺談Windows 10中藏著的那個Linux
早在去年8月份,eWEEK曾經發表過一篇文章,題為《藏於Windows 10之中Linux內核風險》。我覺得這個話題還是挺有意思的,這裡將這篇文章與列位分享。
早在去年8月份,eWEEK曾經發表過一篇文章,題為《藏於Windows 10之中Linux內核風險》。這篇文章實際上是對Crowdstrike首席架構師Alex Ionescu在去年Black Hat USA安全大會上發言的簡單總結。我覺得這個話題還是挺有意思的,我在去年Black Hat USA的總結文章中也提到了這個議題,不過可惜未能親臨現場聽教,這裡將這篇文章添油加醋後與列位分享,僅停留在理論和嘴炮上,但可作為各位深入研究的切入點。
Windows 10中的Linux
微軟去年3月份在Build大會上宣布「將Ubuntu Linux的一些能力帶給微軟用戶」。其實最初Windows 10系統中引入Bash就已經讓不少人感覺到驚訝了(Bash on Ubuntu on Windows),不過Bash對很多人來講也是福音,比如能運行GUI Linux應用了。但實際情況還不止於此,微軟去年其實已經向大眾明確解釋了Windows 10中的Linux子系統。
這裡多嘴一句,似乎在納德拉成為微軟CEO之後,其行事風格已經發生了極大轉變,擁抱Linux不過是其中一個事件罷了——且擁抱Linux這件事並不只是通過在Windows中塞個Linux實現的,似乎前兩年微軟在培訓體系中已經增加了更多針對Linux工程師的聯合認證,而且是和Linux基金會合作的。
微軟首席軟體架構負責人Deepu Thomas說,其中Linux子系統就是微軟Windows Kernel團隊打造的,而且絕不只是加個解釋層或虛擬機。據說這個Windows Subsystem for Linux幾年前就已經誕生了,針對的是NT內核,彼時是期望以此支持POSIX和OS/2。
Thomas說這是用戶模式(或者叫用戶態,user mode)Linux二進位代碼和Windows內核組件之間,」the magic happens」。微軟令Linux系統調用能夠直接往Windows內核,Pico進程(有關Pico詳情可見Pico Process Overview)中放了未修改版(原話就是未修改版)的Linux二進位程序。他稍稍解釋了Windows Subsystem for Linux(簡稱WSL)的組成:
WSL由一系列組件組成,可讓原生的Linux ELF64二進位程序在Windows之上運行。它包含用戶態和內核態組件。主要組成部分包括:
- 用戶模式管理服務,用於處理Linux實例生命周期;
- Pico Provider驅動(lxss.sys, lxcore.sys),通過解釋Linux系統調用來模擬Linux內核;- Pico進程,放置原版用戶模式Linux(e.g. /bin/bash)
當然了,要將這麼個子系統塞進Windows中,並非一個簡單的進程就能搞定的。
WSL通過在Windows NT內核之上虛擬Linux內核介面,來執行未修改的Linux ELF64二進位程序。內核介面之一就是系統調用(syscall)。系統調用就是內核提供的服務,可從用戶模式調用。Linux內核與Windows NT內核都向用戶模式提供大量系統調用,但兩者語義不同,且並不直接兼容。比如說,Linux內核包括如fork、open、kill之類,而Windows NT內核則相應的有NtCreatProcess、NtOpenFile、NtTerminateProcess。
WSL包含內核模式驅動(lxss.sys和lxcore.sys),這些驅動負責處理Linux系統請求調用與Windows NT內核協調。它們並不包含Linux內核的代碼,而採用Linux兼容內核界面的clean room implementation。在原生Linux中,用戶模式可執行程序進行系統調用時,是由Linux內核處理。而在WSL中,可執行程序進行系統調用,Windows NT內核要將請求轉發給lxcore.sys。lxcore.sys將Linux系統調用解釋為相應的Windows NT調用,後者再依次處理。在沒有合理對應的情況下,Windows內核模式驅動需要直接服務於請求。
感興趣的同學可以點擊這裡作更多了解:Windows Subsystem for Linux Overview
增加的攻擊面
去年的Black Hat USA大會之上,Crowdstrike首席架構師Alex Ionescu做了個議題分享,名字就叫「Windows 10中藏著的Linux內核」。eWEEK後來也對他單獨做了採訪,Ionescu因此分享了更多細節。
他說早在beta測試期間,他就將發現的安全問題反饋給了微軟,某些漏洞已經修復。不過他強調說,現如今的Windows系統令企業組織有了更大的攻擊面,這是企業組織需要去了解的。
Ionescu表示:「在某些情況下,Windows系統中的Linux環境,由於兼容性問題會更不安全。Windows應用有很多方法針對Windows系統中的Linux應用植入代碼、篡改內存,形成新的威脅。」
「這樣一來,你就有了個雙頭猛獸,既能對Linux做些小動作,也能對Windows進行攻擊。」
前面已經提到,Windows系統中的這個Linux並不是運行在Hyper-V虛擬機裡面的,而是運行在原生硬體之上——Ionescu的用詞說可以獲得所有的性能和系統訪問,因此擴大攻擊面是必然的。而且Windows系統文件也對應到Linux系統,Linux訪問相同的文件和路徑。
另外WSL的更新機制也是Ionescu比較關注的——Windows系統中可設定計劃任務,運行Apt-Get Linux命令,針對用戶態作包升級。實際上,微軟並沒有真的用Ubuntu Linux內核,只是用戶空間工具和應用。
「內核是微軟自家的實施方案,通過常規的Windows Update更新機制來更新。」
除此之外,Ionescu提到的問題還包括微軟針對Windows應用的白名單服務AppLocker,對Linux應用而言是沒用的。也就是說,如果某家企業在系統中採用Linux,那麼Linux應用的運行是不會經過AppLocker檢查的。
這裡我也沒有掌握更多的資料可供具體分享(畢竟我向來都是個只在意理論,而對實操毫無興趣的人,具體請看我的另一個專欄:周三特別行動小組)。在攻擊面增加之外,防範方法當然還是要提一下——網路防火牆設備檢查流量還是有效的;另外雖然用戶的傳統反病毒產品可能面對此類問題時不會有什麼效果,但基於行為的安全軟體還是能夠發現IoC。
不過Ionescu認為,這方面的威脅應該短期內不會太嚴重,畢竟當前WSL還很新,也並沒有廣泛部署。「攻擊者一般不會在意最新的事物,畢竟其對市場影響力有限。不過隨著功能採用率的增加,還是可能會成為更具吸引力的攻擊向量。」(最後容我吐槽下,不知道究竟是誰把attack vector最先翻譯成了攻擊向量,小學語文真的是…好了不說了…)
最後的最後,其實我一直很想吐槽微軟近兩年出現的各種短命且奇葩項目,比如說Project Astoria——在Windows 10 Mobile中塞個Android——其實Insider計劃一度是出現過塞進Android的編譯版本的(像追逐iOS的Project Islandwood計劃則更曇花一現了)。是不是感覺跟Win10塞Linux也沒差?這是其它話題了,而微軟的腦迴路近兩年在納德拉的影響下已經越來越曲折,就好像Windows on ARM一樣(高通在Computex大會上已宣布支持完整版Windows)…這節奏是包羅萬象的意思嗎?攻擊面???What…
* 參考來源:微軟,eWEEK, 轉載請註明作者歐陽洋蔥,與出處FreeBuf專欄
推薦閱讀:
※如果沒有Linux,IT業界會是怎樣的現狀?
※遊戲伺服器運維疑惑?
※關於固態硬碟的定址原理和定址速度的一個疑問?
※作為一個機房運維維護人員,對linux的學習多深才算合格??
※PHP在IIS8 Apache Nginx 哪個性能更好?