NFLabs. エンジニアブログ

セキュリティやソフトウェア開発に関する情報を発信する技術者向けのブログです。

Volatility 3のシンボルテーブルを手動で作成する

こんにちは。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の場合、オンラインであれば必要なファイルを自動でダウンロードします。一方で、LinuxMacOSの場合は、一部のシンボルテーブルは公開されていますが、多くの場合は自分で作成する必要があります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)で出題されたイメージファイルを解析するために必要です。

  1. linux-image-unsigned-4.15.0-142-generic-dbgsymをダウンロード
  2. 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/symbolsvmlinux-4.15.0-142-generic.jsonを置く

おわりに

本記事では、Linuxにおけるシンボルテーブルの手動作成方法を説明しました。 NFLabs. アドベントカレンダー5日目は、「教育手法」の調査研究とNFLabs.研修への導入です。