Eyes, JAPAN Blog > アツい夏の宮古島!Hardening II Collective 参加レポート

アツい夏の宮古島!Hardening II Collective 参加レポート

Masato Kaneko

この記事は1年以上前に書かれたもので、内容が古い可能性がありますのでご注意ください。

2018 年 7 月 6 〜 7 日、沖縄県宮古島市で開催された、サイバーセキュリティの堅牢化技術を競い合う競技会である「Hardening II Collective」に競技者として参加 (参戦) してきました。イベントでの出来事や学びなどをまとめていきたいと思います。

Hardening Project について

Hardening Project (ハードニングプロジェクト) は、WASForum (Web Application Security Forum) 主催の情報セキュリティイベントです。
以下にプロジェクト公式サイトから開催趣旨を引用します。

WASForumは、2011年に発足したHardening Projectにより、2012年よりセキュリティ堅牢化の競技会を開催しています。
このイベントは、最高の「衛る」技術を持つトップエンジニアを発掘・顕彰するものであり、技術競技(コンペティション)と、全チームの展開したセキュリティ施策の発表会の形式としています。

今回の「Hardening II Collective」は2018年7月6〜7日に開催され、総勢で約80名が参加しました。
Eyes, JAPAN では、過去 2 回 Hardning Project に参加しています。(2013 年と 2017 年参加)

Hardening Project の基本ルール

Hardening Project は、主催者が事前に参加者を各チームに振り分け、各チームは仮想的な組織 (会社) となり、自社の EC サイトで特産品販売のビジネスを展開している、というシナリオのもと、売り上げの最大化を目標に EC サイトの堅牢化技術を競い合う競技です。

各チームに与えられる EC サイト環境は、セキュリティ上の問題が数多く残されたまま稼働している状態になっており、それらに対応せずに放置していると、主催者から多くの攻撃を受け、サービスが停止したり、情報漏洩事故を起こし、信用を失ってしまったりなど、安定したビジネスの継続が難しくなります。

そうならないよう、各チームはメンバーが一丸となって様々な問題を的確にすばやく対処していく必要があります。

Hardening II Collective のあらすじ (競技背景)

Hardening Project には毎回ストーリーがあり、そのストーリーに沿ってチームごとに対応をしていきます。
今回の「Hardening II Collective」のあらすじをご紹介します。

「株式会社ハードニング」のメンバーは、前回淡路島で開催された Hardening 2017 Fes での活躍を買われ、宮古島市からの熱烈なラブコールを受けていました。
そこで、宮古島市でビジネスを展開している「ミヤコトラベル」という旅行代理店に精鋭メンバーを出向させ、そこでの既存ビジネスの引き継ぎと発展を期待されています。
ミヤコトラベルは、希少性の高い商品やオプショナルツアーなどを取り扱い、事業の幅を広げており、組織は CEO を筆頭にその下に次の部門 (BU: Business Unit と呼称) を配置してビジネスを展開しています。

  • 経営企画本部
  • 営業統括 BU
  • サービスプラットフォーム BU

各チームは、この「ミヤコトラベル」に扮してビジネスを継続し、売り上げの最大化を目標に競い合うことになります。

チームについて

今回は、1 チームが 11 人の参加者で構成され、全体で 7 チームが出場しました。
過去に開催された Hardening イベントの中で、1 チームあたりの構成人数が最も多い回だったようです。

そんな中、私はチーム 02 に配属されました。
チーム 02 は、Hardening 参加経験のある社会人 3 名、学生 3 名のほか、情報セキュリティやソフトウェア開発・運用などに従事する社会人 5 名というメンバーで構成されることになりました。

事前準備

競技日の 1 ヶ月半ほど前に主催者からチーム編成の連絡があり、役割分担と合わせてコミュニケーションツールのセットアップや、共有すべき事項に関するドキュメントの作成などを行いました。
メンバーの居住地が遠く離れていたため、オンラインでのビデオ会議による全体の打ち合わせを3回ほど実施しました。

役割分担の決定

まずはメンバーの持つスキルに応じて役割分担を行い、各 BU に配置するとともに、ユニットリーダーと CEO (最高経営責任者) 、CISO (最高情報セキュリティ責任者)、CTO (最高技術責任者) を配置することとなりました。
私は、過去に Hardening 参加経験が 2 回あったこともあり、アプリケーションとインフラの両方の技術サポートを行う役回りとして、 CTO を担当することになりました。

タスク割り振り、情報共有、スケジューリング

担当者の割り当てのほかに、競技開始直後の初動対応として必要な作業の洗い出しと、メンバー毎の守備範囲や動き方、既知の脆弱性情報の収集など、事前に整理しておくべきことや決めておくべきことの洗い出しをして、タスクの割り振りなどを行いました。

競技前日に行う顔合わせの予定も立てました。
Hardeningでは、競技についての詳細が記された競技資料が競技前日の夕方に主催者から配布されます。
この競技資料を見ないことには競技の詳細は何も分からないので、競技前日の顔合わせは資料の読み合わせも兼ねて大変重要になります。

必要機材の発送

競技当日に必要となる機材 (電源タップ、スイッチングハブ、LAN ケーブル、キーボード等) は、さすがに手で持っていくのは大変なので、事前に宅配便で送ることにしました。
必要な機材を箱に詰め、集荷依頼をかけ、7 月 3 日に発送を済ませました。
宅配業者からは、「発送の 2 日後の 7 月 5 日 (競技前日) 中に現地に届く」という報告を受けていたので、「あとは現地で受け取るだけ、準備万端だ」と安心し、宮古島に向けて出発しました。

競技前々日〜前日

宮古島へ移動

競技前々日の 7 月 4 日、羽田空港から宮古島に向かう直行便に搭乗しようというところで、まさかの Hardening 運営陣に遭遇し、同じ便だということが分かり驚きましたが、なんとか宮古島に到着しました。
宮古島に降り立ってみると、「少し強いかな」という程度の雨が降っていました。
羽田での離陸が遅れたり、レンタカー業者の不手際で時間がかかったり、宿泊先のネットワーク環境が不安定だったりして、その日に予定していた準備作業などがあまり出来なかったのが悔やまれます。

前日打ち合わせ

競技前日の 7 月 5 日、この日の宮古島は、「50 年に一度の大雨」と言われるほどの土砂降りの雨が降っており、ニュースにも取り上げられていました。
道路は冠水して川のようになり、車でも前が見えないほどの大雨で、今までにない経験になりました。
今思うと、よく無事だったな…、と思うほどの出来事でした。

夕方頃ようやく主催者から競技資料が配布され、チームメンバー全員の顔合わせをして、親交を深めながら、資料の読み合わせをしました。

競技環境などは概ね想定通りだったので、そこまで大きな作戦変更はありませんでしたが、重要事案の承認が必要だったり、BU の役割を超えた作業は制限され、人事異動承認を得ずに PC 等を持って席を移動することは禁止されていたりなど、いくつかの制約があること分かり、ワークフローの見直しなどが必要となりました。

また、今回も以前と同様に、マーケットプレイス (Market Place: MP) という外部サービスが競技中に提供され、各チームは必要に応じて製品やサービスを購入して利用することができます。
マーケットプレイスは必須であるというのがチーム内の共通認識だったので、IPS 製品または WAF 製品の購入を決定しました。

機材の行方

打ち合わせが終わって宿泊先に戻ったところ、機材が届いていないことに気が付きました。
「おかしいな…」と思い、宅配業者の荷物状況の問い合わせで確認したところ、「7 月 5 日到着予定」と記載してあるものの、発送日に通過した中継所以降の情報がなく、競技開始までに機材が間に合わないという事態になってしまいました。
競技会場が離島であるということと、「50 年に一度の大雨」の影響もあり、荷物の到着が大幅に遅れていたようで、途方に暮れてしまいました。
結局のところ、荷物は 7 月 7 日のイベント終了後に宿泊先に届きました。

今回の経験から、機材は間に合わないと意味がないので、「機材の発送は、到着の遅れを想定し、余裕を持って (例えば、競技前日の一週間程度前までに) 済ませておくべき」ということが教訓になりました。

競技当日

会場入り

いよいよ競技当日。

競技会場に入ると、数多くのテーブルが少し離れたところに配置されていました。
各チームは BU ごとに分かれ、少し距離の離れたテーブルにそれぞれ着席しないといけないようです。

今までの Hardening ではテーブルがチームごとに固まっていたので、同じテーブル上でインシデントや対応について、メンバー全員で協議したり、情報共有したりということができていました。
しかし今回の配置ではそれが難しくなり、離れた場所にいるメンバー同士のコミュニケーションが大きな課題となりました。

発送した機材はこの日も間に合わず途方に暮れていましたが、メンバーの持ち合わせの機材でなんとか全員が問題なく競技ができる状態となったので、とりあえず安心しました。

競技開始 (午前中)

競技が始まって参加者がまずやらないといけないのが、競技環境への接続と、メールの確認・返信です。
誰もが苦労するところなので、接続ができたメンバーが他のメンバーのフォローに入ります。

競技環境への接続とメールの送受信が問題なく終わったら、予定していたサーバの初期パスワードの変更とバックアップを早速行います。
ただ、以前とは違い、作業には承認が必要なため、サービスプラットフォーム BU のメンバーから承認依頼を受け取り、CTO である私が承認を行って実作業にあたってもらうということで、作業効率が悪く、なかなか苦労しました。

サービスプラットフォーム BU が初動対応に追われている最中に、スペイン語で GDPR に関する問い合わせメールが届きましたが、営業統括 BU の方に差し障りのない回答をしていただき、事なきを得ました。

午前中は、次のような対応を各 BU で分担して行いました。

  • チーム内で TeraTerm マクロを作成し共有
  • 1 名のメンバーの異動のため、人事異動表の作成と提出
  • EC ショップでの在庫追加方法の確認
  • Web サーバのセキュリティ設定の確認
  • MP での WAF 購入手続き

お昼

参加者にはお弁当が用意されている旨、主催者からアナウンスがありましたが、メンバーはとてもじゃないがお昼ご飯をのんびりと食べている余裕などない、という感じで、サイバー攻撃への対応に追われていました。
私の方では、昼食を片手に、DNS サーバの脆弱な設定を修正したり、MP で購入したバラクーダさんの WAF 製品の導入作業などを始めました。
3 つある Web サーバのうちのいくつかが停止していたり、商品価格が勝手に改ざんされていたりなど、各メンバーはインシデント対応で手一杯です。

さらに追い打ちをかけるように、ランサムウェアにより重要なファイルを暗号化され、ページが見られなくなってしまったり、データベースのバックアップファイルが公開領域に置かれていたことが原因で、個人情報が流出していたりなど、重大なインシデントが発生します。

他には、次のような対応を行いました。

  • DNS サーバのセキュリティ設定の変更
  • Web2 サイトでの商品価格の修正
  • Web1、Web3 サーバでのバックアップ取得作業
  • MP で導入した WAF の有効化 (機能の有効化、DNS レコードの変更等)
  • ランサムウェア被害の確認とチーム内他部署への連絡

午後

攻撃に備えてサーバのバックアップを予め取得しておくべきなのですが、作業が追いついておらず、ランサムウェアにより暗号化されてしまったファイルは元に戻せないことが分かりました。
また、パスワード変更は一度は完了していたものの、どこかしらから変更後のパスワードが平文で漏洩し、主催者により会場で読み上げられてしまったため、再度別のパスワードに変更することを余儀なくされました。
暗号化されてしまったファイルは、復旧サービスを購入して書き戻してもらうほかに打つ手がなくなってしまったため、仕方なく書き戻してもらうことに。

それと並行して、運営による商品価格の改ざんが止まず、さらに CMS の管理ページが消失してしまったため、改ざんされる度にデータベースを直接編集するかたちでメンバーが手動で直すという荒技で対応していました。
商品価格の改ざんは、どうやらデータベースが初期パスワードだったためであり、急いでパスワードを変更したところ、以降は攻撃が止んだので良かったです。
個人情報漏洩インシデントについては、CISO の方に報告書を作成して提出していただいたこともあり、お咎めを受けることはありませんでした。

他にも、様々な出来事が発生し、対応をしました。

  • ウェブサイトの SSL 化 (Web1、Web2、Web3)
  • Active Directory ドメインユーザのパスワード変更
  • DNS キャッシュサーバのセキュリティ設定の変更と再起動
  • ファイアウォールの設定変更 (WAF 対応)
  • 画面ロックに対する注意喚起
  • 不審メールの JPCERT/CC への報告

チームの売り上げ、そして最終結果

最も重要なチームの売り上げですが、序盤は比較的順調で、一時的に 2 位になったりしましたが、途中のランサムウェア被害や価格改ざん、サービス停止を受けた影響が大きく、中盤は最下位まで落ち込んだ時間帯がありました。
しかし、そこから SLA を維持して売り上げを取り戻し、競技終了 1 時間前の時点での売り上げは 2 位でした。

チームの最終順位は、全 7 チーム中 4 位という結果で終わりました。
中盤の最下位の時間帯が長く続いた後での巻き返しだったので、その点は良く頑張ったと思いました。

Hardening II Collective を振り返って

今回の Hardening を振り返って、いくつか重要な気づきを得ることができました。
その中でも特に重要だと感じるのが、初動対応としてやるべきことは、(おそらくどのチームも同じで事前に洗い出して把握していると思いますが )やるべきことをきちんとやり遂げることができるかという点が、基本的ながら非常に重要だと思いました。

私のチーム内の作業履歴を振り返って見ても、完了したと思ったことが実は完了していないことがあった (取りこぼしがあった) り、その他の対応に追われて着手するのが大幅に遅れてしまったりなどして、それらに起因するインシデントが多く発生し、いつまでも初動対応に追われていたという印象です。

それを解消するための、適切な人員配置にも課題が残っていると思いました。
組織としての総合力を最大化することがいかに難しいかを学ぶ (体験する) 非常に良い機会となりました。

Hardening への参加を通して、日常の業務だけでは経験することのできないことを多く学ぶことができ、非常に良い刺激を得ることができます。
実際の運用現場で問題となることも経験することができる貴重な場所でもあるので、より多くの皆さんに Hardening の魅力を知っていただき、積極的に参加していただきたいと思っています!

今回も思ったような成績を残せず、非常に悔しかったので、次回リベンジの際は社内でエンジニアを集めて、再度の優勝を目指してまた挑戦したいと思います!

Comments are closed.