日記帳

WE NEED メーデー 睡眠を!

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にアクセスしたところ認証を求められてしまいページを開けません。

f:id:mot_skmt:20210414000153p:plain

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

f:id:mot_skmt:20210414004123p:plain

続いてスナップショットにアクセスする方法を調査します。スナップショットをローカルにダウンロードすることはできないため、AWS上でデータを閲覧する必要があります。AWSでのフォレンジック手法を調べてみると、SANSが参考になりそうな資料(PDFファイル)を公開していました。

f:id:mot_skmt:20210414004332p:plain

この資料ではAWS環境上でインシデントレスポンスなどセキュリティの調査を行う手法が紹介されており、AWS上でフォレンジックを行う手順も説明されていました。

  1. Create a security group that does not allow outbound traffic
  2. Attach to compromised Amazon EC2 instance
  3. Take snapshot of Amazon EC2 instance
  4. Perform memory acquisition, if possible
  5. Share snapshot with Security Account (if using one)
  6. Create volume from snapshot
  7. Attach volume to SIFT EC2 instance
  8. Conduct forensics

スナップショットが作成されていることは確認済みなので、手順3. までは実施できていると考えられます。手順4. はメモリイメージの取得なので今回は無視して、手順5. の Share snapshot with Security Account を実施する方法を調べます。

スナップショットはデフォルトでは作成したユーザしかアクセスできないですが、権限を変更することで他者からのアクセスを許可できます。

f:id:mot_skmt:20210414004626p:plain

また、作成されたスナップショットに対するアクセス許可はdescribe-snapshot-attribute で表示できます。

f:id:mot_skmt:20210414004652p:plain

以上を踏まえてスナップショットのアクセス許可を確認するとcreateVolumePermission属性がallとなっており、誰でもスナップショットからボリュームを作成できることがわかりました。

f:id:mot_skmt:20210414004846p:plain

続いて手順6. の Create volume from snapshot の実施手順を調べます。AWSドキュメントによれば、AWS CLIcreate-volumeコマンドを用いるとスナップショットからEBS ボリュームを作成できるようです。なお、事前に操作するIAMユーザに対してEC2へのアクセス許可を設定する必要があるため、今回は操作中のユーザにEC2へのフルアクセス権限を付与しました。

f:id:mot_skmt:20210414005013p:plain

以下のコマンドでスナップショットからEBSボリュームを作成します。

f:id:mot_skmt:20210414005216p:plain

Falseと表示されていて怪しさはありましたが、操作したIAMユーザでAWSにログインし確認すると無事にボリュームが作成できていました。

f:id:mot_skmt:20210414005253p:plain

最後に手順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 でマウントし、中身を見れることを確認します。

f:id:mot_skmt:20210414005632p:plain

ファイルを漁ったところ/home/ubuntu/setupNginx.shというファイルが存在しており、内容を確認するとユーザ認証用ファイルを生成するシェルスクリプトでした。

f:id:mot_skmt:20210414005843p:plain

入手したユーザ名とパスワードでWebサイトのユーザ認証を行うと、次の問題ページのURLを入手できます。

f:id:mot_skmt:20210414010033p:plain

Level 5に続く