flaws.cloud Level4 Write up
Level4の問題です。問題文は次のとおり。
問題
For the next level, you need to get access to the web page running on an EC2 at 4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud
It' ll be useful to know a snapshot was made of that EC2 shortly after nginx was setup on it.
https://4d0cf09b9b2d761a7d87be99d17507bce8b86f3b.flaws.cloud
にアクセスすることができれば正解という問題です。URLにアクセスしたところ認証を求められてしまいページを開けません。
It'll be useful to know that a snapshot was made of that EC2 shortly after nginx was setup on it.
という文言のとおりnginxのセットアップ直後にスナップショットを作成したというのがカギになりそうです。
解答
Amazon EC2のディスクはAmazon Elastic Block Store (Amazon EBS)という仮想ストレージサービスで提供されています。EC2のスナップショットを取得する際に最もシンプル手法は、Amazon EBSのスナップショットを取得(対象EC2インスタンスのディスクをコピー)することらしいです。保存されている(と思われる)EBSに何らかの手段でアクセスできると良さそう。
EBSを操作するには discribe-snapshots
を用います。しかし、何もオプションを付けないと操作しているアカウントに関連しない情報まで表示されてしまいます。--owner self
を付けて以下のようにコマンドを実行するとアカウントに関連するスナップショットの情報のみを表示できました。
aws ec2 discribe-snapshots --owner self --profile <IAMユーザ> --output json
続いてスナップショットにアクセスする方法を調査します。スナップショットをローカルにダウンロードすることはできないため、AWS上でデータを閲覧する必要があります。AWSでのフォレンジック手法を調べてみると、SANSが参考になりそうな資料(PDFファイル)を公開していました。
この資料ではAWS環境上でインシデントレスポンスなどセキュリティの調査を行う手法が紹介されており、AWS上でフォレンジックを行う手順も説明されていました。
- Create a security group that does not allow outbound traffic
- Attach to compromised Amazon EC2 instance
- Take snapshot of Amazon EC2 instance
- Perform memory acquisition, if possible
- Share snapshot with Security Account (if using one)
- Create volume from snapshot
- Attach volume to SIFT EC2 instance
- Conduct forensics
スナップショットが作成されていることは確認済みなので、手順3. までは実施できていると考えられます。手順4. はメモリイメージの取得なので今回は無視して、手順5. の Share snapshot with Security Account を実施する方法を調べます。
スナップショットはデフォルトでは作成したユーザしかアクセスできないですが、権限を変更することで他者からのアクセスを許可できます。
また、作成されたスナップショットに対するアクセス許可はdescribe-snapshot-attribute
で表示できます。
以上を踏まえてスナップショットのアクセス許可を確認するとcreateVolumePermission属性がallとなっており、誰でもスナップショットからボリュームを作成できることがわかりました。
続いて手順6. の Create volume from snapshot の実施手順を調べます。AWSのドキュメントによれば、AWS CLIでcreate-volume
コマンドを用いるとスナップショットからEBS ボリュームを作成できるようです。なお、事前に操作するIAMユーザに対してEC2へのアクセス許可を設定する必要があるため、今回は操作中のユーザにEC2へのフルアクセス権限を付与しました。
以下のコマンドでスナップショットからEBSボリュームを作成します。
Falseと表示されていて怪しさはありましたが、操作したIAMユーザでAWSにログインし確認すると無事にボリュームが作成できていました。
最後に手順7. の Attach volume to SIFT EC2 instance を行いますが、SIFTを用意するのは面倒なのでとりあえずUbuntuのインスタンスを作成し、AWSのドキュメントの手順に従ってスナップショットから作成したボリュームをアタッチします。この際、ボリュームを作成したAZとインスタンスを作成したAZが異なるとアタッチできないのでインスタンス作成時に注意が必要です(当初us-west-2bにインスタンスを作成したせいでボリュームをアタッチできず悩みました)。
インスタンスにボリュームをアタッチ後、システムにマウントします。手順はAWSのドキュメントを参考にしました。
Linux で Amazon EBS ボリュームを使用できるようにする docs.aws.amazon.com
mount /dev/xvdf1 /data
でマウントし、中身を見れることを確認します。
ファイルを漁ったところ/home/ubuntu/
にsetupNginx.sh
というファイルが存在しており、内容を確認するとユーザ認証用ファイルを生成するシェルスクリプトでした。
入手したユーザ名とパスワードでWebサイトのユーザ認証を行うと、次の問題ページのURLを入手できます。
Level 5に続く