Hardening 1010 Cash Flow に参加しました

こんにちは。東京品質保証部 Cy-PSIRT の長友です。主に弊社製品の脆弱性の調査・検証をしています。
今回は、2017年6月23日から24日にかけて沖縄県宜野湾市で開催された、Hardening 1010 Cash Flow に事業支援本部の石渡と私で参加しましたので、報告します。
Hardening Project

Hardening Project とは

Hardening Project とは、セキュリティの競技の一つです。
チーム対抗で、脆弱性のあるECサイトの堅牢化技術を総合的に競い合います。セキュリティや運用に関する技術だけでなく、ビジネスを継続するためのスキルも問われます。
弊社もスポンサーとして協賛しています。

参加のきっかけ

私は学生時代から CTF (Capture The Flag) をやっていました。CTF 自体、非常に面白い競技なのですが、ほかにもセキュリティに関する面白い競技はないものか、と思っていたところ、Hardening Project の存在を知り、興味を持ちました。
まだまだ経験の浅いエンジニアなので、うまくいくかどうか自信はありませんでしたが、ひとまず「当たって砕けろ」の精神で参加申し込みをしました。(CTF だって、最初から自信をもって参加できていたわけではありませんから)
選考があるということで、参加できるかどうか不安でしたが、なんとか参加の権利を得ました。

参加決定後

石渡と私は、偶然にもサイボウズ社員が 2 人、同じチーム (Team #5 WannaEnjoy) として競技に参加することになりました。世間を騒がせた WannaCry にも負けず、Hardening を Enjoy するぞ! という願いを込めてこんなチーム名になりました。
まずはお互いの自己紹介をしたり、リーダーを決めたりした後、それぞれがどのようなスキルを持っているかの確認をしました。すると、それぞれ持つスキルが分散しており、バランスの良いチームだということが分かりました。ほっとしたことをよく覚えています。 その後、スキルマップに沿って、サーバ全体の堅牢化を担当する「堅牢化チーム」、与えられたサーバの運用・監視を担当する「運用チーム」、EC サイトの在庫管理や、チームの外の人や組織とのやり取りを担当する「ビジネス系チーム」に分かれ、それぞれに準備を進めて行きました。
私は運用チームだったので、当日の運用で必要になりそうなスクリプトを書いたり、触ったことのないミドルウェアを実際に触ったりして、当日に備えました。

Hardening 1010 Cash Flow 当日

1 日目は実際にビジネスとシステムの堅牢化作業を行う「Hardening Day」、2 日目は Hardening Day の振り返りを行う「Softening Day」が行われました。

Hardening Day 前日

前日の夕方に沖縄に到着しました。沖縄は梅雨明け直後でとても蒸し暑く、クーラーでちょうどいい温度になっている部屋に慣れ切った私はここで 3 日間過ごせるのだろうか、と若干の不安を覚えました。
ともあれ、Hardening Project に備えることにします。
ちょうど打ち合わせ会場に向かい始めたころ、運営から今回の競技で使う環境の情報や、競技ルールについての資料がメールで送られてきました。 資料をみて、私はたいへん驚き、焦りました。なぜなら、護るべきサーバがとても多いうえに、それぞれのサーバに入っているアプリケーションの大半が古かったり、脆弱性がたくさん報告されていたりするものばかりだったからです。さらに、インターネット回線を使ってアップデートすることができないと分かったので、これはどうしたものかなあ、と考え込んでしまいました。
打ち合わせ中は、沖縄のおいしい食事を味わいながら、資料を読み合わせしたり、議論をしたりしました。お刺身とそうめんチャンプルーがとてもおいしかったです。(今後参加される皆さん、次の日は本番なので、お酒は控えめにしましょうね。) ゴーヤチャンプルー 打ち合わせが終わり、ホテルに戻った後 NVD や JVN iPedia でどのような脆弱性があるのか調べたり、利用されているミドルウェアの設定を調べたりしてから寝ました。(こちらも、次回以降参加される方はきちんと寝ましょう。睡眠不足はインシデントレスポンスの敵です。)

Hardening Day

戦いの日にふさわしい、爽やかな朝でした。
インシデントが起きた、まずいぞ! と訴えるという動画から競技は始まります。
最初は比較的穏やかだったので、パスワードを変えたり、与えられた環境にどのようなミドルウェアが入っているか調査したりしていました。しかし、いざインシデントが起きるとかなりうろたえました。頭が真っ白になって何をすればいいのか落ち着いて考えることができませんでした。
また、初期対応ばかりに追われ、根本的な対応を忘れてしまい、同じ脆弱性を突かれるというイベントが発生しました。
会場 Hardening Project にはマーケットプレイスと呼ばれる、セキュリティ系の製品やサービス、人的リソース等を調達できる仕組みが存在します。今振り返ってみると、その仕組みをうまく使いこなすのが重要だと思いました。今回 WannaEnjoy では 仮想環境上にあるすべての Windows 端末にセキュリティ対策ソフトを導入することを先に決めていました。そのおかげで、早い段階で Windows 環境に仕込まれたマルウェアを検知し、隔離することに成功しました。
マルウェアが隔離されて一安心、さすがマーケットプレイスの製品だ、と思って胸をなでおろしていたら、近隣のチームから「ランサムウェアだ!」という声が上がって、ぞっとしました。もし後回しにしていたら……と思うと、今でもぞっとします。
また、今回 Windows 環境に導入したソフトウェアをご提供いただいた会社の方から、導入のアドバイスをいただいたり、運用中のサービスに見つかった脆弱性のご連絡を頂戴しました。頂いたご指摘の中には、冷静に見ていれば気づけそうなものもあったので、第三者の目線はとても大切と痛感しました。Softening Day のプレゼンでもお伝えしましたが、本当に感謝が尽きません。

そんなこんなで、とにかく大慌てしていたら、いつの間にか10時間過ぎていました。人間の感覚というものは不思議なものです。

腹が減っては戦ができぬ、ということで、昼食においしいハンバーガーをいただきました。また、おやつの時間にはおいしいコーヒーとお菓子をいただきました。どれもとてもおいしかったのですが、対応で焦りすぎてじっくり味わう余裕がありませんでした。今度沖縄に行くことがあれば、もう一度食べたいです。 昼食のハンバーガー

Softening Day

Softening Dayでは、チームごとの振り返りの発表、Hardening Project で利用する環境の作成や当日の攻撃などを担当したチーム (kuromame6) からの解説などがありました。苦しめられていた脆弱性が単純なもので、落ち着いて考えればわかったかもしれない、と気付いたときの悔しさはすごかったです。
そして、なんと WannaEnjoy のチーム発表を担当することになりました。資料が完成したのが当日の朝でしたので、朝慌てて出来上がった資料を確認したり、発表原稿を作ろうとしてあきらめたりしていました。Hardening Day は終わったはずなのに冷や汗が止まりませんでした。
当日の発表はこちらの動画からご覧いただけます。
その後の結果発表で、株式会社ラック様よりスポンサー賞をいただきました。チームのバランスをご評価いただきました。本当にありがとうございました。なお、表彰式の様子はこちらからご覧いただけます。

今回の会場は海のすぐそばでした。せっかく沖縄に来たので沖縄らしいことをしたくなり、Softening Day のお昼休憩を使って少しだけ海に遊びに行きました。とてもきれいな海でした。潮風がとても気持ちよかったです。 沖縄の海

今後 Hardening Project に参加するみなさんへ

たくさん反省したいことはありますが、今後参加される皆さんにお伝えしておきたい、私の過ちをここに記しておきます。

慌てない、焦らない

慌ててはいけません。
慌てると、普段から使っているはずの簡単なコマンドの使い方が分からなくなりますし、机の上の物は落としますし、お手洗いに向かっている間にこけそうになりますし、本当に何もいいことがありません。(すべて本当に起きたことです……)
何か大きなことをする前は深呼吸して、落ち着いて行動しましょう。「本番環境を触るのだから当たり前では?」と思うかもしれませんが、その「当たり前」ができなくなるのが Hardening Project の恐ろしい(面白い?)ところです。

サーバの構成を把握するのはとても重要

たくさんのサーバの運用を任されます。たくさんあるので、たまに監視や設定が漏れます。そうやって対応が漏れたサーバでインシデントが起こります。
ですから、サーバの構成はきちんと把握しておきましょう。そして、きちんとすべてのサーバ(せめて、死守しなければならないサーバだけでも)をまんべんなく保守・監視しましょう。可能であれば、サーバの監視ツールや、構成管理ツールを導入すると、人間の手でやるより抜け漏れが少なくなるのでよいかもしれません。

「ほうれんそう」はとても重要

社会人の基本としてよく教えられる「報告」「連絡」「相談」は、Hardening Project 競技中も非常に大切です。たとえば、インシデントが起きたらチームに報告したり、ちょっとした設定を変えた後にはその旨を連絡したり、ちょっと悩んだらすぐ誰かに相談したり。これらはすべて普段の業務では「当たり前」と思われることですが、様々なイベントが同時多発的に起きる競技中はうっかり忘れてしまいがちです。そして、うっかり忘れていた「ほうれんそう」事項が原因で障害が起きる可能性が十分にあります。ですから、競技中は普段以上に「ほうれんそう」を大事にしていきましょう。
また、チーム全体で「ほうれんそう」がしやすい雰囲気のチームを作るように心がけるとよいでしょう。具体的には、どんなことでも相談しやすい雰囲気のチームを目指すとよいと思います。

非エンジニアメンバーの有効活用

チームメンバーの石渡からのメッセージも掲載します。エンジニアではないけれど Hardening に興味がある皆さん、必見です。

おまけで非エンジニアメンバーからのつぶやきです。
初期設定をやっている時間帯など、何もできない(と思って止まってしまう)時間帯が結構あったのですが、もっとできることがあったはずなので、非エンジニアメンバーがいるチームは、事前資料を入手したときに非エンジニアメンバーにやってもらいたい作業の洗い出しをできるだけ具体的にしておくと良いと思います。
例えば、webサイトをユーザー視点で定期的に見ていくとか、全てのメールを確認する(ための環境構築?)をして、とにかく返信するとか、初期から何も考えずに広告購入をするとか、そのメンバーのスキル等に合わせて当日の環境で対応してもらえそうなもの(でやっておくとエンジニアメンバーが助かるもの)を事前に洗い出して、とにかく動いてもらえるようにする、ということをしておくと、非エンジニアメンバーがいることがプラスに働くと思います。
また、技術系以外のところ(特に法務的なところ)は、思い切った行動(経営者への意見メールなど、運営サイドの予想を超えるもの)が評価されたりするようなので、非エンジニアで参加された方は、広い意味での「会社の堅牢化」のために必要なものは、思いついたら積極的に行動してみるのが良いと思います。

まとめ

Hardening Project の会場はまさに「精神と時の部屋」でした。10 時間でECサービスを Hardening することで、堅牢化の技術や心構えを一気に叩きこまれました。また、これからさらに技術を深めていくために、自分に足りないことを知ることもできました。それに、初対面の人といかにうまくやるか、考えるきっかけにもなりました。
Hardening は、コンピュータセキュリティインシデントにかかわる可能性のあるすべての人に薦めたい競技です。精神的にも肉体的にもきついことは間違いないですが、参加する前と参加した後では物の見え方が変わるかもしれません。私は変わりました。
最後になりましたが、Hardening Project 実行委員会の皆様、このような素敵な競技を開催してくださり、本当にありがとうございました。