压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

Nicholas Dean Stephens:Automating Exploitation – Shellphish Style

Nicholas Dean Stephens:謝謝介紹。我將向大家介紹我們自動的漏洞挖掘,我們要有自動的一些技術,挖掘對于整個英特網的挑戰怎么樣應對。

首先你們知道我的名字了,我是Shellphish CTF團隊的研究人員,我們要找到我們的挑戰,找到漏洞進行挖掘和修復。我在CGC的黑客大賽之前的幾天入這個團隊,我最后實際上得了第三名,CGC的黑客挑戰實際上是一個DARPA的競賽,實際上這是美國的國防部高級研究計劃局,有很多的競賽,

比如說有自駕的比賽無人駕駛的比賽,還有其他的比賽,比如說機器人的比賽,可以是用于救災方面的機器人。最近我想對我們的主題比較接近的就是CGC的比賽,作為一個工具和項目,來找到整個項目的漏洞,然后進行補丁和執行以及修復漏洞。

怎么樣進行運營呢?實際上好像是一個攻擊保護的流程,每一個參賽者要有一些服務作為服務的提供者,不管是軟件或者是硬件,這些都是有漏洞了,實際上組織者知道這個漏洞在哪里,你的目標就是要找到這些漏洞,然后在你的競爭主體之前進行補丁,作為團隊來解救。

有意思的一點,實際上我們通過的是機器,而不全是人工的,我們有基礎設施,更利于機器自動。CGC對于挖掘的定義越來越松散了,實際上就像這個漏洞來進行更改化,我們這個基礎設施實際上有更多的頁面和機械,并不全是人工的。

我們可以看到,它實際上更多的迎合了設備,我們可以通過機器進行部署。實際上環境越來越簡單了,尤其是對這個項目的分析方面。

這是兩種不同的挖掘類型,CGC就是建立一個POV,是可以挖掘的,實際上把這兩種不同的挖掘放在一起,這樣的話,你可以是第一種挖掘,有可能你會挖掘第二種的漏洞,可以找到任意一種或者是兩種。

這樣做的過程中,你通過自己的目標,通過這個競爭。另一方面的挖掘就是你可以記錄,比如說你可以通過你的頁面來泄漏一些記憶,必須展示在這個項目之內,你有四個連續的Bits。
基礎設施這方面也在變化,我們有通過這樣一個界面,應該有裁判的服務器進行溝通,我們把POV借來提交,有一堆的項目捆綁,和整個價值進行討價還價,比如說可以列出這些價值。

另一個有意思的,實際上整個環境是越來越簡單了,以前可能是250多個的點,現在我們只有7個系統的號,減少了這個OS,我們主要是在這個界面上,這7個系統的Call來進行傳輸、接收、FD,然后來進行分配和再分配,還有隨機,隨機實際上是開放的,你可以通過不同的出口進行傳輸之后的終結,所以我們有這7個系統的Call可以利用。

現在的問題實際上我們需要很大的工程力量,來進行工作,提供解決方案,我們不需要API的這么一個模型。這個獎項實際上是一個什么情況呢?我們有96輪,每一個輪實際上有新的挑戰,這些挑戰你可以展現,你可以去除,或者可能是一樣的挑戰。

比如說你可以堅持五輪,每一輪的時候你有分數,看看你得到的分數是多少。所以你得到這些輪的分數疊加起來,你有新的挑戰來進行縫補修復和測試,如果你把這些功能全部完成了進行補丁了就會得分。

還有關于安全方面,可能你被攻擊了,你如果被攻擊了的話,那么這個挑戰實際上你就失敗了。作為團隊,如果你攻擊了其他的團隊,你也可以得分,你被攻擊了你就沒有分的,你還會得這個激勵獎。

這是一個實際的釣魚的情景,好像像一個飲料機,我們可以看到,我們要找到這個挑戰,我們要進行縫補、撞擊,要挖掘這些問題。這個是很大的流程我們怎么做的,我們有不同的元素,我們要和整個環節進行聯絡,我們要執行,我們要把我們的技術輸入輸出,

在整個的管道的鏈條中我們還有其他的系統中各個的元素,我們有52個工作點,這些工作點有工人堅守,我們要維護這些設備。一個有意思的點就是挖掘這個鏈條,這個鏈條有點意思,最左邊所有的技術我們可以產出測試的一些案例,我們可以找到漏洞進行測試。

我們要建立挖掘或者是找到其他的漏洞進行修復,我將重點談一談這個測試方面。

我們怎么樣找到這個漏洞,怎么樣進行測試?這個是我們的流程。實際上我們團隊也是最開始要用AFL,每一個挑戰可能要有8個這方面的工作,有一個主人,七個工作人員。在整個過程當中,我們要有能力增加更多的工作人員。

實際上這個是我們模擬Fuzzer的挑戰,我們并不是來修復AFM,我們知道其他的團隊他們要在堆上重新寫一些程序,但是我們不是這樣做。我們還有網絡的發掘,實際上我們最后也是這樣做的,

我們并不是沒有預料到這個交通量,我們要利用網絡,來決定哪一個撞擊是我們要感興趣的,我們要找到哪個點。我們很多測試基礎設施是基于AFL,這是非常有意思的交易。

我們有一個Driller,主要是通過AFL+Angr加在一起使用的,我們一開始就使用這樣的符號執行,我們希望能夠真正的用這樣的一種特定的輸入方式去獲得一種很好的解決辦法。因為這樣的解決辦法在測試的時候是特別快的,而且可以通過這種模糊測試。

因為原來很多的方法可能會使得這個測試速度很慢,但是我們可以通過這樣Driller的方式,能夠通過通用的輸入,然后去找到這個解決的辦法。同時又通過這種符號執行,通過特定輸入來找到一個解決的辦法。

所以說是非常容易的,而且很多的這種數據的來回交換也是非常直接的。而且我們也可以看到,其實在很多的這些,比如說有一些問題出現,就會導致你運算的時間特別長。有了這種模糊測試,我們就可以去避免一些非常耗時的計算,所以說它是一個特別簡便的方式,這里面只有四個分支。

首先有一個模糊測試,比如說X1,在一段時間你可以看到這個Fuzzer運行了一段時間,你可以得到它最后的一個覆蓋范圍。之后用Driller,會有一個動態的符號執行,可以一直追蹤整個路徑,通過這種二位的計算方式去追蹤這個路徑。

在其他的一些測試里面可能沒有辦法特別好的測試出來的,我們可以用位圖的方式去實現這樣一個測試和執行。我們到底能不能夠真正的解決基礎的內容?其實我們是可以的,我們通過一些新的測試案例來產生這樣一個結果。
我們確實一開始的時候可能會覺得很難去運行,但是我們通過了這樣的Driller結構,可以進行一些很快速的模糊測試,我們就不需要耗費太多的時間去關注在那些小的執行方面了。最后我們能夠看到,我們這個測試其實是非常簡單的,

我們有三種方式,AFL、Network和Driller,通過不同的測試方式,我們也可以把它接入到其他的一些管道里面。有的時候沒有辦法執行,有的時候流量特別大,每秒達到幾個比特的數級,我們就可以用這種網絡的方式進行測試。

在整個管道里面,我們有Crash來進行利用,比如像Rex,它們是我們的記憶、存儲,所以我們就用同樣的追溯的方式,去利用這樣一個Crash,然后把這個作為一種輸入,然后把它得出CGC的漏洞利用。

我們就可以進行這種符號的追蹤,當我們進行了這個追蹤之后會進行一個分類,看看這個Crash是屬于什么樣的類型,在這里面我們也可以利用不同的漏洞利用的技術來進行分類。比如說可以用ROP,用殼代碼去繞過這樣一個注冊,也可以去探索,把這種Crash進一步的利用和發掘,這個就是在一種利用的階段。

給大家舉一個例子,我覺得是非常有意思的,有每一個步驟,我們看看具體是怎么操作的。比如說在這里面有一個符號追蹤,出現了一個緩沖區的溢出,那個里面有一個功能的Point,在中間我們怎么定位這個Crash,首先在左邊有一個箭頭,我們把它叫做一個輸入,是我們想像的,我們把這個稱為一組符號的位數。

然后我們把它加入到這個漏洞的元素里面,我們去把一些數據放在堆棧里面。我們可以看到這個堆棧里面有些信息被啟動出來,可以被撥叫。在這里面有一個標本,我們可以在這個堆棧上創建數據。這樣的話,我們可以放在這個堆棧里面然后再進行復制。

假設有一個Crash出現了,比如說36AA,之后我們進行追蹤,每一次迭代我們就看到,都會把這個數據加入到堆棧里面。這里面有象征的位數,其實我們假設是36個A,如果說它是出現了一個Crash,我們會把這個創建出來,最后會有一個符號的數據,我們可以看到這個Crash發生的時間,可以讓我們解讀出在什么樣的情況下可以把這個Crash進行分類。

其實在這里是舉的比較簡單的例子,它是基本的一種Crash,解釋一下我們可能會出現什么類型的Crash。我們可以重寫這個PC,有PC重寫的這種Crash。如果它不是符號的話,可能是出現了重寫。

如果說確實是重寫的話,我們可以進行讀取內容。基于這樣一個計算結果,我們可以進一步的去利用這個漏洞,最基本的一個方式或者說技術就叫做漏洞利用的邏輯。我們有不同的一些方面,有一些技術我們可以去使用,在分類的時候我們要決定需要利用什么樣的技術。

這里面有幾個關于Rex的技術,比如說PC的重寫,還有一些就是直接進入了殼代碼,或者是他需要去介入ROP的鏈條,有些時候是間接的描述。我們可以看它到底是處于什么樣的一種分類,我們可能就需要重新配置這個PC,重新來配置這個注冊器。

還有一些其他的方面,我們還有一種Point to Flag的技術,點到標記的技術,我們可以把它回歸到我們能夠控制的這樣一個緩沖狀態。我們就可以試圖把它回到我們能夠控制的緩沖區,然后我們可以重新來追溯,我們現在可以知道,有PC的重寫之后,我們就可以通過這樣一種方式重新把它控制到我們能夠接受的一個緩沖區。

如果說我們直接跳到殼代碼的話,我們就可以直接把這個Crash的狀態轉到可以發掘利用的一個狀態。在這里面演示,比如說在PC,在緩沖區里邊有一個殼代碼,有記憶的模塊,然后去控制這個緩沖區,這個殼代碼會拿到一個地址,需要看到這個地址,然后再把它拉出來,他會覺得這個緩沖區應該是和他想要去跳到的這個殼代碼必須是一致的。

然后他們就是把這個緩沖區進行一些條件的限制,然后能夠承載我們的這個殼代碼。Buffer是發現了這樣一個符號的緩沖區,在這個時候我們就需要去具體化。其實這里面有很多不同的東西,比如說Crash的日期,還有在上面加的這些限制條件,讓它能夠介入到這種漏洞利用的狀態,其實是很簡單的。

我們更感興趣的就是跟這個殼代碼更加類似,如果說這個區域能夠執行的話,我們就能夠把它控制到能夠控制的堆里面。我們會有一個片段,在CGC里面我們叫做符號的變量,把這個變量又用到我們的C文件夾里面,我們可以進行一些動態的運行。

所以我們有一個Chain,有它的長度。最后一個很有意思的步驟,我們想要找一個Gadget,可以把這個堆的Point接入到我們的Chain里面,我們就要去看一下這個Chain的堆怎么能夠把它加入到里面。

如果說我們想要執行這樣一個Gadget,我們這個Chain就要去被激活執行。所以我們就是不斷的去探索,然后我們發現,其實它只是加入一些限制的條件。我們新的這種堆的Point,可能確保這個地址上的內存能夠讓這個PC和Gadget相聯系,這個也是我們去描述這樣一個Crash的過程。

還有一些,可以直接寫入。在實際的代碼里面,我們希望能夠確保你不去使用那個Gadget去改變你的內核,而我們應該控制的是這個緩沖區。

還有一些方法,在這里面關于Rex的問題就是太慢了,取決于這些小的執行。我們有一些方法可以在這里面去克服這個問題,我們AFL如果說大家曾經用過的話就可以看到,其實很多東西都是特別獨特的,他們就是用不同的路徑去做,但是最后能夠得出同樣的一個Bug。

絕大多數情況下,我們就看到通過不同類型的Crash,我們可以總結出我們希望能夠把所有的Crash都一起來加以利用。我們可能要看一下這個挑戰是怎么樣的,后面還有一些,比如說有20個Challenge等等,我們就要逐一的進行分析,所以我們要進行符號執行。

這張幻燈片是整個追溯所有的這些內容,用這種分析分類的方法,我們可以了解到這個Crash是屬于什么樣的類型,然后我們去看核心的文件,去看到底這個Crash是屬于什么類型的,是PC重寫的Crash,還是說基本的這樣一些不同的Crash。它可以讓我們能夠避免很多不必要的這些步驟。

這也是讓我們能夠進一步的降低成本的,POVFuzzer模糊測試,我們可以把你的Crash文件追蹤出來,然后在Crash的日期發生之前,要對比一下出現了什么樣的狀況。使用我們的這個技術是非常有效的,我們這個團隊做的非常令人印象深刻。

在整個挖掘過程中,應對挑戰中我們的一些技巧。實際上有一些是泄漏一些數據,我們怎么樣阻止這些呢?我們有Test cases這樣的工具,我們來做一個舉旗的行動,在旗幟下面我的一些數據我們要找到這些泄漏,然后攻擊,進行逆轉數據,然后要分析,

如果技術逆轉的話,因為這種攻勢,我們要在運作的過程當中解釋,不管是NAL還是其他的方式,我們進行攻擊過程中有的可能有一些事情有漏洞,所以我們要把這些數據進行保留,而不是泄漏出來。后面的這個問題實際上我們要挖掘這些泄漏。

怎么樣解決這個問題?我們要利用這些執行過程中的挖掘。我們看到很多的泄漏實際上不需要任何的修改,不需要很多運營的時間,我們只是來產生一些東西,然后要把它進行流動,然后進行運營,我們來進行逆轉,然后把它送回去。

我們怎么樣做呢?我們使用一個插入的系統來解決我們的挑戰進行執行,這個實際上很有效。最主要的問題就是可能這個速度比較慢,比如我們說的我們使用系統的速度比較慢,可能是一個CPU的差不多三百萬的速度,低于普通的CPU。

QEMU的速度也是比CPU要低了2.5倍,我們在整個的追溯過程中,如果我們有這種表現或者是一個系統的Call的話我們要進行更新,看看什么樣的是比較突出的,我們必須要進行標注。這個比普通的追溯要好,因為我們使用我們一個新的系統來進行啟動。

我們在重新啟動過程當中使用的是“麒麟”的系統,我們可以得到更多的追蹤,我們有實際的追蹤,還有意義上的追蹤,有兩種不同的追蹤。最后執行的過程當中我們要有不同的狀態,要進行拓展,看看什么是突出的,什么是旗幟的方式進行挖掘,然后看看逆轉的方式是什么。

我們加入這些限制,挖掘這些泄漏,看看所有的產出是什么,我們限制的情景是什么,來進行判斷和挖掘。

現在我們看看這些成果,我們是得的第三等獎,Mayhem是一等獎,Xandra是二等獎,我們是三等獎,有時間,有更新得分數。最右邊紅色的橫線實際上可以看到我們的進展情況,所有的這些團隊,實際上作為這個團隊來說我覺得非常好。

如果再進一步看這些結果的話,我們看到Mechaphish找到了更多的挑戰,有15個挑戰,我們解決了11個,有的團隊找到了9個或者是10個挑戰,并且解決了這些挑戰,所以Mayhem是CGC的贏家,他們的系統曾經在比賽過程中癱瘓了,Mayhem停止了他們的運營很長時間,他們說他們有漏洞,這個機器是不能運轉了。

我們可以想,他們要重新啟動,要重新進行補丁,他們來進行反應。但是我們可以看到最后的結果,CGC實際上給他的分數最高,最后他贏了,比如說你的補丁或者時間,而是看你應對了多少挑戰。所以解決的挑戰越多的話,贏的可能性就越大。

有的時候到晚上,機器可能會停止運轉,沒有關系,晚上你解決挑戰的問題會更多。所以我們可以看到挖掘方面,Shellphish在挖掘方面表現得很好,僅僅低于Codjitsu這個團隊,他們解決了一半的挑戰,他們得到了這個成就,

可能速度比較快,他們解決挑戰的時間是我們的10倍,比我們快。如果時間用得短的話,他們的某一個項目的得分就會比我們高。這個就是我們比賽的情景。

我們回顧一下我們的收獲或者是感想。整個系統是不是需要重新評估呢?比如說怎么樣把所有的關鍵點能夠進行維護,怎么樣進行一些漏洞的挖掘,整個的流程我們需要不需要重新的進行評估?

我們可以看到整個的系統實際上有很多的技巧可以找到不同的階段,你利用你的技巧來進行挖掘??赡苁潜容^有意思的一個過程,不管是人工還是自動,我們有自己的挖掘技術,希望我們能夠找到更好的自動的技術。

我想和大家分享的另一點,CGC的分數可能有一些和其他的比賽是不一樣的,因為它涉及到的漏洞和挑戰,還有時間,你得到的這個分數,有一個團隊做的不是非常好,有的時候做的好會給1分,但是做的不好分就會被拿走。

所以整個做起來,有可能你得分數非常低。但是非常有幸,我們做了很多,我們應對了很多的挑戰,做了很多補丁,得了第三名。一定要對攻擊進行防護,比如說Mayhem他們做得非常好,他們得得了第一,他們找到了問題,然后進行補丁、挖掘和修補。

所以有意思的一點,最終的這些CGC的分數是怎么得的,想得到最高分,就是要找到這些漏洞,然后進行挖掘。我們要更關注什么點呢?有可能是大家進行爭論的,我不知道答案。
以上就是我的一些想法,謝謝大家的聆聽,謝謝組織者來邀請我進行發言,我們是開源的,大家可以查到我的講話,我們都是基于CGC的,所有我們做的這些事情都是基于我們的項目。如果大家比較感興趣的話,可以找到我們參與的大賽的情況,謝謝!

上一篇:Brian+Jasiel+Abdul:$hell on Earth: From Browser to System Compromise

下一篇:Intel李曉寧:漏洞攻擊防御技術探討