NFLabs. エンジニアブログ

セキュリティやソフトウェア開発に関する情報を発信する技術者向けのブログです。

Hardening 2025 Invisible Divide 参加体験記

この記事は、NFLaboratories Advent Calendar 2025 2日目の記事です。

はじめまして。研究開発部 システム&セキュリティ担当の半野と、ソリューション事業部 教育ソリューション担当の冨塚です。

このたび、私たち2名は「Hardening 2025 Invisible Divide」に参加しました。今回はこのイベントを振り返りながら、参加体験記としてまとめます。

Hardening(ハードニング)とは

このイベントは、ハードニング(Hardening/堅牢化)競技と呼ばれるものの一つであり、参加者はチームメンバーと共に、企業環境を模したマシン群に対して行われる擬似的なサイバー攻撃から、自組織を守り抜きます。

ただ、システムの設定を変えて堅牢化を行うだけではなく、企業がビジネスを行う為の通常業務、決裁業務、インシデント発生時の外部連携など現実の企業運営に即した要素も同時に求められます。

そのため、競技参加者には技術力だけでなく、チームワーク、意思決定力、そして事業継続の視点が問われる競技となっています。

wasforum.jp

スケジュール

日付 出来事
-8/18(月) 参加応募
8/22(金) 競技参加者の確定、チーム結成
8/29(金) キックオフ
9/19(金) チーム間交流会
10/5(日) 事前配布資料の公開
10/7(火) 競技前日準備
10/8(水) Hardening Day(競技本番)
10/9(木) Analysis Day(振り返り資料の作成、交流会)
10/10(金) Softening Day(各チーム発表、擬似攻撃チームからの解説)

競技シナリオの概要

今年は、ECサイトをチームで運営し、サイバー攻撃を受けつつも事業を継続させるというシナリオでした。競技参加者は、「マーケットプレイス(以下、MP)」から提供される各種サービスを購入し、それらを駆使して、「Kuromame6」と呼ばれる攻撃者によるシステム侵害を防御します。また、「相談員」と呼ばれるロールも用意されており、事前準備や競技当日に相談できる担当者も配置されていました。

チームについて

1チーム8~9名で構成されており、全部で12チームありました。チームメンバーは運営の方々により決定され、同じ組織、会社の方が集まるのではなく、様々な属性のメンバーによって構成されていました。

半野が所属したチーム8「ハチワレ」は、メンバー全員が初参加でした。チーム8は、9名で構成されており、上は50代の現役警察官*1から、下は20代の学生まで、幅広い年代と職業の方々で構成されていました。

冨塚も同様に、社内で研修として提供しているハードニング以外は経験なしの状態で参加しました。所属チームは、チーム9「零九セキュリティ八人衆~もうムリです~」で、8人のメンバーで構成されていました。チーム9は年齢層が比較的近く、22才から30才の方々で構成されていました。

キックオフ

チーム発表の一週間後に、全体のキックオフが行われました。

キックオフでは、各チームが事前に用意した自チーム紹介動画、または当日に行うプレゼンテーションのいずれかによってチーム紹介を行う必要がありました。

そのため、チームの発足から一週間以内に、キックオフで使用するチーム紹介用PVの作成が必要でした。

チームメンバーは全員が初対面であり、タスクのリードタイムも短かったため、ミーティングのスケジュール調整や、リーダーを誰にするかの決定など、多くの課題がありました。

しかし、これらのプロセスを通じてチーム内の結束が強まり、結果としてスムーズな立ち上げにつながったと感じています。

グループ分け

準備段階および当日の作業領域が重複しないようにするため、チーム内でもメンバーごとの担当を明確に決定する必要がありました。

チーム8では、「テクニカル」「ビジネス」「マネジメント」の三つのグループに分かれて準備を行いました。

「テクニカル」は、システムの堅牢化のためのスクリプト作成等、「ビジネス」は、会社のビジネスを運営・存続させるための準備、「マネジメント」は、会社の規定や対外対応のための準備を行っていました。半野は、「マネジメント」に所属していました。

チーム9では、全員が技術に触れたいという想いがあったことから「インフラ・セキュリティ」、「サービス」の二つのグループに分かれました。

前者はDNS、FW、AD、ファイルサーバを担当し、後者はWebサーバ10台、対外対応を担当していました。冨塚は、「サービス」に所属していました。

事前準備

チーム発足後は、チーム8も9も同様に、週に一度のペースで定例ミーティングを実施していました。議論がまとまらなかった場合や、議題が多かった週には、オンデマンドで追加のミーティングを設けて対応することもありました。

スクリプト作成

両チーム共通して、当日の環境が複数台のマシンで構成されていることを事前情報として認識しており、複数台のマシンに対して設定変更を行うための準備を行いました。

チーム8では、パスワード変更とバックアップ取得のためのスクリプトを作成しました。さらに、情報システムを安全に構築・維持管理するためのベストプラクティスをまとめたガイドラインである「CIS Benchmarks」の第5章および第7章に則したハードニング用スクリプトも作成しました。

github.com

チーム9はAnsibleのスクリプトを事前に用意して、以下のことを全マシンに直ぐに実行できるようにしました。

  • パスワード変更
  • sudoersの権限不備の探索(NOPASSWDで実行できる設定になっていないかを確認)
  • 不要なユーザの探索
  • サービスユーザにシェルが付与されていないかの探索
  • 不正なファイル書き込み等の攻撃の痕跡の探索(cronファイル、公開鍵、dumpファイル)
  • 攻撃者に設置されたWebシェルの探索

テンプレート作成

また、本競技は技術のみを競い合うものではなく、企業運営に関わるありとあらゆる事象を考慮する必要があります。そのためインシデント発生時に、企業ホームページでインシデント対応状況の発信を行ったり、外部機関との連携を図る必要があります。これらを円滑に行えるように以下のようなテンプレートを作成しました。

チーム8では、「ビジネス」と「マネジメント」グループで以下の文書の作成を行いました。

  • 利用規約
  • 各種プライバシーポリシー
  • 特定商取引法に基づく表示
  • インシデント種別毎の報告書類
  • 社内規定
  • 稟議書

また、競技中におけるビジネス面でのアクションを取る際には、CEOからの承認が必要であると設定し、承認フローを証跡を残しつつ簡易なものにするために、Discordにて専用チャンネルを設けていました。

Discordチャンネル

チーム9では、作成したテンプレートはOutline(NotionライクなOSS)で一元管理を行いました。

  • 社内ホームページでの報告
  • システム障害報告書
  • 情報セキュリティインシデント報告書
  • 株主/親会社へのメール報告

報告テンプレート

競技当日に向けた演習

チーム9では、メンバー全員で競技当日に向けた演習を行いました。過去の競技会で扱った以下のCMSを実際に構築し、全員で各種操作を確認しました。

  • WordPress
  • Drupal
  • EC-CUBE
  • Welcart
  • WooCommerce
  • PrestaShop

また、ZANSHINという教材を利用して演習も行いました。

github.com

チーム9は全員が関東在住ということもあり、対面で競技演習を実施しました。メンバー同士の交流も図ることができ、とても有意義な時間となりました。

競技前日

競技前日は、各チームごとに作戦会議を行うため、チームメンバー全員で集まりました。広い会議室を借りて複数チームで共用した方が費用を抑えられることから、会議室はチーム8・9で合同手配としました。作戦会議自体はチームごとに分かれて実施しました。また、相談員の方々にも会議室までお越しいただき、直前のアドバイスをいただきました。

Hardening競技前日(手前がチーム8、奥がチーム9)

主な内容は、競技本番の環境情報が記載された配布資料の読み込みです。この資料は競技の3日前に公開されたもので、全134ページに及ぶ非常に膨大な内容でした。そのため、限られた時間の中で要点を整理しつつ理解を深める必要があり、チーム全体で共通認識を持つことが当日の連携を円滑にする鍵でした。

資料には、本番で実施される「チャレンジ」と呼ばれる課題が記載されており、これを達成することで評価が高まります。たとえば「事業運営のために特定サイトの情報を差し替える」といった内容の課題があり、そのための文章作成なども行いました。

今回のハードニングイベントでは「カンパニー制度」というものが導入されており、競技中には全チームで協力したり、二つのチームが合同で役員会議に出席したりする必要がありました。こうした対応には競技前の調整が必要であったため、他チームと連携を取りながら競技当日までに準備を進めていました。

また、事前に準備してきたツールについても、本番環境に合わせて改良を加える必要があったため、その調整作業も進めました。

Hardening Day(競技当日)

競技当日は、リモートワーク勤務者とオフィス勤務者を擬似的に再現するため、チームを二つに分けるように座席が用意されていました。

それぞれのエリアは席が離れていたため、オフィス・リモートワーク間での連携が取りづらい状況でした。その状況に対応するため、Discord等の連絡手段については通知設定をすべてONにし、いつでも対応できる状態を保つことが重要だと感じました。

また、リモートワーク勤務者とオフィス勤務者ではVPNのプロファイルが分けられており、それぞれの環境でできることが異なっていたため、その点を踏まえた戦略を立てる必要がありました。

チーム8のオフィス勤務エリアの様子

競技開始直後、チーム8では、事前に用意していたスクリプトを実行し、パスワード変更とサーバーやコンテナイメージ等のバックアップの取得を行いました。

また、半野はチーム8の「マネジメント」グループに所属していたため、昼過ぎに設定されていた経営会議に向けて報告資料を作成し、会議に参加しました。

経営会議では、現在の売上状況や競技終了までの見通し、インシデント対応の進捗などを報告しました。また、会議の中では、親会社の役員役を務める方々から厳しい問いかけを受けるという、貴重な経験も得られました。

一方、冨塚は、チーム9の「サービス」グループの技術係として、事前準備で作成したAnsibleを用いるなどしてWebサーバの脆弱性修正を行っていました。

用意していたAnsibleを流すことにより発見できたインシデントもあれば、その他の方法で見つかるものもあります。例えば、環境にはメールサーバが設けられており、メールでユーザからインシデントの報告が上がってくることがありました。一つ一つお客様のことを考えて返信を行い、同時にチーム内で共有をし、脆弱性の修正に取り掛かりました。

最後に、競技終了までにレポートを作成し提出する必要があり、終盤はメンバー全員で協力して執筆を進めました。

チーム8では、作業報告書を提出するためのサーバーが攻撃によってアクセスできない状態となっていたため、やむを得ずメールで報告書を送信する必要がありました。しかし、pptxファイルは容量が大きすぎて送信できず、pdfに変換してもなおサイズが大きかったため、最終的にpdfをzip形式に圧縮し、提出期限ぎりぎりで作業報告書を送信するというハプニングがありました。

チーム9でも、同じように作業報告書の提出時には焦りすぎて白紙のpptxファイルを送信するというハプニングがありました。

今回の経験を通じて、期限のある提出物は余裕を持って準備し提出することの大切さを改めて学ぶことができました。

Analysis Day(振り返り資料の作成、交流会)

Analysis Dayの午前中は、Softening Dayで行われる発表に向けた資料作成の時間に充てられました。午後には運営・MP・相談員・参加者が一堂に会する交流会が開催され、チームメンバーはもちろん、他チームのメンバーや運営、MP、相談員の方々とも親睦を深めることができました。

Analysis Dayの交流会場前のビーチ

Softening Day(振り返り)

Softening Dayでは、チームごとに振り返り資料を作成し、全体発表を行いました。

Softening Dayチーム8発表の様子

各チームの戦略や、発見・対応したインシデントの共有を通じて、多くの学びを得ることができました。自チームと同様の取り組みを行っていながらも、異なるアプローチを採用しているチームもあり、次回はそれらの手法を参考にして改善していきたいと感じました。

冨塚の所属していたチーム9では、サーバーの死活監視やWebサイトの改ざん検知をシェルスクリプトで一から実装していましたが、他チームではOSSを活用してより効率的に運用しており、非常に参考になりました。

さらに、他チームの中には、数分間隔で参加者端末のスクリーンショットを取得するスクリプトを作成し、作業報告資料等で活用している例もあり、導入しておけば良かったと感じました。

また、他チームが共有したインシデント事例を通じて、自チームでは把握できていなかった脆弱性が多く存在していたことを認識しました。

競技中は、10台以上のマシンを対象に脆弱性を探索する作業に多くの時間を費やし、その非効率さを痛感しました。インシデントレスポンスは、まず的確な検知が行われなければ始まらないため、その基盤となるログ環境の整備が極めて重要であることを改めて実感しました。

私たちチーム8・9は惜しくも優勝を逃しましたが、全力を尽くしたため、悔いのない結果となりました。

優勝チームは、テクニカルな面だけでなくビジネス面にも力を入れており、私たちが見落としていた観点もカバーされていた点が印象的でした。大きな刺激と学びを得ることができました。

今回の経験は、単なる競技にとどまらず、実務におけるセキュリティ運用の在り方を見直す貴重な学びとなりました。

さいごに

今回のハードニングイベントを通じて、技術的な学びはもちろん、セキュリティに対する意識そのものも大きく変わりました。これまで大規模なセキュリティ関連イベントに参加した経験がなかったため、さまざまなバックグラウンドを持つ方々と交流できたことは非常に貴重な機会でした。

最後になりましたが、チームメンバーをはじめ、MPの皆さま、相談員の方々、そして運営の皆さまに心より感謝申し上げます。ありがとうございました。

資料

Softening Day 映像:

youtu.be

写真:半野・冨塚 撮影

*1:ご本人様より掲載許可取得済み