■背景
小学生の頃からセキュリティに興味があった私は、ここ数年、ハードニング関連のイベントに参加させていただいている。以前と異なる点は会社でCSIRTを立ち上げたことで有給休暇+交通費・宿泊費自己負担参加では無くなったことくらい。
2015/08/29 | MINI Hardening Project #1.2 | 東京 |
2015/11/07 | Hardening 10 ValueChain | 沖縄 |
2016/11/01 | Hardening 100 Weakest Link | 沖縄 |
2018/07/06 | Hardening II Collective | 宮古島 |
2018/07/21 | Micro Hardening v1.x | 長野 |
2020/01/24 | Hardening 2020 Business Objectives | 沖縄 |
と言う具合に参加してきました。今回もデジャヴュと言いましょうか、2020年01月末の本家Hardeningに参加したけれど、私はエンジニア的な動きをする立ち位置ではなかったからかまたもや所属チームがビリになってしまい、そのリベンジとして今回、 Micro Hardening v2 (以下「MHv2」と略す)に参加しました。「セキュリティベンダーやSREなチームの第一線で活躍している人と比べるともちろん私にできることはたかが知れているけれど、そんな自分でも初心者と比較すればできることは多いし、基本的なことを教えることはできるよね」といったことを確認したくて。。。MHv2はもともとの予定では山口県で開催予定だったそうですが、昨今、日本国内でもリアルなイベント開催は難しくなってきたため、オンラインでの開催となり、交通費を考えることなく参加することができました。
■v1.xと今回のv2の違い
私は過去に、Micro Hardening v1.x@長野にも参加したことがあるので、そのときとの違いについて触れておきます。
v.1.xの内容はこちらを参照してください。
事細かに書いてしまうと、今後、体験する方のヒントとなってしまい学習機会を奪ってしまいますため、故意に抽象化した内容で説明します。
大きな違いはというと、守備範囲が広くなったということのように思いました。
とはいえ、守るべきサーバは1台ということには変わりはない。
つまり、1台のサーバでいろいろ動いちゃっている(v1.xのときよりも)ということです。
1セット45分で、それを3セット実施するということは一緒でした。
ゲームスタートとなる少し前から競技サーバにログインすることは許可されていて、各種パスワード変更やあやしいファイルの削除、脆弱性対策は手を付けてしまってよいので、回が進めば進むほどゲームスタート前にやることが増えていき、ゲームスタート後は監視を強化していくだけとなっていくような展開というのも一緒です。
v1.xのときはたった一人でも立ち回れる規模感だったと思いますが、v2では複数人で対応しないと把握し切れない規模感にシフトしたように思いました。
■どんなだったか
今回のMHv2ははじめてのオンライン開催となりました。
1チーム当たり6名構成でした(私の所属チーム#17は1人欠席で5名でした)。
2日前にチームが公開されましたが、実際に会うこともなく各人のスキルも不明な状況でのチーム戦というなかなか大変な状況でした。
リアルな会場であれば、はじめて会った知らない人同士でも、雰囲気とか表情、キーで何をどんな速さで入力しているかとかで、チームメンバーそれぞれのスキルはわかるものですけれど、オンラインだとはそれは無理。
本家Hardeningの場合は、もっと準備期間があり、各人のスキルのアセスメントなどもしますが、今回のMHv2ではそういうことはできませんでした。
「まあ、Micro Hardeningなんだから、初心者向けの技術のみの体験会みたいなもんだから、しっかり打ち合わせとかできなくてもなんとかなるもんじゃん」と思っていましたが、なかなか大変でした。サーバ1台なのに、いろいろ動いているので。。。
Hardeningシリーズの初心者向けに位置するのがMicroですので、本当の意味でのセキュリティ初心者、業務経験のない学生も多く参加していたように思います。Linuxコマンドもまだわからない人も多いイベントとなるため、5人いても実際に能動的にチームをリードしながら手を動かすことは困難でした。
そういう状況でしたので、一人で立ち回るべき範囲が広くなってしまいました。
「ログやプロセスを見て落ちたサービスを再起動させたり、売り上げを気にしながら、また別のログやプロセスを見る」ということを繰り返しているだけで45分x3は終わってしまいました。
1セット目と2セット目、2セット目と3セット目の間には実質30分くらい休憩時間がありますが、その時間にオンラインですと自チーム内の他のメンバーが何をしているのかさっぱりわかりません。トイレに行っているのか、次のセットのためにログを読み直しているのか、はたまたボーっとしているのか。リアルであればこの時間を使って作戦会議ができるのですが、オンラインだとそれが困難でした。
そこで私(の所属チームで)は、2セット目と3セット目の間に、新たな脆弱性対策情報をネットで調べるような余裕はなかったため、3セット目は売上アップに貢献することを試行錯誤することにし、ゲームスタート前に販売する商品の単価の変更を実施しました。しかし、それが裏目に出てしまい、3セット目スタートからしばしの間、売り上げ0円の横ばいの期間が発生してしまいました。
事前に、以下のようにチーム内アナウンスもしていましたが、誰一人としてシートに記入した人はいませんでした。
チーム内では、Slackへの報告・情報共有を徹底していたため、別のものに転記している余裕はまったくありませんでした。
(が、対応したことをしっかりシートに記入できていたチームもありました)
■どうすれば勝てる?
Microですけれど、1台のサーバで動いているものがあまりにも多いので、マネジメントに徹する人を設ける必要があるかもと思いました。
参加者というより、できることがかなり限定されてしまう見学者に近い方が多いチームの場合、数少ないメンバーで対応していくことになる。「Slackの内容をシートに転記する係」だとか、「while :; do ps -ef | grep nanika | wc -l; sleep 1; done をずーっと目視してもらって変化があったら再起動する係」みたいなことを見学者に近い方に依頼してもよいものなのか、そういうことこそ自動化すべきであるのか、では、どういうことをしてもらえればよいのだろう。。。的な他者への移譲の難しさが初心者向けのMicroならではのような気もしました。
■結局のところ
Hardeningシリーズ、共通の課題は、セキュリティインシデントへの対応力(知識だけではなく実践できる力)とコミュニケーション力でしかないと私は感じています。
極端な話、対応力があっても何言っているかわからない人は何言っているかわからないですし、喋っているだけで何の対応もできない評論家とか転載厨みたいな人はうるさいだけで集中すべき作業の邪魔となります。そういったことを気にしていると沈黙が続き、チームとしての動きができません。
競技当日前に人を知っておく→SNSなどで見ているだけでなく会話しておく→勉強会に参加したりオープンソースプロジェクトでコントリビュートするなどして人脈を拡大しておく といったことを能動的にしていって人を知っておかないと、オンラインでのチーム対応はなかなか難しいと思いました。
ちょうど今はテレワークが流行していますので、経験を通してよりよいやり方が見出されるとよいですね。。。
もちろん、終わった後の振り返りも重要ですよね。
■謝辞
同じチームになった方、このような機会を無償提供してくださった川口設計の川口洋さん、ありがとうございます。
自助→共助→公助といったスコープ(?)は、Micro→Mini→本家にも似ているように思えますし、自我確立→自己実現→自己超越とも、「一燈照隅 萬灯照国」とも同じようなことと私は理解しています。
■蛇足
なお、このブログがWordPressであるのは、勉強のためでもあります。Google Cloud Platformの無料枠で運用しています。Hardeningに参加される方は、こういったことを日常的にすることで経験を積むこともできるという一事例です。
操作方法を当日になって検索しまくるのではなく、日常として運用していれば、どこに何があるのかとかはスグわかるようになりますので。。。