baicai

白菜

一个勤奋的代码搬运工!

オープンソースツールを使用したLinuxメモリフォレンジック

Volatility を利用してアプリケーション、ネットワーク接続、カーネルモジュール、ファイルなどの状況を特定します。

コンピュータのオペレーティングシステムとアプリケーションは、さまざまなタスクを実行するために主メモリ(RAM)を使用します。この揮発性メモリには、実行中のアプリケーション、ネットワーク接続、カーネルモジュール、オープンファイル、およびほぼすべての他の内容に関する大量の情報が含まれていますが、これらの情報はコンピュータが再起動するたびに消去されます。

メモリフォレンジックは、メモリからこれらの貴重な情報を見つけて抽出する方法です。Volatility は、この種の情報を処理するためにプラグインを使用するオープンソースツールです。しかし、1 つの問題があります:これらの情報を処理する前に、物理メモリをファイルにダンプする必要がありますが、Volatility にはその能力がありません。

したがって、この記事は 2 つの部分に分かれています:

  • 第一部は、物理メモリを取得し、それをファイルにダンプすることに関するものです。
  • 第二部は、Volatility を使用してこのメモリダンプから情報を読み取り、処理します。

私はこのチュートリアルで以下のテストシステムを使用しましたが、これは任意の Linux ディストリビューションで動作します:

必要なパッケージのインストール#

開始する前に、必要なツールをインストールします。Debian ベースのディストリビューションを頻繁に使用する場合は、apt-get コマンドを使用できます。これらのパッケージは、コードをコンパイルするために必要なカーネル情報とツールを提供します:

部分 1:LiME を使用してメモリを取得し、ファイルにダンプする#

メモリを分析する前に、使用するメモリダンプが必要です。実際のフォレンジック活動では、これは破損したり侵入されたシステムから来る可能性があります。これらの情報は通常、侵入がどのように発生したかとその影響を分析するために収集され、保存されます。利用可能なメモリダンプがない場合は、テスト VM のメモリダンプを取得し、それを使用してメモリフォレンジックを実行できます。

Linux メモリエクストラクター(LiME)は、Linux システム上でメモリを取得するために非常に一般的なツールです。以下のコマンドを使用して LiME を取得します:

LiME カーネルモジュールのビルド#

src フォルダーで make コマンドを実行します。これにより、.ko 拡張子のカーネルモジュールが作成されます。理想的には、make が終了すると、lime.ko ファイルは lime-.ko という形式にリネームされます。

LiME カーネルモジュールのロード#

今、システムメモリを取得するためにカーネルモジュールをロードする時が来ました。insmod コマンドはカーネルモジュールをロードするのに役立ちます。モジュールがロードされると、システム上で主メモリ(RAM)を読み取り、メモリの内容をコマンドラインで指定された path ディレクトリのファイルにダンプします。もう 1 つの重要なパラメータは format です。lime の形式を保持します。カーネルモジュールを挿入した後、lsmod コマンドを使用して本当にロードされたかどうかを確認します。

path コマンドに指定したファイルが作成されているはずで、そのファイルサイズはシステムの物理メモリ(RAM)サイズと同じであるはずです(驚くことではありません)。メモリダンプを取得したら、rmmod コマンドを使用してそのカーネルモジュールを削除できます:

メモリダンプには何が含まれていますか?#

このメモリダンプファイルは、file コマンドを使用して見ることができるように、単なる生データです。手動で理解することはできません;はい、ここにはいくつかの ASCII 文字がありますが、エディタでこのファイルを開いて読むことはできません。hexdump の出力は、最初の数バイトが EmiL であることを示しています;これは、上記のコマンドラインでのリクエスト形式が lime であるためです:

部分 2:Volatility を取得し、メモリダンプを分析する#

今、分析するためのサンプルメモリダンプがあります。以下のコマンドを使用して Volatility ソフトウェアを取得します。Volatility は Python 3 で書き直されていますが、このチュートリアルでは Python 2 で書かれた元の Volatility パッケージを使用しています。Volatility 3 を試したい場合は、適切な Git リポジトリからダウンロードし、以下のコマンドで Python 3 を使用してください:

Volatility は特定の機能を実現するために 2 つの Python ライブラリを使用するため、以下のコマンドを使用してそれらをインストールします。そうしないと、Volatility ツールを実行するときにいくつかのインポートエラーが表示される可能性があります;これらのライブラリが必要なプラグインを実行している場合を除き、無視できます。その場合、ツールはエラーを報告します:

Volatility の Linux プロファイルをリストする#

実行する最初の Volatility コマンドは、利用可能な Linux プロファイルをリストします。Volatility コマンドの主要なエントリポイントは vol.py スクリプトです。Python 2 インタープリタを使用して呼び出し、--info オプションを提供します。出力を絞り込むために、Linux で始まる文字列を探します。ご覧のとおり、リストされている Linux プロファイルはあまり多くありません:

自分の Linux プロファイルを構築する#

Linux ディストリビューションは多様であり、異なるアーキテクチャのために構築されています。これが、プロファイルが必要な理由です ——Volatility は、メモリダンプがどのシステムとアーキテクチャから取得されたかを知る必要があります。これらの情報を見つけるためにいくつかの Volatility コマンドがありますが、この方法は時間がかかります。速度を上げるために、以下のコマンドを使用してカスタム Linux プロファイルを構築できます:

Volatility リポジトリの tools/linux ディレクトリに移動し、make コマンドを実行します:

新しい module.dwarf ファイルが作成されるはずです。また、/boot ディレクトリにある System.map ファイルも必要です。これは、現在実行中のカーネルに関連するすべてのシンボルを含んでいます:

カスタムプロファイルを作成するには、Volatility ディレクトリに戻り、以下のコマンドを実行します。最初のパラメータはカスタム.zip ファイルを提供し、ファイル名は自分で命名します。私は通常、オペレーティングシステムとカーネルバージョンを使用して命名します。次のパラメータは前に作成した module.dwarf ファイルで、最後のパラメータは /boot ディレクトリにある System.map ファイルです:

これでカスタムプロファイルが準備できましたので、前述の場所で.zip ファイルが作成されたかどうかを確認してください。Volatility がこのカスタムプロファイルを検出したかどうかを確認するには、再度 --info コマンドを実行します。今、リストされた内容の中に新しいプロファイルが表示されるはずです:

Volatility の使用を開始する#

これで、本格的なメモリフォレンジックを行う準備が整いました。Volatility はカスタムプラグインで構成されており、メモリダンプに対して情報を取得できます。コマンドの一般的な形式は次のとおりです:

この情報を使用して、linux_banner プラグインを実行し、メモリダンプから正しいディストリビューション情報を識別できるかどうかを確認します:

Linux プラグインの見つけ方#

ここまで順調に進んでいるので、すべての Linux プラグインの名前を見つける方法に興味があるかもしれません。簡単なテクニックがあります:--info コマンドを実行し、linux_文字列をフィルタリングします。さまざまな目的に使用できるさまざまなプラグインがあります。ここに一部を示します:

linux_psaux プラグインを使用して、メモリダンプ時にシステム上で実行されているプロセスを確認します。リストの最後のコマンドに注意してください:これは、ダンプの前に実行した insmod コマンドです。

システムのネットワーク状態を知りたいですか?linux_netstat プラグインを実行して、メモリダンプ中のネットワーク接続の状態を見つけます:

次に、linux_mount プラグインを使用して、メモリダンプ中にどのファイルシステムがマウントされていたかを確認します:

どのカーネルモジュールがロードされているかを知りたいですか?Volatility はこれに対しても linux_lsmod プラグインを提供しています:

どのファイルがどのプロセスによって開かれているかを知りたいですか?linux_bash プラグインを使用してこれらの情報をリストできます:

どのファイルがどのプロセスによって開かれているかを知りたいですか?linux_lsof プラグインを使用してこれらの情報をリストできます:

Linux プラグインスクリプトの位置にアクセスする#

メモリダンプを読み取り、これらの情報を処理することで、さらに多くの情報を得ることができます。Python ができて、これらの情報がどのように処理されるかに興味がある場合は、すべてのプラグインが保存されているディレクトリに移動し、興味のあるものを選択して、Volatility がこれらの情報をどのように取得しているかを確認できます:

私が Volatility を好む理由は、さまざまなセキュリティプラグインを提供しているからです。これらの情報は手動で取得するのが難しいです:

Volatility は、メモリダンプ内でシェルを開くこともできるため、上記のすべてのコマンドの代わりにシェルコマンドを実行して同じ情報を得ることができます:

次のステップ#

メモリダンプは、Linux の内部を理解するための良い方法です。Volatility のすべてのプラグインを試して、それらの出力を詳しく調べてください。そして、これらの情報が侵入やセキュリティ問題を特定するのにどのように役立つかを考えてください。これらのプラグインの動作を深く理解し、改善を試みてください。やりたいことのプラグインが見つからない場合は、1 つを書いて Volatility に提出し、他の人も使用できるようにしてください。

参考文献#

オープンソースツールを使用した Linux メモリフォレンジック [1]

このオープンソースツールを使用して Linux メモリフォレンジックを実行する [2]

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。