Hardening

Hardening 2021 Active Faultに参加しました

Hardeningについてまとめた同人誌を頒布しています。どのような準備をすればいいかとか対策についても書いてますのでよろしければぜひどうぞ。

どうも、のみぞうです。
色んな方のご助力を得て、去年に引き続きHardening本戦に参加させていただくことができました。ありがとうの気持ちをこめて忘れないうちに参加記録を書いておきます。
思うままに書いてたらまたむやみに長くなってしまった…見出しつけときますのでみなさまにおかれましては興味のあるところだけご参照ください。

Hardening競技会って何

色んな説明の仕方があると思うので一言で言い表すのは難しいんですが、私は@ITの説明が好きです。

脆弱(ぜいじゃく)なECサイトを攻撃から守る体験を通して、システムを堅牢(けんろう)化し、“セキュリティをビジネスに活かす”という本質を理解する「Hardening(ハードニング)」

単純に機密性を高めるって話じゃなくて、ビジネスを成功させるかが問われる競技ってところがポイントに感じています。
先日、チーム内で振り返ったときには「Hardeningはラーメン二郎みたいなもの」ということでまとまりましたw(食べてみないと美味しさがわからないし、実際食べてるときは辛いんだけど不思議とまた食べたくなる、みたいな意味)

Hardening 2021 Active Faultの流れ

去年に引き続きオンライン開催(Softening以外)
働き方改革ってことで(?)例年と違うスケジュールで進行したところがあったみたいです。

No日程イベント
1〜10/3募集要項に同意して申し込み
210/7参加者決定、チームメンバー告知
3〜10/14チーム内で相談してリーダーとサブリーダーとチーム名決定
4約1ヶ月間チームごとに準備
511/17〜18前々日・前日(通称:Activation Day)
611/19競技会本番(通称:Hardening Day)
711/20振り返りの資料作り(通称:Fault Analysys)
811/27振り返り発表会(通称:Softening Day)←まだこれから

No.3のチーム内相談の際、私はチームリーダーを拝命しました(その会議に経験者が他にいなかったからで人望があるとかではない…)
頼りないリーダーでメンバーのみなさんに大変ご迷惑をおかけしました。みんなごめんな…。

どれくらいの時間コミットしましたか?

チームで話したときメンバーから出た最初の質問が「Hardeningの準備ってどれくらい時間かかるんですか?」で、確かにあんまり情報ないかもなーと思ったので、参考までに今回うちのチームが当日までにどれくらいの時間を準備に充てたか書きます。とりあえず計測可能なMTG(ミーティング)関係の時間だけ。

定例TMG:週2回 ✕ 1時間 ✕ 4週間(※都合が合う人だけ、出れない日があってもよい)
チーム2と合コン:2時間くらい(※後述)
イエラエセキュリティさんの事前サポート会:1時間(※後述)
前々日のMTG:2時間くらい
前日のMTG:3時間30分くらい
——————————————————————-
時間の合計:16時間30分( + テキストコミュニケーションや個人で準備に充てた時間)

って感じでした。2人日ちょいって考えると多いような少ないような…。でも、全員普段のお仕事が終わったあとに集まることになるので、体感的には結構な負担のなかご家庭との調整などもしながらよくやったほうでは?思います。

約1ヶ月間の準備期間でやったこと

リーダーとしてどういう工夫をこっそりやってたか書きます。

コミュニケーションポリシー(ゆるいお約束)を定める

時間的・体力的な無理はしない、議事録や資料を残して情報をオープンにする、発言に「必ず」リアクションする、みたいなことを大切にしたかったので、最初にゆるいお約束としてメンバーに協力を求めていきました。

他チームとの合コンをプロデュース

合同コンファレンス、略して合コンです。既婚者も安心(…?)
昨年度チームメイトだったばびさんが今年はチーム2のリーダーをやっていると聞きつけ、チーム同士で横のつながりができたらみんな意識が高まって楽しいんじゃない?!?!と急に思いついたので提案したら開催されました(ばびさん優しいです)

Hardeningにちなんで堅牢なポーズとってください!という無茶振りをしたらみんなやってくれました。堅牢とは…?(みんな優しいです)

合コンで話題がなくなったときに使う用の話題ガチャ

その中で、チーム同士が合併して売上を合算したらもう優勝では?!?!
という画期的なアイデアも生まれましたがその交渉は失敗しました。(それはそう)
違うチームの人とはあんまり交流する機会がないのでこういう場がつくれてよかったです。意識が高まったかはわからんけど。

奥手な人の発言を促す

Hardeningは基本的に知らない人同士でチームを組むので、MTGとかやってても奥手な人はモジモジしちゃってなかなか発言できなかったりしがち。ファシリテーターがうまくパスを回せれば良いですが、特にオンラインだと表情も読めないのでタイミングを逃しがち。結果特定の人だけで話が進んでしまい白けた空気に…。

というのは割とあるあるだと思います。
ということで、チーム全員に強制的に発言させる策としてGoogleのJamboardでチェックインボードというものを会議毎に作っていました

例)11/20の振り返り資料作成の日のボード

四象限は複数パターンがあるんですが、正直内容はなんでも良いです(できるだけくだらない内容のほうが発言のハードルが下がってよきです)

MTGの冒頭で「チェックイン」として、1分で今の状況や気持ちを表す部分に自分のアイコンを移動させ、その後順番に指名をして全員が挨拶も兼ねてちょこっと話をする。というのを必ずやってました。

最初に声を出すことで、奥手な人もちょっとだけ発言しやすくなって、ちょっとだけMTGが活性化したかもしれない。あと結構みんなの性格が出ておもしろい。

イエラエセキュリティさんの競技前提供サービスを受ける

うまい具合にマーケットプレイス(※各チームの保有予算のなかから他のリソースを調達できるルール)のイエラエセキュリティさんによる競技前提供サービスを購入することができ、具体的な質疑応答を通じてHardening玄人の方々にお話をきかせていただく機会を得ることができました。

日程の調整がうまくいかず、サービス提供をうけたのが本番直前(3日前)だったとはいえ、教えてもらったことが実現できなくて大変申し訳なかった…サービスをご提供いただいたイエラエさんに平謝りしたい気持ち。

たとえば競技環境の堅牢化であれば

  1. 堅牢化のためのポイントを知る
  2. テストを環境作る
  3. 具体的にどういう設定やコマンドをどこに対して行えばよいか試す
  4. 副作用はないか確認する
  5. 自動化するためにスクリプト組む
  6. 競技環境に適用する
  7. 想定通りに動いてるか確認する

こんな感じにステップがあると思うのですが、1を教えてもらっても2以降がスムーズにできるとは限らず、うまく教えを活かすことができなかったという印象です。ほんとすいませんでした。来年こそ。

前々日・前日(Activation Day)

今年はActivation DayとしてHardening本戦の前にプレイベント?的なことがあったので、全員で参加しました。

前々日(17日)にやったこと

マーケットプレイスでどのサービスを買うか決める

マーケットプレイスでご提供いただけるサービスの説明があったので、どのサービスをいくらで入札すべきか事前に相談しました。

接続テスト

競技前に事前に接続テストさせていただけたおかげで、当日は環境の接続のためにそれほど慌てずにすみました。これはほんとありがたい〜ストレスフリー!

前日(18日)にやったこと

参加者配布資料の読み込み

前日の18時半くらいに競技環境やミッションに関する資料の共有があったので、全員夜ご飯食べてから集合しました(めちゃ長くなるので先に食事を摂ったほうがいいという判断)
この判断は間違ってなかったと思うんですが、競技資料の読み込みに21時くらいまで時間がかかってしまいました、これもファシリテーター(私)の要領がわるいからです…ごめんよ…。

いろいろ直前の準備

そこから対応すべきミッションの事前準備とかサーバ情報まとめたり、どのサーバを誰が触るなどの役割分担をして23時くらいに解散しました。

多分、直前準備を朝までやってたチームとかもありそうですが、個人的に徹夜は逆に当日のパフォーマンスと士気を下げてよくないと思ってるのでもうとにかく寝よう「睡眠不足は美容といい仕事の敵だ」と紅の豚も言っています!ということにして皆寝ました(突然のジブリ)
これが良かったかどうかはわかりません。直前まで粘ってたらなにか変わっていたのかなあ。こう考えると、直前準備といくら気合を入れても時間的には数時間しかとれないので、最終的には普段からの備えがモノをいいますよね。セキュリティは積み重ねだなあと思います。

競技当日(Hardening Day)

あんまり当日起こったことについて書くとネタバレになって良くないことに気がついたので、Youtubeで中継されてたことがわかってる1個だけ書きます。他にも同時並行で色んなインシデントが起こるし通常業務として対応しなきゃいけないこともあるし現場はてんや☆わんやでした。

外部SaaSサービスのセキュリティインシデント

チーム11では制限時間内に原因特定ならず。ログが残ってない設定みたいだったので競技中の最善手はなんだったのか未だに悩んでいる。事例を普段から勉強していればもっと良い対応ができたかもしれない。

社長室呼び出しイベント

上記のインシデントの件で社長に呼び出されたのですが、実は呼び出し前の重要なメールを数通見逃しており、前提となる情報が一切入ってない状態でトンチンカンな応答をしてしまった。喋りながら相手の反応をみてメタ的に類推して…みたいな応対をしてた。いま思い返してもあああああああああ(頭を抱えてうずくまる)ってなる…我ながらひどい…そこは変に取り繕わないで正直に謝って確認するべき事案である。

言い訳をすれば、残り時間的に呼び出しチャンスは1回しかないと思ったので、謝った瞬間に門前払いで閉店ガラガラしてしまうのが怖かった。多分これが本当のインシデントで相手が自分の雇い主だったら初手で降参してたと思う。ロープレ力が足りない。
普通に考えたら、社内で取り繕っても解決につながるわけがないもんね?!生産的に時間を過ごすべきだよね?!なんで私はその程度のことわからないんですかね?!本当にごめんなさい。

人員が足りてなかったので、メール担当と資料作り担当が同じ人間になってしまったためメール見逃したという、人材配置のミスっていうか完全に私の初歩的な采配ミス。チームの皆さんにも悪いことしてしまって後悔が拭えない。

振り返って冷静に見直しても、正解にたどり着ける情報がなく(もともと正解なんてないのかもしれない)セキュリティって一筋縄ではいかないですよね、そこが辛いところで面白いところでもありますよね、というのを実感するイベントでした。とかいって実は模範解答が用意されていて私が見落としてるだけだったら泣く。

反省したこと

想定通りにいかないことを想定しておけばよかった

一応「最初の1時間でやること」みたいなタスクを決めていたのですが、やっぱりどうしても思ったとおりにいかなくて慌ててしまうことがありました。

たとえば、やることタスクとしてA→B→Cの順番でやっていこう!と決めてあったとして、なんらかの事情でAがうまくいかないとそこで停滞してしまい、BとCもできてない、みたいなことがありました。

うまくいかなかったら他に人に助けを求めよう、というのは決めていたのですが、基本的に競技中は全員忙しくてわちゃわちゃと慌ててしまうので、Aがn分うまくいかなかったらあきらめてBやる!無理だったらCやる!みたいに次点の案を予め合意しておくことが必要だったと思いました。

強くなりましょう

自分へのいましめなんですが…。たとえばイエラエセキュリティさんに教わったことであっても、自分自身の手でどうにかこうにか実現できるだけのスキルを持っているべきだったなと思いました。

IT界隈では技術に優れている人間のことを俗に「強い人」って言うことがありますよね。自分自信が強くありたいというか、今までまわりにめちゃ強い人が結構いてくれてるのでおんぶに抱っこできてしまっているんですけど、誤魔化せないなあと反省しました。
リーダー(マネジャー)だから技術に明るくなくていいなんてことは絶対なくて、実際に手を動かさないことと動かせないことは違うよねえ。逃げてはいけない。

とはいえ、特定の属性の人だけでもHardeningはうまくいかないのは間違いないので全員技術に強い人である必要はないんですが。だからって自分が強くなくていいってことにならないわけで、要するに私はもっと勉強しよーって思ったりしました。

うまくいったこと

いろいろ負荷のかかるHardeningですが、ギスギスしたりしないで仲良く楽しくやれたのでよかった、一番最初に「最後まで楽しく戦いましょう!」ってチームの皆さんにお伝えしたんですが。そこはわりと達成できてよかったなと思いました(そう思ってるの私だけだったらどうしよう)
仲良しチームが一番成果を発揮できるとは限らないのでそのへんはまた難しい問題である。

次に活かすために

準備期間や当日に作成したいろんな資料やスクリプトがあると思うんですが、もし次回以降メンバーの誰かがHardening出場したとき流用できるように、チーム内でいまのうちに合意をとっておく必要があるなと思いました。

こういうの大事な資産ですよね〜。

まとめ

関係者のみなさま、チームのみなさま、貴重な経験をさせていただきありがとうございました!今振り返っても後悔することが多いですが、これを糧として精進できるようにがんばります。

Appendix

去年(Hardening 2020 H3DX)の記録