##事前準備
#予習(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は、お題も一新されるとの事。
ラスベガスは無理としても、次の機会があれば参加したいと思います。
また併せて、今回、敵方にまわす事がなく、本当に良かったと思えるメンバに恵まれた事にも感謝です。