diary.sorah.jp

AWS Game Day Japan 2014 Spring

AWS Game Day Japan 2014 Spring に参加してきた。

問題は 2013 開催のやつと一緒。Image processor とか SQS とか使うやつでした。

チームメイトは @suzryo さんととささん。 (ref: suzryoさんのレポート )

あらかじめ断わっておくと強く批判しているつもりも dis っているつもりもないけれど、運営側が対戦相手のマッチングでミスをして、こっちが攻撃しているアカウントは他のチームも同時に攻撃していて、一方自分のチームのアカウントは攻撃を受けていないという状態になった。

つまり攻撃フェーズ中は意図しない変更がされてこちら側の攻撃が無効化されたりするし、自分のチームのアカウントは攻撃されちゃいないから復旧フェーズとは何だという状態でした。運営側を強く攻められないし攻めるつもりもないけど、正直に言うとわりと残念でテンションが下がった。

復旧フェーズで何も力試せなかったというのもそうだけれど、攻撃フェーズもこっちの意図した攻撃になってないとかそういうよくわからん感じになって… 途中で同じチームを攻撃しているチームの影響で作業止まったりしたし… (それに関しては運営のミスなので同じチームを攻撃していた他チームに対しては全く何も思ってないです。)

やった防御

あまり防御策は思いつかなかった。us-east-1 への構築を主に自分が担当して、suzryo さんは別リージョンでのバックアップみたいな事をやってくれていた。

防御としてやってみたのは、コマンドインジェクションで ec2-user の権限が奪えてしまうので、まず ssh アクセスはされないように crontab で毎分 authorize_keys を書き戻すという処理を入れてみたりしていた。

やった・やろうとした攻撃

  • SQS input queue の visibility timeout = 0 sec や delay timeout を最大にしたり、dead letter にすぐ飛ばしてしまうように
  • S3 の requester pay を有効化
  • Auto Scaling Policy で存在した scale out ポリシの cloudwatch alarm を若干いじっておく (不等号入れ替え、statistics を min にして分かりにくく無意味なものに)。ついでに cooldown 1800 sec とか。
  • ↑のカモフラージュ用に常に ALARM 状態、remove 1 instance するような Auto Scaling Policy を入れる
  • S3 bucket policy で getobject を deny
  • 後はやろうとしたけど出来なかった攻撃:
    • EC2 instance に結びつける IAM role でワーカーインスタンスの権限管理をしていたため、Auto Scaling 用の Launch Configuration では IAM role を指定する。ただし、攻撃用で利用する Power User には IAM に関する権限が与えられていないため、IAM role を指定して Launch Configuration を作る事ができなかった... (もしかして API 経由なら出来たのかなぁ)
    • Launch Configuration つくりなおせれば UserData で細工したりいろいろ面白い事ができたなあ…
  • これは時間がないのと他攻撃チームとの作業衝突でうまくできなかったのだけれど:
    • CLI tools 用の instance があったので、同じ user data で key pair だけ入れ替えて作成しなおし。そこに iptables を突っ込み、VPC Route Table をいじって S3/SQS へのリクエストが稀にうまくいかないみたいな状態にしようとしていた

2 チームがばらばらで同じチームに攻撃しているもんだから、途中でよくわからんインスタンスがでてきたり、SG いじられて疎通しなくなったり、default route 消されて疎通しなくなったり、auto scaling policy ががらっと入れ替わったりしてそれはそれでカオスで面白かった。

復旧

攻撃されてないので出来ず。

まとめ

Miles さんの "Hack Day must be fun, nothing to scare" っていう言葉はよかった。あと Miles さん「チョ〜スゴイ (日本語)」とか言ってたりおもしろかった。まあでも "(my) Nihongo is terrible..." とかいって基本英語だったけど。

途中からマッチングミスという事実が発覚してテンション落としつつもいろいろ弄れて楽しかった。次回開催で同様の事故がおこらない事を祈ります… 次回は復旧フェーズもやりたい…

あと、要望としてはマニュアル読んでみんなで同じもの構築とか無駄なので、構築は CloudFormation でサクッとやって防御に 100% 時間を振りたい感じかなー。

運営の皆様方お疲れさまでした。

Backfilled at , Published at