はじめて学ぶバイナリ解析 を読んだ

はじめて学ぶバイナリ解析 不正なコードからコンピュータを守るサイバーセキュリティ技術 を読み終えました。

概要

VMware や VirtualBox のような仮想環境を用いて、以下のトピックを手を動かしながら学ぶ。

  • 脆弱性とは何か
  • アセンブラについて
  • バイトオーダー(リトルエンディアン)について
  • メモリレイアウトについて(スタック領域)
  • レジスタについて
  • アセンブリを書いてシステムコールを使う(int 0x80)
  • gdb-peda の使い方
  • リターンアドレスの書き換え、ret2libc
  • shellcode

私は 4 回に分けて 3 時間ほどで読み終えました。事前知識としてアセンブリ等はすでに知っていたので、この分野をよく知らなかったらもう少し時間がかかっていたと思います。

この本の良さは「バイナリ解析は理論と観測の 2 つのアプローチを交えて動作を解析することが大切」という本の中で出てくる言葉に集約されていて、理論面(紙とかにメモリレイアウトを書く)、観測(gdb を動かして様子を観察する)を両方行うことが大切だと感じました。同時に、ステップアップして理解していけるような例を構成できる力も大事だなと思いました。

できるようになったこと

  • スタック、特に ESP とかの動きを自信を持って答えられるようになった
  • リトルエンディアンについて、気にしなきゃいけない状態の条件をきっちり理解した
  • 32bit で SSP 無効 ASLR オフでのバッファオーバーフローの Exploit が書けるようになった
  • ret2libc と shellcode を部分的に理解した
  • int 0x80 を使ったシステムコールのアセンブリでの呼び方を理解して実際に書いた

本を読んでいる途中気づいたこと

  • 仮想環境の環境構築の話: VMware を使った。ova を google drive からダウンロードしてそのまま VMware で開ける雰囲気がするがうまく行かない。本にも書いてあるが、ova ファイルは解凍できるので解凍して ovf ファイルをインポートしよう。
  • 仮想環境の環境構築の話: ovf ファイルをインポートするときにインポートに何回か失敗する。Document 以下にディレクトリを作ろうとして Windows Defender にブロックされていたことが原因だった。
  • Ubuntu の設定の話: キーボード配列はデフォルトで日本語なので、US キーボードなら settings を開いて日本語を消すと US のみになる。

今後やりたいこと

  • セキュアコーディング系の読み物を読む: https://www.jpcert.or.jp/securecoding/ など
  • ret2libc と shellcode の理解が浅いので、手を動かして学ぶ(例題探す)
  • pwntools, gdb-peda の使い方を、簡単な例題と共にチートシート作る https://github.com/bet4it/hyperpwn これ気になるので使ってみたい
  • SSP, ASLR などのセキュリティ機構を調べる