こんにちは。NFLabs. 事業推進部のynです。 この記事はNFLabs. アドベントカレンダー4日目です。
はじめに
2021年7月に、社内の有志でHack The Box Business CTF 2021に参加しました。詳細はHack The Box Business CTF 2021 参加記に記しています。 このセキュリティイベントで出題された問題に、メモリフォレンジックツールであるVolatilityを用いるものがありました。
Volatilityは2020年にバージョン3が公開されましたが、従来のバージョン2と比較して様々な変更点が生じました。 本記事では、変更点の1つであるシンボルテーブルについて、Linuxでの手動作成方法に焦点を当てて説明します。
シンボルテーブル
シンボルテーブルとは、Volatility 2におけるプロファイルに相当するもので、解析対象のイメージファイルに一致する必要があります。
Windowsの場合、オンラインであれば必要なファイルを自動でダウンロードします。一方で、LinuxやMacOSの場合は、一部のシンボルテーブルは公開されていますが、多くの場合は自分で作成する必要があります1。
ゆえに、本記事ではLinuxにおけるシンボルテーブルの手動作成方法を説明します。
Linuxにおけるシンボルテーブルの手動作成方法
はじめに、解析対象のイメージファイルがどのようなカーネル環境で取得されたものかを知っておく必要があります。Volatilityのbanners.Banners
プラグインが参考になります。
$ vol -f dump.mem banners.Banners
その後、デバッグ情報付きのカーネルを入手して、dwarf2json
でシンボルテーブルを作成するという流れになります。
例として、Ubuntu 18.04のlinux-image-unsigned-4.15.0-142-generic
のシンボルテーブルを生成してみます。
これは、Hack The Box Business CTF 2021のCompromised (400pts)で出題されたイメージファイルを解析するために必要です。
linux-image-unsigned-4.15.0-142-generic-dbgsym
をダウンロード- Ubuntuの場合、デバッグ情報付きのパッケージには
dbgsym
やdbg
などが付加します2。 - https://launchpad.net/ubuntu/bionic/amd64/linux-image-unsigned-4.15.0-142-generic-dbgsym/4.15.0-142.146から入手できます。
- Ubuntuの場合、デバッグ情報付きのパッケージには
linux-image-unsigned-4.15.0-142-generic-dbgsym_4.15.0-142.146_amd64.ddeb
を展開し、vmlinux-4.15.0-142-generic
を入手
$ ar x linux-image-unsigned-4.15.0-142-generic-dbgsym_4.15.0-142.146_amd64.ddeb $ tar -xf data.tar.xz $ cd usr/lib/debug/boot/ $ ls vmlinux-4.15.0-142-generic
3. dwarf2json
でシンボルテーブルを作成
$ git clone https://github.com/volatilityfoundation/dwarf2json $ cd dwarf2json $ go build $ ./dwarf2json linux --elf usr/lib/debug/boot/vmlinux-4.15.0-142-generic > vmlinux-4.15.0-142-generic.json
4. volatillity3/volatillity/symbols
へvmlinux-4.15.0-142-generic.json
を置く
おわりに
本記事では、Linuxにおけるシンボルテーブルの手動作成方法を説明しました。 NFLabs. アドベントカレンダー5日目は、「教育手法」の調査研究とNFLabs.研修への導入です。