Skip to content

Dec 16, 2021

Taniumを活用してCVE-2021-44228 “Log4Shell”に対応する

By タニウム合同会社

Threat Response、Reveal、Complyをお使いのお客様には、この記事で検出と修復のためのソリューションをご紹介しています。

Threat Response、Reveal、Complyをお持ちでないお客様には、これらの製品のPOCライセンスについて、お問い合わせフォームから問い合わせください。

Taniumを初めてご利用になるお客様で、無料でご利用になりたい場合は、このリンクをクリックして、必要な機能を備えたTanium Cloudを入手してください。

概要
Apache Log4j 2におけるゼロデイ脆弱性が12月9日にGitHubで公開されました。Log4j 2.16.0以前のバージョンで意図しない外部からのコード実行が行われる脆弱性を保有することから、CVE-2021-44228と認定されました。

また、12月14日にはCVE-2021-45046が認定されました。これは直近で公開されていた暫定対策やLog4jのアップデートが不完全だったことによるものです。この記事ではCVE-2021-45046を踏まえて対策をまとめています。

Log4j 2はオープンソースで提供されるJavaのロギングライブラリーであり、幅広いエンタープライズアプリケーション、オープンソースソフトウェアないし多くのサービスが依存関係にあると推定されます。Log4jを活用したシステム構成は多岐にわたることから、影響範囲の特定ならびに対処は非常に困難になっています。

このブログでは、タニウムの各種モジュールを活用して自社システムに当該脆弱性の存在有無を確認する方法、ならびに各種タニウムのパッケージを用いて暫定対策を行い、影響を最小化、ソフトウェアパッチを適用・バージョンアップグレードを迅速に行う方法を記載しております。

本脆弱性のTaniumソリューションへの影響について
当社のセキュリティチームが行った調査の結果、今回のCVE-2021-44228ならびにCVE-2021-45046にかかる脆弱性が当社提供ソリューションに影響がないことが確認されています。詳細についてはこちらからご確認いただけます。

一方で、Tanium Complyモジュールをお使いのユーザ様で、Tanium Scan Engineではなくサードパーティ製のスキャンエンジン(例えばCIS-CATなど)をご使用されている場合、今回の事象の影響を受ける可能性がありますのでご注意ください。

Taniumソリューション自身はLog4jを活用していませんが、カスタムコンテンツをご利用されているユーザ様の場合は、Log4jを使用している可能性もあります。Tanium Clientフォルダに脆弱性をかかえるLog4jが存在する場合は、カスタムコンテンツの作成者にエクスプロイトの可能性をご確認ください。

・Taniumユーザの方へ:脆弱性を抱える可能性のあるインスタンスを検索する

Tanium Revealを活用した調査
Tanium Revealモジュールは影響を受けやすいデータを可視化するためのツールです。このツールを活用することで、log4jインスタンスやベンダがlog4jを活用して再パッケージした製品を特定することが可能になります。具体的なlog4j検索結果イメージは下記の通りです。
 

 
シナリオ1:Tanium Revealを活用してlog4jのQuick Searchを行う
下記のステップでQuick Searchを作成することで、Log4jライブラリを活用するJAR, EARまたWARファイルを検索できます。
1.Tanium Revealワークベンチから、Quick Searchを開き、Textにlog4jと入力します
2.Search Parametersを選びます
3.Add FilterからFile Typeを選びます
4.File TypeからZIPを選びます
5.Searchボタンをクリックし、結果を確認します

シナリオ2:正規表現をつかったルールを作成する
1.Tanium Revealワークベンチの右側に表示されるギアのアイコンを選択します。
2.Pattern Definitionタブを選択する。
3.Download Pattern Definitionsを選び、ダウンロードする。
4.ダウンロードした.jsonファイルの編集をする前にバックアップを作成されることを推奨します。ここから、.jsonファイルを編集し、Filters>Patternセクションに下記のパターンを追加します。
 
   “pattern”: {
   “CVE_2021_44228_Simple_Match_v2”: {
   “displayName”: “Apache Log4j CVE-2021-44228 simple match v2”,
   “regex”: {
   “pattern”: “(?i)(log4j)”
   }
   },
   “CVE_2021_44228_Version_Number_v6”: {
   “displayName”: “Apache Log4j CVE-2021-44228 version match v6”,
   “regex”: {
   “pattern”: “\b(2\.([02-9](\.[012]|\-(beta9|rc[12]))?|1([013-5][.0-9]+|2\.[01])?))\b”
   }
   },
   “CVE_2021_44228_JndiLookup_v1”: {
   “displayName”: “Apache Log4j CVE-2021-44228 JNDILookup v1”,
   “regex”: {
   “pattern”: “($i)(JndiLookup)”
   }
   },

具体例:
 

 
5.修正後の.jsonファイルをアップロードします。
6.Reveal>Rules>Create a Ruleの順に選択し、下記の通り設定します。
(1)Rule NameにCVE-2021-44228-Log4J Versionsを指定するもの
 ① File Type = Zip というフィルタを設定(JAR, WAR, EARすべて対象)
 ② パターンにApache log4j CVE-2021-44228 simple match v2ならびにApache log4j CVE-2021-44228 v6.を指定
 ③ Saveをクリック
(2)Rule NameにCVE-2021-44228-JndiLookupを指定するもの
 ① File Type = Zip というフィルタを設定(JAR, WAR, EARすべて対象)
 ② パターンにApache log4j CVE-2021-44228 JndiLookup v1を指定
 ③ Saveをクリック
7.Reveal>Rule Setsを選択
 ① New Rule Setを選択します
 ② NameにCVE-2021-44228を指定
 ③ RuleにCVE-2021-44228-Log4J Versions, CVE-2021-44228-JndiLookupを指定
 ④ Target Computer Groups に適切な対象グループを記載してください。なお、ここで指定したエンドポイントにIndexならびにRevealがインストールされるので、慎重に設定ください
 ⑤ Saveをクリック
8.Reveal>Rulesを選択
9.Deploy All Rule setsをクリック

この検索結果で表示されるシステムすべてが脆弱性を抱えるわけではないことをご留意ください。すでに暫定対応策が施されている場合や、JREバージョンの組み合わせによっては、log4jを使っていても脆弱性を攻撃される可能性が最小化されていることもあります。

Tanium InteractとTanium Indexを組み合わせて検索する
Tanium Indexを活用されている場合、Index – File Detailsセンサーを使うことでApache Log4j2のjarファイルとバージョンを確認可能です。クエリの具体例は:
Get Index – File Details[30,*,*log4j-core*.jar,*,*,*,*,*,*,0,0,””,””] from all machines with Index – File Exists[*,*log4j-core*.jar,*,*,*,*,*,*,0] equals Yes

なお、Tanium Threat Responseのversion3.3よりも古いバージョンをお使いの場合は上記に代えて下記のQuestion文を投入してください。
Get Index Query File Details[0,*,*log4j-core*.jar,*,*,*,*,*,30] from all machines with Index Query File Exists[0,*,*log4j-core*.jar,*,*,*,*,*] contains Yes

このQuestion文では、Apache Log4j2 Core Jarファイルならびに、その格納されているディレクトリパス、バージョン情報、ファイルサイズ、ハッシュといった詳細情報を取得可能です。ここで獲得された情報すべてが脆弱性を持つわけではありません。しかしながら、これらの情報から具体的にどのシステムをより詳細に調査すべきかの判断材料となることは間違いないでしょう。

Apacheソフトウェア財団はJndiLookpupクラスをlog4j-core jarから削除することを推奨しています。JNDILookup.classが存在しそうなロケーションについては、下記のQuestion文によって検索可能です。なお、このQuestion文だけではすべてのJNDILookupを見つけることは難しいので(jarファイルがネストされいてる場合など)、より詳細についてはTanium Revealのガイドをご参照ください。
 
Get Index – File Details[10,*,JndiLookup.class,*,*,*,*,*,*,0,0,””,””] from all machines with ( Is Windows contains true and Index – File Exists[*,JndiLookup.class,*,*,*,*,*,*,0] equals Yes )

脆弱性を抱える可能性のあるソフトウェアをプロセスのコマンドラインから検索することも可能です。これにより、もともとlog4jの稼働を確認できていなかったアプリケーションが実際にはlog4jライブラリにアクセスしているといった情報を確認可能となります。
 
Get Command Line of Process[java] having Command Line of Process:Command Line contains log4j from all machines

Tanium Threat Responseを活用する
エクスプロイトの兆候を特定する
サーバログを確認することで、エクスプロイトの兆候をみつけるYARAルールがGithubで公開されています。Tanium Threat ResponseではYARAルールをインポートすることが可能です。緊急時にあたっては、特にYARAルールやIOCといったセキュリティインテリジェンスの活用に留意されることをおすすめします。セキュリティインテリジェンスを本番環境で活用する上でのベストプラクティスはこちらをご確認ください。

YARAルールの投入方法:
  1.Tanium Threat Responseを開き、Intel > Documentsの順に選択します
  2.Addをクリックし、Upload IOC(s)を選択します
  3.必要なルールを含んだ.yaraファイルを選択してアップロードします
 
注意事項:
  • YARAを投入する際は、ファイル拡張子が.yaraになっていることを確認してください。
  • YARAルールをインポートしたあとで、インテリジェンスドキュメントのスキャン対象範囲が適切に設定されているか確認してください。インテリジェンスによっては、(メモリ上の)すべての動的なファイルにアクセスするものもありますし、特定の場所にあるファイルのみをスキャンする場合もあります。このYARAルールの実装にあたっては、/var/logのファイルパスに対してスキャンすることを推奨します。
  • Tanium Threat Responseを活用したYARAルールの詳しい設定方法はこちらをご覧ください。
 


ハッシュ値を使って脆弱性のあるjarファイルを特定する
当該脆弱性を含むバンドルやファイルのハッシュ値が特定されています。これらのハッシュ値のインテリジェンスをTanium Threat Response に取り込んでスキャンを実施することも可能です。
 
  1.Threat Responseを開き、Intel > Documentsの順に選択します
  2.Addをクリックし、Quick Addを選択します
  3.Detect WhenフィールドでFile Hashを選択し、Matchesフィールドにハッシュ値情報をペーストします。下記のスクリーンショットはQuick Add IOCsの具体例です:
 

 
  4.Saveをクリックし、インテリジェンス情報が処理され、ハッシュ値が適切に追加されたかUIで確認します
  5.これらのハッシュ値ですぐに対象端末に対してスキャンを実施したい場合は、Actionsボタンをクリックし、Quick Scanを選択します
  6.検索対象となるComputer Groupを選択し、Runボタンをクリックしてください。検知対象のハッシュ値を持つファイルが見つかった場合、該当端末やファイル情報がアラートタブに表示されます。
  7.Reputation ServiceのCustom Hash Listにこれらのハッシュ値を登録することで検知することも可能です。ただし、Quick Scanオプションを活用いただいた方が、より迅速に検索をかけることができますので、今回のlog4jのような緊急度の高い案件の際にはより有用です。

Tanium Complyを活用する
脆弱性の情報を含んだCVEの定義が継続的に更新されるため、Tanium Vulnerability Libraryは24時間おきに更新されます。本記事を執筆している時点では、CVE定義はDebian 9-11, Elasticsearch rpmならびにdpkgに限定されています。Tanium Complyを活用して脆弱性に該当するインスタンスをCVE定義から容易に特定することが可能です。またCVE定義による特定以外にこのガイドに基づいて脆弱性を確認することも重要です。

Tanium ComplyにバンドルされているTanium Scan Engineをスキャンエンジンとしてご利用されているお客様には影響はございませんが、別途CISから提供されるCIS-CATをスキャンエンジンとしてご利用されている際には、当該脆弱性の影響がございます。
脆弱性が修正されたCIS-CATが提供されるまでの間、下記のスクリーンショットを参考にCIS-CATを無効化されることを推奨します。
 

 
活用されているComplyエンジンのバージョンを確認するクエリ
Get Comply – All Engine Versions?maxAge=60 from all machines with Comply – All Engine Versions contains ciscat

CVE-2021-44228の影響を最小化する方法
推奨される対応はlog4jのバージョンを2.16.0+に早急にアップグレードすることです。一方でアップグレードが難しいような環境に向けて、Apacheソフトウェア財団からはそれぞれのバージョンに対して次のような暫定対応策が発表されています。

推奨されている手順:
 • log4j1.xはすでにサポートが終了していますので、Log4j2にアップグレードを検討ください。バージョン1.xについては2015年以降セキュリティの検証は行われていません
 • Java 8以降のユーザは2.16.0 へのアップグレードを検討ください
 • Java 7 をお使いのユーザは2.12.2が入手可能になるタイミングでのアップグレードを検討ください
 
なお、暫定対応策として:
 JNDILookupクラスをクラスパスから削除してください

JNDILookup.classを削除する
Log4j2バージョンが2.10以前の場合、クラスパスからJndiLookupクラスを削除する必要があります。下記のコマンドラインは良く使われる一例となります:
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

脆弱性を抱える可能性のあるインスタンスを検索するセクションで記載した方法でこれらのjarファイルならびにバージョンを確認することが出来ます。影響される可能性のあるjarファイルからJndiLookup.classを削除するZipコマンドをTaniumパッケージとしてビルドしてください。

Windows端末上では、下記のクエリでJndiLookup.classが存在するロケーションがIndexされます。
Get Index – File Details[10,*,JndiLookup.class,*,*,*,*,*,*,0,0,””,””] from all machines with ( Is Windows contains true and Index – File Exists[*,JndiLookup.class,*,*,*,*,*,*,0] equals Yes )

ファイルを削除するためには:
  1.Select Allを有効化します(または、個別に選択してもかまいません)
  2.Deploy Actionをクリックします
  3.作成したパッケージを選択します
  4.Deployします

注意:タニウムではこれらのリスク回避方法の実施にあたっては、実際に当該システムの管轄部門とセキュリティ部門(Taniumソリューション利用部門)が事前に協議されることをお勧めします。上記プロセスに基づいてJndiLookup.classを用いてJndiManagerを削除することで、JndiContextSelectorならびにJMSAppenderが利用できなくなります。詳しくは、8u 121 Update リリースノートをご確認ください。

使用中のソフトウェアにパッチを適用する
各ベンダーからもアナウンスが出ていますが、お使いのエンタープライズソフトウェアがLog4j2脆弱性との依存関係があるか確認し、ある場合は適切なバージョンにアップグレードすることを推奨します。12月13日にApacheソフトウェア財団からは2.16.0のリリースされています。これはCVE-2021-44228の脆弱性を修正する、先にリリースされたバージョン2.15.0を更に改変したものです。2.16.0ではJNDI はデフォルトで無効化されています。

※このブログは、この英文ブログの抄訳です。英文ブログが更新・編集されるタイミングにより、本ブログと内容が異なる場合がございますが、この点予めご了承ください。
ご不明点がございましたら、こちらよりお気軽にお問い合わせください。


編集履歴
2021年12月17日 日本語版公開