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