天天看點

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

CDGF

  • 一、背景介紹
    • 1.1 DGF
    • 1.2 CDGF
  • 二、DGF
    • 2.1 DGF中距離
    • 2.2 DGF的應用
    • 2.3 DGF的局限性
    • 2.4 改進要求
  • 三、CDGF
    • 3.1 概括
    • 3.2 constraint定義
    • 3.3 distance定義
      • 3.3.1 target site的distance
      • 3.3.2 data condition的distance
      • 3.3.3 某基本塊單個constraint的distance
      • 3.3.4 某基本塊constraint sequence的總distance
      • 3.3.5 seed的distance
    • 3.4 Constraint生成
  • 四、CAFL
    • 4.1種子部分
    • 4.2實驗
  • 五、總結

一、背景介紹

1.1 DGF

DGF作用

 集中測試某些特定位置的代碼:target site

 應用:

  ①開發人員從第三方擷取崩潰報告,重制崩潰

  ②針對某個更新檔,生成對應修補位置處的PoC

局限性

 1、target sites之間沒有關聯,不考慮順序依賴性

 2、未考慮target crash所需的資料條件,單純以距離target sites遠近來進行種子排程

1.2 CDGF

CDGF

 在DGF的基礎上加了一些的constraint,并且按照滿足constraint的權重去排列seed

 權重:

  seed通過的constraint越多,距離constraint越近,權重越大

constraint組成

 多個target site和n個data condition

 當指定多個constraint時,seed要按照排列順序去滿足

自動生成constraint

 作者設計了根據額外資訊源自動生成constraints的算法

 額外資訊源

  ①記憶體錯誤檢測器的偵測的記憶體錯誤

  ②更新檔的更改日志

 注:該算法支援7種crash和4種changelog自動生成constraint

constraint生成方法

 UAF:

  首先生成free處的constraint,再生成crash處的constraint(先驅動seed到free,再到crash)

 緩存區溢出:

  constraint驅動seed到緩存區的邊界,增加溢出的機會

 更新檔更改日志:

  constraint轉換seed,來符合更新檔更改日志中訓示的有缺陷的條件

主要貢獻

 1、提出了CDGF,在DFG基礎上按順序排列target site和constraint

 2、使用額外資訊源,自動生成constraints

 3、基于CDGF理念設計了CAFL,用實驗展現了該方法的優秀

二、DGF

2.1 DGF中距離

調和平均值

 使用調和平均值來計算某點到某點的距離

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

 比如論文中的這個例子

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

 論文中兩個target分别為d和f,然後a到d與f的最短距離都是3,那麼a的權重是1/(1/3+1/3)=3/2

 加入seed執行的路徑是abef,那麼距離就是計算調和平均數(3/2+1+1+0)/4=0.875

 效果就是路徑越長,計算出來的距離越短,比如路徑abcdabef的距離是0.85,比路徑abef的距離0.875還要短

 缺點是如果路徑中包含的的target site少,反而會增加路徑長度,如路徑abcabef的距離為0.971

2.2 DGF的應用

針對于任何可以精确定義target site的用例中

1、靜态分析驗證

靜态分析誤報率很高,可以用DGF将目标crash設定為target site來主動驗證

2、崩潰再現

重制來自使用者或開發者的崩潰報告,崩潰報告中往往有PoC、address、location,但是往往一個PoC無法驗證該crash是否已經修複,可以用DGF來驗證

3、生成PoC

攻擊者往往攻擊的是還沒有修複漏洞的過時系統,可以使用更新檔中描述的address、data、rule并通過DGF來生成PoC,比如崩潰再現中就可以生成PoC

2.3 DGF的局限性

由于以下兩個原因,DGF往往會長時間的探索target site而沒有進展

1、target site之間互相獨立

2、沒有data condition

例:target site互相獨立

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

例:沒有data condition

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

2.4 改進要求

1、排列好的target site

因為大部分的target site都有前提條件,要将seed驅動到前提條件位置

2、data condition

大部分crash都有資料條件,是以也需要将seed驅動到前提資料條件

三、CDGF

3.1 概括

每個constraint都有target site以及在target site需要滿足的data condition

改進:賦予seed更短距離的條件

1、選擇的seed滿足的constraint更多

2、如果constraint未滿足,選擇更加滿足該constraint的seed

3.2 constraint定義

組成:target site和data condition

滿足限制:到達target site并滿足data condition

生成constraint的方法:

1、捕獲變量

到達targert site就捕獲該處使用的變量,捕獲什麼變量取決于在該處的操作,比如“取消引用數組”捕獲“引用位址”、“配置設定數組位址”捕獲“數組大小和目前位置等”

2、data condition

data condition是一個布爾表達式,由捕獲的變量組成,data condition可以用自己所屬constraint中的變量或者之前constraint的變量

3、排序

多個限制需要按照指定的順序來滿足

3.3 distance定義

3.3.1 target site的distance

基本塊距離

d(B1,B2)為B1和B2之間的距離

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

Bs是B1的後續基本塊(如果B1有調用指令的話,調用指令的基本塊可以是Bs)

target site距離

定義為target site與目前基本塊的基本塊距離(上面使用的基本塊距離算法)

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

3.3.2 data condition的distance

1、單個data condition

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

注:如果表達式中有整數是未定義的,那麼距離為無窮

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

這串公式中,Q是data condition,等号左邊整體為第n個資料塊在Q下的距離,min指的是取第n個基本塊之前計算出的最小距離

特殊條件:當data condition為assert時,成功為0,失敗為無窮

2、多個data condition

多個data condition時,distance表示了seed滿足所有data condition的程度,滿足的越多,distance越短

如果滿足的data condition同樣多,選序列中未被滿足的data condition更靠前的

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

ρ是第一個未被滿足的data condition下标

Nunsat=N(Q)-ρ,指的是未被滿足的data condition數量

Cdata是單個data condition的最大距離,作者設定為int的最大值(2的32次方),這樣可以表示4位元組整數内的任何值

3.3.3 某基本塊單個constraint的distance

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

即到target site的distance和data condition的distance之和

3.3.4 某基本塊constraint sequence的總distance

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

沒滿足的constraint距離設為最大(2的35次方,可容納8個data condition),其餘的正常計算

3.3.5 seed的distance

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

即取seed的基本塊路徑上distance最小值

3.4 Constraint生成

基本方法:根據給定的資訊源,找到合适的target site和data condition來填寫預先設定的constraint模闆

可生成來源:①來自記憶體錯誤檢測器的崩潰記錄(crash dump)②更新檔更改日志(patch changelog)

模闆:

1、nT

nT類型即多個target site,适合需要按照順尋到達多個target site但不需要data condition的crash類型

例:Use-after-free、double-free、use-of-uninitialized-value

2、2T+D

兩個target site加data condition

例:heap-buffer-overflow、stack-buffer-overflow

3、1T+D

一個target site加data condition

例:divide-by-zero、assertion-failure

PoC

對于漏洞這種,作者設計了算法來提取更新檔中的資訊填充到1T+D類模闆中,分為以下四類分别操作

C1:異常檢查類,target site為異常檢查點,data condition為異常條件,關鍵字throw、error

C2:分支跳轉類,target site為分支跳轉點,data condition為“目前跳轉條件!=原跳轉條件”

C3:變量更換類,target site為被替換的變量,data condition為“目前變量!=打更新檔前變量”

C4:不适用上述,不符合上述條件,則data condition為空

四、CAFL

作者根據CDGF的思想設計了CAFL,并由些許改進

4.1種子部分

為了防止局部最優,通俗講就是這個seed并不适合變異下去,但是這個seed現在的distance還很小,優先級會很高,是以對種子權重進行了改動。

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

通過以上公式,seed如果模糊時間過長、長時間停留在某個distance沒有改變,種子的權重就會降低

4.2實驗

實驗對象:AFLGo與CAFL

1、LAVA-1

選取了LAVA-1中18個崩潰來比較雙方

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

可以看到這裡CAFL在加入了data condition後時間大大縮短,證明了data condition的作用

2、Crash Reproduction

選了47個真實程式來測試,選取了其中的nT和1T+D類型的bug,并且使用了1T和nT以及nT+D來實驗CAFL的效果

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

可以看出CAFL在整體性能上要好于AFLGo,但是在部分情況下加入了data condition反而效率下降,說明了data condition有時候反而會起到誤導作用

3、PoC Generation

通過3.4裡提到的從更新檔中提取target site和data condition的規則來生成constraint,并由此生成PoC

限制引導的定向模糊測試:CDGF一、背景介紹二、DGF三、CDGF四、CAFL五、總結

效果要好于AFLGo

五、總結

總的來說就是一種改進distance計算方法,可進行對比的論文不多,效果還行