
機能 - 使い方 - クイックスタート - インストール - 議論
INPUT: (1 required)
-bucket string チェックするバケットの名前。
-bucket-file string チェックするバケット名のファイル。
-mq RabbitMQに接続してバケットを取得する。設定ファイルのキー"mq"が必要。デフォルト: "false"
OUTPUT:
-db 結果をPostgresデータベースに保存する。設定ファイルのキー"db.uri"が必要。デフォルト: "false"
-json ログを人間が読める形式ではなくJSON形式でstdoutに出力する。デフォルト: "false"
OPTIONS:
-enumerate バケットのオブジェクトを列挙する(時間がかかる場合あり)。デフォルト: "false"
-provider string オブジェクトストレージプロバイダー: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom は設定ファイルが必要。デフォルト: "aws"
-threads int スキャンに使用するスレッド数。デフォルト: "4"
DEBUG:
-verbose 詳細なログを有効にする。デフォルト: "false"
-version バージョンを表示する。デフォルト: "false"
設定ファイルが必要な場合、config.yml は次の場所で検索されます: "." "/etc/s3scanner/" "$HOME/.s3scanner/"
このツールが役立つと思われましたら、開発を支援するために寄付をご検討ください。スポンサーオプションはこのリポジトリページのサイドバーまたは FUNDING.yml にあります。
このプロジェクトの継続的なスポンサーである tines に多大な感謝を。
ファイルにリストされたバケット名をAWSでスキャンし、すべてのオブジェクトを列挙する
$ s3scanner -bucket-file names.txt -enumerate
GCPのバケットをスキャンし、すべてのオブジェクトを列挙し、結果をデータベースに保存する
$ s3scanner -provider gcp -db -bucket my-bucket -enumerate
s3scanner は -bucket、-bucket-file、-mq のいずれか1つの入力タイプを必要とします。
INPUT: (1 required)
-bucket string チェックするバケットの名前。
-bucket-file string チェックするバケット名のファイル。
-mq RabbitMQに接続してバケットを取得する。設定ファイルのキー"mq"が必要。デフォルト: "false"
-bucket単一のバケットをスキャンする
s3scanner -bucket secret_uploads
-bucket-fileファイルにリストされたすべてのバケット名をスキャンする
s3scanner -bucket-file names.txt
ここで names.txt には1行に1つのバケット名が含まれます
$ cat names.txt
bucket123
assets
image-uploads
複数回リストされたバケット名は1回だけスキャンされます。
-mqRabbitMQサーバーに接続し、スキャンするバケット名を含むメッセージを消費します。
s3scanner -mq
メッセージはJSONエンコードされた Bucket オブジェクトである必要があります - Golangでの公開例は mqingest を参照してください。
-mq は設定ファイルのキー mq.uri と mq.queue_name が必要です。例は設定ファイルのセクションを参照してください。
OUTPUT:
-db 結果をPostgresデータベースに保存する。設定ファイルのキー"db.uri"が必要。デフォルト: "false"
-json ログを人間が読める形式ではなくJSON形式でstdoutに出力する。デフォルト: "false"
-dbすべてのスキャン結果をPostgreSQLデータベースに保存する
s3scanner -bucket images -db
db.uri が必要です。例は設定ファイルのセクションを参照してください。-db を使用する場合、結果は -json またはデフォルトの人間が読める出力モードを使用していなくてもコンソールにも表示されます。s3scanner はデータベースに接続するたびにGormのAuto Migration機能を実行します。スキーマにすでにGormが期待する名前のテーブルがある場合、これらのテーブルの構造が変更される可能性があります。s3scanner の結果専用のPostgresスキーマを作成することをお勧めします。-jsonスキャン結果を人間が読める形式ではなく、機械可読なJSONで出力します。
s3scanner -bucket images -json
これにより、1行に1つのJSONオブジェクトがコンソールに出力され、jq やJSON入力を受け付ける他のツールにパイプできます。
例: 存在するすべてのバケットの名前とリージョンを出力する
$ s3scanner -bucket-file names.txt -json | jq -r '. | select(.bucket.exists==1) | [.bucket.name, .bucket.region] | join(" - ")'
10000 - eu-west-1
10000.pizza - ap-southeast-1
images_staging - us-west-2
OPTIONS:
-enumerate バケットのオブジェクトを列挙する(時間がかかる場合あり)。デフォルト: "false"
-provider string オブジェクトストレージプロバイダー: aws, custom, digitalocean, dreamhost, gcp, linode, scaleway - custom は設定ファイルが必要。デフォルト: "aws"
-threads int スキャンに使用するスレッド数。デフォルト: "4"
-enumerateバケットに保存されているすべてのオブジェクトを列挙する。デフォルトでは、s3scanner はバケットの権限のみをチェックします。
s3scanner -bucket attachments -enumerate
s3scanner は1,000オブジェクトの「ページ」を要求します。5,000ページを超えるオブジェクトがある場合は、残りをスキップします。-providerバケットをチェックする際に使用するストレージプロバイダーの名前。
s3scanner -bucket assets -provider gcp
providers.custom の下の設定ファイルキーが必要です。-threadsスキャンに使用するスレッド数。
s3scanner -bucket secret_docs -threads 8
DEBUG:
-verbose 詳細なログを有効にする。デフォルト: "false"
-version バージョンを表示する。デフォルト: "false"
-verboseデバッグメッセージの詳細なログを有効にします。このオプションは多くのログを生成するため、バグレポートを提出する場合以外は使用しないことをお勧めします。
s3scanner -bucket spreadsheets -verbose
-versionバージョン情報を表示して終了します。
s3scanner -version
dev と表示されます。4つのコンテナを作成するdocker composeファイルが含まれています:
2つのプロファイルが設定されています:
dev - 標準の開発環境dev-mitm - HTTPトラフィックの観察を容易にするため mitmproxy が設定された環境(デバッグや新しいプロバイダーの追加時)開発環境を起動するには make dev または make dev-mitm を実行します。docker exec -it -w /app app_dev sh で app コンテナに入り、その後 go run . を実行します。
dev-mitm プロファイルを使用する場合は、ブラウザで http://127.0.0.1:8081 を開くと、アプリコンテナから行われているHTTP呼び出しを表示および操作できます。
設定オプションが必要なフラグを使用する場合、s3scanner は次の場所で config.yml を検索します:
/etc/s3scanner/$HOME/.s3scanner/# Required by -db
db:
uri: "postgresql://user:[email protected]:5432/schema_name"
# Required by -mq
mq:
queue_name: "aws"
uri: "amqp://user:pass@localhost:5672"
# providers.custom required by `-provider custom`
# address_style - Addressing style used by endpoints.
# type: string
# values: "path" or "vhost"
# endpoint_format - Format of endpoint URLs. Should contain '$REGION' as placeholder for region name
# type: string
# insecure - Ignore SSL errors
# type: boolean
# regions must contain at least one option
providers:
custom:
address_style: "path"
endpoint_format: "https://$REGION.vultrobjects.com"
insecure: false
regions:
- "ewr1"
s3scanner が設定ファイルを解析するとき、endpoint_format を取り、リストされているすべての regions に対して $REGION を置き換えてエンドポイントURLのリストを作成します。
注意: S3Scanner は現在、非AWSサービスの匿名ユーザー権限のスキャンのみをサポートしています
📚 非AWS APIの詳細は プロジェクトWiki にあります。
このツールはバケットに関する利用可能なすべての情報を取得しようとしますが、結果の解釈はユーザーに委ねられます。
バケットの可能な権限:
これらの権限の一部またはすべては、2つの主要なユーザーグループに設定できます:
意味: バケットがACLの読み取り/書き込みを許可していなくても、ファイルの読み取り/書き込みができないというわけではありません。逆に、ACLを一覧表示できても、バケットへの読み取り/書き込みができない場合もあります。
MIT
| プラットフォーム | バージョン | 手順 |
|---|
| BlackArch | pacman -S s3scanner | |
| Docker | docker run ghcr.io/sa7mon/s3scanner | |
| Go | go install -v github.com/sa7mon/s3scanner@latest | |
| Kali Linux | apt install s3scanner | |
| MacOS | brew install s3scanner | |
| Parrot OS | apt install s3scanner | |
| Windows - winget | winget install s3scanner | |
| NixOS stable | nix-shell -p s3scanner | |
| NixOS unstable | nix-shell -p s3scanner | |
| その他 - ソースからビルド | git clone [email protected]:sa7mon/S3Scanner.git && cd S3Scanner && go build -o s3scanner . |