今週は、Sysjokerと呼ばれる新しいマルウェアの検体と、Linuxのメモリ・フォレンジックのガイドを取り上げます。フォレンジックガイドは包括的ではなく、確かに完全な詳細ではありませんが、Volatilityを使ったメモリ抽出・解析プロセスの基本を理解するのに役立つかもしれません。
Sysjoker バックドア
最近では 投稿者:Intezerは、複数のOS上で動作可能な新しいバックドアを解析しました。分析結果によると、「Sysjoker」は、macOS、Linux、およびWindows上で実行可能です。 Sysjokerは、システムアップデートとして潜伏し、さまざまな方法でコマンド&コントロール(C2)サーバーのIPアドレスを隠したり変更したりします。
また、VirusTotalのスキャンでサンプルがクリーンだったことも気になりますが、これはこのバックドアがかなり新しいものであることを示しているのかもしれません。システムに感染するために使用する方法は、さまざまなOSで異なりますが、いったんシステムに定着すると、C2サーバとの通信を開始します。Intezerは、この分析の中で、C2サーバーからの次の段階の命令をまだ見ていないと述べています。この投稿では、マルウェアを検出するためにメモリスキャナを使用することを提案しています。
フォレンジック分析を行うもう一つの方法は、メモリをダンプして、Volatility のような有名なツールで分析することです。古いバージョンの Linux カーネルでは、dd のようなコマンドラインツールを使って /dev/mem から仮想メモリをコピーすることで、メモリをダンプすることができましたが、セキュリティ上の問題があるため、この方法は推奨されていません。
Linuxメモリフォレンジック
フォレンジック分析とは、証拠の収集、証拠の分析、セキュリティ・インシデントの結果の文書化に使用されるさまざまな手法とまとめることができます。セキュリティ侵害が確認された後、侵害されたシステムで何が起こったのかをよりよく理解するために、通常、フォレンジック分析が行われます。しかし、ここでは、使用可能な方法論とツールの一部を示すために、侵害された Linux システムのメモリ分析を実際に行うことにします。
メモリ
RAMは本質的に揮発性のものです。機能するためには一定の電力が必要で、システムが再起動するたびにリセットされます。Linuxでは、メモリに保存されたデータを/dev/memディレクトリの下に保持していますが、最近のディストリビューションでは、このパーティションを使ってメモリから人工物を直接取り出すことはできません。これは、Linuxカーネル4.16から、この機密パーティションへのアクセスを禁止するオプション(CONFIG_STRICT_DEVMEM)がデフォルトで有効になっているためです。
これにより、メモリイメージの取得が困難になりますが、敵対者(および経験の浅いユーザー)がシステムに壊滅的なダメージを与えることも困難になります。このオプションが無効になっている場合、システムにルートアクセスできる攻撃者は、memデバイスを使用してカーネルに直接コードを注入することができます。
このデモのために、私たちのデータセンターの1つで、ホスト名「forensics」のDebian 9 Linodeを立ち上げました。このforensicsボックスは、構築・解析環境の一例として設定しました。これらの作業を外部のマシンで行う必要はありませんが、証拠を保持しているコンピュータに手を加えることは好ましくありません。ここでは、解析の手順を紹介します。
- 同じOSとカーネルビルド/バージョンのマシンを使って、侵害されたシステムのVolatilityプロファイルを作成します。
- お好みのツール(このデモではAVML)でメモリをダンプします。
- プラグインの助けを借りてVolatility用に作成したプロファイルを使用して、ダンプされたメモリを検査します。
警告
Volatility3では現在進行中の互換性の問題があるため、デモのためにVolatilityのPython 2リポジトリを使用します。Python 2のサポートは2020年に終了していることを認識しています。これは厳密には、制御された環境でのツールの使用を実証するためのものです。このガイドに従ってみたいという方は、ご自身の責任で行ってください。
要求事項
デフォルトでは、Debian 9 Linodes には、このデモで使用するいくつかのツールがありません。以下のコマンドで全てのツールをインストールしてから、他の手順に進むことをお勧めします。
sudo apt install make git zip dwarfdump linux-headers-$(uname -r) python-pip python-distorm3 python-crypto
ボラティリティー
Volatility Frameworkは、揮発性メモリ(RAM)サンプルからデジタルアーティファクトを抽出するために、GNU General Public Licenseの下、Python で実装された完全にオープンなツール群です。
メモリダンプを解析する際には、正しいVolatilityプロファイルを使用することが重要です。プロファイルとは、カーネルのデータ構造やデバッグシンボルに関する情報を含むファイルで、メモリイメージを適切に解析するために使用できます。幸い、Volatilityでプロファイルを作成するのは非常に簡単です。また、Volatilityプロファイルのリポジトリをチェックして、いくつかのプリビルドされたプロファイルを入手することもできます。
プロフィールの作成
必要なツールをインストールしたら、実行するマシンに合わせてVolatilityプロファイルの構築を開始します。
1. git clone https://github.com/volatilityfoundation/volatility ~/volatility
2. cd ~/volatility/tools/linux/
3. make
4. zip ~/$(lsb_release -i -s)_$(uname -r).zip ./module.dwarf /boot/System.map-$(uname -r)
5. cp ~/$(lsb_release -i -s)_$(uname -r).zip ~/volatility/volatility/plugins/overlays/linux/
6. python ~/volatility/vol.py --info
最初の行(1)では、Volatilityリポジトリをユーザーのホームディレクトリにクローンします。(2) ~/volatility/tools/linuxディレクトリに入ることで、make (3) を使用してカーネルのモジュールを再コンパイルできます。あらかじめカーネルのヘッダーをダウンロードしておくことが重要で、そうしないとこのプロセスは失敗するかもしれません。
この結果、module.dwarfが生成されます。次のコマンド(4)では、このモジュールを使って/bootからシステムマップを読み取り、Volatilityで使用する必要のあるプロファイルを生成します。次に、このプロファイル(5)を正しいディレクトリにコピーして、Volatilityが使用できるようにします。最後に、プロファイルがVolatilityに正しくロードされたことを確認するために、infoフラグを付けてVolatilityを1回実行します(6)。すべての手順が成功すれば、出力の[Profiles]セクションにカスタムプロファイルが表示されます。
隠れたカーネルモジュールのインストール
この例では、HiddenWallを使用して隠れたLinuxカーネルモジュール(LKM)を生成し、「cantfindme」という名前を付けて、「forensics」マシンと同じカーネルビルド/バージョンの別のDebian 9 Linodeにロードしています。モジュールはロードされていますが、システム上でlsmodやmodprobeを実行しても見ることができません。
メモリの取得
Linuxでメモリをダンプするのに使える優れたツールがありますが、このガイドでは、LiMEがウェブで頻繁に取り上げられていることから、AVML(Acquire Volatile Memory for Linux)を紹介します。AVMLは、Microsoft社が作ったLinux用のオープンソースのメモリ取得ツールです。ここで最新のリリースを見つけて、メモリをダンプしたいマシンにバイナリをダウンロードしてください。メモリをダンプするコンピュータは、先に生成したVolatilityプロファイルと同じカーネル/OSビルドとバージョンでなければならないことを覚えておいてください。
実際のシナリオでは、収集した証拠が法廷で認められるようにするために、危険なシステムに手を加えないことが重要です。また、可能な限り画像を圧縮しないことも重要です。なぜなら、ビットごとに取得することで、圧縮された画像では得られないデータが得られる可能性があるからです。
AVMLのバイナリをホームディレクトリにダウンロードした後、以下のコマンドでシステムのメモリをホームディレクトリにダンプすることができます。
sudo ~/avml ~/output.lime
AVML はメモリを LiME 形式でダンプするので、作成した Volatility プロファイルを使って分析を開始できます。また、ダンプのサイズをチェックして、デバイス上の総RAMと一致しているかどうかを確認することもできます。Volatilityはメモリダンプを改ざんしてはいけませんが、ファイルのコピーを作成し、両者のハッシュが一致することを確認した上で、オリジナルではなくコピーされたデータを分析するのが良いでしょう。
pwnd」ボックスのメモリをダンプした後、「forensics」ボックスに転送して解析しています。
Volatilityプラグイン
Volatilityには、フォレンジックアナリストを支援する数多くのプラグインが用意されています。これらのプラグインのリストは、Githubページに掲載されています。Volatilityのプラグインを使用すると、メモリイメージの概要をすばやく把握することができます。メモリイメージを分析するためのコマンドフォーマットを以下に示します。
python ~/volatility/vol.py -f <path_to_memory_dump> --profile=<profile>
<plugin_name> <plugin_options>
これは、メモリイメージから隠れてロードされたカーネルモジュールをリストアップするlinux_hidden_modulesプラグインの出力です。
このプラグインは、悪意のある可能性のある隠れた Linux カーネルモジュールを見つけるのに役立ちます。システム上でlsmodを実行したときにこれらのモジュールが表示されない場合でも、メモリダンプから検出および抽出することができます。linux_moddumpプラグインを使用すると、正規表現パターンでモジュール名を指定するか、メモリイメージ内のモジュールのベースアドレスを指定して、カーネルモジュールをダンプできます。
ボラティリティでできることは、この記事では紹介しきれないほどたくさんあります。ご意見やご提案がございましたら、下記のコメント欄にご記入ください。
コメント (3)
Your guide on Linux memory forensics in the Linode Security Digest is comprehensive and informative. It’s a valuable resource for understanding and enhancing Linux security practices. Thank you for sharing this insightful content!
Thanks for the comprehensive guide on Linux memory forensics! It’s incredibly informative and well-presented.
Excellent guide on SysJoker Linux memory forensics! The thorough analysis and practical tips are incredibly valuable for enhancing security practices. Thanks for sharing this crucial information!