ISBN 9784048931007
実践バイナリ解析 バイナリ計装、解析、逆アセンブリのためのLinuxツールの作り方
概要
Linuxバイナリの静的・動的解析ツールを自作しながら内部構造を深く理解する
想定読者
セキュリティエンジニア・マルウェアアナリスト・ペネトレーションテスター・リバースエンジニアで、解析ツールの仕組みを原理から理解したい実務者。コンピュータサイエンスを体系的に学んできた大学院生にも適している
こんな人には向いていない
- プログラミング経験がなく、アセンブリやリンカの概念に馴染みがない入門者には前提知識の壁が高い
- IDAやGhidraなどの既製ツールを使いこなすための操作ガイドを求める読者には本書の方向性が合わない(本書はツールを作る側の視点)
- Windowsバイナリを主戦場とするアナリストには、本書のLinux・ELF中心の構成は直接応用しにくい
読了後にできるようになること
- ELFおよびPEバイナリフォーマットの構造を実装レベルで説明できる
- libbfdを用いたバイナリローダーを自作し、シンボル解決からロード処理までを実装できる
- 静的解析・動的解析それぞれの手法と適用場面を判断できる
- ELFバイナリへのコード注入(インジェクション)技術を安全に実験・検証できる
- 動的バイナリ計装(DBI)の仕組みを理解し、libdftを使ったテイント解析を実装できる
- Tritonを用いたシンボリック実行でバイナリの動作を自動検証するパイプラインを構築できる
本書のキー概念(章解説)
- 第 1 章 バイナリを解剖する — コンパイル・リンク・ロードの流れを概観する導入章。後続の章を読むための地図になる
- 第 2 章 ELFフォーマット — 本書の主戦場。セクション・セグメント構造を手を動かしながら理解する最重要章
- 第 3 章 入門:PEフォーマット — Windows PEの概要。Linux中心の本書では補足的な位置づけ、読み飛ばしも可
- 第 4 章 libbfdを使ってバイナリローダーを作成する — ツールを自作する醍醐味が最も出る章。実装して初めて理解が定着する
- 第 5 章 Linuxでの基本的なバイナリ解析 — file・objdump・readelf等の標準ツールの限界を実感し、自作ツール動機を理解できる
- 第 6 章 逆アセンブリとバイナリ解析の基礎 — 線形・再帰的逆アセンブルの比較など、逆アセンブラの内部実装を理解する上で欠かせない
- 第 7 章 ELFにコードを注入する — PT_NOTE上書き等の実践的コード注入技法。セキュリティ研究者が特に参照する章
- 第 8 章 逆アセンブリのカスタマイズ — Capstoneを用いた逆アセンブラのカスタマイズ。ツール開発の応用力が身につく
- 第 9 章 バイナリ計装 — DBIフレームワークの仕組みを解説。静的計装と動的計装の違いを実装で学ぶ
- 第 10 章 動的テイント解析 — 情報フロー追跡の理論。11章の実装を読む前に概念を固める
- 第 11 章 libdftを使った実用的な動的テイント解析 — テイント解析の実装。脆弱性検出・マルウェア動作追跡に実務直結する技法
- 第 12 章 シンボリック実行 — プログラム検証・テスト生成に使うシンボリック実行の理論。最も抽象度が高い章
- 第 13 章 Tritonを使ったシンボリック実行 — Tritonフレームワークで実際にシンボリック実行パイプラインを構築する応用章
ハイライト
- バイナリ解析とは、バイナリプログラムとそれに含まれているマシンコードやデータの性質を解析する科学と技術のことだ。セキュリティの脆弱性を狙う攻撃やマルウェアなど、悪意をもつソフトウェアに対処するには、バイナリプログラムの本当の性質を突き止める必要がある(本書がなぜバイナリ解析を学ぶ必要があるかを端的に示しており、実務的動機が最も明確に表れた箇所)
- リバースエンジニアリングの範囲を超えて実践的に解説する。セキュリティエンジニアやセキュリティ研究者、ハッカーやペネトレーションテストの担当者、リバースエンジニア、マルウェアアナリスト、そしてコンピュータサイエンスの学生など、バイナリ解析に興味をもつすべての人を対象とした(本書が単なるツール操作書ではなく、解析技術の原理まで踏み込む実践書であることを示す)
外部からの言及
- CTFやセキュリティ研究コミュニティでは、バイナリ解析ツールを自作する視点で書かれた書籍は少なく、本書のようにlibbfd・libdft・Tritonを使った実装ベースの解説は貴重とされている。既製ツールの使い方ではなく、ツールがどう動くかを理解したい層に向いているという評価が繰り返し見られる(other)
編集メモ
Qiita上での当該ISBNへの直接言及記事は確認できなかったが、原著『Practical Binary Analysis』(No Starch Press)はバイナリ解析分野の体系的入門書として広く参照されており、2022年日本語版(ドワンゴ刊)は専門書として高いカバー範囲を持つ。CTF・セキュリティ研究コミュニティの書籍推薦リストに繰り返し登場している実績から practical と判定
読む前に押さえておきたいこと
- Cプログラミングの基礎(ポインタ・メモリ管理を含む)。コードを読めるだけでなく自分で書ける水準が望ましい
- Linuxコマンドラインの基本操作(file、objdump、hexdumpなどを自分で実行できる程度)
- x86アセンブリの概念的な理解(付録Aで補完可能だが、事前知識があると章の進みが速い)
- OSの基本概念(プロセス・仮想メモリ・システムコール)についての実務経験または学習経験
学習のコツ
- 付録Aの『速習:x86アセンブリ』は通読するより辞書として使う。2章・6章を読み進めながら逐次参照する方が定着が早い
- 4章(バイナリローダー自作)は手を動かして実装してから読むと、その後のlibbfd APIの意味が一気に腑に落ちる
- 3章(PEフォーマット)はLinux環境での実践が主目的の読者なら初読時に飛ばしてよい。後から参照で十分
- 10章(テイント解析理論)と11章(libdft実装)はセットで読む。理論だけで止まらず必ず実装章まで進むこと
- 12章・13章(シンボリック実行)は抽象度が高く時間がかかる。自動化テスト生成や脆弱性発見自動化に関心がある読者以外は後回しにしてよい
出版社による内容紹介
バイナリ解析とは、バイナリプログラムとそれに含まれているマシンコードやデータの性質を解析する科学と技術のことだ。セキュリティの脆弱性を狙う攻撃やマルウェアなど、悪意をもつソフトウェアに対処するには、バイナリプログラムの本当の性質を突き止める、そのプログラムが実際に実行することを突き止める必要がある。 本書は、バイナリプログラムの基礎知識、静的解析や動的解析といったバイナリ解析の基本から、ソースプログラムがなくてもバイナリプログラムの内容を書き換えるバイナリ計装といった高度な手法まで、リバースエンジニアリングの範囲を超えて実践的に解説する。 セキュリティエンジニアやセキュリティ研究者、ハッカーやペネトレーションテストの担当者、リバースエンジニア、マルウェアアナリスト、そしてコンピュータサイエンスの学生など、バイナリ解析に興味をもつすべての人を対象とした、最も魅力的で最も手ごわいテーマであるバイナリ解析入門の決定版である。 第I部 バイナリフォーマット 第1章 バイナリを解剖する 第2章 ELFフォーマット 第3章 入門:PEフォーマット 第4章 libbfdを使ってバイナリローダーを作成する 第II部 バイナリ解析の基礎 第5章 Linuxでの基本的なバイナリ解析 第6章 逆アセンブリとバイナリ解析の基礎 第7章 ELFにコードを注入する 第III部 高度なバイナリ解析 第8章 逆アセンブリのカスタマイズ 第9章 バイナリ計装 第10章 動的テイント解析 第11章 libdftを使った実用的な動的テイント解析 第12章 シンボリック実行 第13章 Tritonを使ったシンボリック実行 第IV部 付録 付録A 速習:x86アセンブリ 付録B libelfを使ってPT_NOTEを上書きする 付録C バイナリ解析ツール 付録D 参考文献
この本がどの学習段階で役立つかは、 関連する ロードマップ から確認できます。