Tanium Threat Responseを使ったApache Log4j脆弱性の可視化
本ブログではTanium Threat Response(THR)モジュールの機能を使って組織内で利用されているApache Log4jのインスタンスを検索する方法を紹介します。また、公開されているPoCを元に本脆弱性を検証し、Log4Shellを狙った攻撃や侵害の検知・調査や脅威ハンティングなどの考察についてご紹介します。
THRモジュールのIndex機能を使ってファイル名からApache Log4jを検索
はじめにTHRモジュールのIndexのファイル検索機能を使ってLog4jのファイルを検索する例を紹介します。Apache Software Foundation[1]から提供されているLog4jライブラリのファイル名のパターンは log4j-core-###.jar (###はバージョン番号)となっています。 またこちら[2]にリスト化されている脆弱性に該当するLog4jファイルのリストからもlog4j-core-###.jarであることが確認できます。Indexではファイル名やファイルパスに対して正規表現や*(ワイルドカード)を利用したファイルの全台検索が可能です。検索パターンにワイルドカードを使って、ファイル名 *log4j*-core*.jar を指定した検索の例が以下になります。
[THRバージョン3.4以降のQuestion例]
[THRバージョン3.3までのQuestion例]
THR3.4+でのQuestion文作成例
THR3.4+での検索結果例
Indexによるファイルの検索はQuestion実行時に各端末のファイルシステム全体を検索するのではありません。Index機能は事前に端末上にあるファイルのメタ情報(ファイル名、ファイルパス、サイス、タイムスタンプ、ハッシュ値など)をカタログ化して各端末上で管理しており、Question実行時にはこのカタログから検索を行うため、数万台規模を対象にしたファイル検索であっても数秒〜数分で結果を得ることが可能です。上記の例ではファイル名からLog4jのファイルを検索しましたが、ハッシュ値が分かっている場合は同様にIndexを使ってハッシュ値による全台検索も可能です。
Indexによるファイルの検索結果をもとに本脆弱性に対する影響があるか調査・判断
Indexによる検索ではLog4j関連のファイルをファイル名から検索することができます。この検索結果から本脆弱性に対して影響があるのか判断するためには、見つかったLog4jのファイルのバージョンおよび、どのアプリケーションで利用されているのか、また場合によっては特定したアプリケーションのベンダー情報なども確認する必要があります。
Indexを使った検索ではLog4jが別名のJARファイルに変更されている場合や、Log4jのJARファイルが別のJARファイルの中に入れ子になって利用されている場合は検索できません。このような場合はTanium Revealモジュールの機能を使ったファイルの中身に対する検索が必要です。(Revealを使った検索はこちらのブログとこちらのブログをご参照ください。)
THRモジュールのセンサーを利用して実行中のプロセスからApache Log4jを検索
JARファイルの入れ子のイメージ
次に紹介するのは実行中のプロセスからの検索方法です。THRモジュールには実行中のプロセスの一覧をさまざまな情報(ハッシュ値、ロードされたモジュール、コマンドラインなど)と共に取得することが可能です。 今回は実行中のJavaのプロセスの中で実行時のコマンドラインで明示的にLog4jのプロジェクトやクラスを指定しているものがあるか検索してみます。Questionで実行中のプロセス名の中に java の文字を含みかつ、そのプロセスのコマンドライン(引数)に log4j が含むものを検索する例です。
[Question例]
コマンドラインによる検索結果例
この場合、検索結果には実行中のJavaのプロセスパスなどの情報も含まれるため、どのJavaのアプリケーションなのか容易に判断できる可能性もあります。
THRモジュールのDetect機能を使ってファイルハッシュ値からApache Log4jを検索
THRのIndexによるファイル検索は、ファイルのハッシュ値による検索も可能ですがTHRのDetectの機能を使ってアラート検知させることも可能です。前提として、本脆弱性に該当するLog4jファイルのハッシュ値が判明している必要があります。今回の例では公開されているlog4j-core-###.jar ファイルのMD5ハッシュ値をOpenIOCとしてTHRに取り込み、スキャンからアラート検知までの流れを紹介します。
ます始めにこちら[2]からMD5ハッシュ値のリストをコピーします。次にTHRモジュールの Intel => Documents から Add をクリックし Quick Add を選択します。 Detect when のプルダウンメニューから File hash を選択してコピーしたハッシュ値を貼り付けます。最後に Intel document name にルール名を入力して Save するとOpenIOCが作成されます。
ハッシュ値のQuick AddによるOpenIOCの作成例
作成したOpenIOC を使って対象の端末に対してスキャンを実行し、定義されたハッシュ値と同じ値をもつファイルが端末に存在していればアラート検知します。THRによるスキャンは実行時に都度ファイルのハッシュ値を計算するのではなく、Index機能によってすでに計算されたファイルハッシュ値に対して検索が行われます。そのためスキャンによる端末への負荷を減らしつつ高速にスキャンを実行できるようになっています。
ファイルハッシュ値とOpenIOCによるアラート検知の例
Tanium Threat ResponseによるApache Log4j脆弱性を狙った攻撃の追跡についてはこちら
参考リンク
[1] Apache Software Foundation: Log4j – Download Apache Log4j 2 :こちら
[2] CVE-2021-44228-Log4Shell-Hashes:こちら
[3] log4shell-vulnerable-app:こちら
[4] signature-base/yara/expl_log4j_cve_2021_44228.yar:こちら
ブログ記事に関してご質問やご要望がございましたらこちらからお問い合わせください。