インシデント対応

MicroHardeningで学んだオンラインのセキュリティインシデント対応tips

先日、/dev/hardening – Hardening Drivers Conference 2021
セッションのなかで開催された、MicroHardeningに参加させていただきました。
そこで学んだことをレポートします。

Micro Hardeningとは

数名のチームを組んで、与えられたECサイトを様々なサイバー攻撃から守り
安定稼働させることを目指す競技会です。

企業向けのエンタープライズ版もある(いーなー)

私が今回参加させていただいたコミュニティ版のMHv2では
チーム5名で45分間の競技を3セット繰り返しました。
毎回同じ攻撃を受けることで、振り返りを促し学びにつなげる狙いとのことです。
(競技終了後の深夜に秘密の4セットめが開催されていたという噂もあります…)

公式スライドより

各45分間の競技中、与えられたECサイトに買い物客役のbotがひっきりなしに訪れます。
その際、サイバー攻撃を防ぐことができず、インシデントが発生していたり
攻撃を恐れる余りに必要なサービスを止めてしまっていたりすると
客足が途絶え、全体の売上が下がってしまいます。
いかに売上を理想値に近づけることができるかが勝負の分かれ目となります。

全部で3セットありますが、1セットが終わるごとに順位が発表されます。
数十分の休憩の間に、次セットの作戦会議をして次に備えないといけないためかなり慌しいです。

自サイトの売上の多寡で各チームに順位がつきますので
セキュリティ力という目に見えないものを、金額という明瞭な形にしてみせるという点で
めちゃくちゃ画期的な競技だと思います。

私が所属していたチーム4の結果は8チーム中4位(最終セット)ということで…まあ結果だけみるともう少し頑張りましょうって感じではありますが、得るものは大きかったです。

準備したこと

今回は完全オンライン開催だったので
参加表明すると専用のDiscordチャンネルに招待されました。

私は単独参加だったので、まず仲間集めをする必要がありました。
ドラクエであればルイーダがいい感じに紹介してくれるかもしれませんが
残念ながらここは現実です
自分の仲間は自分で見つけます。

勇気をだして声をかけてみたら
意外とあっさりメンバーを集めることができました。(みんな優しい…)
一書に戦うメンバーが決まったらチーム専用Slackを立ててそこに全員を誘導して作戦会議しました。

チームSlackで準備&事前打ち合わせ

チームSlackへ全員招待ができたので
まずはそれぞれの自己紹介を行い、事前の顔合わせ会(当然オンラインですが…)の日程調整をしました。

自己紹介で共有したこと

まあ普通のことなんですが

  • お名前
    • ハンドルネームでも可だがなんて呼べば良いかわからないと困る
  • Hardening競技経験
    • 完全にはじめての人と経験がある人では共有している認識に差があるので確認する
    • 逆に、経験者の場合は過去の経験がかなり役に立つので積極的に共有してもらう
  • 普段やってる業務のこととか勉強してることとか
    • 参考までに聞く、得意な分野や興味の方向が分かるとこのあと役割分担決めやすい
    • 個人的な印象ですが、どちらかといえばインフラ側に携わってる方の方がHardeningでは活躍できる傾向があるような気がしますね…(自分にないものねだりかもしれません)

事前顔合わせで話し合ったこと

Zoom会議で競技2日前に全員集合することができました。
話し合いの議題は

  • チーム名の決定
  • 経験者に想定インシデントを列挙してもらい、対策を役割分担
  • 事前に提示されている資料を読んで不安な点を共有

事前資料のボリュームが多かったため
全てをこのタイミングで読み切ることができませんでしたが
あらかじめ経験者の方にお話を伺ったことと、想定インシデントや対策などを具体的に話し合う中で
ポイント的に資料を参照して対応を具体化していきました。

このタイミングで全員が競技の様子をリアルにイメージできるようになりました
Hardening自体初参加のメンバーもいたので、かなり重要だったと思います。

チーム名には深い(?)意味を込めましたがこれはあんま意味なかったな…w

オンラインにおけるインシデント対応のtips

競技内容はネタバレ厳禁ということなので
ほぼ初対面同士のメンバー全員が、オンラインという距離的制約のあるなかで
力を発揮するためのコツみたいなのを書いておきます。

声を出そう、リアクションをしよう

競技が始まると、最初の準備時間が数十分与えられました。
私たちはZoomのブレイクアウトルームにあつまって準備をしました。

前述のとおり事前に打ち合わせを済ませていたので
比較的スムーズに進めることができたと思います。

オンラインで全員が黙っていると、びっくりするほど誰が何をやっているかわかりません。

まず競技環境に接続することに苦労する場合もあるので
声を掛け合って、全員が接続完了してることを担保する必要があります。
万が一繋がっていない人がいると、対応作業に穴ができるからです。
わからないことがあったらチーム内で助けを求めることが大事だなと思いました。

オンラインだと、できてないのは自分だけじゃないか?と思って
声を出すのが難しかったりすると思うのですが、勇気と声を出すの大事です。
大丈夫です、あなたが初心者でも、メンバーが何人か集まれば
大抵1人くらいはつよい人がいるので全力でその人の知見を全力で吸収しましょう。

あとリアクションをしよう。
発言が虚空に消えると、発言した人に地味にダメージがあります。
人間はUDPではコミュニケーションできません、技術者ならわかるはずです、なんでもいいからACKを返せ
相槌でも奇声でもなんでもいいからコール&レスポンス超大事。

証跡を残すにはSlackが超便利

  • インシデントを検知したのは何時何分か?
  • その対応として誰がいつ何をどのように行ったのか?
  • その結果はどうだったのか?

このようなことをきちんと記録に残すことは、あとから対応の正しさを検証する上でとても重要です。
記録がなければ振り返ることができないので、戦略たてられないですしね。
(ちなみに協議終了後には全員が閲覧できる形で提出を求められます、知らんけど多分出せないと怒られると思う)

しかし、競技に限らずインシデント対応中というのはすまず間違いなく緊急事態です。
緊急事態中に自分の行動を冷静に記録を残すことは
現実的に考えると至難の技と言って良いでしょう。

そこで我がチームでは少しでも記録の負担を減らすために
各セットごとにSlackの報告用チャンネルを作成し
自分が操作を行なったことは最低限を呟くというルールを決めました。
(〇〇サーバのバックアップ完了とか、各自自分のやったことをひたすら呟く感じ)

攻撃を検知したときも同様に、気づいた段階で気づいた人が記録を残すと
後のターンで何時ごろに攻撃がくるかを予測できるので役に立ちます。

Slackであれば時間と名前は自動で記録されるので、比較的負担が軽くて済むところが良かったと思います。
画像を貼ったり引用も楽です。
これは実際のインシデントの時にも使えそうです。
(それでも実際忙しくなると忘れて有耶無耶になってしまうのでみんなでフォローしあおうね)

Slack APIを叩いて特定のチャンネルの投稿を全部抜き出してスプレッドシートに自動で保存するGASとかあらかじめ書いておくとさらに良さそうに思いました。(提出や振り返り用)

顔は出したほうがよさそう

WEB会議などでのコミュニケーションはなぜか顔を出す方がうまくいくので
知らない人と信頼関係を手っ取り早く築く目的なら、顔出したほうが得です。
顔出しNGの方がいるのは否定しませんが、これは単純に損得の話です。

でも、カメラONにすればいいというわけでもなく
家にいるはずなのにマスクしてる人は
どうしたんだろう…そんなに信用されてないのかな…
と、個人的には逆に心配になるのでそんなに嫌なら無理しなくてもいいとは思います。

あと、全員カメラONだと帯域やマシン負荷がかかるので
環境が弱い人がチームにいると競技中ずっと顔出しは難しいかもなあという印象あります。
まあ最初だけでも。できれば。

画面共有しながらやったほうがよさそう

これは競技中全然できてなかったのですが
チーム内の誰かが代表で画面を共有しっぱなしにしておくのはやったほうが良いかなと思いました。
強い人の画面でどうやってるのか見てみたいですし
スコアボードをずっと写しておくとかも良さそうです。

全員で同じものを見ていることで意思統一ができますし
共有してる人には間違ったときに指摘してもらえるという特典がついてきます。

まあこれも顔出しと同じでマシンパワー食うので
環境が許せばやったらいいよって感じですかね。

まとめ

セキュリティインシデントが起きて嬉しい企業はありませんが
その備えを行うことも結構むずかしいです。

仮に予め対応を考えていたとしても
なかなかそのとおりには動けないものです。

MicroHardeningやHardeningは、起こってほしくないセキュリティインシデントを
リアルに経験する絶好の機会だと思います。

このような機会を与えてくださった主催のみなさま、一緒のチームになってくれたみなさま
本当にありがとうございました!また参加するぞ〜!