リクルートテクノロジーズ メンバーズブログ  Recruit-Hardeningを開催しました!@ Advanced Technology Lab

Recruit-Hardeningを開催しました!@ Advanced Technology Lab

こんにちは。インシデントレスポンスグループ 市田です。
日頃の業務は、セキュリティインシデント対応です。

昨年から本家OWASP JapanのHardeningに参加していますが、さらに自分たちで競技環境を構築して社内Hardeningも実施するようになりました。

このたび9月1日(防災の日)に、この社内Hardening用に構築した環境を使って、社外の幾つかのWeb企業をお招きしてRecruit-Hardeningを開催しました。

参加企業に、株式会社DMM .comラボ様、ヤフー株式会社様、匿名希望の他1社様を迎えての開催です。

今回はこのイベントの様子をレポートします!

*昨年参加した、本家OWASP JapanのHardeningの様子も下記よりご覧いただけます!(Hardeningとは?についてもこちらを参照頂ければ幸いです)
https://recruit-tech.co.jp/blog/2016/06/24/hardening_report_1/
https://recruit-tech.co.jp/blog/2016/06/27/hardening_report_2/
https://recruit-tech.co.jp/blog/2016/06/28/hardening_report_3/

Recruit-Hardening競技内容

競技環境の構成ですが、インターネットにつながっている「WAN」と社内の「LAN」という二つのネットワークを用意しました。

WAN側のScoreboardから正常なカスタマーの購入通信とAttackerの攻撃通信がDNSで名前解決をした後、Firewallを通ってLoad Balancerにつながり、WebServer1,2,3,4へロードバランシングされながらECサイトのWebページにアクセスできる仕組みです。もちろんほとんどのサーバーに脆弱性を複数埋め込んでおり、さらに攻撃者はどこに何の脆弱性があるかを知っているという絶対的攻撃者優位の想定です。

今回埋め込んだ脆弱性は、実際に当社のエンジニアが実環境で見たことがあるリアルなものを再現しました。Webサーバー、オペレーティングシステム、アプリケーションそれぞれに古いものが多く、バージョンアップも難しい状況となっています。

この環境を3チーム分用意し、3社対抗のチーム戦でHardeningを実施しました。

各チーム当日までに戦略と役割分担、攻撃が来るまでに何を優先度高く堅牢化するか、という点についてみっちり議論ができるよう、今回のシナリオと競技環境の情報は本番10日前に提供しました。

今回は会社対抗ということでチームメイトは社内の同僚です。スムーズに役割分担やコミュニケーションが取れる点がメリットでした。
また、正常カスタマーを模したクローラーのスクリプトも事前に共有し、監視や何かあったときのヘルプに使ってもらいました。

9月1日、競技本番

Recruit-CSIRT メンバーは、すでに慣れ親しんだ競技環境のため、今回は攻撃側を務めました。

当日の競技環境に触れることができる準備時間は30分だけとし、その後3時間のHardening競技でした。

防御側のHardening参加者は、1チーム3名です。3名で10台のサーバーの堅牢化とインシデント復旧をしなければならないため、優先度付けがうまくできるかが勝利の鍵です。

開始早々、3社ともサーバーダウンするほど、攻撃者優位の状況。「いかに早く原因を突き止め、復旧するか」「サービスを安定して提供するか」この2点から、各社工夫を凝らして競技に臨んでいただきました。

前半は3社の順位が目まぐるしく入れ替わり、3つ巴の戦いでした。

優劣を決めるスコアは、
全体的なサーバー稼動率 * ( 2.5 秒 / 全体の平均実行時間 ) * 1000
で決まります。

こちらを10秒に一度更新し続けてダッシュボード表示し続けました。
※2.5 秒 は、競技環境において正常稼働時にテストした時のカスタマーの1購入完了までの平均時間です。

OWASPのHardening競技のように広告を利用した売上げをスコアに取り入れるまでには至らず、あくまで堅牢化にフォーカスした内容としました。

途中、攻撃者から要求に応えないとDoS攻撃をするぞと脅迫メールも幾つか送りまして、メールを見ていない、またはメールサーバーが落ちてメールそのものが届かないチームにはDoS攻撃が実施されました。

実際の脅迫文ととあるその返答:(俳句編)

結果

今回のグランプリはYahoo!チームのみなさんでした。おめでとうございます!
中盤以降、SQLインジェクション攻撃をされても、バックドアを埋め込まれても、データベースを消されても、幾度なるサーバーダウンしても迅速に復旧し、安定してサービス提供し続けられた結果のグランプリ獲得でした。

ほかの2チームも攻撃のあと、必ず復旧まで進み、サーバーを維持し続けました。

以下のスコアグラフ通り、終盤は2位/3位の接戦に注目が集まり、盛り上がりました。

TeamXは中盤FW障害の減点100点が最後に反映され、2位はDMMチームでした。

振り返り

競技終了後、45分程度振り返りの時間を設けました。

攻撃役を務めたリクルートテクノロジーズのメンバーから、各サーバーの脆弱性説明と当日の時系列に沿って実際に行った攻撃とその成功有無の報告を実施しました。
参加された皆様に、適宜「その時どう守りましたか?」など質問させていただきながら、インタラクティブな議論の場となりました。

今回、事前にサービスが継続できなくなる攻撃もすると伝えていましたが、3チームとも優先度高めにバックアップ取得の対応をされて、サービス復旧につなげていたのが印象的でした。

最後は苦労を共にした仲間たちと会社の垣根を越えてワイワイ意見交換会をしました。お酒を飲みながらでも、話はその日のHardeningの話に自然になります。見学者/参加者ともに、いろいろ忘れられない気づきを得られたのではないかと思っています。

事後アンケートで、「本日学んだことを一つだけ書いてください」の項目では、
・落ち着く事が何よりも大事
・どんな状況であってもテンパってはいけないこと
という回答もあり、今後のインシデント対応につながるものを持ち帰っていただけたのではないでしょうか。

今回は設備の都合上、3社でのクローズドなイベントとしました。

持ち回りで開催できれば最高なのですが、まずは順々にこういった競技が増えていくといいなと思います。ご一読ありがとうございました。