去る2022年11月に Hardening 2022 DECADE に参加してきましたので、イベントの紹介と競技に対する取り組みを振り返っていきたいと思います。
なお、サイバーエージェントのセキュリティチームが参加するのは2度目であり、今回初めて所属したチームがグランプリを受賞することが出来ました!
ToC
競技の概要
参加したイベントは、Hardening Project によってデザインされたハードニング競技会(通称、ハードニング)です。ハードニングプロジェクトは、非営利団体であるWeb Application Security Forum(通称、WASForum)によるプロジェクトです。ハードニング競技会は、ハードニングプロジェクトによってデザインされたシステムに対して堅牢化(ハードニング)する能力を競うチーム競技です。
これまでは長らく現地で開催されてきましたが、コロナ禍に入ってリモート開催など変遷を経て来ましたが、我々が参加した今年度は現地及びリモートを選択できるハイブリットな形態で開催されました。チームは10名程度で構成され、各チームは仮想会社と位置づけられ、ECサイトなどを通じてビジネスしているというのが基本的な想定シナリオです。そのため、競技中は脆弱性対応などの技術的なものだけではなくメール対応や商品の受発注など、実際のビジネスのように幅広いタスクを限られたメンバーで実施する必要があります。また、競技には kuromame6
という名の競技チームに攻撃するチームも参加しているため、彼ら彼女らからの攻撃によって発生したインシデントの対応なども求められます。加えて、競技は10名では網羅することができないよう、サーバやサービスの数、その構成などが絶妙に設計されており、参加者は漏れなくサイバー攻撃を経験することになります。そのため、普段の生活や職務では経験することの少ないサイバー攻撃について、「なるほど。サイバー攻撃というのはこんな具合なのか。」、「この攻撃がウチの組織で起きたら、これがこうしてこうなるな。」、「ウチの組織はXXXのようなことに対して脆弱だな。」など、ひとたび競技に参加すれば自ずと様々な実りを持ち帰れるような機会になっていると思います。
他方で、競技にはマーケットプレイスという実際のセキュリティベンダーなどが適用するアプライアンスや人的支援サービスなどが提供されており、各チームはそれらを競技中の売上から捻出して購入することができます。
すなわち、あるものについてアプライアンスに任せる、また専門スタッフを雇い所属スタッフは特定の職務に専念するなど、実際の組織における現場で行われる内容をイベントにおいても実践することができ、イベントは実際のそれに近い内容となっております。
競技への参加に対しては、資格は必要なく誰でも応募することが出来、その競技参加に伴う費用は無料です。また、応募する際に「タグ」を記入することで、同じチームを希望することができます。私たちもこの方法で、同じチームで競技に挑むことができました。
チームの編成については、運営側より競技日の1ヶ月程度前にアナウンスされます。参加者は競技当日までに競技に対する戦術や目標を定め、またチームメンバーとの関係を深めるなど、1ヶ月近く準備をすることになります。ハードニングでは、競技日を Hardening Day、競技翌日の振り返り日をAnalysis Day、それまでの全ての取り組みについて振り返る日を Softening Day と呼ばれています。そのため、競技自体こそ1日ではありますが、競技に向けた準備期間や競技周辺の期間を含めると参加者は1ヶ月以上に渡ってイベントに関わっていくことになります。
競技における評価には、技術点や見込み販売力、経営点など複数の評価軸に基づいて、競技における取り組みが対象として評価されます。それらの合計得点が最も高かったチームがグランプリに輝くという競技となります。ただし、今年は偶数チームと奇数チームに分かれる連合制度が採用されておりました。そのため、 Hardening 2022 DECADE におけるグランプリの条件は、1.連合として合計点を上回る、2.連合内で最も高いチームになる、というものでした。
競技に向けて
筆者である私は、学生時代に本大会への参加経験がありました。しかし当時は、思うように活躍することができなかったと感じており、その後のキャリアで身につけたスキルが実際のインシデントレスポンスでどこまで通用するのか気になっておりました。そこで、チームに参加希望の方を募り、参加してみたいと呼応してくれたチームメイトと一緒に応募することとなりました。その際、弊チームの上長は参加を後押ししてくれ、参加に対して即座に快諾してくれました。本当に感謝しております。という流れで、サイバーエージェントからは私含めて2人が参加してきました。
競技前にアナウンスされたチームメンバーはざっくり次のような具合で、過去の大会出場経験者は9人のうち3人いました。
- SIer(2人、内1人過去大会参加)
- Web系のプログラマ(1人)
- SOCアナリスト(1人、過去大会参加)
- 某公的職員(1人)
- セキュリティエンジニア(4人、内1人過去大会参加)
我々のチームは、Discordを主なコミュニケーションツールとして利用し、毎週日曜22:00から1時間程度チーム内の打ち合わせを実施し、また競技前には一度リアルでの飲み会も実施するなどしてチーム内での交流を図っていきました。最初の顔合わせでは、チーム名とチームリーダーを中心に、アイスブレイクするところから始めました。リーダーには、前回大会に出場された方が選出され、私は過去の参加経験などから技術領域のリーダーを務めることになりました。競技を実りあるものにするために、チームでは次のことを競技に向けて整理し、取り組んでいきました。
- チームの方針をどうするのか
- 方針によって、購入するMPなどが変わってくると考えたため
e.g. (1)優勝することに拘る:WAFなど攻撃を防ぐMPを使い、メンバーはそれ以外のタスクの集中する (2)学びを大事にする:MPは監視や人員増加を選択。実際の攻撃体験を増やす
- 方針によって、購入するMPなどが変わってくると考えたため
- 競技中にはどんなことをやることになるのか
- 初参加時の過去の経験から、突然のカオスな状況で何をしていいかわからなくなる
- 競技中実施すべきことは無数にあるため、各メンバー主体的に取り組んでもらえるように競技中のタスクの解像度を上げる
- これを実現するために、弊チームでは競技シミュレーションを2回実施
- 誰が何をするのか
- 2.で洗い出されたタスクについて、メンバーのやりたいこと得意なことに基づいて分担を決める
- このアイデア出しのフェーズでは、Miroのマインドマップなどのテンプレートを活用した
- 準備として何をすべきか
- 本番で使用することが予想されるコマンドやシステムを堅牢化するプラクティスの整理、自動化のためのツールの実装
e.g. (1) Ansibleで堅牢化するplaybookの実装、(2) WordPressやEC-Cubeなどの登場しそうなCMSにおける堅牢化のためのプラクティス情報の整理 - 競技中にゼロから作ると負荷になりかねない、メール対応文や稟議などの書類のテンプレート化
- 本番で使用することが予想されるコマンドやシステムを堅牢化するプラクティスの整理、自動化のためのツールの実装
上記のことなど打ち合わせを通じて確定したことは、逐次スプレッドシートで情報を整理していきました。
Hardening Day
運営より全競技参加者に向けて参加者配布資料が、競技日の前日に配布されます。その資料には、競技のシナリオ、サーバの構成、ルールなどが記載されております。我々のチームは、名護市周辺にレンタルコワーキングスペースを借りて、オンサイトで参加するメンバーと一緒に資料を読み込んで競技に備えました。
今年の競技会場は沖縄県名護市の万国津梁館であり、会場に入ると各チームごとに机で区切られておりました。
9時に入場し、環境のセットアップを済ませ、9時40分ごろに8時間の競技が開催されました。
今年の開催の様子は、Youtubeにアップロードされております。
競技が開始されてからは、競技前にシミュレーションに従って、サーバ等のログインパスワードの変更からメール設定、初期設定の確認などを行い、徐々にサーバの堅牢化やログ監視などの具体的な取り組みを開始していきました。競技が開始してしばらくした後、運命を分けたMPの入札が開始しました。当初、学びを優先するという方針のもとでMPには、リアルタイムで脅威イベントを漏れなく把握できそうな監視サービスを購入するつもりでしたが、オークションで敗れるという想定外のドラマがあり、獲得出来ませんでした。最終的に弊チームは、第二の候補であったCisco様のNGFW/IPS、EDRサービスを入札し、MPとして購入するに至りました。
競技中は基本的に、システムの堅牢化、ログ監視、ミッションへの取り組み、CS対応、在庫管理などをメンバーで手分けして行なっていました。競技中、脅威は様々な形で同時多発的に対応することになり、状況はカオスになっていきます。競技中に発生した脅威イベントを例としては、次のようなものがありました。
- ECサイトの商品画像が別の画像に差し替えられる(情報改竄)
- 一般公開する前の情報がダークネット上にアップロードされている報告(情報漏洩)
- サーバのファイルシステムが不審に文字化け(ランサムウェアへの感染)
- 名前解決できなくなる(DNSサーバが停止)
また、今年はサプライチェーンセキュリティが別テーマとしてあり、各チームは奇数・偶数のチームの番号に基づいて2つの製作委員会に分けられ、その製作委員会に所属するチームがビジネスのステークホルダーを構成するというシナリオがありました。各チーム(会社組織を想定)はチーム内のメンバーからCISOを選出し、セキュリティガバナンスタスクフォース(以降、TF)が組織されます。TFは競技中、TFとしてサプライチェーンセキュリティに対する提言をまとめること、並びに当該サプライチェーンにおける特定企業に対するセキュリティインシデントについて連携し相互に支援する、という具合のミッションが与えられました。従来の個々のチーム(会社)として活動するだけではなく、実際のビジネス現場において企業間で連携するように、競技においても組織間で情報を連携するなど擬似的に体験することにつながり、時間的な制約が大きい点を除いては非常に貴重な経験をすることができました。
振り返り
最終的な結果は、製作委員会として他の製作委員会の得点を上回り、製作委員会の中でも最も得点を獲得し、グランプリを頂戴することができました。結果には、主に次の3つの要因が影響したのかなと考えました。
- 各メンバーが主体的にタスクに取り組むことができたこと
- 競技前にシミュレーションが功を奏した
- チームビルドがうまくいった
- ミッションを早々に完了させたこと
- ミッションを完了すると売り上げが上がるように設計されている
- 購入したMPによって強力に攻撃イベントを防いでくれたこと
- 具体的なサービスについては、ブログ を参照
競技に絞って振り返ると、優勝こそしたものの課題は山積です。以降では、競技中実践するとよかったかもと思うことを列挙してみたいと思います。
- インシデントの可視化には、原始的にアプローチを選択しよう
- 競技中は、どのサーバでどのサービスが動作し、どんなインシデントが発生しているのかを把握するのが困難になる
- 簡易的、ただし全体を網羅できるようなホワイトボードに、サーバやそのサーバで動作するサービス、コンテキストなどの情報をラベリングすると良い
- 声掛けは大事
- 競技中発生する脅威イベントは膨大でどんどん増えていく
- メンバーが漏れなく把握するのは困難だが、中でも極めて重要なイベントについて全員が把握する場面がある
- そのような場面で、チャットにインシデントが起きているよとポストするのは周知するにはあまりにも不十分。時に声出しをするなどして、オンサイトならでは環境の特性を活用することが大事
- チームだけでやり切るのは困難。積極的にサービスを活用しよう
- 学びを重要視するとして、サービス(MP)に頼らず裸単騎になるのは実は損
- MPによっては、チームメンバーだけでは気づかないインシデントや情報を提供してくれる機会がある
- 積極的にサービスを活用し、知見の収穫する機会を逃さないのが大事
最後に
イベント全体を振り返ると、1ヶ月に渡って競技に向けて準備をし、普段経験することのないセキュリティインシデントを同時多発的に経験し、チーム内外でプロフェッショナルの方と交流することができる、という具合に非常に濃厚で実りのある時間を過ごすことができました。また優勝の副賞として、協賛のイエラエ様から17万相当のOSCPのトレーニングやNEC様からゴルフクラブ、沖縄県から泡盛の飲み比べなど非常に多数の品を頂きました。上記で紹介してきたようにこのような濃厚なイベントが実質参加費5,000円だけで済むというのは、改めて破格であり、運営の皆さんに頭が下がります。本当にありがとうございます。技術者のみならず、マネージャの職務に就いている方、サイバーセキュリティを体験したい方、ぜひ次回の大会に参加してみてはいかがでしょうか。主体的に参加することで、きっと実りのある有意義な時間を過ごせると思います。最後に、このような素敵な機会を提供して下さいましたHardening 2022 DECADEの関係者の皆様、スポンサー企業の皆様、参加を即了承して下さいました上長、関係した全ての皆様に感謝の意を表して、締めとさせて頂きます。
ありがとうございました!