Taken
AWSのぶら下がりElastic IPを使用してサブドメインを乗っ取り、サブドメインテイクオーバーの動作するPOCを実現します。
サブドメインテイクオーバーでできること:
- Cookieの盗難(Cookieのドメイン属性が乗っ取ったサブドメインに設定されている場合)
- CORSリクエスト(Access-Control-Allow-Originが乗っ取ったサブドメインに設定されている場合)
- 認可コード取得のためのOAuthリダイレクト(乗っ取ったサブドメインがホワイトリストに登録されている場合)
- XSSのためのCSPポリシー(CSPポリシーがこのサブドメインをホワイトリストに登録している場合)
- クリックジャッキング(X-Frame-Optionsがこのサブドメインをホワイトリストに登録している場合)
- スプーフメール(SPFレコードがこのサブドメインをホワイトリストに登録している場合)
自動化のアイデアは以下の通りです:
- サブドメインを収集する。
- 逆引きを行い、AWSのIPのみを保存する。
- EC2インスタンスを毎分再起動し、再起動のたびにパブリックIPがローテーションされる。既存のサブドメインIPのリストと照合し、動作するサブドメインテイクオーバーのPOCを手に入れる。
- サブドメインを乗っ取ったらすぐにメールで通知する。
引用
このソフトウェアを研究論文や記事などで使用する場合は、引用してください。
@software{Agrawal_Taken_AWS_Subdomain_2020,
author = {Agrawal, Vaibhav},
month = oct,
title = {{Taken: AWS Subdomain TakeOver at Scale}},
url = {https://github.com/In3tinct/Taken},
version = {1.0},
year = {2020}
}
前提条件
- AWSアカウント
- LinuxおよびBashスクリプトの知識
使用技術/フレームワーク
使用したもの
機能
- サブドメインを収集し、逆引きを行ってAWSのIPのみを対象とする。
- ec2インスタンスを再起動してIPをローテーションし、リスト内のいずれかのIPと一致するまで繰り返す。
- 一致した場合、そのIP/ホストはホワイトリストファイルに追加され、再度ローテーションされず、メール通知が送信される。
使用手順詳細
- インスタンスt2.medium(攻撃マシン)を1台作成する。24時間365日無料。
- インスタンスタイプt3a.nanoのインスタンスを5〜10台作成する。おそらく最も低コスト(数が多いほどチャンスは増えるが、10台で月約60ドルの費用がかかる)。1つ以上のリージョンで作成する。所要時間は約5分。セキュリティグループは自分のパブリックIPのみに開放する。
- インスタンスを停止/起動するためのAWS APIキーを作成する。
- 攻撃マシンにSSH接続する。
- メール通知ユーティリティSSMTPをインストールする。
https://www.digitalocean.com/community/questions/how-to-send-emails-from-a-bash-script-using-ssmtp
- サブドメイン収集ツールsubfinderとsublist3r.pyをインストールする。(または他の好きなツールを使用してもよいが、その場合はサブドメイン収集スクリプトに追加する必要がある)
以下の手順に従ってセットアップする。
https://github.com/aboul3la/Sublist3r
https://github.com/projectdiscovery/subfinder
- Takenリポジトリをクローンし、screenセッションを開いてサブドメイン収集スクリプトを実行する。
screenセッションの使い方がわからない場合は、こちらを参照: https://linuxize.com/post/how-to-use-linux-screen/
- 対象とするすべてのドメインを記載したテキストファイルを作成し、「alldomains」という名前で同じディレクトリに保存する。その後、サブドメイン収集スクリプトを実行する。このスクリプトはsubfinderとsublist3r.pyを使用する。これにより、1つ以上のドメインのすべてのサブドメインが「subdomain:IP」形式で各行にリストされたファイルが生成される。後で照合と通知に使用する。
- 別のscreenセッションを開き、そのセッションでAWS認証情報をエクスポートする。
AWSキーのエクスポート。
export AWS_ACCESS_KEY_ID=AKIAIOSFODNN7EXAMPLE AWSアカウントのアクセスキー。
export AWS_SECRET_ACCESS_KEY=wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY AWSアカウントのシークレットアクセスキー。
別のscreenセッションでテイクオーバースクリプトを実行する。リージョンごとに異なるscreenセッションで実行することもできる(下のスクリーンショットを参照)。
理由 - AWSの各リージョンには異なるIPサブネットが関連付けられている。米国に拠点を置く企業をターゲットにする場合、米国のリージョンで稼働している可能性が高いが、アイルランドやフランクフルトなどの他のリージョンにも資産を持っている場合がある。したがって、10台のアセットを1つのリージョンで実行するのではなく、本社があるリージョンに5台、他のリージョンに5台配置して実行してみることをお勧めする。
screenセッションの例:
メール通知:

サブドメインを乗っ取った後の次のステップ -
そのホストにSSH接続し、シンプルなHTMLファイルを作成してPythonサーバーを起動すると、動作するPOCが得られる。
(次期リリースではこれも自動化する予定)
バルクでの実行
HackerOneやBugcrowdのすべての公開プログラム、およびForbes/SaaSのトップ500社をスクレイピングし、サブドメインを収集して攻撃を開始した。
24時間以内に3つのサブドメインを乗っ取ることができた。異なる3リージョンで合計10インスタンスを稼働。成功率は実行するインスタンス数に大きく依存する。
このスクリプトでは24時間で約1440のIPを変更できるため、10インスタンスで24時間あたり約14400のIPを変更できることになる。
参考資料
サブドメイン収集に使用したツール。
https://github.com/projectdiscovery/subfinder
https://github.com/aboul3la/Sublist3r
貢献
- バグの報告。
- 改善のための提案。
- 将来の拡張のための提案。
将来の拡張
- 同じスクリプトを使用したec2インスタンスの作成。
- AWS Elastic Beanstalkを使用したHTTPサービスの自動デプロイの追加。
ライセンス
GNUV3 © [In3tinct]