KDOC 232: 『たのしいバイナリの歩き方』
この文書のステータス
- 作成
- 2024-09-01 貴島
- レビュー
- 2024-09-03 貴島
概要
『たのしいバイナリの歩き方』は、セキュリティを題材にとって、バイナリ知識でできることを紹介する本。
メモ
- 無数にあるプログラミング言語の中で、アセンブラが一番「楽しい」を持っている言語だと思った、という(p4)
- ツール(p13)
- Stirling バイナリエディタ
- Process Monitor ファイルとレジストリの監視
- Wireshark ネットワークの監視
- レジストリは、OS(Windows)上で動作するアプリケーションのために用意された、設定情報のデータベースのこと。ブラウザの設定、拡張子の関連付け、ユーザーパスワードなどが保存されている(p17)
- 対象となるプログラムを実行せずに解析する
- 対象となるプログラムを実行しながら解析する
- 作者にとって、バイナリエディタ、電卓、逆アセンブラ、デバッガがリバースエンジニアリングにおいて必須アイテムだという(p24)
- アセンブラは難しいように見えるが、現在はさまざまなツールがそろっており、ことソフトウェア解析に使うアセンブラの知識はほとんど必要ない。IDAなどが表示するアセンブラコードを見ればそのことはわかる(p30)
- 関数内部まで入り込んで実行する
- 関数の呼び出しそのものを1命令として実行する
- ソフトウェア解析とは「何をやっているか調べること」であり、プログラミングとは違う。すべての処理を完全に理解する必要はなく、だいたいの雰囲気がわかればよい((p43))
- 静的解析は「全体を広く眺めるイメージ」、動的解析は「局所的に集中して見つめるイメージ」であるという。最初にStirlingやIDAで全体をざっと眺めたあとに、気になったポイントをOllyDbgでステップ実行していく、といった流れで解析することが多いという(p49)
- ソフトウェア解析の現場ではアセンブラコードを読むことはほとんど日常的であるが、逆にアセンブラコードを書くことはほとんどない。誰もが小説を読めるが、小説を書ける人は少ない。同様に、読むことはできても、書くことができないパターンは多い。プログラミングも同じで、書くことと読むことは必要な能力が違う。書くことで、読み書き両方の能力が鍛えられる。本当にアセンブラの知識を深めたければ、1度アセンブラを書いてみるべきである(p75)
- IsDebuggerPresent は、デバッガでアタッチされているのを検知するAPI関数(p114)
- ソフトウェアブレイクポイントとは、デバッガが該当アドレスの命令を0xCC(int3h)に書き換えるという、とても単純なものである。プロセッサは、「0xCCという命令を見つけたら、OSをとおしてデバッガに例外を通知する」という仕組みになっている。そのため、好きなところに0xCCを書けば、いつでもどこでも処理を停止させられる(p139)
- 中間言語にコンパイルされるタイプの言語、Javaや.NETアプリケーションのリバースエンジニアリングは、デバッガや逆アセンブラを使って少しずつ解析していくのではなく、「どこまで本来のソースコードに近い形に戻せるか」という点が重要になる。また異なるスキルセットが必要となる(p144)
- スタックバッファオーバーフロー。問題なのは、%ebpとret_addrが上書きされること。ret_addrは、処理が終了したあと、mainへ戻るためのアドレスが格納されている。これが上書きされていると、攻撃者はあらゆる場所へ処理をジャンプできる。つまり攻撃者が用意したコードに飛べるのなら、それは「任意のコードが実行できる脆弱性」となる(p164)
- print系関数に起因するフォーマットストリングバグ。print系関数には、%nという引数に渡されたポインタへデータサイズを書き込む変換指定文字がある。これを利用して任意のアドレスに任意の値を書き込める(p189)
- Metasploit を使うと、環境ややりたいことにあわせて、shellcode を自動で生成してくれる。最初は勉強を兼ねて自分で手書きしたほうがいいが、理解したあとはツールを利用するのが効率的である(p285)
- EMETとはマイクロソフトが無料で提供する脆弱性緩和ツール(p320)
ツール。
- OllyDbg(動的解析)
- IDA(静的解析)
関連
- KDOC 210: 『0と1のコンピュータ世界 バイナリで遊ぼう!』。より遊びに重きをおいてバイナリを紹介している