piyolog

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

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

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

1.何が起きたの?

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

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

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

www.youtube.com

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

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

対象となる前提条件
  • Apache Log4j 2.0-beta9から2.14.1までのバージョンに該当するLog4jライブラリを利用している。
  • 外部から入力された値をそのままログに出力する処理が実装されている。
  • Log4jの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. 影響を受ける資産を確認する(関係者へ問合せをかける)。影響を受ける場合はLog4jを最新版へ更新する。
  3. ソフトウエアの更新と合わせて攻撃による影響有無を確認する。(SOCなど担当するチームで適切に処理されているかを確認する。)
対応① 最新版への更新
  • 脆弱性への対応が行われたバージョン(2.16.0)に更新する。
バージョン 更新内容
2.15.0(2021年12月10日頃) ・Lookup機能の設定無効化
・JNDI Lookupに対する制限の強化*7
2.16.0(2021年12月13日) ・JNDIの既定での無効化*8
・メッセージ Lookupのサポート削除*9
  • 2.15.0や2.16.0にはJava 8が実行環境に要求されることから、更新がすぐに行えない場合は回避策の適用を検討する。*10
対応② 回避策(更新が行えない場合)

Log4jの更新がすぐに行えない場合、他条件を成立させない対応として回避策が紹介されている。

回避策 具体的な対応内容
Lookup機能の無効化(2.10以上で利用可) 起動時オプションに-Dlog4j2.formatMsgNoLookups=trueを追加する。
または環境変数にLOG4J_FORMAT_MSG_NO_LOOKUPS="true"を設定する。
PatternLayoutの変更(2.7以上で利用可) Log4jの設定ファイル中に存在する%m%m{nolookups}に変更する。この指定によりLookupが実行されなくなる。
特定classの削除(2.0-beta9以上で利用可) Log4jからJndilookup.classファイルを削除する。
zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class

WAFなどセキュリティ製品やサービスで遮断への対応状況が公表されている。シグネチャをバイパスできないかと検証*11も行われており、多層防御の1つとして組み入れることが望ましい。

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

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

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

  • 暗号資産のマイナーが設置される *13 *14
  • MiraiなどのLinuxボットネットに感染する *15
  • 認証情報を窃取する。*16
  • Cobalt Strikeに感染する。*17
CVE-2021-44228の実証コードやツール

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

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

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

CVE CVE-2021-44228
深刻度 Critical
CVSSv3(base) 10.0(The Apache Software Foundation評価)
種類 RCE
報告日 2021年11月24日
修正版公開日 2021年12月10日頃
報告者 Alibaba Cloud Security Team ChenZhaojun氏
脆弱性の通称 Log4shell
本当に深刻なの?
  • SANS ISC(Internet Strom Center)はinfoconのThreat LevelをYellowに変更した。Yellowは新規の重大な脆弱性の評価が行われており影響が未知数の状況を示す。影響緩和のための対策を迅速に行うことが推奨されている。
  • Yellowになるのは2017年のWannaCryから4年ぶりとなる。それ以前の脆弱性ではHeartbleed、ShellshockもYellowと評価された。
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

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

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

関連タイムライン

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

主な更新履歴