アプリケーションセキュリティ
シンボリック実行
別称: シンボリック解析, コンコリック実行
定義
具体的な値ではなく記号値を入力としてプログラムを実行し、各パスの制約を SMT ソルバで解いて欠陥を発見するプログラム解析手法。
シンボリック実行エンジンは、プログラム入力を数学的変数として扱い、条件分岐ごとにパスを分けて探索します。各パスは一階論理の制約を蓄積し、Z3 などの SMT ソルバが充足可能性を判定し、可能ならそのパスに到達する具体的な入力を生成します。これにより、オーバーフロー、ゼロ除算、汚染がシンクに到達するなどのバグ条件の到達可能性を形式的に証明できますが、パス爆発と制約の複雑さに悩まされます。KLEE、angr、Manticore などのツールがファザー支援、深い脆弱性の発見、バイナリの安全性検証に用いられます。
例
- C 言語ライブラリに対して KLEE を用い、各分岐に到達してアサートを発火させる入力を生成する。
- angr と AFL++ を組み合わせ、ファジングだけでは越えられない制約を解く。
関連用語
ファジング(Fuzz Testing)
プログラムに大量の不正・ランダム・想定外な入力を与え、クラッシュ・メモリ破壊・セキュリティ脆弱性を自動的に発見するテスト手法。
カバレッジガイド付きファジング
ターゲットを計装してコードカバレッジを測定し、未踏のパスに到達する入力を進化させることで、バグ発見効率を大幅に高めるファジング手法。
ミューテーションファジング
正常な既存サンプルを、ビット反転・バイト挿入・ファイルの結合などでランダムに変異させて新たな入力を作るファジング戦略。
SAST(静的アプリケーションセキュリティテスト)
ソースコード・バイトコード・バイナリを実行せずに自動解析し、インジェクションや安全でない API、弱い暗号などのセキュリティ欠陥を検出する手法。
バッファオーバーフロー
メモリ安全性の欠陥で、確保済みバッファの末尾を超えて書き込みが行われ、隣接メモリが破壊されてしばしばコード実行を可能にする。
Secure Coding
Secure Coding — definition coming soon.