
IMDSPOOFは、AWS IMDSサービスを偽装してアラート可能なHoneyTokensを返すサイバーデセプションツールです。
IMDSPOOFは、AWS IMDSサービスを偽装するサイバーディセプション(欺瞞)ツールです。攻撃者がクラウド環境で権限昇格や横移動を行う方法の一つとして、http://169.254.169.254/latest/meta-data/iam/security-credentials/<user> にあるIMDSサービスエンドポイントからAWSアクセスキーを取得することがあります。このツールはそのエンドポイントを偽装し、169.254.169.254 宛のトラフィックをローカルWebサーバーにリダイレクトし、偽のデータを返します。これにより、偽装したIMDS応答にハニーAWSトークンを挿入することで、高度に調整された検出に活用できます。

このツールは、アクティブにIMDS(バージョン1または2)を使用していないAWSインスタンスでブルーチームが使用することを想定しています。
攻撃者の視点から見ると、自分がいるEC2インスタンスでIMDSが使用されているかどうかはわかりません。IMDSPOOFの目標は、クラウド環境に侵入した攻撃者を騙し、正規のIMDSサービスとやり取りしていると思い込ませることです。
繰り返しますが、EC2インスタンスで実行中のアプリケーションがIMDSサービスを使用している場合、このツールは問題を引き起こします!
テスト環境でIMDSPOOFを試すには、EC2インスタンスを作成し、iptablesがインストールされていることを確認してください(Amazon Linuxを使用する場合はyum install iptables-services)。
IMDS.go をコンパイルして実行します(Goコードのコンパイル方法)curl http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2-admin を実行します{
"Code": "Success",
"Message": "The request was successfully processed.",
"LastUpdated": "2023-11-22T03:33:51Z",
"Type": "AWS-HMAC",
"AccessKeyId": "InsertHoneyToken",
"SecretAccessKey": "InsertHoneyToken",
"Token": "HoneyToken",
"Expiration": "2023-11-22T09:33:51Z"
}
iptables -t nat -D OUTPUT -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination 127.0.0.1:54321これを有用にするには、IMDS.go ファイルの先頭にある変数をより実際らしく変更する必要があります。ファイルにハニートークンを挿入することを強くお勧めします。token 変数はそのままにしておくか、カスタムのものに変更してください。
IMDS.go の先頭にあるこれらの変数を、http://169.254.169.254/latest/meta-data/iam/security-credentials/ec2-admin にアクセスしたときに返される任意の値に変更します。var accessKey string = "InsertHoneyToken"
var secretAccessKey string = "InsertHoneyToken"
var token string = "IQoJb3Jpz2cXpQRkpVX3Uf////////////xMdLZHNjb<snip>"
Thinkst Canary のチームは、使用時にアラートを生成するAWS認証情報を簡単に生成できる素晴らしいツールを提供しています。

aws_access_key_id = AKIA....
aws_secret_access_key = uZF0y/l5X....
accessKey と secretAccessKey 変数をCanaryTokensから渡された aws_access_key_id と aws_secret_access_key の値に置き換えます。



IMDS spoof を起動時に実行するには、systemd サービスを作成し、サービスを有効にすることで簡単に行えます。
sudo vim /etc/systemd/system/IMDS.service(必要に応じて別のステルスな名前に変更できますが、以下の systemctl コマンドはサービス名が IMDS.service であることを前提としています)IMDS.service ファイルに以下を追加します[Unit]
# 必要に応じて別の名前に変更してください
Description=IMDSPOOF
# 依存関係が利用可能になった後
After=multi-user.target
[Service]
# サービスのタイプ
Type=simple
# サービスプログラムを実行するコマンド
ExecStart=/bin/IMDS
# サービスを実行するユーザー
User=root
# サービスがクラッシュした場合に再起動
Restart=always
# 再起動の遅延(秒)
RestartSec=10
[Install]
# 起動時にサービスを有効化
WantedBy=multi-user.target
/bin/ ディレクトリにあることを確認します:sudo mv IMDS /bin/sudo systemctl enable IMDSsudo systemctl start IMDSsudo systemctl status IMDSはい。IMDSpoof が EC2 インスタンス上の iptables を操作する方法により、トラフィックの送信元は問いません。つまり、EC2 インスタンス上での curl ユーティリティによる動作に加えて、EC2 インスタンス上でホストされている Web アプリケーションを通じて SSRF 脆弱性が見つかった場合でも、IMDSpoof は動作します。AlexanderHose のブログのIMDSペンテストに関する脆弱なアプリケーションを使用して、SSRF 脆弱性を悪用すると、IMDSpoof から偽の認証情報も返されます。

sudo systemctl stop IMDSsudo systemctl disable IMDSiptables -t nat -D OUTPUT -p tcp -d 169.254.169.254 --dport 80 -j DNAT --to-destination 127.0.0.1:54321