AWS

AWS Gameday 2014 参加してきた

More than 5 years have passed since last update.


事前準備


予習(1週前)

対戦型システム信頼性向上策体感イベント『GAME DAY』は前日3/14(金)、4箇所(東京/大阪/名古屋/仙台)同時開催!!

http://dev.classmethod.jp/cloud/aws/jaws-days-2014-game-day-at-4-places/

リンク先にあるレポート。

雰囲気もつかめてとても参考になりました。


一夜漬け(前日)

募集ページのFAQより、第2回(東京)、第3回(re:Invent)と同様、SQS中心のシステムと推定。


http://jaws-days.doorkeeper.jp/events/8945

Q. どんな種類のシステムを構築するのですか?

A. システムの詳細はGame Day当日に発表されますが、EC2、SQS、SNS、>PythonおよびAWS CLIツールに慣れておくことをオススメいたします。


過去資料を参考しながらテスト構築を実施。


第2回の資料

https://s3.amazonaws.com/www.awsgameday.com/Japan/20130608/index.html

第3回の構築ガイド

http://www.awsgameday.com/instructions.html

CloudFormationテンプレート

https://github.com/Answers4AWS/aws-gameday-2013


ひと通りの動作確認と、攻撃、防御方針の目処がたちました。


  • ワーカー用として提供されるサンプルのpythonスクリプトは、米国東海岸(us-east-1)専用。一応一行パッチで他リージョンでも動く。

  • オートスケール関連、現在のAWSコンソールならCLIより効率良く設定できそう。

  • 2013年末リリースのAWSのAPIログを記録するCloudTrail、JSONパーサーを用意しなくても、jqで概要は把握できそう。

  • 2014年1月リリースされたSQSのDead Letter Queue、Inputキューの無効化に使える。


当日


チーム分け

東京会場の参加者は30名強。

席が近かったメンバ3,4名でのチーム分け。

自分は、@sora_h さん、とささんの3名、チーム名Blue light of deathでの参戦となりました。


システム構築、守りを固める

今回のゲーム、システムは過去開催のものと同じでした。

ワーカーのEC2インスタンス、オートスケール周りの設定はメンバに任せ、自分は周辺作業に専念。


  • ワーカー出力先のs3バケット作成

  • ワーカー入出力用のSQSキュー設置、テストメッセージ投入。

  • AWS APIログ取得の為、us-east-1,us-west-2でCloudTrail を有効化

  • ワーカー用AMI、us-east-1からus-west-2にコピー

  • us-west-2(Oregon)でワーカーインスタンスを起動、ワーカー化の準備。

  • Oregonインスタンスにjqなどをインストール、s3のCloudTrailログ表示を確認。

  • CloudFomerを起動し、テンプレート生成とローカルにも退避。

GoogleDocsのスプレッドシートやチャットも活用し、時間内に余裕を残して構築は完了。

また余った時間で、メンバはインスタンスの公開鍵(authorized_keys)の改竄対策や、各種設定値の再確認など実施。

アンフェア、時間不足などで実施は見送ったけど、

* MaketPlaceのCentOSでワーカーを作成。EBSのマウント回避

* 攻撃者のPoweruser権限をIAMロールで制限。AWSコンソールなどのアクセスを絞る。

などとアイデアは次々と。

実業務もこんな感じで出来たなら、きっと愉しいです。


相手チームのシステムを攻撃

マッチングシステムで案内された攻撃対象、名古屋の「ゴゴーひつまぶし」さん。

自分の施した攻撃内容は以下のとおり。


  • dead letter queues用として、新規SQSキューを作成

  • InputQueは、Timeout1秒、Maximum Receives1回、Dead Letter queuesに誘導。

  • s3上に保存されていたCloudFormationテンプレート、AMIのIDをAmazon Linux→Ubuntuに差替えたものに差替。

  • 画像出力先のs3バケットの参照制限。RequesterPayのオプションを有効とし、通常の参照を制限し、併せてバケットポリシーにgetObjectを反映。

  • SQSのInputCue、CloudWatchアラーム用SNSの通知先とし、ゴミメッセージを蓄積させる。

メンバは

* オートスケールグループ設定変更

* VPCのルーティングテーブル変更

* ダミーのEC2インスタンス、s3バケットなどの設置

などを実施。

IAM権限持たないPowerUserの為、IAM Roleが設定できず

userdataを改変したLounchConfigを作れないのを見て、

今回OSレベルでの攻撃はあまり出来ず。

聞くと他に策はあったようなので、ちょっと勿体なかったかもです。


システム修復

AWSコンソールにログインしてみると、何も起きていない様子。

CloudTrailも無効化されていないのに攻撃時間中の出力はなし。

マッチングの不具合で東京の2チームが攻撃対象から外れ、

運悪く?その2つに該当してしまった模様。

あっという間にゲームは終了となってしまったけど、

CloudTrailなどの備え、攻撃を受けていない事の証明になった点で、多分無駄にはなりませんでした。

一応想定していた復旧フローは下記の通り。

* CloudTrail設定有効確認

* CloudTrailログ確認

* CloudFormerで、CloudFormationテンプレート差分確認

* 破損サービスの撤去、再作成

* 最悪、別リージョン(us-west-2)で再構築


SAからのプレゼン・システム構築の勘所

進行が遅れ、時短のため大幅省略。

何らかの形で講評については聴いてみたい所です。

後、出来れば

* 各チームから、攻撃、防御の内容について発表

* 質疑応答

* SAの方からの講評

と振り返りの時間があれば、もっと良かった様に思えます。


戦果発表

今回の最優秀賞は大阪のチーム。

SQS,s3などのサービスだけでなく、AWSコンソールまで

攻撃で使えなくなっていたとの事。

IAMロールなくどんな方法をとったのか気になります。


感想

マッチングの不具合や時間不足により、若干不完全燃焼な感じは残りましたが、非常に愉しい時間を過ごすことが出来ました。

また準備として、普段触れない機能や新機能について、APIリファレンスなどを眺めつつ試せ、良い勉強にもなりました。

主催、会場提供のAJ、JAWS方面の方々、ありがとうございました。

次のGamedayは、お題も一新されるとの事。

ラスベガスは無理としても、次の機会があれば参加したいと思います。

また併せて、今回、敵方にまわす事がなく、本当に良かったと思えるメンバに恵まれた事にも感謝です。