こんにちは、DevBrandingのellyです。12月20日に配信した「本当に怖い障害訓練、犯人はfreeeの中にいる!?」の様子をご紹介します。
2018年の10月末にfreeeで大規模な障害が起き、そのような大規模障害を繰り返さないために、freeeでは10月末に障害訓練の日を定めて毎年訓練しています。今年の障害訓練については先日公開した【マジで】サイバー演習シナリオの作り方【怖い】 - freee Developers Blogでも詳しくご紹介していますが、freee Tech Nightでは実際に障害訓練を企画しシナリオを作ったPSIRTの二人に今回の訓練のポイントや当日の様子、普段のPSIRTの業務について話を聞きました。
tdtds: 写真左上。2020年10月入社。PSIRTマネージャー。前職ではサイバー攻撃を研究。サイバー攻撃大好き。
Taichi Matsumoto :写真右上 。2020年8月入社。エンジニア歴7年、現在はPSIRTでインフラ関連のセキュリティ強化を担当。
のぶじゃす (@noblejasper): 写真右下。ラジオパーソナリティ、2017年に中途入社。mixi、ソーシャルゲーム企業でソフトウェアエンジニアを経験し freee に。入社後はエンジニア→エンジニア採用担当→エンジニアと DevBranding を担当。しゃべりたがり。声が大きい。
そもそも障害訓練って何のため?
―障害訓練を何のためにやっているか改めて教えてください。
tdtds:人為的に大規模障害を引き起こして、それに対応することでそこからいろんなことを学んでいこうという目的でやっています。2018年10月の大規模障害を毎年忘れないようにしようというのが主眼ですが、そこから訓練という形に持っていくにあたり、プロダクトを横断する大規模な障害が発生すると何が起こるのかっていうのを毎年ちゃんと見つけ出してそれを改善するサイクルを回していこうというところが狙いにありますね。
―いろんなプロダクトや部署を巻き込む障害を故意に起こすことによって、障害が起きると何がやりづらい、ネックになるかをみんなで見つけるためにやっているんですね。
tdtds:Webサービスやっている人なら分かると思うんですが、小さい障害って日常茶飯事なんですよね。そういうものは障害範囲も狭かったり、特定のケースだけだったり、お客様への影響も小規模だったりするので、みんな割と慣れていて対応できるんですが、例えば複数プロダクトにまたがったりとか影響範囲がものすごく広かったりすると何が起きるのかということをちゃんと毎年体験するというのが大事だと思います。
―今回の訓練は「本当に怖い」と言われてますが、それはむしろ成功だったってことですよね(笑)
tdtds:そうそう(笑)
今年の障害訓練、ここが怖い
―実際今回やった障害訓練の内容を教えてください。
tdtds:障害訓練の話はいつもCIOの土佐から話をもらっていて、今年は7月頃から1on1で「今年の障害訓練どうしようか~」という話を始めました。去年は大規模だけどプロダクトの障害が起きただけだったので、基本的に動いたのはエンジニアだし、他はユーザーサポートくらいしか巻き込めませんでした。
なので、もっと全社を全部巻き込んで大規模にやろうじゃないか!しかも、ただの障害じゃなくて、せっかくPSIRTもいるんだしセキュリティインシデントも起こそうじゃないか!という感じで企画が始まっていきました。
いろいろと詰めていって最終的なゴール設定としては、経営サイドも巻き込むために何かを人質にとってCEOに脅迫状を送って身代金を要求、身代金を要求するためにはサイバー攻撃でデータを盗んだり壊したりして、データを返してほしかったら金をよこせというふうにしようとなりました。
そこから具体的なシナリオは私が考えて、freeeをターゲットとした本物の標的型攻撃をやらかしてやろう!という感じで大体の骨子が出来上がりました。
―tdtdsさんの大好きなサイバー攻撃を(笑)
tdtds:ここでやっちゃっていいの??って感じでした(笑)
―今回の障害訓練の中でもここが特に怖いというポイントを教えてもらえますか?
tdtds:身代金として4ビットコインを要求していて、微妙な金額だなと思うかもしれないですが、この微妙さ加減が実はポイントで、当時のレートで2800万円くらいなんですよね。何かというと、会計処理をした時に報告義務がないのが3000万円以下なんです。 こういう金額を言われたら、うちのCEOがもみ消すために黙って払っちゃうんじゃないかと思って(笑)こういう設定にしました。
そういうダークサイドに陥る可能性のある設定をしていて、適切な会計処理をするように判断をしてくれるだろうかというのが本当に怖いポイントです。
―今回は訓練だとある程度知ってるけど、実際にこれを送られてきたら払ってしまうかもしれないですしね。
tdtds:訓練でちゃんと冷静な時に考えておいたおかげで、本当に要求されたときに正しい判断ができるはずなんですよね。訓練の過程でのログを見ると、払ったほうが早いんじゃない?みたいな意見も実際出てます。経営層を正しく訓練できたのは良かったです。
技術的に一番怖いポイントは二段階認証が突破されたことかなと。うちにもリスク管理委員会があってちゃんとリスクに対して優先順位付けして対応していたりするんですが、二段階認証が機能しているからこのリスクは優先順位を下げてよさそう、みたいな判断が普通にされてたりします。
どこの会社でもそうだと思いますが、二段階認証はかなりハードルが高いので、二段階認証が突破されない前提でリスク管理されていることが多いです。今回の攻撃で突破されたのは、いろんな前提がすべて崩れるのでめっちゃ怖い話です。
二段階認証が突破されたことに対する社内での対策は今回を経てすでにとられたので良かったです。
―二段階認証突破されたらもう何を信じていいのか分からないですよね……
Taichi Matsumoto:僕は実際の攻撃者役だったので、二段階認証を突破する手段として、社内SNSで二段階認証のリセット依頼を出したんですが、「あ、これ通っちゃうんだ……」ていうのが怖かったです(笑)申し訳ない気持ち半分、おいおいっていう気持ち半分でした。
攻撃用のツールを通して社内SNSであるWorkplaceのCookieを事前にPCから自分の個人の端末に引っこ抜くことで、攻撃者は僕のふりをしてWorkplaceに投稿できるわけですね。そこで「携帯を水没してしまったのでリセットさせてほしいんですけど」ともっともらしい事を書いて、たしか10分くらいで「分かりました!コードを入力すれば登録できると思います」っていうのやってくれて(笑)、ああ通っちゃうんだ……と。
ここはもちろんすぐに改善されたんですが、リモートワーク下で相手が本当にその人なのか確認するのがすごく難しくなっているなと思いました。みんな会社に来ているときだと「じゃあちょっとフロア来てもらえますか」みたいなやりとりができるので一発なんですけどね。
あと、freeeもどんどん社員数を増やしている段階なので「この人知らないけどまあ大丈夫だろう」みたいな、人数の急増に対して意識が追いついていない部分が浮き彫りになったのかなと思います。
―たしかに、今となってはリアルで会っても社員かどうか分からない規模になってきましたね。
Taichi Matsumoto:もうひとつは、Cookieや様々なツールのログイン情報を引っこ抜いて乗っ取るためのツールそのものがとても恐ろしいです。僕はそんなにセキュリティ歴が長くなくて、tdtdsさんがそのツールを作ってくれたんですが、「ちょっとテストしてみてよ」と言われたんです。そこで手元でポンと叩いてみたら、僕が知ってるパスワードが全部出てきて、「うわぁ……何これ」って(笑)
こういうサプライチェーン攻撃、つまり普段使っているような便利なツールに気づいたらヤバイものが混ざっていたっていう攻撃はちょいちょい見られるもので、まあそう珍しい話ではないです。「あのツールのバージョンが〇〇に上がったからじゃあ依存性どうなっているか全部見よう」ってなかなか思わないので、そういうところにつけ入る攻撃で、それがもう世間的には割とよくある話だっていうのが恐ろしいです。
それをささっと作ってしまうtdtdsさんも恐ろしいなと(笑)
―サイバー攻撃大好きですからね(笑)もともと使ってるオープンソースをバージョンアップしたら何かが入っていたという話はよく聞きますよね。
障害訓練当日の流れ
―当日はどんな感じで進めていったんですか?
Taichi Matsumoto:当日は社内全体には「13時に障害が何か起こるよ、皆備えておいてね」というのが連絡されている状態でした。僕の役割としては PCを乗っ取られる役兼犯人役という感じでした。13時ぴったりにその障害が起こる予定になっていたので午前中はまず仕込みをやってました。
具体的には、社内ネットワークに接続していない攻撃用のPCに情報を抜き出す便利ツールをインストールし、そのPCから被害者のPCに侵入してキーを引っこ抜いて、社内SNSに侵入し「携帯水没させちゃったからちょっと何とかしてよ」という話で2段階認証を突破、社内環境に侵入しもろもろ悪いことをして最終的にエンターキーを押すとデータベースが吹っ飛ぶような状態まで持っていきました。
13時にエンターキーを押すとデータベースが吹っ飛んで、エンジニアが騒ぎ出すのを見ながらあらかじめ書いておいた脅迫メールをCEOに送り、あとは「たまや~」という感じで花火が上がるのを見ていました(笑)
―たまや~(笑)訓練の参加者はどういう風に調査して突き止めていったんですか?
Taichi Matsumoto:事象としては2つあります。ひとつはデータベースが吹っ飛んだことによるサービスの全停止でこれはエンジニアが気付くもの、もうひとつは脅迫状がCEOに送られてきたというものでこれは経営陣がざわざわする感じ。最初その事象が結びつかなくて別々に対応されてしまっている状態でした。
tdtds:普通、社長に脅迫文が来たって全社通知しないですからね(笑)開発者は教えてもらうまで知りようがないです。
Taichi Matsumoto:その状態がだいたい30分くらい続いて、その後CSIRTに脅迫文の情報が伝わり、「あれ、これもしかして攻撃なんじゃない?」っていう話になりました。エンジニアには障害の収拾のほかに犯人探しというタスクが発生したのでカオスな感じになり始めました。
その10分後ぐらいに脅迫文の送り主であちこちのクラスタにべたべた足跡をつけていた僕のアカウントが怪しいと、とりあえず僕のアカウントがロックされました。そこから「このアカウントを使って誰がやったんだ?」という調査が始まりました。
裏話ですが、僕はアカウントロックで社内SNSがどんどん見られなくなっていって、企画メンバーとも連絡が取れなくなりそうだったのでSlackでダイイングメッセージを残しました(笑)
tdtds:「何かあったら電話ください」と我々に電話番号だけ残していなくなってしまいました(笑)
―訓練参加者側の対応としては正しいですけどね(笑)
Taichi Matsumoto:その後色々調査が始まるんですけど、「社内の誰かが僕のアカウントを乗っ取って悪いことをしたんじゃないか」「Taichiさんをターゲットにするんだったら同じ部署の人なんじゃないか」ってことでPSIRTのメンバーが疑われ始めました。
とりあえず本人を押さえればいいのにと思いながら見ていたんですけど、そういう動きはあまりみられず、だんだん混乱し始め、2時間半ぐらいたったときに「ちょっと今何してますか?」というDMが来て、「今日は有給でPCは会社に置きっぱなしだったかもしれません」というとぼけた返答をすると、これはおかしい!という状況になりました。
この演習自体は3時間半の制限時間でネタばらしをする予定だったのですが、残りの1時間は混乱状態のままという感じでした(笑)
―PSIRTのプロフェッショナルがどんどんアカウントを止められてるの面白いですね(笑)結局犯人は捕まったんですか?
Taichi Matsumoto:被害者用のPCは回収されました。「このPCで何かされたんじゃない?」というところまでいった感じです。
本来であれば、この後そのPCに何をされたのか徹底的に解析するというフォレンジックという仕事があるんですけど、それによって外部から遠隔操作されている、これは外部犯だというところにたどり着くというのがひとつのゴールだったかなと思います。
―今回そこまでたどり着けなかった事実があるので、障害対応する我々がこれから鍛錬していきたいですね。
障害訓練を通して得たもの
―実際に全社で対応してみてそこから得たもの、良かったことを教えてください。
tdtds:良かったことは意外とみんな気づくのが早かったことですね。今回止められたサービスが実は内部で使っているマイクロサービスなんですよ。
いろんなサービスから参照されるサービスなのでSPOFにならないような工夫はされていました。しかし徐々に徐々に影響が広がっていってサービスを止めるかどうか判断を迫られるいい題材だったんですけど、実はいろんなところからデータをかき集めればそのデータベースが数時間で復旧可能だという事実に時間内にたどり着けたのは凄かったです。
―4ビットコイン払わなくていいんだ!(笑)
tdtds:そうそう(笑)。まるまる復旧できないだろうと思って壊したけど、数時間でそれができたのは凄かったです。あとは、今後の課題として、やっぱり大規模障害でこれだけのサービス群があって、関係者が数十人になると交通整理役をちゃんと立てないとまったくコミュニケーションが取れないということが分かったのが一番の学びだったと思います。
特にリモートでオンラインでやりとりするときに、散らばったオンライン会議室をどう束ねるかみたいな仲介役を立てないと物事がちゃんと進まないということが分かったし、実際にこのための体制作りをちゃんと始められているので、いい学びでした。
―安定したサービスであればあるほど大規模障害は少ないので、故意に起こすことによって交通整理の課題感に気付けたんですね。
tdtds:そうですね、訓練したかいがあったなと。
―二段階認証のプロセスに本人確認を入れるというのもそうですよね。
tdtds:あれが一番やばかったんですが、対策してくださいと依頼したら、みんな一度この訓練で怖い体験をしたからすぐやるやると動いてくれました(笑)
―実体験してますからね(笑)二段階認証プロセスに穴があるというのはtdtdsさんが気付いたんですか?
tdtds:そう、攻撃が好きな人は日常的にどこに穴があるのか探してしまうんですけど(笑)こうやって訓練に組み込むとぐっと説得力が上がって良いです。
Taichi Matsumoto:今回の訓練は3時間半に及ぶ長丁場なんですけど、その内の1時間半~2時間くらいがどうにも思考のキレがなくなってきてるなと感じました。同じ話題を堂々巡りしていたり思考停止している人がいたり。
振り返りにもけっこう書かれていたんですが、1.5時間くらいが人間の集中力の一つの限界なんじゃないかみたいな話が上がっていて、確かになと思ったので、そのあたりでお茶飲んだり糖分とったりリフレッシュするというのも大事なのかなと思いました。頭が回ってない状態に自分で気付くってすごく難しいと思うんですよね。
―障害対応していて「やばい直さなきゃ」という中で5分休憩するのってかなり勇気がいることですよね。集中力が足りない、正常な判断ができなかったという反省はかなり出ていたので、今後意図的に休憩のタイミングを作れるといいですね。
普段のPSIRTの業務
―障害訓練から離れますが、実際の障害を防ぐために普段PSIRTのお二人がどんなことをしているのかを教えてください。
tdtds:今回の障害訓練でも改めて分かったんですが、「これが知りたかったけどログがなくて分からない」みたいなことがよく発生しているので、PSIRTとしてSREと一緒にセンサーをちゃんとあちこちに配置してそれらのログを取り、いつでも簡単に検索して関連を導き出せるようなシステムを作るということを日常的に取り組んでいます。
あとfreeeの開発チームは障害にできるだけ日頃から慣れ親しんでおこうというのがカルチャーになっています。リモート環境では何かがあるとオンライン会議室が立ち上がり、そこには関係者だけではなく興味がある人誰でも入れるし、その中でさっきの話のような仲介役をやっている鬼殺隊というチームがあって、そこでノウハウを貯めこんでいく仕組みがあります。
これはCSIRTですが、啓蒙・教育のために四半期に一度セキュリティチャレンジというfreeeの中のセキュリティの様々な事象についてアンケートやテストをするというのもやっています。他にもPSIRT主導ではHardeningをやって自分たちが攻撃を受ける立場になるということをしてたりします。
カルチャーについて付け加えると、今回経営陣を訓練に巻き込むとなったときに、「あんな忙しい人たちを巻き込むなんて無理だよ」みたいな話は一切出なかったです。「この時間に障害訓練やるので空けておいてください」「分かったやるやる」で終わりでした。
それどころか、まだまだ巻き込めなかったチームもあるんですが、自分も巻き込まれたかったなーと言われたりして、ちょっとしたエンターテイメント的な立ち位置になってきているし、自分たちを高めていこうという意識になってるなと感じてます。
―イベントとしてのお祭り感もあるし、毎年新たに「ああ、こういうことが起きるんだな、気をつけなきゃ」と感じられる作りになっていて、みんなが積極的に参加する雰囲気になっていますよね。来年も楽しみです!
本編終了後にZoomで開催されたアフタートークにもたくさんの方にご参加いただき、さらに詳しい話で盛り上がりました。
▶PSIRT採用情報
セキュリティはやったことがないという方でも、Devの開発はやったことがありセキュリティに興味があるという方はぜひお気軽にご連絡ください!
▶次回freee Tech Night
1月28日(金)19:00~ 「期日じゃなくて優先度を決めろ!悩めるスクラムマスターの本音」 freee-tech-night.connpass.com
▶今回のイベントのアーカイブ(録画)