0x00 為什么需要重現漏洞的利用環境
一般的漏洞披露公告很少包含技術細節去重現這個漏洞的利用。這件事有好的一面,也有不好的一面,好的一面就是,這讓很多腳本小子不能很快利用漏洞披露公告中的信息去編寫漏洞利用代碼,會給使用含有漏洞的開源程序的企業爭取修復的時間;不好的一面就是:有時候安全工程師或者安全研究者需要漏洞的詳細技術細節去重建漏洞利用環境,這樣可以幫助他們更好地理解這個漏洞,然后就可以編寫漏洞利用代碼去更好地測試系統是否包含這個漏洞。
開源程序出現漏洞,經常是其中的一個開源庫出現了問題,一個開源庫出了問題很可能影響很多應用程序,但是我們很難判斷一個應用程序就含有漏洞,只因這個應用程序使用了這個含有漏洞的開源庫,有時候應用程序并沒有使用到含有漏洞的開源庫中的問題代碼,這個時候應用程序即使使用了問題開源庫,也沒有安全問題,有時候只有特定的配置條件下,這個含有漏洞的開源庫才會觸發漏洞。只要不這樣配置,就不會有安全問題。正是因為我們無法從漏洞披露公告中獲取漏洞的技術細節,所以我們不能很好地判斷應用程序是否存在安全問題,也不能單單認為使用了這個含有漏洞代碼的開源庫就會有安全問題。如果不知道漏洞細節,我們就無法準確評估系統的安全風險,出于成本和升級風險考慮,企業一般對升級含有漏洞的開源庫持猶豫不決的態度我曾經遇到這樣一家企業,他們的應用程序中包含了含有漏洞的開源庫,但是它們不愿意升級系統,它是這樣告訴它的用戶的:
有人告訴我們,我們系統使用了這個含有漏洞的開源庫,但是我們檢查之后發現,我們并沒有使用其中的漏洞代碼,我們升級一次會花很大一筆錢,也會冒很大風險,我們現在的選擇是不升級當我第一次聽到這家企業的回答的時候,說實話,我非常驚訝,但仔細想想,這家企業說的也不無道理,我曾經經歷過一次對Rails開發的大的項目的升級,那次經歷真的是不堪回首,超級多的依賴,非常的麻煩。企業升級一次的,有時候,成本還是蠻大的。只有在有充足的證據證明系統確實存在重大安全問題,企業才會升級。最直接的證明系統存在安全漏洞的方式就是直接攻擊,最好拿下系統shell權限,一般用于測試漏洞是否存在的代碼稱之為PoC(proof of concept)。要想寫一個漏洞利用PoC,你就需要知道漏洞的詳細技術細節除了能幫助我們更好的寫出PoC,了解漏洞的技術細節還能幫助我們去培訓研發工程師,這樣就可以避免以后同樣的錯誤再次發生。安全研究者也可以通多了解細節去尋找和這個漏洞相似的漏洞如果漏洞披露方不肯公開漏洞細節,我們應該怎么辦呢,毛主席說的好,自己動手,豐衣足食,那就需要我們自己去重現這個漏洞環境,發現漏洞代碼,下文就介紹如何通過收集公開的信息,重現一個漏洞環境
0x01. 如何通過公開的漏洞披露信息,完成開源程序漏洞環境的構建,分析漏洞原因,完成漏洞驗證
完成漏洞環境主要有4個步驟
1、下載含有漏洞的版本
2、找到修復版本中的fix commit
3、理解這個fix
4、創建一個PoC
定位Fix信息
第1個步驟比較簡單,很一般漏洞披露中就包含了影響的版本之類
第2個步驟比較麻煩,有時候實現這一步很簡單,因為有的漏洞披露公開中包含了修復commit的hash值,但有時候,卻很麻煩,你花了好幾個小時,在幾百個commit中僅僅只發現類似"updatepom.xml"之類的沒有太多價值的commit信息,有時候,這是修復者故意這樣做的,他隱藏了修復的fix信息,因為他們認為這樣可以防止換人惡意利用,說的有道理,fix信息能夠幫助攻擊者更快的理解漏洞原因,以便他們完成漏洞利用代碼的編寫。但我個人認為,真正的攻擊者在沒有幫助提示的情況下也能夠通過源碼分析去發現fix信息,從而完成漏洞原因分析,漏洞代碼編寫,到最后的漏洞批量利用。把漏洞的fix信息放在顯而易見的地方,能夠幫助更多的合法用戶去利用漏洞成因,以便更好的保護自己降低危害。如果代碼維護者自己這個漏洞細節,這樣他就可以屏蔽含有漏洞版本的下載,這樣避免更多的人收傷害,當然還包括我上面提到的好處第1個尋找漏洞fix的地方就是漏洞披露公告,這就需要你仔仔細細的讀漏洞公告,留意漏洞披露公告中涉及的功能點,漏洞公告中的上下文信息也能夠幫助你更好的定位漏洞fix commit,有時候漏洞披露公告中會涉及一些關鍵字,這些關鍵字能很好地幫助我們去定位fix commit如果說真有一個漏洞披露公告,里面包含的有用信息非常少,你必須親自搜索fix信息,擺在首位需要搜索的就是fix version信息,找到fix version之后,你至少知道在這個fix version中至少有一個commit包含了fix。但是不幸的是,你會發現有幾百個commit信息,每一個commit信息中包包含了各種修改東東,你很難分得清到這些修改代碼是怎么回事。所以你還需要繼續過濾commit中的無用信息。
首先,你需要再次仔細閱讀漏洞披露公告,看看能否在漏洞披露公告中找到以下信息:
1)修復的是代碼還是配置
2)修復信息中有木有提到指定的類名
3)有木有提到指定的功能模塊
4)漏洞披露公告中有木有提到代碼維護者的名字,也許是他提交了fix信息一般情況下,只有1-2兩個修復者
5)fix的時間早于漏洞公告的時間,公告之后的commit肯定不包含fix信息
6)如果fixed版本是一個熱補丁版本(比如版本號是1.2.3變成了一個1.2.3.1),一般的熱補丁版本中只包含很少一些commit,這樣查找起來就比較容易了
下一步,你可以嘗試用Google搜索一下,看你的運氣了,也許其他人已經幫你完成了非常繁瑣的的定位,可能已經在Blog中貼出了PoC,或者一個MSF的利用模塊
如果一個開源項目有一個問題跟蹤wiki,你可以試著去那里搜索,利用漏洞披露公告中的關鍵字進行搜索,或者搜索漏洞披露公告前幾周的問題,可能搜索結果中會包含對漏洞的描述,如果wiki中關于問題的描述足夠詳細,你還可以對影響版本進行過濾另外一個可以搜索的地方就是git logs。我最喜歡的搜索方式:
–all選項是搜索所有的分支,有時候,fix信息只包含在某個特定的分支上,你不知道到底在哪一個分支上,所以你需要都搜索一下
-i表示不區分大小寫
另外一個比較好的定位fix信息的方式就是比較fix版本和之前離這個版本最近的版本之間的區別。這個可以在github上的releases上找到不同的版本
這里以Apache Storm Releases舉個例子
首先找到fixed版本之前的一個tag版本,比如上圖中,V0.10.0-beta是fixed版本之前的版本,v0.10.0-beta1這個版本包含了fix信息,在V0.10.0-beta這個版本的頁面中有個連接顯示從這個tag版本之后有1892個commits被提交到fixed的版本上。
我們可以點擊這個連接比較V0.10.0-beta和V0.10.0-beta1之間的不同
理解Fix
好了,現在你已經找到Fix的信息,現在你需要去理解Fix信息,弄明白修改了哪些,修改之后產生了哪些影響,為了弄明白這些,你需要搭建一個環境去測試,你需要去編譯,運行和調試修改前后的代碼,這里我就不多說了,提醒一下,結合fix Commit信息去理解。
編寫PoC
理解了fix信息之后,你需要做的就是搭建一個含有漏洞的版本,嘗試編寫一個PoC去證明你的想法,編寫PoC不是一蹴而就的事,你需要不斷的調試修改一般編寫PoC會選擇python或者Ruby作為代碼語言,因為它們非常的容易上手。有時候,你可能還需要利用到類似MSF這類框架。
編寫PoC的時候,注意記錄你遇到的奇葩問題以及是如何解決的,做好代碼注釋,不然的話,幾天或者幾周之后嗎,你都看不懂你自己的代碼了。
人妻精品一区二区三区_好紧好湿好硬国产在线视频_亚洲精品无码mv在线观看_国内激情精品久久久責任編輯:韓希宇
免責聲明:
中國電子銀行網發布的專欄、投稿以及征文相關文章,其文字、圖片、視頻均來源于作者投稿或轉載自相關作品方;如涉及未經許可使用作品的問題,請您優先聯系我們(聯系郵箱:cebnet@cfca.com.cn,電話:400-880-9888),我們會第一時間核實,謝謝配合。