目的: 模擬銀行アプリケーション環境内でLog4Shellの脆弱性(CVE-2021-44228)の悪用を実証する。
目的: シミュレートされた銀行アプリケーション環境内で、Log4Shellの脆弱性(CVE-2021-44228)の悪用を実証します。
範囲:
1: Apache Log4jを使用した、脆弱性のある銀行アプリケーションをセットアップする。 2:脆弱性を悪用してリモートコード実行を達成するペイロードを作成する。 3:データ窃取や水平移動などの侵害後のテクニックを実証する。 4:パッチ適用やネットワーク監視を含む、検出および緩和策を実装して文書化する。 5:使用したツール(例:JNDI Exploit Kit、Burp Suite)を含む、悪用プロセスの詳細なウォークスルー。
それでは、架空のVM演習シナリオ内でLog4Shellの脆弱性(CVE-2021-44228)を悪用し、リモートコード実行を達成するペイロードの作成に取り掛かりましょう。
ペイロードを作成するには、まず脆弱性の性質を理解する必要があります。Log4Shellの脆弱性により、攻撃者はLog4jライブラリの設定ファイルに悪意のあるコードを注入でき、影響を受けるアプリケーションによってそのコードが実行されます。ペイロードは、この脆弱性をトリガーしてターゲットシステム上で任意のコードを実行するように設計されます。
以下は、ペイロードを作成する手順の基本概要です。
Log4j設定ファイルの特定: ターゲットの銀行アプリケーション環境内でLog4j設定ファイルの場所を特定します。通常、このファイルは `log4j2.xml` または `log4j.properties` という名前です。
悪用ペイロードの作成: Java Naming and Directory Interface(JNDI)ルックアップを含む悪意のあるLog4j設定を作成し、任意のコードを実行します。このペイロードは `log4j2.xml` ファイル内に埋め込むことができます。
xml
"your-attacker-server" を、ポート4444で待ち受ける攻撃マシンのIPアドレスまたはホスト名に置き換えます。
ペイロードをホストする: 攻撃マシン上にリスナーをセットアップし、接続を受け取って任意のコードを実行します。
XML宣言:
xml
標準のXML宣言。
Configuration要素:
xml
Log4j設定のルート要素。
Appenders:
xml
"evil" という名前のSocketアペンダーを定義します。
host 属性は攻撃者のサーバーを指定します。
port 属性は攻撃者のサーバー上のポートを指定します。
SerializedLayout は、ログイベントがシリアル化されてネットワーク経由で送信されることを示します。これは、逆シリアル化攻撃を介してリモートコード実行(RCE)を可能にする可能性があるため、セキュリティリスクとなります。
Loggers:
xml
<Loggers>
<Root level="all">
<AppenderRef ref="evil" />
</Root>
</Loggers>
ログレベルを all として定義します。つまり、すべてのログメッセージ(debug、info、warn、error など)がキャプチャされます。
AppenderRef は先ほど定義した "evil" アペンダーを参照するため、すべてのログメッセージが攻撃者のサーバーに送信されます。
フィードバック
セキュリティリスク:
リモートコード実行(RCE): リモートのSocketアペンダーでSerializedLayoutを使用すると、攻撃者がサーバーを制御し悪意のあるペイロードを送信した場合に、システム上で任意のコードを実行できる可能性があります。これは重大なセキュリティ脆弱性です。
データ窃取: この設定により、機密データが不正なリモートサーバーに送信され、データ漏えいにつながる可能性が容易に生じます。
不適切なログ記録の慣行:
信頼できないリモートサーバーへのログ記録は非常に安全ではなく、安全なログ記録のベストプラクティスに反します。
本番環境で all レベルでログを記録すると、ログの氾濫、パフォーマンスの問題、機密情報の露出の可能性が生じます。
緩和策の推奨事項:
SerializedLayoutを避ける: 絶対に必要でない限り、いかなるログ設定でもSerializedLayoutを使用しないでください。また、受信サーバーが信頼でき安全であることを確認してください。
ログエンドポイントを検証する: すべてのログエンドポイントが信頼され管理された環境内にあることを確認してください。
安全なレイアウトを使用する: シリアル化のリスクがないPatternLayoutなどの安全なレイアウトを使用してください。
ログレベルを制限する: 適切なログレベル(例: info、warn、error)を使用し、安全な環境での特定のデバッグ目的を除き、all の使用は避けてください。
より安全な設定の例
以下は、より安全なLog4j設定の例です。
xml
nc -nlvp 4444
脆弱性をトリガーする: 作成したLog4j設定ファイルをターゲット環境内に展開し、元の設定ファイルを置き換えます。
エクスプロイトの実行: 悪意のある設定が脆弱なLog4jインスタンスによって読み込まれると、攻撃者のサーバーへの接続が試行され、リモートコード実行につながります。
実行の確認: 攻撃マシン上のリスナーを確認して、ペイロードが正常に実行されたことを確認します。
このペイロードは、管理された環境内での教育およびテスト目的のためのものであることに留意することが重要です。実際のシナリオでは、許可なくLog4Shellのような脆弱性を悪用することは違法かつ非倫理的です。セキュリティテストやペネトレーションテストを実施する前に、必ず明示的な許可と承認を得てください。