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ファイルを読み込みし、実行させることが可能となっていた。*1
- インターネットに公開されているシステムでJavaが利用されていない場合も、接続された別のシステムで入力された値がそのまま引き渡されログ出力されるのであればJavaを利用するバックエンドのシステムが影響を受ける可能性がある。
脆弱性のデモ動画
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機能が有効になっている。(既定設定は有効)
- JNDI Injectionの影響を受けるJavaを利用している(6u11、7u201、8u191、11.0.1より前のバージョン)
1.x系への影響
既にサポートが終了している1.xバージョンも脆弱性の影響を受けることが検証で確認されている*3が予め構成を変更している必要があり、2.xと比較して相当にリスクは低いと評価されている。なお、既に1.xはサポートが終了していることから今回の問題にかかわらず早々に2.xに移行することが推奨されている。
4.脆弱性にどう対応すれば良いの?
緊急性の高い脆弱性であることから、詳細把握と並行(あるいは優先)して攻撃影響を緩和する対応を行うことが推奨される。
- Javaを利用するシステムで、リスク受容が可能かを最優先で評価し、必要に応じて低減策(一時的な公開停止やサーバー停止など)を講じる。
- 影響を受ける資産を確認する(関係者へ問合せをかける)。影響を受ける場合はLog4jを最新版へ更新する。
- ソフトウエアの更新と合わせて攻撃による影響有無を確認する。(SOCなど担当するチームで適切に処理されているかを確認する。)
対応① 最新版への更新
対応② 回避策(更新が行えない場合)
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 |
Javaを最新更新 | 実行環境のJavaを最新版に更新する。現在の各バージョンのJavaは次の通り。 6u15、7u321、8u301、11.0.12 |
WAFなどセキュリティ製品やサービスで遮断への対応状況が公表されている。シグネチャをバイパスできないかと検証*9も行われており、多層防御の1つとして組み入れることが望ましい。
- Cloudflare CVE-2021-44228 - Log4j RCE 0-day mitigation
- AWS Apache Log4j2 Issue (CVE-2021-44228)
- Scutum Apache Log4jの任意のコード実行の脆弱性(CVE-2021-44228)について
- Akamai CVE-2021-44228 - Zero Day Vulnerability in Apache Log4j That Allows Remote Code Execution (RCE)
- Microsoft Microsoft’s Response to CVE-2021-44228 Apache Log4j 2
- Paloalto Another Apache Log4j Vulnerability Is Actively Exploited in the Wild (CVE-2021-44228)
- TrendMicro SECURITY ALERT: Apache Log4j "Log4Shell" Remote Code Execution 0-Day Vulnerability (CVE-2021-44228)
- Zscaler Security Advisory: log4j 0-day Remote Code Execution Vulnerability (CVE-2021-44228)
- Google Google Cloud Armor WAF rule to help mitigate CVE-2021-44228 Apache Log4j vulnerability
対応③ 攻撃有無の確認
- 不審なプロセスの起動、第三者によるファイル作成が行われていないかを確認する。
- 出力されたログを確認する際は、cheat sheetで記載されているようなバイパスで用いられる文字列(jndiで検索にかからない可能性も考慮)やログの出力タイミング(リアルタイムに出力されるとは限らないことから)に留意する。
5.既に悪用はされているの?
- 2021年12月10日頃より、攻撃コードを使ったアクセスが確認されているとしてCloudflareやimpervaが報告している。Cloudflareが遮断したピークは1分当たり2万回、impervaは1時間当たり28万回を数えるまでに至っている。Fastlyも同様の傾向を報告している。
- 大半のアクセスは脆弱性の存在を把握する目的とみられるスキャニング行為とみられるが、暗号資産のマイニングが仕込まれる事例も報告されている。またMiraiなどのLinuxボットネットが脆弱性の悪用しているとの報告も行われている。
CVE-2021-44228の実証コードやツール
脆弱性を検証する実証コードやツール類もGithubに複数公開されている。リモートコード実行を直接確認しているものが存在する可能性を考慮し、実行前に挙動確認を十分に行う必要がある。
- https://github.com/takito1812/log4j-detect
- https://github.com/Neo23x0/log4shell-detector
- https://github.com/Cybereason/Logout4Shell
- https://github.com/whwlsfb/Log4j2Scan
- https://github.com/pmiaowu/BurpShiroPassiveScan/
- https://github.com/tangxiaofeng7/BurpLog4j2Scan
- https://github.com/whwlsfb/Log4j2Scan
- https://github.com/xiajun325/apache-log4j-rce-poc
- https://github.com/tangxiaofeng7/CVE-2021-44228-Apache-Log4j-Rce
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 |
- Alibaba Cloud Security Teamの記事
【漏洞预警】Apache Log4j2 远程代码执行漏洞(CVE-2021-44228)
本当に深刻なの?
- SANS ISC(Internet Strom Center)はThreat LevelをYellowに変更した。Yellowは新規の重大な脆弱性の評価が行われており影響が未知数の状況を示す。影響緩和のための対策を迅速に行うことが推奨されている。
- Yellowになるのは2017年のWannaCryから4年ぶりとなる。それ以前の脆弱性ではHeartbleed、ShellshockもYellowと評価された。
- 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?
影響無しとする製品情報もアップデートが進められており、Paloalto、Pulse Secure、SonicWall、ElasticSearchで影響を受ける製品は2021年12月13日時点で確認されていない。有志による影響対象のリストアップも行われているが、実際にリモートコード実行が可能かを検証したわけでは恐らくなく、JNDI LookupからDNSクエリを飛ばしてアクセスを確認したり、資料中からLog4jが該当するバージョンであったりを確認したものとみられる。
参考となる技術情報やメモ
- LunaSec Log4Shell: RCE 0-day exploit found in log4j 2, a popular Java logging package
- log4jの脆弱性について
- log4j2の脆弱性(CVE-2021-44228) - てきとうなメモ
- Azure WAFでlog4jの脆弱性(CVE-2021-44228)対策をしてみる。
- Log4j 2.14.1の脆弱性対応
- Log4j2 脆弱性問題における SpringBoot アプリケーションの検証
- マインクラフトも攻撃されたCVE-2021-44228とはどんな脆弱性か?
- Hacker News https://news.ycombinator.com/item?id=29504755
- Reddit https://old.reddit.com/r/programming/comments/rcxehp/rce_0day_exploit_found_in_log4j_a_popular_java/
関連タイムライン
日時 | 出来事 |
---|---|
2021年11月24日 | Alibaba Cloud Security TeamがThe Apache Software Foundationへ脆弱性について報告。 |
2021年12月9日 | TwitterにLog4jのJNDI Lookupを使用したRCEに関する投稿が行われる。*10 |
2021年12月10日 | Alibaba Cloud Security Teamがリリース候補(rc1)にバイパスされる脆弱性が含まれていることを確認。 |
同日 | 脆弱性を修正したLog4j 2.15.0がリリース。 |
同日 | CVE-2021-44228を悪用する攻撃活動が多数観測され始める。 |
主な更新履歴
- 2021年12月13日 AM 新規作成
- 2021年12月13日 AM 悪用に関する情報を追加、一部表現を修正
*1:https://isc.sans.edu/https://isc.sans.edu/forums/diary/RCE+in+log4j+Log4Shell+or+how+things+can+get+bad+quickly/28120/
*2:https://logging.apache.org/log4j/2.x/changes-report.html
*3:https://github.com/apache/logging-log4j2/pull/608#issuecomment-990661374
*4:https://twitter.com/ceki/status/1469449618316533762
*5:https://github.com/apache/logging-log4j2/pull/608#issuecomment-991723301
*6:https://github.com/apache/logging-log4j2/pull/608#issuecomment-991730650
*7:https://github.com/apache/logging-log4j2/pull/608
*8:https://twitter.com/WeldPond/status/1469313738029289476
*9:https://www.cyberkendra.com/2021/12/log4shell-advisory-resource-cheat-sheet.html