Smashing The Browser:From Vulnerability Discovery To Exploit學習記錄

Ox9A82發表於2017-02-04

瀏覽器Fuzz技術

漏洞挖掘

  • 白盒挖掘

    程式碼審計
    自動化程式碼分析

  • 黑盒挖掘

    Fuzzing


兩種Fuzzing技術

靜態Fuzzing
  • 基於變異的

    • 檔案、文件
    • 多媒體
    • bf3
  • 基於生成的

    • 瀏覽器
  • 重點是測試用例的生成

動態Fuzzing
  • Fuzzing框架

    • Grinder
  • Fuzzing工具

    • CrossFuzz
    • ndujaFuzz
    • NodeFuzz
    • X-Fuzzer
    • jsFunFuzz
  • 重點是測試用例的重建、Crash樣本的捕獲


怎麼動手寫Fuzzing工具

  • 1.蒐集POC

  • 2.規範文件
    • W3C
    • MDN
    • MSDN
  • 3.目標
    • javascript
    • HTML
    • CSS

策略

資料VS關係
資料型別朝向VS邏輯朝向

程式碼路徑覆蓋率->瀏覽器狀態覆蓋率

  • DOM Tree狀態
  • 渲染森林狀態
  • 佈局狀態
  • 事件控制程式碼狀態
  • 多頁面狀態

規範標準

  • W3C
  • MDN
  • MSDN

最終的指導

  • HTML
  • CSS


邏輯元素->各個字典(見下)->規範標準和指導

  • 基礎字典
  • property字典
  • 函式字典
  • Style字典

目標

UAF漏洞
構造->Fuzz->Free->Use
釋放的節點->無引用


Traverse Node 橫穿節點??

1.儲存引用(id[idex])
2.DOM實現(document.all[index])

節點引用

1.caching
2.clearing tree node
3.遞迴清除子樹


Get Property

1.動態獲取

  • ProperTies
  • FuncTions
  • Events

2.快取Caching

3.for...in

4.typeof

Fuzz Property

1.smart values->specification
2.random values->no dictionary

Fuzz Function

Functional programming + eval()


DOM Tree構造

  • Base DOM Tree
  • random nodes
  • 隨機樹生成演算法
  • for loop
  • document.createElement
  • node.appendChild
  • Smarter structure
  • Form
  • Table
  • Map
  • List
  • Audio
  • Video
  • Svg

  • Network
  • XMLHttpRequest
  • WebSocket


Prelude

  • TextNode
  • Special nodes
    • Window
    • Document
    • Attribute
    • NamedNodeMap
  • Group
  • Range
  • Selection
  • NodeIterator
  • TreeWalker

  • Multiple Pages
  • Iframe
  • Window.open
  • Recursively nested iframes
  • Renderer process <=> Instance

  • Web Worker & SharedWorker
  • MulTple threads

  • Event handler
  • “ATM”

  • CSS
  • PseudoMclasses & pseudoMelements
  • Render forest

  • Initial properties
  • Start states


Fuzzing

  • DOM Node
  • ProperTes
  • Functions
  • Styles

  • Return value -> Fuzzing list

  • Fuzzing Values
  • Normal
  • Dirty
  • Random
  • Return

  • Force Layout
  • Node.offsetParent

  • Clear DOM SubTree
  • innerHTML
  • outerHTML
  • innerText
  • outerText

  • Clear whole DOM Tree
  • write
  • writeln
  • open
  • documentElement.innerHTML

  • DOM Tree Modify
  • appendChild
  • insertBefore
  • insertAdjacentElement
  • insertAdjacentHTML
  • insertAdjacentText
  • removeChild
  • replaceChild
  • cloneNode

  • Special node manipulate

  • Group manipulate
  • execCommand

  • Multiple pages
  • Mutual manipulate
  • Mutual clear

  • setTimeout
  • Disrupt the Tme sequence

  • Garbage Collect
  • Force IE Memory Protector to reclaim


####Finale

  • GC
  • Reuse all elements
  • Properties
  • Functions
  • Styles
  • Reuse group
  • Reuse special nodes
  • Reuse funcTon return values

Ditionary

透過準確性和完整性來判斷字典的好壞。
字典->規範

  • 規範
  • Scripts(or grep + sed)
  • Manual

擴充套件性

  • 新東西
  • 地理位置
  • 客戶端資料庫
  • Canvas
  • Blobs
  • 語音合成

規範+智慧的值=字典


評估一種Fuzz方法的好壞要看它的結果。

  • 漏洞
  • UAF
  • Double Free
  • OOB

  • Bug
  • 空指標引用
  • 棧上溢


Event Handle

  • Idea
  • Fuzzing:rendering engine ->some state
  • Set event handler: fuzzing and clear
  • Fuzzing: fire event
  • Kind of race condiTon

  • StateFuzzer
  • CFlatMarkupPointer UAF
  • CInput UAF
  • CFrameSetSite CTreeNode UAF (CVE-2014-1769)
  • CCaret Tracker UAF
  • CClipStack OOB Access (CVE-2014-1773)


Summary

Fuzzing = Programming + Specification reading + Vulnerabilities’ characteristic collecting + Ideas