【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

Editor發表於2017-11-30

看雪編輯按:事物總是不斷向前發展的,Windows系統演變同樣如是。在 Windows 10系統中,微軟引入了許多新的特性和功能,而每一次核心結構調整對研究者來說都是新的挑戰,同時也充滿了機遇。就核心漏洞,除了早已千瘡百孔的 Win32k 外,能走的路還有很多。此次議題是由上海高重資訊科技陸麟帶來的有關 WSL(Windows Subsystem for Linux)的安全研究,其中涉及的內容很是有料,例如與大小寫敏感相關的 0day 等,為此微軟剛在前幾天釋出 Windows 10 build 17046 新版本用於修復 WSL 元件中的一些 bug。相信各位都能從中得到啟發,另外,演講者對於技術的熱愛可謂溢於言表,談笑間也盡顯 Windows 核心大師風采。

以下內容為陸麟演講實錄,由看雪學院(微信公眾號:ikanxue)整理。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

陸麟

陸麟,中國最老的十大黑客之一,Windows系統核心專家!原NEC中科院軟體研究所專家。現任上海高重資訊科技有限公司CIO。長期研究系統核心。多年耕耘資訊保安領域。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

陸麟:感謝大家的捧場。今天的議題之前大家都看到了很多之前冒出來的洞,還有一些是大家歷史上已經總結出來很多經驗,如何對付黑產、灰產。現在我是臨危授命要一些活著的東西給大家看看,之前已經爆料過了,據我所知是沒有的,目前為止也沒有任何解決方案,大家可以先看一下。這是之前我們通過使用Windows的Linux子系統,順便看到的一些成果。當我們裝完一個Windows subsystem for Linux以後我們得來的一些額外能力,額外能力的幾個關鍵點是在於我們可以直接在Windows下直接執行的Linux的應用了,除了有這樣一個改變以外,Linux系統是檔案系統是大小寫是敏感的,為了支援這個系統暴露了一些毛病。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

現在可以看一下,右邊的窗很典型,大家也已經看到了,是Linux系統典型的輸出,我們其中有同樣檔名的兩個東西存在,一個叫A,一個檔案是a,四個位元組我們在裡面看一下到底是什麼內容。兩個檔案的內容區別在於大小寫。左邊的黑框是我們平常的Cmd框,也是可以看到兩個不同A的檔案存在,我們用一個Windows 可以看內容的Linux來看一下。我們突然發現這兩邊顯示的內容對不上號了,無論我想嘗試開啟哪一個叫A的檔案,它顯示的內容都是大寫的A,而大寫的A是我們剛才所看到的Linux系統下面大寫的A,這樣一個小小的地方了其實暴露了一堆的問題,我們至少可以看到兩樣。首先,開啟檔案可能看到的內容是錯的,Windows 檔案讀錯了就算了,後面還有其他的錯誤,這個錯誤在哪邊?大家可以看到輸出的內容也錯了。4位元組的內容顯示了8個位元組。 [略去python演示內容]無論執行哪一個指令碼,出來的都是A.py。像這樣的漏洞是非常全域性性的,[刪除部分文字略去原因]。帶來的後果,很可能相當長的時間內都沒有辦法修復,我們接下來就開始回到正題了,我要開始我的演講了。

Windows下跑Linux應用的發展變遷

我的名字叫做陸麟,我現在是在上海高重資訊科技有限公司CIO,是這個公司聯合創始人之一,我們這個公司也是專注於攻防資訊保安這一塊的。我們這個課題講的東西是什麼,另外一個角度看待我們的主機安全攻防。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

Windows下跑的Linux應用,它本身不是第一天了,從Windows2003的時代就已經開始要打這個主意了,讓原先Unix的系統全部跑起來了,當時沒有一個模式使得作業系統可以執行Unix下的可執行檔案,當時採取了一些變通的方式,那個變通的方式是什麼,叫做posix子系統。到windows 2003,SFU提供了一大堆工具集,還能跑Gcc,Gcc編出來的東西是Windows的,不是Unix的。再往後演化就變為的一個SUA的系統,它適用的範圍是vista-win7,它也是獨立的檔案包,到了Windows10開始,一本正經微軟開始支援直接跑Unix的應用,大家認為還是比較好用的,帶來了很大的便利。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

Windows 7下的SUA是怎麼一回事?直接就是作業系統內建的安裝裡面了,裝好一下我們可以看到黑色的圖,最終的效果是安裝完畢,所有的組建都是在Windows目錄下有一個SUA的目錄,可執行檔案還是MZ的格式,通過一個特定目錄可以訪問到C盤的資料,而且還可以執行大小寫。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

到了Windows10之後演化出來的東西到底如何裝起來,【演示】把這個模式先開啟,適用於Unix的Windows子系統,通過開發人員模式就可以把這個系統安上。基本上這個功能覆蓋度相當齊全了,大部分的功能都可以用。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

安裝完以後對Unix的應用其實還是有一些革命性的轉變。裝在哪邊?首先是使用者的目錄下。多出來一個子目錄叫做LXSS,通過作業系統可以裝出來的Linux是Ubuntu。在Windows應用商店能下載安裝suse。大家都可以下載。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

安裝的OS部件不重要,因為機制都一樣的,怎麼跑都會出毛病,它不是Linux出毛病,而是這些特性給整個作業系統帶來一些問題。這樣ELF的程式直接可以在Windows上執行。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

除了能直接執行ELF檔案,Linux子系統把Proc FS也實現了。微軟做了相當大的努力進行相容。預設情況下,子系統把C盤以及D盤也mount好了。【演示】所有目錄上面顯示了,mount point是在mnt的目錄下。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

這一系列的背景其實都是非常管用,在將來漏洞利用的整個攻擊鏈中,這一些背景知識是逃不掉的,哪裡找C盤,哪裡找D盤,改寫哪些程式和哪些配置,需要自己要動腦筋的。

這個系統我順便跟大家報告一下,大家看到的有問題的系統,是九月份微軟釋出的Windows10最新版本(秋季創新者版),補丁也一直打到11月份,就是說處於所有補丁都齊全的狀態。目前為止還是有缺陷。之前的幾個版本WSL網路毛病比較多一點,今年三月份升級完了以後的系統,基本上整體可執行性非常好了,要想找出來毛病大家還是可有機會的。今天披露問題時考慮到大會上聽眾水平不一,我們們如果列一大堆的程式碼大家可能看起來比較頭大,通過幾個命令的執行就直接看到後果的話效果會好一點。

WSL漏洞的成因

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

為什麼會出這些問題?就需要反過來考察子系統本身到底是怎麼一回事,怎麼帶進來的?曾經微軟做的作業系統的子系統叫OS/2,以及POSIX。相容非windows的子系統一直都有,但當時一直無法迴避需要原始碼編譯到windows下跑的毛病。後來可能還是因為linux的可執行程式數量太大了,最終走上ELF可執行這條路是免不掉的,為了支援這麼一件事情,Windows的核心進行了非常大的改造,每一輪的大改造就成了大家的機會。如果是做攻防目前這一塊機會比較多。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

為了實現ELF檔案的直接執行,除了利用現存OS功能,需要改造以及實現一大批新的操作系核心功能。我們可看到新的模組名字叫做Pico Provider,從圖上我們可看到微軟已經基本上把Vfs和Sys以及Dve等關鍵元件都實現了出來。這張圖是微軟自己披露的,系統結構的框圖。

做安全,需要考慮攻擊方會有哪些手法,而做防守會有哪些方面工具和能力。當能力到達一定條件下就能料敵先機。現在新的系統產生出來給現有安全機制帶來很多方面的影響。有一個角度是安全軟體沒有辦法監視系統的程式派生關係,系統程式派生關係是很多安全軟體核心觀察角度,比如說我們用了很多的漏洞技術,最終也就是執行一個什麼東西。比如在瀏覽器下面跑個馬,當一個不該跑的東西出來瞬間我們已經知道異常。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

因此wsl對於大家原先派生關係的整個監控機制產生的挑戰,按照原先的寫法無法實時看到wsl下的程式派生關係。當然微軟也發現了這個問題,提出了新的API介面,大家不去使用新的api,就沒有辦法觀察到新wsl的程式關係。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

網路監控這一塊功能我們很明確的說,下一版本的Windows甚至是內部版本的時候,有一大堆的網路安全的軟體會有相當一部分的功能受損,損在哪裡?監視網路如果要用到TDI這個介面就不行。後續OS升級要把TDI都bypass掉,這樣以來,藉助TDI介面監控的安全軟體就會損失功能。整個過程會有相當長的時間視窗出現。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

回頭來講我們做防毒軟體,有很大的侷限,大部分只能看到PE檔案,現在又多了一個ELF格式。指令碼也認不出來,剛剛一位講師講的Flash惡意軟體也認不出來。

在作業系統在自身演變的過程當中帶來了不少能導致崩潰的問題。甚至像原子操作也有帶來崩潰的,我們沒有看這些崩潰有無可能利用,如果能利用那漏洞就是核心級的。藍屏最底線就是DoS。

剛剛講到的新出來的介面在紅框上給大家新標出來【略去部分演講說明】。

這裡比較有趣的挑戰是什麼?比如說一個程式跑出來我要知道他是什麼程式,Windows很簡單,有一個可執行檔案就在那邊了,直接就拿出來了。

【看雪2017安全開發者峰會演講回顧0x9】Windows 10新子系統*新挑戰

但是傳統的linux以及Unix不同【略去機制說明】如果改造一下執行模式,我們看到1和2,這個時候還是可以看到原來的程式在執行的,在這個過程當中留了一堆的事情,再就是EXEC一個新的可執行程式,pid不變,一個pid一會兒是A,一會兒是B,防毒軟體會頭大,到底是什麼東西搞出來的鬼,給大家形成一個判斷上的挑戰。

【略去部分說明】,我們可以預見相當長的時間,這個形勢會愈演愈烈。現在利用工具大家還比較少見,將來會出來一大批。這個特性影響波及面實在太廣了,只要是Windows的應用都受到影響。【略去部分說明】。這個裡面還帶來了一個特別有趣的東西,我把紅圈出來了,剛剛沒有仔細跟大家講。我們實際的檔案內容是AAA,再加一個換行,一共四個字。Windows裡面冒出來了變了兩行,給大家再仔細看看。A是在這邊的這個框,小寫a的這個檔案內容有三個小寫的a,檔名大寫的A內容是大寫的三個A檔案,我們如果在Windows的下用type命令看我們發現有六個字冒出來,一個長度4位元組的檔案,type出來變成8個位元組。【略去部分演講內容】

演示的內容大致上就是這些,通過今天的課題,應該給大家一些比較有趣的啟發,知道了接下來的路在哪裡。如果是滲透團隊機會在哪一邊,防禦團隊知道自己缺陷在哪裡,有相當多的路可以走,希望可以給大家一些啟示,有什麼問題可以會後交流。

謝謝。


本次演講PPT 戳 https://bbs.pediy.com/thread-223044.htm

相關文章