Log4Shell はインターネットの脆弱性で、最近数百万台のマシンに影響を与えました。 Log4j という、あまり知られていないものの、ほぼどこにでも存在するソフトウェアが原因です。
Log4j は、さまざまなコンピューター システムの舞台裏で発生するすべてのアクションを記録するために使用されます。
これは、企業や政府機関でもほとんどのアプリケーションで使用されているオープンソースのログ ライブラリに基づいています。
これまでに発見された中で最悪のサイバー セキュリティ ホールの XNUMX つであるため、この脆弱性からシステムを保護することが重要です。 でも、どうやって?
Log4j の脆弱性を詳細に調べ、それに対する考えられるすべての修正ソリューションを調べてみましょう。
Log4jとは何ですか?
Log4j は、 オープンソースの ソフトウェア開発者がアプリケーション内のさまざまなデータを記録できるようにするロギング フレームワーク。 これは、Apache Logging Services プロジェクトのコンポーネントであり、 Apache Software Foundation.
何百もの Web サイトやアプリが Log4j を使用して、デバッグやその他の用途のためのデータのログ記録などの重要な操作を実行しています。
不適切なオンライン リンクを入力またはクリックして 404 エラー通知が表示される場合、これは Log4j が機能するよくある例です。 アクセスしようとした Web リンクのドメインを実行する Web サーバーは、そのような Web ページが存在しないことを通知します。 また、サーバーのシステム管理者向けにイベントを Log4j に記録します。
ソフトウェア プログラム全体で、同様の診断信号が使用されます。 たとえば、オンライン ゲーム Minecraft では、サーバーは Log4j を使用して、使用された合計 RAM やコンソールに送信されたユーザー指示などのアクティビティをログに記録します。
脆弱性はどのようにして発生するのでしょうか?
ルックアップは Log4j 2.0 で導入された新機能で、ログ エントリに追加情報を組み込むのに役立ちます。 これらのルックアップの XNUMX つは、ディレクトリ サービスと通信するための Java API である JNDI (Java Naming and Directory Interface) ルックアップです。
このアプローチを使用すると、内部ユーザー ID を実際のユーザー名にマッピングできます。 このクエリは、LDAP サーバーによって提供されるデータ型の 4 つが Java クラスを指す URI であるため、新たに発見された RCE 脆弱性を暴露します。Java クラスはメモリにロードされ、LogXNUMXj インスタンスによって実行されます。
Log4j ライブラリの入力検証の脆弱性により、信頼できないソースから任意の LDAP サーバーを挿入する可能性があります。 開発者は、ログに送信されるデータがプレーン テキストとして処理されることを前提としているため、追加の入力検証は行われず、危険なユーザー入力がログに入力されます。
ログ ステートメントは次のようになります。
悪意のあるユーザーは、不正な LDAP サーバーを参照する JNDI ルックアップを URL パラメーターに挿入する可能性があります。 JNDI ルックアップは次のようになります。
次に、Log4j ライブラリは、攻撃者.com にあるこの LDAP サーバーと通信して、Java ファクトリと Java コードベースの値を含むディレクトリ情報を取得します。
これら 4 つの値には攻撃者の Java クラスが含まれており、その後、このクラスがメモリにロードされて LogXNUMXj インスタンスによって実行され、コードの実行が完了します。
誰が危険にさらされていますか?
Log4j の脆弱性は非常に広範囲にわたり、ビジネス アプリケーション、組み込みデバイス、およびそのサブシステムに影響を与えます。 影響を受けるアプリには、Cisco Webex、Minecraft、FileZilla FTP などがあります。
ただし、これがすべてのリストではありません。 この欠陥は、イベント記録に Apache Log2020j を使用する Ingenuity Mars 4 ヘリコプター ミッションにも影響を及ぼします。
セキュリティコミュニティは、 脆弱なシステムのリスト。 これらのリストは継続的に更新されていることに注意することが重要です。そのため、特定のプログラムやシステムが取り上げられていない場合でも、影響を受けないと考えないでください。
この脆弱性にさらされる可能性は非常に高く、たとえ特定の脆弱性があったとしても、 技術スタック は Java を適用しないため、セキュリティ管理者は、重要なサプライヤー システム、SaaS サプライヤー、クラウド ホスティング プロバイダー、および Web サーバー プロバイダーがそうすることを期待する必要があります。
Log4j の脆弱性を確認するにはどうすればよいですか?
最初のステップは、攻撃がすでに発生したかどうかを判断することです。 これを行うには、システム ログで RCE ペイロード フラグメントを確認します。
「jndi」、「ldap」、または「$::」などの用語を検索するとログが得られる場合、セキュリティ研究者はさらに調査して、それが正当な攻撃なのか、それとも単なるフィンガープリントなのかを確認する必要があります。
実地における多くの攻撃では、有害な積載物は届けられなかったことが発見されました。 それにもかかわらず、この攻撃に対して脆弱なアプリの数を判断するためにセキュリティの専門家によって実施されました。
次のステップでは、Log4j ライブラリを使用してすべてのプロジェクトを識別します。 2.0-beta9 から 2.14.1 までのバージョンが使用されている場合、プロジェクトは影響を受ける可能性があります。
この脆弱性が存在する場所を特定するのが難しいことを考えると、プロジェクトが影響を受けやすいと推定し、コード実行の危険性を除去するにはライブラリを更新することが最善の策であると考えることが望ましい場合があります。
使用されているバージョンが 2.0-beta 9 未満の場合、プロジェクトは脆弱ではありませんが、4.x 範囲のバージョンは古く、更新されないため、Log1j ライブラリは引き続きアップグレードする必要があります。
影響を受けやすいプロジェクトが発見された場合でも、Log4j を使用して記録された情報にユーザーが変更できる情報が含まれているかどうかを確認することをお勧めします。 このデータの例としては、URL、リクエスト パラメータ、ヘッダー、Cookie があります。 これらのいずれかが記録されると、プロジェクトは危険にさらされます。
この知識は、システム ログをさらに詳しく調べて、Web アプリケーションがすでに攻撃されているかどうかを判断するのに役立ちます。
Web アプリケーションに脆弱性があるかどうかを検出できる無料のオンライン ツールがあります。 これらのプログラムの XNUMX つは、 Log4Shell ハンター。 オープンソースであり、以下で入手可能です GitHubの.
オンライン アプリケーション内のコードの脆弱な領域が発見された場合、開示されたツールによって提供されるペイロードを使用して、それを Web アプリケーションに挿入できます。 この脆弱性が悪用された場合、テスト ツールは Web アプリケーションとその LDAP サーバーの間に確立された接続を明らかにします。
Log4jの脆弱性を修正するソリューション
最初のステップは Log4j を更新することです。これは、通常のパッケージ マネージャーを使用するか、ここから直接ダウンロードして実行できます。 ページ.
環境変数 FORMAT MSG NO LOOKUPS を true に設定することで、脆弱性の悪用可能性を減らすこともできます。 ただし、この対策は Log4j バージョン 2.10 以上にのみ適用できます。
次に、代替オプションを検討してみましょう。
1. Log4j バージョン 2.17.0 の回避策
Log4Shell から保護するには Log2.15.0j バージョン 4 を使用することを強くお勧めします。ただし、これが不可能な場合は、他のソリューションを使用できます。
Log2.7.0j のバージョン 4 以降: ユーザーが提供したデータに対してパーセント m nolookups 構文を使用して、ログに記録されるイベントの形式を変更することで、あらゆる攻撃から保護することが可能です。 この更新では、Log4j 構成ファイルを編集してプログラムの新しいバージョンを生成する必要があります。 その結果、この新しいバージョンを展開する前に、技術的および機能的な検証段階を繰り返す必要があります。
Log4j バージョン 2.10.0 以降: たとえば、Java 仮想マシンを -Dlog4j2 オプションで起動する場合など、log4j2.formatMsgNoLookups 構成パラメータを true に設定することで、あらゆる攻撃から保護することもできます。 formatMsgNoLookups = true、もう XNUMX つのオプションは、クラスパス引数から JndiLookup クラスを削除することです。これにより、主要な攻撃ベクトルが削除されます (研究者らは、別の攻撃ベクトルの可能性を排除していません)。
アマゾン ウェブ サービスは、「自己責任で利用する必要がある」ホットパッチを提供しています。 「この脆弱性を自分自身に対して利用する」Logout4Shell など、他の「テクニック」も公開されています。 セキュリティ専門家は、「マシンをハッキングして修復する」というこの動きの合法性に疑問を抱いている。
2. この問題は Log4j v2.17.0 で解決されました。
2.10 以降のバージョンの場合: Log4j2.formatMsgNoLookups を true に設定する必要があります。
バージョン 2.0 ~ 2.10.0 の場合: 次のコマンドを実行して、Log4j から LDAP クラスを削除します。
システム設定で Log4j2.formatMsgNoLookups を true に設定する必要があります。
JVM での軽減策
JVM パラメータによる軽減策はオプションではなくなりました。 他の緩和方法も引き続き成功しています。 可能であれば、Log4j バージョン 2.17.0 にアップグレードします。 Log4j v1 用の移行ガイドが提供されています。
更新できない場合は、クライアント側コンポーネントとサーバー側コンポーネントに -Dlog4j2.formatMsgNoLookups = true システム プロパティ セットが設定されていることを確認してください。
Log4j v1 はサポート終了 (EOL) に達しており、バグ修正は提供されないことに注意してください。 他の RCE ベクターも Log4j v1 の影響を受けます。 したがって、できるだけ早く Log4j 2.17.0 にアップグレードすることをお勧めします。
3. 緩和策
ホスト マシンが 4u6、212u7、202u8、または 192 以降の Java バージョンを実行している場合など、場合によっては Log11.0.2j が影響を受けやすい場合でも、現在のエクスプロイトは機能しません。
これは、現在のバージョンの Java Naming and Directory Interface (JNDI) リモート クラス ロード保護が強化されているためであり、攻撃の実行に必要です。
さらに、Log4j バージョン 2.10 より大きい場合、formatMsgNoLookups システム値を true に設定するか、JVM 引数 -Dlog4j2.formatMsgNoLookups = true を指定するか、クラスパスから JndiLookup クラスを削除することで、この問題を回避できます。
それまでの間、脆弱なインスタンスが修正されるまで、次の手法を使用して脆弱性に対処できます。
- 4 以上の場合は、システム プロパティ log2j2.10.formatMsgNoLookups を true に設定します。
- 環境オプション LOG4J FORMAT MSG NO LOOKUPS を 2.10 以上の場合は true に設定します。
- 2.0-beta9 から 2.10.0 へのクラスパスから JndiLookup.class を削除します: zip -q -d log4j-core-*.jar org/apache/logging/log4j/core/lookup/JndiLookup.class
推奨されるベスト プラクティスの XNUMX つは、インターネットへの送信トラフィックを適切なポートのみに制限することです。
現場でのほとんどの攻撃は HTTP 経由で行われますが、この脆弱性は Log4j を使用してユーザー入力データを記録する任意のプロトコル経由で悪用される可能性があります。
ただし、誰かがこの問題に対する追加のアプローチを発見できる可能性があるため、log4j 2.17.0 に更新することが最善の解決策です。 さらに、多くのパブリッシャーやメーカーがサービスやアプリの改善を発表しています。
4. Log4Shell 脆弱性パッチ
Log4j は遍在しており、特にこの脆弱性が悪用されている現在では顕著です。 要約すると、Log4j によって検査されるログに次の文字を含めるだけで済みます。
これにより、URL の末尾にある Java ファイルがダウンロードされて実行されます。 それはドラマチックであると同時に単純でもある。
ご存知のとおり、この Log4Shell の脆弱性 (CVE-2.17.0-4) を修正するには、log2021j をバージョン 44228 以上にアップグレードすることが重要です。
これが不可能な場合:
Log4j ライブラリ バージョン 2.10.0 以降を使用するアプリケーションの場合、構成パラメータ log4j2.formatMsgNoLookups を true に設定することによって、たとえば Java 仮想マシンを -Dlog4j2.formatMsgNoLookups = true で起動することによって、あらゆる攻撃から保護することもできます。オプション。
もう XNUMX つのオプションは、クラスパス引数から JndiLookup クラスを削除することです。これにより、主要な攻撃ベクトルが削除されます (研究者らは、別の攻撃ベクトルの存在を排除していません)。
Note
影響を受けやすいシステムを調整することに躊躇している、または調整したくない組織 (または、追加の安全装置を導入したいが、追加の安全装置を導入したい組織) は、次のことを考慮する必要があります。
- すべてのトラフィックが iSensor/ 経由でルーティングされていることを確認してください。WAF/IPS。 これにより、攻撃者がシステムにアクセスするのを防ぐことができます。
- 影響を受けやすいシステムに到達できるトラフィック量を制限する システムをインターネットに接続する必要がない場合は、アクセスを必要不可欠で信頼できる IPS および範囲のみに制限します。
- ホストの許可された送信トラフィックを削減します。 この攻撃は不正なサーバーに接続することで実行されるため、余分な IP アドレスとポートはすべてファイアウォールでブロックする必要があります。
- サービスが不要になった場合は、修正の準備ができるまでサービスを無効にする必要があります。
まとめ
Log4j の欠陥は私たちのコミュニティに衝撃を与え、私たちがオープンソース ソフトウェアにどれほど依存しているかを思い出させました。
Log4j はユニークです。 これはオペレーティング システムでもブラウザでもソフトウェアでもありません。 むしろ、プログラマーがライブラリ、パッケージ、またはコード モジュールと呼ぶものです。 これは、サーバー上で何が起こったかを記録するという XNUMX つの目的だけを果たします。
コードを書く人は、ソフトウェアを特徴づけるものに集中することを好みます。 彼らは車輪の再発明には興味がありません。 その結果、Log4j などの既存のコード ライブラリを大量に利用することになります。
Log4j モジュールは、最も広く使用されている Web サーバー ソフトウェアである Apache から派生しています。 そのため、何百万ものサーバー上で発見される可能性があります。 したがって、セキュリティ上の脅威が増大します。
上記の解決策がデバイスの安全を保つのに役立つことを願っています。
テクノロジー業界からのさらに役立つ情報については、HashDork にご期待ください。
コメントを残す