<aside>
</aside>
2024年のHardening競技会に参加したのでレポートを残します。
わたしは2023年に初参加を遂げ、今回が2回目の参加でした。この度チームのリーダーを担った経験を書き残します。来年度以降の参加者にとって参考になれば幸いです。
<aside>
</aside>
公式サイトの競技概要は下記の通りです。
<aside>
開催概要/募集要項 – Hardening 2024 Convolutions
</aside>
Hardening 2024 Convolutionsは、サイバーセキュリティとビジネススキルを活かすイベントで、参加者を募集中です。技術者だけでなく、ビジネススキルを持つ方も参加可能です。参加者はチームを組み、ビジネスウェブサイトの運用と改善を行い、様々な攻撃に対するセキュリティ対応を実施します。このプロセスを通じて、素晴らしい体験を得て新たな仲間を見つけ、体験に基づく知見を得ることができます。
競技参加者は、初めて会う複数名のメンバーで1つのチームを組み、架空企業の一員としてECサイト等のITシステム群を守ります。(正確には「衛ります」という漢字を使わないと誰かに怒られるかも知れない)
8時間もの間さまざまなサイバー攻撃を受けながらウェブサイトを運営し「見込み販売力」が最も高いチームが優勝するルールです。この見込み販売力というのは営業利益のようなものです。コストを抑えながらリスクを減らしてシステムを安定稼働させ、売り上げを伸ばすことが求められる実践的な競技です。
hardening競技はサイバーセキュリティに特化するだけでは競技に勝ち残ることが難しく、ビジネス面の知識も必要 になる点が競技の面白さを高めています。
2024年の会場は、沖縄県豊見城市です。10月の観光シーズンに沖縄へ行けることにワクワクしながら参加申し込みボタンを押したのは7月の中頃でした。選考結果は8月中旬に届き「選考通過」と記載されたメールを見て、真っ先に沖縄メシを調べ始めたのはここだけのヒミツです。
<aside>
</aside>
選考通過と同時にチームメンバーが発表されます。今年は全15チーム各7名の構成でした。昨年とは人数配分が異なるため、本番に待ち構えるイベントに気づいてしまいました(後述する連合チームのこと)。
Hardening競技は、競技当日にいきなり集まって試合に臨む短期のイベントではありません。チーム発表の日から競技当日までの約2ヶ月間、それぞれのチームが競技当日に向けて入念な準備をして、万全の体制で挑むイベントです。
私たちのチームも準備を開始しました。色々な問題に直面し、それらを乗り越えていきました。
競技運営の方より、選考に通った一人が参加辞退されたとの連絡がありました。他チームは7人で準備をするのに対し、わたしたちは6人だけで競技に臨むという不利な状況が明らかになりました。「一人あたりの経験値が多くなるので良い経験でしょう」とチームメンバーに伝えたものの、内心は焦燥感でいっぱいです。わたしも二度目の参加ですから、準備がどれだけ大変かよーーく知っています。
競技準備はスタートダッシュで差がつきます。しかし連絡のつかない人、海外出張中でオンライン会議も難しい人、子育て真っ最中のわたし.. それぞれの事情があって、全員が揃うオンラインのミーティングを開催できたのは8月の下旬でした。スタートがちょっと遅れてもリーダーがチームの士気をうまく高めることができれば取り返すことはできるはず。良いリーダーがいれば大丈夫なはず.. と自分に言い聞かせていました。
各チームには1名のリーダーを置くことがルールです。色々話した結果、チーム内で唯一の競技経験者であるわたしがリーダーを担いました。先ほどリーダーが大事だと書いたばかりですが、わたしはそんな器ではありません。心配で心配で、毎日夜しか眠れませんでした。
わたしは共働き&子育て真っ最中の身です。家族と相談して21時からオンライン会議に出られるよう、毎日死ぬ気で家事をこなして準備に臨みました。いつも夜遅い時間のオンライン会議となってしまい、メンバーの皆さんにはご迷惑をおかけしました。
<aside>
</aside>
チームリーダーとして、競技に向けた準備を推進しました。
みんなが集まって一番最初の共同作業は「チーム名」を考えることです。わたしは、運営の皆さまや沖縄県の多大なご支援によって、この競技会が開催できているものと考えています。だからチーム名にその感謝の気持ちを絶対に含めたいと考えていました。そこで 沖縄ワード × セキュリティワード で良い名前を作ろうよ。ということをお伝えし、メンバーから色々なアイデアを募集しました。
数日のうちに何十個もアイデアがあがって絞るのが大変でしたが、最終的に「シーサーと競技会」という名前に決まりました。
<aside>
(図: チーム名を投票する画面)
</aside>
個人的には 「スパム対策おにぎり」 がお気に入りでした。多数決というたいへん平和的な決め方なので、誰も何もいうまい。
わたしが準備段階で最も優先すべき事項は、競技当日までにお互い遠慮なく話せるような関係を築くことだと考えていました。なぜなら、競技中は常に複数インシデントの対応に追われるため、どれだけ協力し、情報を集約・整理できるかが優劣を分けるポイントだと考えているからです。しかし、初めて話すメンバーとチームを組み、しかもオンライン会議だけで密接な連携のできる関係を醸成するのは、非常に難しいことです。
チームビルディングはまさにリーダーの責務です。わたしは集団凝集性を高めるための動機づけに悩みました。楽しく前向き取り組めて、達成感のあるタスクを、全員の力でこなすことが大事だと考えました。そこでわたしは チームグッズを制作すること を提案しました。その結果... 3つもグッズを作ってしまいました。
▼1つ目のグッズ: リストバンド
<aside>
(図: チームで作ったラバー製リストバンド)
</aside>
リストバンドは他チームからも非常に評判が良かったです。上図の写真に対して 「この写真、エモい」 というコメントを頂けたことは、とてもうれしかったです。作る過程も楽しかったですが、競技当日に同じグッズを身につけることで、わたしたちは仲間なんだな。と実感できました。
ちなみに、こちらで作りました
<aside>
</aside>
▼2つ目、3つ目のグッズ: シール、ステッカー
<aside>
(図: ステッカー、マグネット)
</aside>
2回目の参加ですから、競技を終えた後に名刺交換の機会があり、戦った相手はいつしか仲間になることを知っています。今回のチームメンバーに学生の方が居ましたが、名刺を持っていないのでどうしたものかと考えました。そこで、名刺と同じサイズのステッカーを作ることにしました。ステッカーにはメンバーのSNSアカウントを記載し、これを名刺がわりに配ることで、他チームの参加者とも繋がりを作ってもらえたら良いなと思い、作成しました。
おまけにマグネットも作りました。これは勢いで作りましたので、なぜマグネットも作ったのか誰もわかっていません。 サイズも見た目もステッカーと全く同じですが、金属にピタッと貼りつきます。当日受け取ってしまった人は例の如く冷蔵庫などに貼ってください。
それぞれ100枚ずつ作り、少しだけ余りました。
ちなみに、こちらで作りました
<aside>
</aside>
チームメンバーの皆さんが競技に対して前向きに参加してほしいと思い、わたしはオンラインの会議でこのような発言をしました。
皆さんの好きなこと、挑戦してみたいことを優先してください。普段やっていることや得意なことをやるより、普段できないことにチャレンジすることが大事です。
みなさんが自由に動けるようにと、昨年の参加経験を語る会を開き30スライドほどの資料で説明をしたり、各自が準備した内容を保管する場所(Notion, OneDrive等)の環境を用意しました。しかし、これだけでは皆さんの活動は活発になりませんでした。
わたしは ここでやっと「リーダーとは何か」を考え始めました。考え始めるのが遅かったかもしれません。色々と悩んだ結果 「リーダーはゴールへの道筋を示し、メンバーを鼓舞し、牽引する役割である」と結論づけました。この悩んだ経験は、私にとって大きな前進になったと感じています。
結論を出した上で自分のチームの状況を再確認しました。競技に初参加のメンバーは勝手がわからないので、どんな準備をすれば良いかわからなかったと思います。目指すゴールはどこなのか?そこ向かうための道筋は何なのか?自由を掲げる当時のわたしは、そういったゴールイメージを何も示すことができていませんでした。今のわたしは、自分が理想に掲げているリーダー像と全然違うのではないか。
そこでわたしは、必要な準備作業を細かく区分けしてタスク化するという行動をとりました。
<aside>
(図: mermaidを使ったタスクツリー)
</aside>
タスクを視覚的に分解することで、それぞれのタスクが何に役立つのか全体像を示そうと考えました。上図のようなツリーがいくつか出来上がり、初版から膨大なタスク量になりました。
膨大なタスクは出しっぱなしではいけません。別の方法で進捗管理が行えるようにしました。
<aside>
(図: タスクツリーをかんばんボード化したもの)
</aside>
タスクの一覧から各自が挑戦したいタスクを見つけて自分自身をアサインするように伝えたところ、獣が群がるかのように次々とタスクが取られていきました。みんな、お腹がすいてたのね。
タスクをずらっと並べたことにより、メンバーの皆さんはやるべきことを把握でき、それぞれが自主的にタスク消化し始めたことを実感できました。これでやっと 「ああ、道筋を示すということはこういうことか」 と理解できました。リーダーのあり方が少し見えました。
競技に向けた準備を進めていくと、最終的にはおそらくどのチームも似た内容になります。6人しかいないわたしたちのチームが輝くには、他のチームがやらない独自性の高いことをやって、抜きん出るしかないと考えていました。
▼在庫管理・需要予測ツールを作った
わたしはビジネス知識を持ち出して「在庫管理および需要予測」をするツールを作ることに決めました。こざえもんが一晩で作ってくれました。
<aside>
</aside>
EXCELの簡素な仕組みではありますが、安全在庫数の算出、適正在庫数、適正発注量を計算できるツールです。在庫管理の知識を知識を生かすことができました。黄色いセルに在庫数を入力していくと在庫数の推移がグラフで視覚化されます。さらに、在庫の減り具合から需要予測が自動計算されるというものです。
現実世界では、在庫を保管するのに保管コストが掛かったり、商品に賞味期限があったりと複雑な要素はあります。競技ではそこら辺の考慮は不要だったので、非常にシンプルな作りで済みました。
このツールの重要なポイントとして、30分おきに在庫数を手入力する運用が必要という点が挙げられます。この仕様は、あとで後悔を経験できるスペシャルな仕様です。
▼競技環境の構築
わたしたちはGoogle Cloudを個人契約して、競技環境を模したサーバーをいくつか構築しました。メンバー全員が模擬競技環境に接続してECサイトの操作を試すという経験ができました。チーム内にすごい技術者が居て、一晩で作ってくれました。
▼諦めたこともある
他に、自作WAF、自作EDRを作る話もあがったけど時間がなくて断念しました。それができそうな技術者がゴロゴロ居たので無理させてみようと思ったけど2週間じゃ無理だと一蹴されました。無茶振りばかりの悪いリーダーも経験できました。
競技内容に関する詳細な資料は、競技当日が近づくまで公開されません。例年は競技前日の夕方に100ページを超える爆弾pdfファイルが配られて、みなさん夜中まで読み込んで翌日の競技に臨んでいるそうです。
今回(2024年)は競技の4日前に資料が公開されました。これはゆっくり読む時間があるなあ! と安堵したのも束の間。おそらく参加者の皆さんは、記載されている 「連合チーム制」 という内容に驚愕されたと思います。
資料ではJV(ジョイント・ベンチャー)と表記されていました。ざっくり説明すると、3チームで連合となって1つのチームとなる感じです。各チームが別々の準備を進めてきた経緯から、チーム間の考え方の違いで揉めるのではないかと畏怖しました。どうすべきか、まずは夢の中で悩むことにしました..zzZ
「まず3チームで話そう」ということで急遽仲間となった3チームをオンライン会議に召集しました。わたしは、連合チームがうまくやっていくために、いくつか決めるべきことがあると考えていました。
<aside>
</aside>
わたしは、せっかくなので経験できることは全部経験したい考えです。わたしは単体チームのリーダーだけでなく、連合リーダーも兼任しました。
初回のオンライン会議では「連合チームで協力するべき」という意識あわせだけを行いましたが、それだけです。競技まであと3日しかなく、次のオンライン会議は期待できそうにありませんでした。「競技前日に沖縄で会おう」という約束をしてオンライン会議を終了することにしました。
さあ、ついに沖縄に旅立ちます。約3時間のフライトには不安が同席してくれました。