LoginSignup
10

More than 5 years have passed since last update.

AWS Gameday 2014 参加してきた

Last updated at Posted at 2014-03-14

事前準備

予習(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は、お題も一新されるとの事。
ラスベガスは無理としても、次の機会があれば参加したいと思います。

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

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
10