汙點分析(Taint Analysis),簡單來講裡面有兩個重點,source 與 sink。一開始會把 source 標記為 tained,並且模擬(emulation)程式的運行,每個指令會進行污點傳播,對資料流傳播路徑進行標記 ,並且在 emulation 同時檢查 sink 是否被標記為 tainted。
而污點分析通常用於 web 應用程式的漏洞檢測 SQLi 或 XSS 等漏洞,也可以用來反混淆。
術語
- Dynamic Taint Analysis
- Taint Propagation Analysis
- Taint Tracking
- Taint Sources
- Taint Sink
- Hooking
- 由於外部函數沒有跟蹤 tained 或者 emulation 的開銷過大,會需要採用 hook 原始函數。
工具
安裝工具
透過 aur 安裝並且編譯即可
pacaur -S triton-git
如果要讀取 elf 可能需要安裝 lief
pacaur -S lief
Triton
適用於二進制執行檔進行污點分析。
使用重點
- hooking PLT
- 標記 tainted
ctx.taintMemory()
- 檢查 tainted
ctx.isMemoryTainted()
範例
triton 對 binary taint 的範例
- https://github.com/r888800009/practice/blob/master/pwn/taint.py
- https://github.com/r888800009/practice/blob/master/pwn/taint.c
注意事項
- 幾點要注意的是 hooking 之後要另外設置 taint , 否則只設定數值將無法 taint,如果程式本身內部的 code 則 triton 可以處裡
參考
- Dynamic Taint Analysis and Pin: Pwn the world. — A noob’s attempt at blogging.
- Taint tracking Suman Jana
Taint Analysis PWN