Hardening

Hardening 2023 Generatives反省日記

どうも、のみぞうです。ありがたくも今年もHardening本戦に参加させていただくことができました(連続参加4年目)正直今回は後悔と懺悔しかない。本音を言えば向き合うのも辛いですが、そういうわけにもいきません。この気持ちを忘れる前に勇気を振り絞って反省して次につなげるべく参加記事を書き残します。

Softening Day(振り返り&フィードバックの日)を追えて、順位は最下位でした。またですか。うん、「また」なんだ。済まない。とはいえ、努力が評価されるのは義務教育まで!の精神で受け入れて先に進みます。

そもそもHardeningって何よ、って方は通称のみぞー本買ってください(宣伝)

Hardening 2023 Generativesのスケジュール

今回のHardening2023Generativesのスケジュールです。以下は私と私の所属したチーム7(チーム名:第七師団)の記録です。ミーティングの回数とかはごく平均的だと思う。

項番イベント日付
1申し込み締め切り8/10
2選考結果・チーム分け発表(メール受信)8/17
3Discordにチーム全員が集合8/21
4初回顔合わせ(チーム名決め・リーダー決め)8/23
5チーム内定例ミーティング#1(以下毎週火曜日に定例)8/29
6チーム紹介動画の提出8/31
7Breaking Outミーティング9/1
8チーム内定例ミーティング#29/5
9チーム内定例ミーティング#39/12
10Hardening合コン(チーム合同イベント)9/15
11チーム内定例ミーティング#49/19
12チーム内接続演習会・技術担当者追加ミーティング/競技前提供サービス購入
競技前提供サービス開始(堅牢先生 powerd by GPT)
9/23
13チーム内定例ミーティング#59/26
14競技前提供サービス受講(攻撃ログ解説サービス)9/27
15チーム内操作演習会・技術担当者追加ミーティング9/30
16チーム内定例ミーティング#6(最終)10/3
17Preparation Day(s)(ネットワーク設営/前日準備)10/4
18Hardening Day(当日)10/5
19Analysys Day(チーム内振り返り)10/6
20Softening Day(フィードバックと結果発表)※これから10/28

こんな感じで忙しい1ヶ月弱でした。あらためて振り返ってみるとまあまあコミットしている。ちなみに私はリーダーではありません。あんまりリーダー志向はない。

1-1.チーム紹介動画の作成

チームビルディングの初期の次期に、チーム紹介動画作成ミッションが課されました。まだメンバーのことも良く知らない状態で紹介動画とか困ったな~となってましたが、チーム名「第七師団」にちなんで各自ふざけた写真を送りあってそれをいい感じに加工して作成しました。

ふざけた写真と加工の例↓

なかなか皆ノリがよく、結果的に打ち解けることができてよかったです。

動画のついでに完成したチームフラッグ↓

ちなみに元ネタはこれ↓自分で言うのもなんですがまあまあの再現度ではなかろうか。私もこの時点ではゴールデンカムイを知らなかったのである程度アニメを履修してから本番を迎えました。

1-2.合コンの開催

つながりを増やして本番をもっと楽しくする、をコンセプトに。Hardeningチーム合同コンファレンス(略して合コン)を開催しました。一昨年から地味に続けているのですが今年は初の都内リアル会場を借りて立食形式でやりました。一部オンラインでパブリックビューイング参加を可能にし30名超の方にご参加いただきました。

開催にあたってT3Realize合同会社社長の竹村さん横堀さん、ミスターHardeningことやぶさんに大変お世話になりました。この場を借りてお礼申し上げます。

名札などを準備して交流を促進しました。役に立ったかなー。

ご参加いただいたみなさまありがとうございました。楽しんでいただけたら幸い。

同じ目標をもつもの同士、交流するのはそれなりに良いものですが、有志イベントの主催はまあまあなコストがかかるので私はもうやらないかも。誰かが勝手に引き継いでくれることを期待。

準備期間(チーム編)

楽しいイベント関係の思い出しはこのくらいにして、チーム7がどういう作戦でどういう準備をしてきたかについて書き残しておきます。結果が出なかったくせに何言ってるんだって話なんですが、そんなにやってたことは間違ってないと思う…たぶん…たぶんね…(自信はない)

まず前提として、私のいたチーム7(9人チーム)の特性はこんな感じでした

  • 1名(私)を除いて全員が初参加
  • 日常的にセキュリティ運用に関わってるなど、堅牢化対策で手を動かすことに慣れた人間がいない
  • 勝ちたいというよりはインシデント対応を経験したい学びたいというモチベーションが強い

…ということを踏まえて、以下のように作戦をたてました。

  • 凡人でもできる基本的な対策をしっかりやることを目標にする
  • 事前に接続練習、コマンド打つ練習とかする
  • 報告書をしっかり書く

2-1.凡人のセキュリティ対策

技術つよつよ自信ありなメンバーがいるチームはその人におんぶにだっこでまあまあどうにかなってしまうのがHardeningです。今回幸か不幸か弊チームにはそういうメンバーがいませんでした。しかし現実、多くの企業ではそれが普通ですし、セキュリティはみんなのものです、だれもできるセキュリティをきちんとやっていくことで、我らのような凡人ができる衞りの形を考えていこうとしました。

ヒントにしたのは先日のITmediaで行われていた川口設計の川口さんの講演です。エンドポイントが被害を受ける原因として

  1. 弱いパスワード
  2. 使い回すパスワード
  3. 放置されたアカウント
  4. アップデートされてない
  5. 添付ファイルを開く

という5つが挙げられていて、特にアカウントの管理と棚卸しの重要性について述べられていました。Hardeningにも応用ができる考え方だと感じたので、アカウント管理と棚卸しをとにかくできるようにしようと考えました。

環境内のリスク分析

Hardening環境内には数々のサーバやクライアントなどなどがありますが、時間的リソース的に全てを公平に対応していくことは現実的ではないと考えました。そこで、前年の環境を参考にいったん全ての対象に対してリスク分析を行い、リスクの高いものと低いもので対応の軽重や優先順位などとつけていきました。

ネタバレ防止のためモザイクでお送りします

まあ今思うと、別にここまでしなくても普通にセグメントごとに対応変えるとかで十分だった気もするな…。

具体的にやろうとしてたことはこんな感じ。ぜんぜんできませんでした(後述)

手順書とスクリプトの整備

それこそAnsibleなどモダンでイケてる手段を持ち込んで効率化対応するチームも多いと思うのですが、そういうのちゃんと動かす自信も知見もなかったので、地道にbashとPowerShellのスクリプトを組んで各ターゲットで実行していく方針としました。

慣れてないメンバー向けには手順書など作成してある程度統一感のある動きができるようにしました。

2-2.演習会をやって本番に備える

学習意欲の高いメンバーが多かったので、お試し環境を準備(一部)して演習してみる会なんかを催してみたりしました。

環境接続演習会

Hardeningの本番は北陸のStarBEDにある競技環境にVPNで接続して踏み台を踏んで各種作業を行うのがお約束となっているのですが、そもそもVPN接続や踏み台を踏むということに慣れてない(イメージがわかない)メンバーも多かったので以下の2点は全員ができるようにアテンドしました。

  1. VPNソフトをインストールしてプロファイルをインポートして環境につなぎRDPでWindowsの画面を見て操作を行う
  2. SSHで踏み台サーバを踏んで競技環境のサーバに接続して簡単なコマンドを打つ

①については自分で環境を構築するのに時間がかかりそうだったので手を抜いてTryHackMeのWindows Fundamentals 3のルームを使いました。TryHackMeは無料でこんな用途にも使えて便利。TryHackMeの詳細は後述。

②についてはAWS上に超簡単な環境を作りました↓

某チームの準備環境と比較するとショボすぎて笑ってしまうし、これで足りるとは思わないけど…完全丸腰で挑んでいた今までのことを思えば、私にしてみればがんばったほうではないだろうか。

スクリプト実行演習会

一応、Hardeningの定石として、チーム内を技術担当と営業担当に分けていたのですが。前述のC対応(基本的な対応)くらいは営業志望の人もできるようになるといいよね、というのがあったので、スクリプトの実行の仕方をハンズオンで練習する会をやりました。

今から思えばこれはよくなかったなあと思っています。伝えるべきはスクリプトの実行の仕方ではなくて「どういう攻撃を防ぐ目的で何をしたくてどのような操作を行おうとしているのか」という考え方の共有であって、コマンドがどうこうとかは二の次だったんだと思う。チームメンバーの皆さんには申し訳なかった。

2-3.報告書を書き始める

Hardening競技終了間際に提出を求められる作業報告書ですが、実は今回、準備段階からフライングで書き始めてました。

私は常々、Hardeningでは準備で様々なことを行うが、それらを正しく評価対象として伝えられていないのではないか?(特にマネジメント系の活動)と疑問に思っており、もしかして全部報告書に書いておけばいいのでは?と気づきました。正解かは知らん。

当日は時間が足りないのはわかっていたので、先に書ける所は書いてしまって当日に行うのは仕上げのみとしました。

おかげで未だかつてないレベル(私調べ)の超大作の報告書をしあげて提出しましたが…意味があるかは不明です。まったくないとは思わないけどやりすぎみはある。

準備期間(個人編)

チームでの準備はこんな感じでしたが、私も過去のHardeningで勉強が足りないことを散々痛感してきたので、この期間に勉強したこととか読んだ本のこととか書きます。

3-1.TryHackMeのHardeningシリーズに取り組む

前述のチーム内演習にも活用したTryHackMeですが、自学のためにもとても便利なサイトです。TryHackMeはサイバーセキュリティに関する攻撃やその対策について手を動かしながら実践的に学ぶことができる学習プラットフォームです。
興味のある人は詳しく解説しているハッカーパンダ本を買ってください(ただの宣伝)

搭載されているコンテンツの内容が比較的ペネトレーションテストなどに関するレッドチーム向けと言えるものが多いため、ハッキングやCTFのお勉強用サイトと誤解されていることも多いのですが、ちゃんとブルーチーム向けのコンテンツも存在します。私は今回、Hardening本戦に参加するにあたって以下の3つのルームに取り組みました。

どれも、「これだけやってればHardeningで無双できる!」というものではなく、本当にごく基礎的なものですが。私のように自分の堅牢化力に自信がないままでHardeningに出ることになってしまったような人には、最初のとっかかりとしておすすめして良いコンテンツかなと思いました。

この中だと真ん中のMicrosoft Windows Hardeningのルームだけは課金が必要になるので、試しに1ヶ月分だけ課金($14/月)してみるのも良いかと思います。ちなみにこのリンクから課金するとちょっとお得になるらしいのでもしよかったら…どうぞ…。

時間の関係でできなかったけど他にも探せばHardening関係のルームが見つかるので、せっかくですし自分の興味のあるテーマで学んでみるのも良いのではないでしょうか。

3-2.関係しそうな本やドキュメントを読む

インターネットで調べたり、最近ではChatGPTに聞いたりして勉強することも多いですが、書籍になっている情報はやはり一定の信頼性があるので学びのとっかかりとしては重要なものだと思います。

今回は以下の本を読んで本番に備えました

Linuxサーバーセキュリティ徹底入門

サーバーセキュリティのみに特化してかかれた貴重な本。サービスごとにこういう設定するといいみたいなことがたくさん書いてあって役に立つ。こういう本ってあんまりないよね。内容は少し古めですが今でも十分参考になりました。

基礎から学ぶコンテナセキュリティ

最近はコンテナ環境も多いので参考に…と読ませていただいていた。正直Docker素人にはむずかしい内容も多く、コンテナへの攻撃ってこういうふうに起こるんだ~~へ~~~という小学生みたいな感想を抱いたものの、具体的にHardeningの場で活かすというところまではなかなか至れませんでした。自分のレベルをあげてもう一度読み返したいと思います。

政策研究大学院大学の情報セキュリティインシデント報告書を読む

声に出して読みたい報告書、こと、政策研究大学院大学の情報セキュリティインシデント報告書を読ませていただきました。ここまで詳細な不正アクセスの報告書は貴重で大変勉強になります。どういう攻撃があったのか、原因はなんなのか、再発防止策は…などなど重要な知見が余すことなく公開されています。

今回時間がなくてできなかったんですが、このような実際の事例をもとに、インシデントが発生したらどのように対応していくかというシミュレーションがチーム内でできたら良かったなと思いました。

Hardening本番(反省と教訓編)

まあだいたいこのような準備を行って本番を迎えたわけなのですが、やっぱりうまくいかなくて反省も多かったので書いておきます。チームメンバーに対する懺悔も込めて。

4-1.想定外の環境への接続と対応にめちゃくちゃ苦労した

事前に準備したログイン用teratermマクロのユーザー名を間違えていたり(ほんとごめん…)謎にRDPが安定しなかったりで環境への接続にめちゃくちゃ苦労しました。練習…したのに…。なんであんなにRDP繋がらなかったのかは未だによくわからない。

また、準備したスクリプトファイルを転送する用に想定していたWinSCPでうまく環境にファイル転送ができませんでした。おかげでコマンド操作に慣れてないメンバーに苦しい思いをさせてしまいました(終わってから多分これのせいではないか?という原因に気づきましたがアフターカーニバルだね…)あとなんとかファイル転送ができても、環境によってはbashが動かなくて無事死亡みたいなこともありました。

まあそんなこんなで初動対応で動揺してしまったため、必要な対応の完了がほとんどできずに自滅していくことになりました。おそらく攻撃を受けるまでもなく自滅が多かったことは自覚しており…チームメンバーのみなさんほんとごめんね…。

Lessons Learned
  • 想定している手順で問題が起きてもやるべきことを達成できるように、スクリプトやソフトや手順書に頼らず、何を脅威と捉えていて、本質的に何をしたいのかということを共通理解することが肝要(今ならChatGPTに聞けば大抵のことは教えてくれるし…)
  • できないことは無理にこだわらない(一つの箇所に囚われてしまうとほかができなくなるため。セキュリティは全体をみることが大事)

4-2.マケプレ欲張りすぎ問題

今回のマーケットプレイスの購入はドラフト制が採用されていました。まさか全部は買えないだろうと思って1位から3位まで全部にドラフト指名を入れたらまさかの運が良すぎて全部買えてしまうという事態に。

マーケットプレイスはそれぞれが素晴らしいサービスですし、対価を支払う必要があるものの、環境が堅牢になっていくわけなので購入の権利を手に入れたのは喜ばしいことです。しかし、私は忘れていました。マーケットプレイスを購入したら、そのソリューションを使うためにそれなりの人手がかかることを。

当然ですが、マーケットプレイスを購入した場合は、そのベンダーさんに具体的な指示や要望を出す必要があります。

機器を導入する系のソリューションであれば、初期設定のために調整やインストールなどが必要ですし。監視サービスであれば、発見された問題に対応する人が必要になります。また人的支援サービスであっても、来てくださったかたに活躍していただくためにはそれなりに指示や相談や連絡が必要になります。

つまり、行きすぎるとこれらの対応に人手が割かれてしまい、その分本来計画していた活動は諦めざるをえなくなる、またはせっかく購入したマーケットプレイスを活用できずに終わる、ということになります。Hardeningにおいてのだいたい目安は1社×1~2時間程度でしょうか(個人の感覚です)競技時間が8時間しかないなかで、3社購入した場合はその分がチームメンバーの稼働から引かれるため…まあ…そんなこともあって前述の計画していた対応が殆どできなかった、ということに繋がります。

これはHardeningに限らず現実世界でも起こりうるような気がしていて、よくあるセキュリティベンダー丸投げ問題は、こういうところで起こるべくして起こるんだなと思ったりしました。丸投げというと委託元が怠けている(楽している)みたいに聞こえますけど、それだけじゃなくて。ベンダーの管理・監督という重要な業務を十分に実施することができない背景として、業務に忙殺されて気がついたらお留守になっている、ということが起こるのだなと思いました。むしろそっちの方が多そう。

購入させていただいたマーケットプレイスの皆様には、こちらの対応が悪い中最善の対応をしていただきました。大変お世話になりました、ありがとうございました。

Lessons Learned
  • マーケットプレイスの購入にはお金だけでなく人間の稼働もかかることを考慮する
  • 購入後は、委託元として適切な監督を実施することが必要であり、ベンダー丸投げは、十分な管理監督が行えないことから発生する

4-3.タスク管理の敗北

今だれがどこやってるのか?完了してるのか?停滞しているのか?順調なのか?困っているのか?がわからず無駄な動きを繰り返していました。

今回せっかくリアル会場に全員集まれるので(Hardening4回目にして初めての経験)ダンボールの壁と付箋などを使ってタスク管理ができないかなーと思ってたんですが。

途中からガン無視してました。

Hardeningに限らず、インシデント中あるあるな気がするのですが、タスク管理がグダグダになってくると、対応の進捗が見えず、情報共有もされず、チーム全体の空気も重くなりがちです。

付箋でもWEB上のtodoリストでもExcelでもなんでもいいと思うんですけど、きちんと全員で使いきることとそのための工夫(管理の専任者をつくるとか、声掛けとか?)が重要だなと思いました。

Lessons Learned
  • 優先順位とタスク管理(誰がなにやってる?終わったの?終わってないの?)の共有を確実に終わらせるための工夫と覚悟が必要

4-4.営業活動がおろそかになっていなかったか

Hardeningはセキュリティでビジネスを衛る競技です。Hardeningにおいてビジネスに相当するものはECサイトなどでの売上であることは自明ですが、他にも「ミッション」というものがあります。このミッションは、おそらく現実社会において売上を左右するもの、つまり営業活動に相当するものであると考えられます。

営業活動を行わないでセキュリティ対策ばっかりやってる会社があるでしょうか?いやないわ!そんな会社ありえない!(逆は有りうるが)

しかしなぜかHardeningに出てくる架空の会社はそういうことをやりがちです…つい堅牢化が9割みたいに思ってしまうのです。世の中はもっと広いのに。視野が狭い。完全に順番を間違えた…間違えていることに気づけなかったのは私が学習しない阿呆だからです。気づかなかきゃいけなかったのに。ほんとチームのみんなごめん…

Lessons Learned

ビジネスはセキュリティより重い

Hardening本番(おもしろイベント編)

悔いてばかりも仕方ないのでちょっとおもしろかったことも書きます。

5-1.脅迫者と交流を深める

後半、今流行りの二重脅迫型ランサムウェア感染のイベントが発生しました。

対象とするPCやサーバ上のデータを暗号化することで身代金を要求する従来型のランサムウェアとは異なり、データを窃取した後に暗号化し、窃取したデータをWebサイト上で不特定多数に暴露します。その上で、暗号化したデータを復元するために金銭を要求するのが一つ目、金銭の支払いがない場合は盗んだ企業の内部情報を公表するとして金銭を要求するのが二つ目の脅迫です。

https://www.lac.co.jp/lacwatch/service/20210827_002700.html

ネタバレ防止のため詳細を載せることは控えますが(Softeningをお楽しみに)会社にとって重要な情報が窃取され、脅迫されました。この情報が公開されてしまうと会社の事業存続に関わるレベル。さぁ?どーする?!という対応が問われているわけです。

具体的な対応の内容は各チームに任されており、そしてまあまあ他のことにも忙殺されているため脅迫メールを無視するチームも多い中、我々のチームは、必要関係機関に情報共有しながら脅迫者との交渉を行いなんとか支払い時刻を引き伸ばすという作戦をとりました。支払いに応じてしまうことはよくないが、競技終了までの間なんとか時間を稼ぐことができさえすればこの場は逃げ切れるのでは?(あとは知らんけど)という打算があった。

結果は多分、全公開は免れたのかな?今回最大のファインプレーだと言えるでしょう。多分最悪の事態は回避できたはず。…はず、というのは最初から最後まで競技内環境サイトへの接続が怪しく、リークサイトの確認ができなかったので、公開されたかどうかの事実が微妙に確認できてないからです(ダサい)

もちろんこういう対応はケースバイケースですし、私達の対応が正しかったかはわかりませんが、最終的にメールのやりとりを通して脅迫者と若干仲良くなったりして(口調がちょっと優しくなってる…?!)相当面白いことになったので、今後のHardeningで脅迫メールがあったときは積極的に返信することをおすすめします。

5-2.呼び出しイベントで呼び出されてまたお前かって言われる

上記の脅迫の件で呼び出しイベントが発生し、呼び出されてきました。対応者はチーム内で話し合って決めるのですが、私はなぜか対応常連で(4回中3回目)「またお前か」感がすごかったです。

この責任をどうとるつもりだ!!(意訳)という件で絶賛詰められているところ↓

(見た目は怖いですがオフタイムは優しい方たちです)

大した対応もできないのに恥をかく度胸だけはついてしまった。本当にすいません…。

Softening Day(振り返り・結果発表)

2023/10/28、ハイブリッド開催で、結果発表・振り返りイベントが開催されました。Hardening参加者は全員の出席が義務付けられています。丸一日かけて、各チームの成果発表と運営側からのフィードバック、成績発表や賞の発表を行います。

結果はこちら

こんな感じでした。弊チームの順位としては本当に残念でしたが、蓋をあけてみれば本当に僅差だったので惜しいなーという気持ちもちょっとあります。

個人的には、今回は旧年度に比べ各チームの振り返りのレベルが高かったことがとても印象的でした。本戦から3週間の期間があいているので、それぞれしっかり振り返りと内省・分析が進めることができたということなのだと思いました。みんな素晴らしいよー。

Youtubeに動画がありますのでご興味がある方はどうぞ。

マーケットプレイス賞連続受賞

マーケットプレイスを欲張りすぎてしまった件は前述の通りですが(大変申し訳ございません)一方で、ドラフト指名した3社全てから賞をいただきました。

Barracuda賞

検知できなくてリアル過ぎるので受賞w(いいんですかそんなので)

LAC賞

いろんな機能を活用させていただいたことで受賞。ありがとうございます、勉強します!

cisco賞

カスタムシグネチャ作ってくれとか1時間でルール消してとかわがまま放題言ったので受賞。ありがとうございます、勉強します!(二度目)

そんな感じで、順位が振るわなかった割にいただきものが優勝チームを除き最多という大変ありがたい結果になりました。他チームから花より団子って言われました…せやな。

思えば、準備よりメンバーの学びを優先したりしてたわけだし、そもそも花より団子でHardening競技会の外側の世界の実利に振り切ったチームだったと言えるのかもしれない。そういう意味では決して間違ってはいなかったなあ。

いただいた学習コンテンツ系はやってみたレポート書きたいなー(書いていいか確認したら書きます)

さいごに

今年もこのような貴重な経験を積ませていただき、HardeningProjectやスポンサーの皆様に感謝してもしたりません。本当にありがとうございました。

個人的には、毎年なんやかんやで技術に触れる機会がないまま(←呼び出しとか資料作りとか人気ない職種を担当しがち人材)Hardeningが終わってしまうので、今回始めて真剣に堅牢化対策をどうするべきかを考え、実行に移すために色々手を動かすことができたので、セキュリティ対策のプリミティブなところに対する解像度がかなり上がってよかったと思います。

一方で、またこれから新しいチャレンジが始まる予感を感じています。面白くなってきましたねぇ、の精神でがんばります。