Classi開発者ブログ

教育プラットフォーム「Classi」を開発・運営するClassi株式会社の開発者ブログです。

Classiセキュリティ強化への道・後編~Hardening本戦へいざ出陣編~

はじめに

こんにちは、開発本部エンジニアの id:kiryuanzu です。
Classi Advent Calender 2022 の6日目の記事を担当させていただきます!

本記事は先月に同僚の @nomizooone さんが執筆した「Classi セキュリティ強化への道・前編〜Micro Hardening で修行編」の後編パートです。

11月15日、Classiのメンバー3名が沖縄県名護市の万国津梁館で開催されたハードニング競技会(通称: Hardening本戦)に現地参加しました。
社内研修として実施された Micro Hardening で修行を重ねたメンバー達による現地レポートを交えつつ Hardening本戦の経験を通して学んだ内容を中心に紹介していきます。

Hardening本戦とは

前編で説明したハードニング協議会の集大成となる大会で、最近では年1回行われています。
具体的には、脆弱性のある EC サイトなどのビジネス環境を模したシステム群がチームごとに与えられ、競技時間内の売上と脆弱性対応などの堅牢化の技術を競います。
たとえば、サイバー攻撃によってシステム停止が引き起こされればその間の受注が行えないため売上が減ります。また、堅牢化に集中するあまりに商品の在庫切れが起これば、ビジネスの機会損失が起こります。このように、様々なトラブルに対応する中で、いかにビジネスを加速し、売上を理想値に近付けるかを競う競技です。

wasforum.jp

Hardening本戦参加レポート(id:kiryuanzu編)

Hardening本戦は、準備期間が1ヶ月ほど設けられています。応募者の中から Hardening Project のメンバーによって8,9人程度のチームが組まれ、そこから競技当日に向けてチームとして準備を進めていくことになります。
過去にHardening本戦に参加した際はClassiメンバー3人が同じチームを組みましたが、今回は全員が別々のチームでの参加となったことでお互いのチームの様子について聞き合うようになり、自チームの動き方との違いを知る機会が増えたのが新鮮でした。そして見知ったメンバーが誰もいないため前回までとは一風違ったチームビルディングを意識する必要があったのも印象的でした。
筆者のチームでは主に以下のような準備を行いつつ当日を迎えました。

  • チーム名の決定・ロゴの作成
  • 週2の定例MTGの実施
  • スキルチェックシートを元に役割分担決め
  • 当日にやることのタスク洗い出し

また、社内の MicroHardening の研修を受ける中でチームビルディングの重要性をあらためて知ったことでチームメンバーの人たちが話しやすいようにできるだけ相槌を打ったりチャットで反応をしたり、esa で自己紹介ページを作るなどコミュニケーションしやすい場を形成できるよう心がけるようにしました。チームメンバーの方々も進んで自己開示してくれる方が多かったおかげで、和気藹々とした雰囲気が段々とできあがっていったように思います。
チームメンバーの学生の方がチームロゴを率先してデザインし、さらに SUZURI でロゴTシャツを作ってくれたのもチームの結束力を高める動きで大変素敵だったのも強く印象に残っています。
準備期間の間は定例に参加するためにプライベートの予定を調整する必要があり忙しい面もありましたが、普段の業務とはまた違った交流を楽しむことができた1ヶ月間でした。

同じチームになったオイシックス・ラ・大地の方々もブログでレポートを出しているのでぜひ読んでみてください!

creators.oisix.co.jp

いざ、沖縄!

火曜に Hardening本戦当日というスケジュールだったため、日曜に現地へ到着、月曜の日中は滞在先でリモートで業務をし、退勤後に各自当日に向けて準備を進める動きを取ることにしました。

那覇行きの飛行機に乗る前の Classi メンバーたち。まだ表情に元気が見られたころ

飛行機には無事搭乗でき、那覇まではスムーズにたどり着くことができたのですが名護行きのバス停を間違えてしまったこと、高速バスではなく一般路線バスに乗ってしまったことが重なり滞在先に着くまで 4時間以上かかってしまいました。到着してすぐにありついたジューシーとソーキそばの味はしばらく忘れられそうにないです。

ジューシーとソーキそば。ジューシーは沖縄では「雑炊・炊き込みご飯」という意味

移動は大変でしたが、同僚達と沖縄ならではのご飯やお酒を楽しんだり、競技前日の夜は準備作業にいそしみながら好きな音楽をかけてわいわい語り合うなど、修学旅行のようで大変楽しい思い出になりました。自分以外のメンバーも同じ感想を抱いていたようで、一緒に現地で滞在できて良かったと思いました。

若者たちと民泊サービスを利用して1軒屋借りて泊まってたんですが、友達の家で合宿してる感じが楽しかった。前日の準備中、深夜テンションでおかしくなる感じとかも良かった。もうこんな経験は人生で二度とできないかもしれない。

(一緒に参加したメンバー(@nomizooone)のブログから引用)

当日の経験を通して学んだこと

当日の競技では遊撃的に技術タスクを触っていく立ち回りを予定していましたが、直前に CISO(最高セキュリティ技術責任者)の役職を担当することになりました。この役職は主にチーム外とも情報連携をして課題解決する役回りが求められていました。よって、他チームと連合委員会を組んで情報共有したり運営から出された課題に応じて資料を作成するなど、技術以外のタスクにも関わることになりました。

それ以外にも、経験者として初参加の方々の動きをサポートし続けたりサービスの不具合を見つけたら技術班にエスカレーションして一緒に原因を究明するなど、他メンバーとコミュニケーションを密にとりながら問題解決へと取り組む動きが必要な場面が多くありました。

結果的に常に複数のタスクを掛け持ちし続ける状況となっており、今抱えているタスクの中で優先度の高いものを選んで手を動かす必要がありました。しかし、限られた時間の中で焦りが芽生えてくると、優先順位よりも目の前にあるタスクをとにかくちゃんと終わらせることに目がいきがちになり、うまく動けていなかった場面が多々あり反省しました。

競技中シーンその1 Hardening Project より提供

この経験から、どんな状況下でも「優先順位を常に意識して動く」といった振る舞いを維持することの重要性を知りました。普段の業務でもこのように優先順位を意識して行動できるようにしたいと改めて考えさせられました。
また、競技終了後にチームメンバーから自分が準備期間から意識していた誰かの発言にすぐ反応することや相槌を打つ振る舞いを褒めていただけて大変嬉しかったです。この振る舞いで安心する人がいるなら今後もできる限り続けていこうと思えました。

競技中シーンその2 Hardening Project より提供

Micro Hardening では普段から見知ったメンバーでチームを組んで競技に参加したことで課題の認識合わせが比較的スムーズでしたが、Hardening本戦では初対面かつ学生、公務員、会社経営をしている方などバックグラウンドが異なった人たちとチームを組むことになるので課題を捉える前にお互いのことを知っていくところから始める必要がありました。
競技を通してチームメンバーそれぞれの大事にしている価値観やキャリアの考え方、これから挑戦したいことを知れたことで、普段の業務ではあまり関わることもなかっただろう人たちの価値観に触れたのも貴重な経験でした。

いったんここで id:kiryuanzu のパートは終わって当日一緒に参加した Classi メンバーの @_da1kong さんにバトンタッチします。

Hardening本戦 で学んだこと(@_da1kong編)

2022年4月に新卒エンジニアとして入社しました @_da1kongです。普段はサービス開発をメインに行っており、セキュリティに関しては初心者でしたが、Hardening本戦に現地参加しました。沖縄に行ったのは小学生のとき以来です。

このような自分がHardening本戦に参加するにあたって、参加しているときに意識していたことや参加して良かったこと、今後どのように活かしていきたいかを書きます。

参加しているときに意識していたこと

私が一番意識していたことは、チーム内で溢れているタスクや対応できていないものを進んで見つけて探して行うことでした。普段はアプリケーション開発をメインにやっていることもあり、サーバー知識やセキュリティの経験値が少なく、技術面では力不足な部分がありました。そのため準備期間では、チームに貢献しきれていない感覚がありました。

しかし時間を重ねていく中でチームを俯瞰しながら自分にできることを探していると、共有情報が手薄になっている部分など自分にも貢献できそうな部分が多くありました。そこで、チームで話したことや決まったことを共有するための議事録を作ったり、他のメンバーへの連携や連絡を率先して行っていました。競技が終わった後の懇親会でメンバーから、このような気を利かせた動きが良かったとフィードバックをもらったのが嬉しかったです。

また当日は、全員が手持ちの作業に集中していると、新しく障害を見つけても対応する余裕がなくなってしまう状況がありました。その際はできるだけ困っているメンバーの声を早く拾うことを意識しました。自分の力だけでは解決できないこともありましたが、メンバーを巻き込んだり情報を残すことでチームに貢献できました。

競技中シーンその3 Hardening Project より提供

参加して良かったこと

オンサイトで参加することだけでも非常に楽しかったです。RubyKaigiにも参加して思いましたが、現地の空気感は現地でしか味わえないものでした。

tech.classi.jp

現地参加ならではの、沖縄の美味しい料理やお酒も飲むことができました。

美味しいリブロースステーキを頂きました

会社の先輩と同じ宿で修学旅行っぽくわいわいできたのも楽しかったですし、現地でチームメンバーと交流できたのも良かったです。前日に初めてチームメンバーと対面で顔を合わせたのですが、その時に話したり一緒にご飯に行ったりすることで温度感がそろった気がしています。同じチームになったメンバーは情シスやセキュリティ系の人やビジネス系の人がいて、普段接する機会のない方々でした。また若い方が多く、みんなモチベーションと体力のある人ばかりで刺激を受けました。そういう方々と一緒に勉強したり、手を動かして学ぶことができたのはすごく貴重な経験になりました。

砂浜に書かれているのはチーム名です

先輩達とは別のチームでしたが、逆に懇親会ではお互いのチームメンバーを紹介したりして輪が広がりました。

今後活かしていきたいこと

準備や競技の動きで重要だと感じたことは、チームで溢れているタスクを主体性を持って拾うことです。チームで仕事をしていると、どうしても細かいタスクがこぼれ落ちやすい状況にあると思います。そんな時に今回の経験で学んだ状況を俯瞰して情報を拾って行動することが大切だと感じています。与えられた役割をこなすだけでなく、自分で見つけ率先して行動することでチームに貢献したいです。

また普段のサービス開発においてもセキュリティ対策は非常に重要だと再認識しました。競技の最中、実際に攻撃を受けることで、アップデートを怠らないことや権限を絞るなどの基本的なセキュリティ対策が非常に重要だと身をもって感じることができました。このような対策は一時的にやるものではなく、サービスを運用するうえで継続的に行うことが大切です。貴重な経験をした自分が、熱量が高いうちに周りを巻き込んでチーム内でもそういう文化を作っていけるようにしたいと思っています。

最後に

ここまでいろいろ書いてきましたが、準備期間や現地での活動も含めると結構大変なイベントでした。それでも今回参加できたことは、今後のエンジニア人生にとても良い影響を与えてくれると確信しています。

個人的にはこういった経験を自分だけに閉じずに、他の方と共有することがとても大事だと思っています。まずは自分の経験をバネに自分だけでなく、所属しているチームから、行動や文化を変えていけるように頑張ります。

貴重な機会を作っていただき、競技前後も助けていただいた@nomizoooneid:kiryuanzuに感謝しています。ありがとうございました。

まとめ

以上が@_da1kongさんのパートとなります。@_da1kongさんは初参加でさらにチーム内にも知り合いがあまりいない中で慣れないことも多かったと思うのですが、最後までついてきてくれて本当にありがたかったです。

今回のClassi のメンバーが所属していたチームでは前回の順位を越えることはできませんでしたが、この競技を通して学んだことを業務でも活かしてやっていけるように前向きに捉えてます。

Hardening本戦で身についた振る舞いを普段の業務でも意識することで Classi のセキュリティ強化へとつながっていけたらと思います。 Classi アドベントカレンダー 7日目の担当は id:ut61z さんの「s3fsを使ってEC2の特定のディレクトリをs3と同期させる」です。よろしくお願いします!

© 2020 Classi Corp.