前回 は、「詳解セキュリティコンテスト: CTFで学ぶ脆弱性攻略の技術 Compass Booksシリーズ」という書籍を、引き続き読み進めていて、シェルコードの章を読みました。
今後も、「詳解セキュリティコンテスト」を、引き続き読み進めるつもりなのですが、今回は、「ゼロからマスター!Colab×Pythonでバイナリファイル解析実践ガイド (エンジニア入門シリーズ)」という書籍を入手したので、こちらをざっと読んで、概要だけでも、まとめておこうと思います。
目次を見ると、だいたいの内容は予想ができると思いますが、メインは、Python を使って、バイナリファイルを解析するということです。対象のバイナリファイルは、プログラム、画像ファイル、アーカイブ、文書ファイルなどです。このあたりは、フォレンジックの分野でもあるので、CTF にも役立ちそうです。
それでは、やっていきます。
参考文献
今回、題材にさせて頂いた「バイナリファイル解析 実践ガイド」です。
はじめに
「セキュリティ」の記事一覧です。良かったら参考にしてください。
セキュリティの記事一覧
以下は「ゼロからマスター!Colab×Pythonでバイナリファイル解析実践ガイド (エンジニア入門シリーズ)」のサポートサイトです。問題ファイルをダウンロードすることが出来ます。
github.com
では、書籍の章を参考に書き進めていきます。
第1章:バイナリ解析に向けた準備運動
ここでは、Colab の紹介、Python の基本、バイナリ解析で使う Python の機能の紹介などが書かれています。ここは、パラパラと見た程度です。
少しだけメモしておきます。私は、bytes型を扱うとき、hex関数で表示させることが多いのですが、hex関数の引数に区切り文字を指定できることを初めて知りました。
>>> ee = "バイナリ解析".encode()
>>> ee
b'\xe3\x83\x90\xe3\x82\xa4\xe3\x83\x8a\xe3\x83\xaa\xe8\xa7\xa3\xe6\x9e\x90'
>>> ee.hex()
'e38390e382a4e3838ae383aae8a7a3e69e90'
>>> ee.hex(" ")
'e3 83 90 e3 82 a4 e3 83 8a e3 83 aa e8 a7 a3 e6 9e 90'
>>> ee.decode()
'バイナリ解析'
次の章に進みます。
第2章:バイナリファイルの操作
ここでは、バイナリファイルを Python で扱う方法について丁寧に説明されています。後半では、バイナリファイルをダンプするプログラムや、stringsコマンドの自作など、バイナリファイルを扱うことに慣れるような内容が続きます。
あとは、情報エントロピーを用いて、バイナリファイル全体を俯瞰して分析すること行い、その解説がされています。
次の章に進みます。
第3章:バイナリファイルの構造解析の練習:画像ファイル
ここでは、画像ファイル(BMP、PNG、JPEG形式の順)について、各バイナリフォーマットについて解説されていて、その後、Python を使って、具体的なバイナリファイルを使って実際に解析していきます。
ここまで読んできて、この書籍の方向性は、バイナリファイルを解析するツールを Python で自分で実装することで、バイナリファイル自体の理解を深めるという方法のようです。
この章の最後に、コラムとして、「なぜ便利なライブラリがあるのに自作するのか」が書かれています。その目的は、「便利なライブラリがなくても自力でなんとかする力をつけて欲しい」、「ライブラリでは気付けない情報がバイナリファイルに含まれていることを知ってほしい」ということだそうです。
うーん、これは「はじめに」とかで書いてほしいところですね(笑)。
第4章:バイナリファイルの構造解析 実践編:コンテナファイル(アーカイブ、文書ファイル)
ここでは、ZIPファイル、PDFファイルについて、第3章と同様に、ファイルフォーマットの解説を通じて、各ファイルについて深掘りして説明がされています。特に、PDFファイルは、いろいろな拡張がされたり、何か別のものが埋め込まれたりとm、CTF でも出題頻度が高いと思うので、基本が身に着くと思います。
次の章に進みます。
第5章:応用編1 バイナリファイル解析の道具箱(Binary Refinery)
ここでは、Binary Refinery という、バイナリファイルを解析するための Pythonベースのツールについて、90ページぐらいの分量で説明がされています。
今回は細かく読めませんでしたが、バイナリファイルの解析を専門的に行う場合に使われているツールかな、という感じでした。このツールを使われている方にとっては、貴重な書籍なんだと思います。
第6章:バイナリファイルの構造解析 実践編:実行ファイル
ここでは ELF形式のプログラムファイルを題材として、ELFファイルのフォーマットについての解説や、アセンブラコードの読み方の解説が行われています。
35ページぐらいの分量です。前章のボリュームと比較すると少ないですね。そういう方向性の書籍だということです。
第7章:応用編2 バイナリファイル解析の実践 CTF
ここでは、CTF のリバースエンジニアリングの問題を題材として、Python で逆アセンブラを解析していく方法について説明されています。
40ページぐらいの分量です。また、ツールは、Python と親和性が高いことが理由なのか、radare2 が使われています。IDA や、Ghidra を使われている方にとっては注意ですね。
後半では、Python のバイトコードの解析について説明があります。解説の分量は少なめですが、全く知らないと、CTF の問題を解くのは難しいので、一度は読む価値があると思います。
Python のバイトコードの CTF の問題としては、以前、以下の記事で、picoCTF 2024 の Reverse Engineering の weirdSnake という問題で扱ったことがあります。
daisuke20240310.hatenablog.com
第8章:応用編3 機械学習を用いたバイナリ解析 ~マルウェアの種類推定を例に~
ここでは、マルウェア解析を題材として、機械学習によって、バイナリファイルの解析を効率化する方法について解説されています。
具体的には、逆アセンブラして、アセンブラ命令を特徴量として、word2vec を用いて、学習を行います。学習に使われるデータセットは、6つのマルウェアカテゴリが含まれており、マルウェアではないものは入っていません。つまり、マルウェアかどうかを判定するのではなく、マルウェアと分かっている前提で、どの種類のマルウェアなのかを判定する機械学習ということです。マルウェアではないデータも含めて判定する方法については、環境構築の方法までが解説されています。
最近だと、LLM を使っていることが多そうですが、ここでは、マルウェア解析に機械学習を使う場合の基本的な技術や手法を学ぶことが出来る(雰囲気を知ることが出来る)と思います。
おわりに
今回は、「ゼロからマスター!Colab×Pythonでバイナリファイル解析実践ガイド (エンジニア入門シリーズ)」をざっくり読みました。これからバイナリファイルの解析を本格的にやってみたい方が、最初に読む書籍としていいと思います。ただ、Python を使って解析することが前提となっていて、ちょっと偏ってるような気はしました。
また、Colab を使うことが前提になっていることも気になりました。Colab は Python しか使わない人にとってはいいツールだと思いますが、実際は、いろんなツールと組み合わせて取り組むことが多いので、Linux と Colab のやり取りが面倒だと感じました。
最後になりましたが、エンジニアグループのランキングに参加中です。
気楽にポチッとよろしくお願いいたします🙇
今回は以上です!
最後までお読みいただき、ありがとうございました。