去る6月17日、MINI Hardening 4 Returns #4.5@未来研究所に参加した。
何だかんだと参加レポートを書かずにいたのでやる気を振り絞って書いてみた。
遅いよ。知ってる。
MINI Hardeningとは
MINI HardeningはHardeningのMINI版である。じゃあHardeningとは何か、というと、簡単に言えば「サービスを正しく運用しながら守る競技」となる。
セキュリティの競技であるCTFでは主に攻撃のスキルが問われる。Pwnカテゴリではソフトウェアの脆弱性を巧妙に突いて任意のコードの実行を狙い、WebカテゴリではWebサイトの脆弱性を突いて時にはサーバコンピュータで任意のコードを実行させることを狙う。
通常CTFでは競技参加者が様々なサーバを攻撃する形になるが、Hardeningではその逆で、競技参加者がサーバを各種の攻撃から守る形になる。すなわちHardeningでは守るスキルが問われるのである。イメージとしては琉球朝日放送さんの以下のページの画像がとてもわかりやすい。
このHardeningという競技は沖縄だったり北海道だったりで複数日かけて行われるのだが、そういったものへの参加はなかなかハードルが高い。参加費用が高額になったり、仕事の都合がつけられなかったり、などなど。そこで実施されているのがMINI Hardeningである。MINI Hardeningはこの複数日かかるHardening競技を1日にギュッとまとめて実施しようというものである。しかも東京や大阪といった大都市圏もしくはオンラインで開催されるため、非常に参加がしやすくなっている。さらにコンパクトにしたMicro Hardeningというものもあるらしい。
MINI Hardening #4.5
今回そのMINI Hardeningの4.5に参加してきた。回を追うごとにマイナーバージョンが上がっているようなのだが他のバージョン4の回に参加したことがないのでどのくらい変わっているのかはわからない。
Hardeningは複数人でチームを組んで参加するチーム制だが、今回のMINI Hardening #4.5は個人戦だった。私は8年前のMINI Hardening #1.2に参加したことがあるのだが、その時はたしか4人で1チームのチーム戦だった。私は事前にチームを組むことなく1人で参加したが、運営側がチームを作ってくれていた。なのでぼっちでも大丈夫。私はだいたいいつもぼっちだ。今回もぼっちで参加したぞ。
ちなみにその時には2位だったかでOWASPボトルをいただいた。今も家にある。
閑話休題。MINI Hardeningで守る対象となるシステムはメジャーバージョンごとに変わっていて、バージョン1ではECサイトだったが、バージョン4の今回はソーシャルゲームとなっていた。ゲームということで攻撃をしかけてくる不届き者以外にも、チート行為をしようとする不届き者がいる。競技ではこれらの攻撃とチート行為に対処していく必要がある。
実際の競技内容やシステム構成などに触れるとネタバレになりかねないので、そのあたりのことを知りたい方は公式の紹介資料を参照いただきたい。
MINIにはチーム戦の通常版と、個人戦で時間の短いAVTOKYO版があるようだが、今回のものは個人戦で時間が通常版より少し短くて4時間、防御対象システムはAVTOKYO版と同じく1台、Red Teamの攻撃が足して2で割るくらいだったので、ちょうど中間くらいだったのだと思う。
競技の様子
ネタバレ防止のため攻撃内容とか、攻撃内容につながる防御の内容とかは伏せる。
事前に競技内容を説明した資料とAPI仕様書が配布される。資料にはシステム構成や競技ルールなどが書かれている。当日までにシステム構成とAPI仕様書を見ながらこんな感じなのかなーという妄想をしていたがさすがにこれだけではわからないことが多い。丸投げ社長死すべし。
当日。競技環境にアクセスするための踏み台サーバの情報をもらって少ししたら競技開始。事前にこれをやっておこうと考えていた防御策を実行し、システムの設定など見たりゲームサービスのソースコードを見て脆弱性やチートにつながる不備などが無いかチェックしたりなどしていた。ソースコードとAPI仕様書を見ながら実際にゲームを触ってみてやっと動きがわかってきた。やはり実際にいじってみるのは大事。
あとは適宜アクセスログとユーザの見る画面を確認して変なことが起きてないかチェックし、異常なものを発見したら調査と対処を行っていった。
そのうち攻撃やチートが始まってくる。チートユーザはそれとわかる特徴があったので見つけ次第対処していった。初めの方は手動でやっていたが、大変になってきたので自動化した。ソースコードを理解しきれていなかったのでどこにチートの口があるかまでは特定できなかったため、一般ユーザとチートユーザの見分けがしやすくて助かった。
当然攻撃もされていた。事前に考えていた防御策で大体OKだろと思っていたら全然そんなことはなく、穴だらけの状態でドヤ顔していたため、あっさりと侵入されていろいろやられ、ゲームがうまく動かなくなるなどしていた。慌ててシステムの状態をチェックしたり内部の調査をしたりして対応する始末。いくつかの攻撃は止めたり復旧したりできたものの、最後に実行された攻撃は復旧できないまま競技の終了を迎えた。無念。
最終的には20人ほどの参加者の中で8位。終了40分前に共有されたスコアボードの様子では6位だったのだが、最後の攻撃から復旧できなかったのが響いた模様。
感想
まずは楽しかった。
普段リアルタイムで攻撃を受ける機会なんてまずないし、そういったシステムを現況把握しながら対処していくこともない。
そういった事態を自分の身で体験することで質の高い経験になるし、受けてしまった攻撃を振り返ることで自分に足りなかったものを把握できる。
これをゲーム形式で他者と競いながら楽しく実施できるというのはとてもよい施策であると感銘を受けた。8年前にも同様の感想だったけど今回改めて感じた。
個人戦だと全てを一人で見なきゃいけなくて、それはそれで楽しいんだけれど、サービスや土台のシステムをあっちこっち行ったり来たりするのは大変だった。
チーム戦でやる場合は担当を分けてそれぞれで注力するようにした方がいいね。8年前はチーム戦だったが、どうやっていたかもう覚えていない。
もちろん反省点もある。
前提条件を甘く見ていたり、攻撃はあらゆるレイヤーからやってくるということに十分に気が回らず防御策が中途半端になってしまっていた。
防御側は全てを守る必要があるが、攻撃側は穴を1つ見つけるだけでいい、という非対称性が重くのしかかる。
とはいえ、私が最初に手掛けた防御策は他の誰もやっていなかった効果的なものであったらしく、運営の方からお褒めの言葉をいただいたのは嬉しかった。まあ、それ以外がザルじゃしょうがないんだけど。
Hardeningに行こう
こんな感じでMINI Hardeningを堪能したわけだが、親玉のHardeningが現在参加者募集中である。募集期間は8/10 17:59まで。
開催時期は10月頭なので、上期が終わって一息ついてる人も多いだろう。期初ということで日程の調整もつけやすかろうと思うので、我こそはと思う方はぜひ。
私は応募したが、選考を通過するかどうかは運営のみぞ知る。参加動機とかアピールポイントとかどんな感じで書くのが良かったのか。あれを審査しろと自分が言われたら困ってしまうがどうやって審査するんだろうな。結果がわかるのは8/18らしいので、結果通知を楽しみに待とう。
参戦に当たり、過去の雰囲気やノウハウなんかは以下の非公式同人誌が非常に参考になる。
これを読まなかったら自分はやらなかったであろう事前準備や本番までの段取りが書かれている。知らずに本選に挑んでいたら何も知らずに無様をさらす羽目になっていたであろう。
MINI Hardeningでは技術が大半を占めるが、Hardeningではそれに加えて経営判断や社内外との折衝などの上位レイヤーの話も入ってくる。というのはニュース記事などで見て知ってはいたが、この本では過去のHardening本選でそれらがどのように発生してどのように対応したのか、といったことが具体的に書かれている。このレベルのことは準備しきれるものではないけど、心の準備と、対応するためには競技前・競技中に何をしていたらいいか、ということを学べた気がする。
最後に
MINI Hardeningという競技では、実際にシステムに攻撃を受けながらそれを守る、という稀有な体験ができる。これを読んで興味を持った方、ぜひ参加してほしい。あとHardening本選に行こう。北海道で僕と握手!(自分が選考通過するかどうかはわからんけど)
楽しかったなー、という思いが強かったので会社でMINI Hardeningできないか、などと企んでいる。設計とかPMとかはできるけどLinuxでコマンドたたいてのサーバ運用をやったことがないという人が多そうなのでその辺どうするか、MINIじゃなくてMicroの方がいいかもな、などと考えつつも全然進めてないので妄想段階ではあるけれど、賛同してくれる人は声かけてくれると嬉しい。助けて。
The post MINI Hardening 4.5に参加した / Hardeningに参加しよう first appeared on 愚行録 the Next Generation.