piyolog

piyokangoの備忘録です。セキュリティの出来事を中心にまとめています。このサイトはGoogle Analyticsを利用しています。

Log4jの深刻な脆弱性CVE-2021-44228についてまとめてみた

2021年12月10日、Javaベースのログ出力ライブラリ「Apache Log4j」の2.x系バージョン(以降はLog4j2と記載)で確認された深刻な脆弱性を修正したバージョンが公開されました。セキュリティ関係組織では過去話題になったHeartbleedやShellshockと同レベルの脆弱性とも評価しています。ここでは関連する情報をまとめます。

1.何が起きたの?

  • Javaベースのログ出力ライブラリLog4j2で深刻な脆弱性(CVE-2021-44228)を修正したバージョンが公開された。
  • 広く利用されているライブラリであるため影響を受ける対象が多く存在するとみられ、攻撃が容易であることから2014年のHeartbleed、Shellshock以来の危険性があるとみる向きもあり、The Apache Software Foundationも脆弱性の深刻度を最高(Critical)と評価している。
  • 脆弱性に関連したスキャンや攻撃への悪用が報告されており、脆弱性の悪用による影響発生を考慮した対応が推奨されている。

2.脆弱性を悪用されると何が起きるの?

  • 脆弱性を悪用された場合、機密情報の窃取やリモートから任意コード実行(CVE-2021-44228)、サービス拒否攻撃(CVE-2021-45046)が行われる恐れがある。
  • Log4j2 には特定の文字列が出力されるログ中に含まれる場合、変数として置換する Lookup と呼称される機能が存在する。例えば、この機能を使って日付や環境情報などを動的に出力する。
  • 2.0-beta9以降にJNDI(Java Name and Directory Interface)のLookup機能が実装されており、このJNDI Lookup機能を悪用することでLDAPやRMIを使い外部の通信先や内部パスからclassファイルの読み込みを行わせたり、アプリケーション上でローカル class をインスタンス化したりすることで、任意のコードを実行が可能。またDNSを使い外部へサーバー内の情報(例えば環境変数)を送信することもできる。*1
  • インターネットに公開されているシステムでJavaが利用されていない場合も、接続された別のシステムにおいて入力された値がそのまま引き渡されログ出力されるのであればJavaを利用するバックエンドのシステムが影響を受ける可能性がある。
f:id:piyokango:20211213100933p:plain
LDAPを用いた攻撃の流れと各ポイントでの対策(GovCERT.chの記事より概要図を引用)
脆弱性(CVE-2021-44228)デモ動画

www.youtube.com

3.影響を受ける条件は何?

次の条件をすべて満たす場合、脆弱性の影響を受ける可能性がある。影響を受ける最初のバージョン(2.0-beta9)のリリース日は2013年9月14日である*2ことから、8年前からリリースされているシステムやソフトウエア、アプライアンスなどでJavaを利用している場合は影響を受けている可能性を前提に対応することが推奨される。Log4j2のライブラリが存在するかはlog4j-core-*.jarの名称に合致するファイルを探したり、実際に利用しているか確認する手段として-verbose:classオプションを使った探し方がある。

対象となる前提条件
  • 次のLog4j2に該当するライブラリ(log4j-core)を利用している。
CVE-2021-44228 Apache Log4j 2.0-beta9から2.14.1 (2.15.0-rc1も含まれる)
CVE-2021-45046 Apache Log4j 2.0-beta9から2.15.0
  • 外部から入力された値をそのままログに出力する処理が実装されている。
  • Log4j2のMessage Lookup機能が有効になっている。(2.14.1まで既定設定は有効)

(訂正-2021/12/14)実行環境のバージョンに係わらず任意のコード実行が可能であったため、「特定のバージョン以下のJava利用時」について3の条件および4の回避策から記載を削除。

1.x系への影響

既にサポートが終了している1.xバージョンも脆弱性の影響を受けることが検証で確認されている*3が予め構成を変更している必要があり、2.xと比較して相当にリスクは低いと評価されている。なお、既に1.xはサポートが終了していることから今回の問題にかかわらず早々に後継のライブラリへ移行することが推奨されている。(1.xの関係者はSLF4J/logbackに移行することを推奨している。)

〇影響が限定的とされる理由

  • 2.xで問題となったLookup 機能は1.xのバージョンには実装されていない。
  • JMS Appenderが有効の場合に影響を受ける可能性も検討されたが、デシリアライズされることはなく単なる文字列として受け取るため、1.xの開発者(ceki氏)により否定された。*4
  • Log4jの構成を変更することで影響を受ける状況を構築できる*5が、第三者が設定ファイルを変更できる前提を考慮すると外部から不正なコードをダウンロードさせる必要はなく、直接不正なclassファイルを設置するだけでよいともceki氏が指摘している。*6

4.脆弱性にどう対応すれば良いの?

緊急性の高い脆弱性であることから、詳細把握と並行(あるいは優先)して攻撃影響を緩和する対応を行うことが推奨される。

  1. Javaを利用するシステムでリスク受容が可能かを最優先で評価し、必要に応じて低減策(アウトバウンド通信の制限、一時的なサーバー停止など)を講じる。
  2. 影響を受ける資産を確認する(関係者へ問合せをかける)。影響を受ける場合はLog4j2を最新版へ更新する。
  3. ソフトウエアの更新と合わせて攻撃による影響有無を確認する。(SOCなど担当するチームで適切に処理されているかを確認する。)
対応① 最新版への更新
  • 脆弱性への対応が行われたバージョン(2.16.0、または近々リリースされる2.12.2)に更新する。
  • Javaの実行環境に起因して更新が行えないなどの場合は回避策の適用を検討する。*7
利用しているJava 推奨対応策
Java 7 2.12.2に更新(2021年12月14日リリース)
Java 8 以上 2.16.0に更新(2021年12月13日リリース)
それ以外 回避策の適用を検討

また2.16.0への更新による影響は次の通り。

  • JNDIの既定での無効化 *8
  • メッセージ Lookup機能の削除 *9
対応② 回避策(更新が行えない場合)

Log4j2の更新がすぐに行えない場合は回避策として、classpathから特定の class ファイル(Jndilookup.class)を削除する。zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

対応③ 攻撃有無の確認
  • 不審なプロセスの起動、第三者によるファイル作成が行われていないかを確認する。
  • 出力されたログを確認する際は、cheat sheetで記載されているようなバイパスで用いられる文字列(jndiで検索にかからない可能性も考慮)やログの出力タイミング(リアルタイムに出力されるとは限らないことから)に留意する。
不適切な「Log4shell対策」

この記事でも過去掲載していた内容など、脆弱性の回避策として紹介された方法の中には、長期的な観点からみた有効性や回避手段の存在を理由に適切ではない対策があるとして注意が呼び掛けられている。以下はその例。

不適切な対策 理由
①Javaを最新に更新する 直接 class を読み込ませる以外にApache Tomcatなどではアプリケーション上でローカル class をインスタンス化する方法でコード実行される恐れがある。またコード実行には到らずとも情報窃取やDoS攻撃を受ける恐れがある。
②WAF一辺倒での対策 HadoopやSparkなどの内部データパイプラインや、デスクトップアプリはWAFでは保護されない。またフィルターに依存した単純な対策を行うWAFの場合は抜けが発生する恐れもある。
③PatternLayoutの変更(%m%m{nolookups}

④Lookup機能の無効化(起動時オプションに-Dlog4j2.formatMsgNoLookups=trueを追加。または環境変数にLOG4J_FORMAT_MSG_NO_LOOKUPS="true"を設定)
Lookupが行われる可能性のあるコードが残っており、これらの設定が行われていたとしても特定のシナリオでコード実行が行われる恐れがある。

5.既に悪用はされているの?

  • 2021年12月1日にCVE-2021-44228のExploitを初めて確認したとCloudflare CEOのMatthew Prince氏が投稿。Cisco Talosも12月2日に悪用を観測したことを報告しており、影響有無の確認を数週間広げて行うことを強く推奨している。*11
  • 2021年12月10日頃より、脆弱性を悪用するアクセスが多数確認されているとしてCloudflareやimpervaが報告している。Cloudflareが遮断したピークは1分当たり2万回impervaは1時間当たり28万回を数えるまでに至っている。Fastlyも同様の傾向を報告している。
  • Microsoftは中国、イラン、北朝鮮、トルコの国家支援を受けているとみられるグループ、アクセスブローカーとして追跡している複数のグループによる悪用を確認したと報告。*12

スキャニング行為以外の悪用の動きとして次のケースがTwitterやセキュリティ関連組織より報告されている。

  • 暗号資産のマイナーが設置される *13 *14
  • MiraiなどのLinuxボットネットに感染する *15
  • 認証情報が窃取される。*16
  • Cobalt Strikeに感染する。*17
  • ランサムウエアに感染する。(確認事例:Khonsariランサムウエア
CVE-2021-44228の実証コードやツール

脆弱性を検証する実証コードやツール類もGithubに複数公開されている。リモートコード実行を直接確認しているものが存在する可能性を考慮し、実行前に挙動確認を十分に行う必要がある。

脆弱性のテストサイトも公開されている。

6.脆弱性の詳細を知りたい

CVE CVE-2021-44228 CVE-2021-45046
深刻度 Critical Moderate
CVSSv3(base) 10.0
(The Apache Software Foundation評価)
3.7
(The Apache Software Foundation評価)
種類 RCE DoS
報告日 2021年11月24日 2021年12月14日
修正版公開日 2021年12月10日頃 2021年12月14日
報告者 Alibaba Cloud Security Team ChenZhaojun氏 iCConsult Kai Mindermann氏
脆弱性の通称 Log4shell
本当に深刻なの?
  • SANS ISC(Internet Strom Center)はinfoconのThreat LevelをYellowに変更した。Yellowは新規の重大な脆弱性の評価が行われており影響が未知数の状況を示す。影響緩和のための対策を迅速に行うことが推奨されている。
  • Yellowになるのは2017年のWannaCryから4年ぶりとなる。それ以前の脆弱性ではHeartbleed、ShellshockもYellowと評価された。その後14日夜にCNNがトップニュースとして取り上げられ広く周知されたことを理由にGreenへ戻されている。*18
f:id:piyokango:20211213020430p:plain
ISCの2021年12月13日のページの様子
  • WannaCryの攻撃阻止に係わったセキュリティ研究者 Marcus Hutchins氏も「非常に悪い」と評価している。

7.公式情報や注意喚起は出ている?

影響を受けていると公表されているサービスや製品の例
Redhat RHSB-2021-009 Log4Shell - Remote Code Execution - log4j
Oracle Oracle Security Alert Advisory - CVE-2021-44228
VMware VMSA-2021-0028.1
Kaseya Log4j2 Vulnerability Assessmen
cPanel log4j CVE-2021-44228, does it affect Cpanel?
IBM Security Bulletin: Vulnerability in Apache Log4j affects WebSphere Application Server (CVE-2021-44228)
Splunk Splunk Security Advisory for Apache Log4j (CVE-2021-44228)
Fortinet Apache log4j2 log messages substitution (CVE-2021-44228)
Minecraft IMPORTANT MESSAGE: SECURITY VULNERABILITY IN JAVA EDITION
Twilio Twilio’s Response to the Log4J Vulnerability

影響無しと確認された製品情報もアップデートが進められている。以下は2021年12月13日時点で影響を受けない製品を掲載しているベンダ。

製品別に影響の有無を整理されたページも公開されている。

関連タイムライン

日時 出来事
2021年11月24日 Alibaba Cloud Security TeamがThe Apache Software Foundationへ脆弱性について報告。
2021年12月9日 TwitterにLog4j2のJNDI Lookupを使用したRCEに関する投稿が行われる。*19
2021年12月10日 Alibaba Cloud Security Teamがリリース候補(rc1)にバイパスされる脆弱性が含まれていることを確認。
同日 脆弱性を修正したApache Log4j 2.15.0がリリース。
同日 CVE-2021-44228を悪用する攻撃活動が多数観測され始める。
2021年12月13日 DoSの脆弱性修正やJNDIの既定無効化等が行われたApache Log4j 2.16.0がリリース。
2021年12月15日 Java 7 向けの修正版であるApache Log4j 2.12.2がリリース。