0
本文作者: 李勤 | 2017-08-23 14:30 |
幾十年前,兩顆原子彈爆炸,人們在可怕的蘑菇云中,被核武器的威力所震懾。
在看不見敵人的神秘網(wǎng)絡世界里,有一種武器堪比核武器。
幾個月前,“永恒之藍”從美國國家安全局的軍方軍火庫泄露,威力巨大的武器落到了一群毛賊手中,被利用做了一次低俗的敲詐勒索。但那一次,也許是全世界人民再一次深刻體會到這種武器的可怕。
它就是漏洞武器。
網(wǎng)絡世界的暗黑力量瞅準了漏洞,安全守衛(wèi)者也看到了漏洞的價值。不過,在安全研究人員看來,搶先一步發(fā)現(xiàn)漏洞,填上它,就是一種勝利。
不過,從開始滲透測試網(wǎng)站到發(fā)現(xiàn)漏洞,然后提交給廠商,整個過程會耗費安全研究人員大量的時間精力,甚至不得不連續(xù)幾個日夜守在電腦面前反復測試。何況,漏洞挖掘技術有高低,天賦、時間、經(jīng)驗……都是一道道關卡。
最近,有人告訴雷鋒網(wǎng)編輯,他們研發(fā)除了一款 Windows 漏洞自動化挖掘系統(tǒng) Digtool,可捕獲程序執(zhí)行過程中觸發(fā)的漏洞。
咦?Windows 系統(tǒng)的漏洞挖掘,由于微軟沒有提供源碼,人工挖掘需要逆向分析。這個漏洞工具到底是怎么實現(xiàn)的?聽說 Google project zero 也開發(fā)了類似工具,相比之下,效果幾何?
該工具的開發(fā)人之一 、360 冰刃實驗室負責人潘劍鋒接受了雷鋒網(wǎng)的采訪。
在冰刃實驗室提供的資料中,提到 Digtool 的工作流程就像挖沙淘金一樣:首先,Digtool 可以記錄內(nèi)存訪問等行為日志,這就實現(xiàn)了第一步挖沙的過程;進而,Digtool 的分析模塊會進行分析,一旦符合主要的六種漏洞行為特征規(guī)則,便實現(xiàn)了一次“淘金”,也就意味著找到一個漏洞。
事實上, Digtool 并不是機器人,下達一聲命令,它就勤勤懇懇地開始自動“淘金”。
至少,你得先開機。
曾有一計謀稱為“以靜制動”,也就是我們通常所說的:我就靜靜看你裝逼,然后一切真相了然于胸。
只有在系統(tǒng)在任務執(zhí)行的動態(tài)過程中,Digtool 才會像靈敏的獵犬,嗅出一切可疑的破綻。
此前介紹的 Digtool 的工作流程其實分為兩個步驟。
第一部分是指路徑探測模塊。因為程序運行會有大量的路徑產(chǎn)生,有些路徑是正常的,只有某些路徑才會出錯。如果你探測不了這個路徑,根本發(fā)現(xiàn)不了這個漏洞,因為其他路徑跑出來的結果是正常的。
Digtool 在這個過程中產(chǎn)生的最大作用是,盡量引導執(zhí)行更多的路徑。
讀萬卷書,行萬里路,找“一萬條”路,才能獲得人生真諦。Digtool 不斷嘗試從 A 點到 B 點的可能路徑,就像那個把巨石一直推向山頂,巨石掉落,又往山頂推的人。只是,不走尋常路。
因為漏洞本身就是罕見的,很可能在一萬條路里,才能找出一條通向成功,哦不,是漏洞的路。
從這個意義上來說,Digtool 深刻地領悟了人生(漏洞)哲學。
第二,錯誤捕獲,跑到這條特殊的路徑上算是成功了一半,捕獲到錯誤是成功的另一半。
潘劍鋒指出,軟件漏洞是程序的與安全性相關的錯誤或缺陷,有漏洞的程序在動態(tài)運行時會產(chǎn)生各種異常行為,比如有UAF的程序執(zhí)行時產(chǎn)生訪問已釋放內(nèi)存的行為;再如有內(nèi)核的信息泄露漏洞的內(nèi)核程序段,會產(chǎn)生把應用層不應該知道的地址寫到應用層地址空間的行為,Digtool 可以捕獲這些異常行為從而發(fā)現(xiàn)背后的漏洞。
至此,Digtool 才算在一個漏洞的挖掘上功德圓滿。
Digtool 目前擅長挖掘六類漏洞,而且針對的是 Windows系統(tǒng)。
第一類, OOB越界訪問漏洞。
第二類,UAF釋放后使用漏洞。
第三類,TOCTTOU即time-of-check-to-time-of-use漏洞,這里指來自用戶的不可信參數(shù)在被系統(tǒng)(如內(nèi)核)檢查和使用之間,可被用戶篡改的漏洞。它本也屬于競爭條件型,但可由 Double Fetch檢測方法高效發(fā)現(xiàn),故單列出。
以一個程序為例,來了一個用戶層的內(nèi)存 A,系統(tǒng)訪問了里面一個指針讀出來,它確實是一個合法的指針,后來要使用這個指針時,卻直接從用戶內(nèi)存取這個指針,前面取出來檢查,后面又取出來使用,在這個過程中,別的用戶可以修改指針,漏洞就產(chǎn)生了。
“以前,Windows 也出現(xiàn)過很多類似的漏洞,Project zero 的研究員就報了幾十個這類漏洞給微軟。”潘劍鋒說。
第四類,參數(shù)未檢查。
第五類,信息泄露。隨著各OS平臺漏洞緩解機制的加強,漏洞的成功利用越來越依賴于關鍵信息的泄露。比如對內(nèi)核信息泄露,在最新的 Win10 上以前可供利用的各種信息泄露幾乎都封殺了,個別漏網(wǎng)之魚可以預計也會很快補掉。因此,原本看上去不重要這一類型的漏洞,正在變得越來越重要。
第六類,競爭條件型漏洞,這里指多線程訪問共享內(nèi)存,而最后的結果取決于線程運行的精確時序導致的錯誤。
不過,針對這六大類型的漏洞,Digtool 也會報“假警”。
潘劍鋒解釋道:“如 OOB 或 UAF 只要報出來就是漏洞,誤報率是 0。對 TOCTTOU 和參數(shù)未檢查是有不少誤報的,因此,這種就需要人工來篩選,根據(jù)漏洞不同類型有不同的誤報率?!?/strong>
Digtool離全能的“人形漏洞挖掘機器”還有相當?shù)木嚯x,挖掘漏洞的白帽子完全不用擔心“失業(yè)”問題。
比如,Digtool 暫時還無法處理邏輯類型的漏洞。程序邏輯是程序員自己的思考與設計,如果沒有額外的信息,程序并不知道你的邏輯到底是 A 還是B,有可能在你看來 B 是錯的,但程序并不知道,有可能認為你就是想寫成 B。
雷鋒網(wǎng)了解到,也不能說 Digtool 完全不能發(fā)現(xiàn)這類邏輯型的漏洞,程序難以直接了解程序員的思維邏輯(除非把思維邏輯直接寫入錯誤檢測工具,這樣是完全不通用的),但是依然可以通過意外邏輯發(fā)生時的副作用發(fā)現(xiàn)它,比如,錯誤的邏輯導致程序訪問非法內(nèi)存,工具可以捕獲訪問非法內(nèi)存的錯誤,通過人工反推出真正邏輯錯誤的地點。
這意味著,Digtool 在一定程度上暫時干不掉挖掘邏輯漏洞的大神,但能成為大神挖洞的親密小助手。
【我指的親密助手不是圖上這種,不要誤會】
準確地說,在一定條件下,Digtool 有希望讓沒培訓或簡單培訓的人在短時間內(nèi)比經(jīng)過嚴格培訓的人還能挖到更多特定類型的漏洞,潘劍鋒相信,這也是自動化挖掘的意義。
雷鋒網(wǎng)了解到,目前,與 Digtool 類似的工具還有 Project Zero 制造出來的 bochspwn。
bochspwn 可以檢測兩種類型的漏洞,一種是信息泄露,一種是 TOCTTOU,但 bochspwn 跑得非常慢,是解釋型的模擬器。
與 bochspwn 相比, Digtool 可僅在需要關注的線程或系統(tǒng)調(diào)用開啟檢測,在不檢測的情況幾乎不影響系統(tǒng)的運行,當然檢測的時候也會比真實系統(tǒng)慢不少,但還是比 bochspwn 快很多。
“跑一局游戲,十幾個漏洞就挖到了”——在 360 提供的背景資料中,是這樣寫的。
但是,潘劍鋒表示,這是第一次運行游戲所經(jīng)過的執(zhí)行路徑上,捕獲的內(nèi)核信息泄露漏洞,第二次運行自然不會有這么好的效果,因為絕大多數(shù)路徑已經(jīng)跑過了,只有探索到新路徑才可能捕獲新的漏洞;另外不同類型的漏洞存在的概率也差別很大。
接下來,Digtool 將朝著優(yōu)化漏洞挖掘率,擴大漏洞挖掘類型等進行提升,不排除將增加挖掘其他系統(tǒng)的功能。
注:冰刃實驗室的該研究成果《Digtool:A Virtualization-Based Framework for Detecting Kernel Vulnerabilities》被 USENIX Security 收錄。
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權禁止轉載。詳情見轉載須知。