全体の基本解析フロー(双葉1号とする):
Day 2 双葉はシンボリック実行エンジンを設計する
Execution Loop
命令を評価
初期State
Active States
更新済State
State
push
pop
push
Active Statesが空
または
時間切れ
…Stateの集合
State
現在のレジスタ、スタック、
メモリの状態をシンボル値や
具体値で表したものの集合
(スナップショットに近い)
Stateが複数になることも
無くなることもある
解析終了
求解 ここで
制約追加OK
解析開始
10
バイナリ萌えの彼女がシンボリック実行に恋着していますが、制約に挑む幼気な表情が最高です!(1)
Slide 11
Slide 11 text
State Branching:
条件分岐を含んだコードの実行例
xの値を場合分けして子のStateを生成→条件分岐に対処!
Day 2 双葉はシンボリック実行エンジンを設計する
if (x < 5) {…} …
x = α (α : Int)
code
α < 5 α ≧ 5
true false
SymExec
S
S'T
S'F
… Symbolize x
(declare α)
… if statement
11
バイナリ萌えの彼女がシンボリック実行に恋着していますが、制約に挑む幼気な表情が最高です!(1)
Slide 12
Slide 12 text
Execution Loop (双葉1号とする) :
Day 2 双葉は実装上の問題点に気づいた
問題点1:レジスタのシンボル化をどう実現するか?
問題点2:命令をどう数学的に表現するか?
ActiveStates ← {S_init}, SuccessStates ← φ
while ActiveStates ≠ φ:
Dequeue S from ActiveSates according R // Rはヒューリスティック関数
p is program counter of S
I ← FetchInstruction(p)
S* ← Eval(I, S)
for S’ in S*:
next_pc is program counter of S’
if next_pc in find: // findに至るStateは成功→あとで求解
SuccessStates ← SuccessStates ∪ {S’}
else:
ActiveStates ← ActiveStates ∪ {S’} // そのStateで解析を継続
return assertions of SuccessStates // それぞれのStateの制約集合のみ返す
12
1 2
バイナリ萌えの彼女がシンボリック実行に恋着していますが、制約に挑む幼気な表情が最高です!(1)
• Drew Davidson et al., FIE on Firmware: Finding Vulnerabilities in Embedded
Systems Using Symbolic Execution, USENIX Security Symposium, 2013.
https://www.semanticscholar.org/paper/FIE-on-Firmware-Finding-
Vulnerabilities-in-Embedde-Davidson-
Moench/b642d797f87d6a5c875acb7c43e2f057daf386a9
• JonathanSalwan/Triton, https://github.com/JonathanSalwan/Triton
参考資料
18
バイナリ萌えの彼女がシンボリック実行に恋着していますが、制約に挑む幼気な表情が最高です!(1)