MINI Hardening 3.2 に参加してみた
久しくブログは書いていなかったのですが、元気をもらったので書いてみようと思います。
4/21 に メルカリさんの会場を借りて開催された MINI Hardening Project #3.2 に参加してきました。
Hardeningとは
Hardening(ハードニング)とは、「衛る技術」の価値を最大化することを目指す、全く新しいセキュリティ・プロジェクト (Hardening Project 2019 | Web Application Security Forum - WASForum より)ということで、CTFとは異なった観点のセキュリティ技術を学べるイベントのことです。
脆弱性のあるアプリケーションやサーバーを渡され、競技時間の間、攻撃者(運営)からのアタックを防ぎ、可能な限りサービス継続を維持することが目標となります。 侵入されたり、攻撃を防げなかったらその場で終わり、ではなく、すぐにサーバープロセスを再起動させたり、不審なプロセスをkillしたり、バックアップからデーターを復旧させたりして、後手後手でもサービスを維持すれば点数は獲得できます。
CTFは攻撃者の視点でとよく言われますが、Hardeningは守る側の視点でといったイメージでしょうか。
メンバは4人で、参加者の中から事前に運営が「参加経験」「スキルセット?」などで割り振ってくれます。 自分たちのチームは社会人3名、高専生1名のチームでした。
本家Hardeningは8時間(場合によっては2日目にも)かけて行われるそうですが、今回のMINIバージョンでも3時間の競技時間でした。 それでも、一方的に攻撃されている状況をひたすら解析して対策を行う3時間は非常に精神的にきつかったです。
競技の内容
今回はバージョン3.2ということで、仮想通貨をメインテーマの一つとした内容でした。 仮想通貨に目を付けた社長が、脆弱なオレオレサービスを作ってしまい、我々はその運用を託されたという設定です。
メジャーバージョンごとにテーマを変えているそうで、マイナーバージョンごとでも攻撃の方法や数に変化を加えているそうです。
今回から?の試みとして、社長への報告が適切に行われているかどうかといった観点もポイントの対象になっています。
具体的な攻撃や脆弱性の内容は、この後に参加する方の楽しみを奪ってしまうので書けませんが、 一般的なことであれば書いてもよいということだったので、いくつか挙げてみます。(主観も含みます)
- 与えられた環境のアカウント情報はすでに洩れているものと思え。アカウントパスワードはすぐに変えよう。
- バックアップは重要。Webページを書き換えれたり削除されたりしても、バックアップがあればなんとかなる。document_rootのファイルだけではなく、ミドルのコンフィグ、DBのバックアップも徹底せよ
- 不審なプロセスがないか、常に確認せよ
- サーバーのアクセスログを見よ。攻撃の痕跡があるはずだ
- SQLi脆弱性があると思ったなら迷わずふさげ。ソースが読めないなどと言っている時間はない
- わからないことがあるならまずはググれ
- 社長への報告はこまめに的確に。社長に質問をするな。運用と判断を任されているのは自分たちである。
- 差し入れは必ず食せ。知的活動に必要なものは睡眠、時間、そして糖分である。さらに差し入れしてくれた方への感謝を忘れるな
というわけで、WAS Forumさん、Hardening Projectさんから、八天堂とチョコを差し入れいただきました。 とてもおいしかったです!ありがとうございます!
自分たちteam-hは、何度も侵入を許しながらも、プロセスの再起動や事前バックアップからの復旧などでサービス維持をそれなりに行い、 社長へのこまめな報告や「よいしょ」を駆使してポイントを稼ぎ、9チーム中3位の成績を取ることができました。 事前にSlackでスキルセットのメンバ間共有や、Googleスプレッドシートで、サーバー一覧やアカウント一覧、パスワード候補などを作成し、競技中も活用できたことも大きいかもしれません。
※「よいしょ」しても社長好感度ポイントには影響ありません
運営側のコンソール。各参加者チームの環境に自動化された攻撃を行っている様子(だとおもう)
いつものおねぇさんとご対面。うれしい反面、「Webサーバーが停止させられた」ということなので非常に困る。
感想
サーバー・インフラエンジニア歴10年以上ですが、想像していた以上に手が全く動きませんでした。 次々に発生するインシデントに翻弄され、順序だてて一つ一つ着実にやっていくということができませんでした。 いや、というよりもこれまで「比較的まともな」(?)ものしか扱う機会がなかったので、 攻撃されているという状況を認知する方法がわからなかったのかもしれません。
そんな本業経験なので、自分の感覚としては「現実には遭遇しなさそうな」状況でした。 こんな短時間でこんな多種類多頻度の攻撃に、ログ解析も追いつかない状況で一方的にやれらる。 最初からやばそうなプロセスがいくつも起動している。それでも社長は「売り上げが大事だ!サービス維持だ!」という。 非常に精神的にきつかったです。。。。 普通、リリース前にもうちょっとチェックするだろうし、サーバーのアカウント情報が洩れたら、被害拡大防止の観点でサービスを止めるのが普通でしょう。
しかし、このような制約を加えることで競技として成立させ、日常ではできないような経験を短い時間ですることができるよう、 とてもうまく設計されている競技だと感じました。 自分自身、得られた気づきは非常に多く、特に「できると思っているが、実際その時になるとできない」ことが改めて分かりました。 もっと精進したいです。
一つ残念なのは、「やりっぱなし」感があることです。 競技終了後の振り返り(Softeningソフトニングと呼ばれます)で、種明かしとして運営から攻撃の簡単な紹介がありましたが、 実際にどのような攻撃が行われていたのか、それの見つけ方、対応方法などを復習する機会がありませんでした。 イベントの中にこのような時間を設けることは難しいと思いますが、後日で自己学習できるような資料やモノがあればなぁと感じます。 イベントの主目的が「競技を通じて気付きを得てもらうためのイベント」なので、 具体的な攻撃の対策方法を身に付けるというコンセプトではないからかなと思ってはいますが。。。。
おまけ
懇親会ではたくさんの方とお話ができました。 ゆっくり動画を作っている人や歌ってみた&踊ってみたをやっているひと、うたスキ(?僕にはわからないのですが…)をやっている人。 セキュリティクラスタのはずなのに、ここは人種のるつぼかと思うようなユニークな方々がたくさんいて、びっくりしました。
そんな人たちと話して元気をもらうことができたので、この記事を書くモチベーションがわきました。ありがとうございます。 また、運営の方々、良質なイベントをありがとうございました。 CTFの問題を考えた経験のある立場からすると、このような問題の作成は非常に高度なスキルが必要だと感じています。 そして、前日の夜にイベント環境が全リセットになっても、文句も言わずしっかりと復旧させられる運営メンバのチームワークは素晴らしいと思います。
そして、このイベントへ一緒に参加してくれた同僚のFくん。ありがとう!
今後参加する人に向けて(追記)
過去の方のMINI Hardening参加報告を見ても、事前準備の情報があまりないので追記します。
その場で調べてもよいと思いますが、イベントをより楽しむために、最低限以下の準備をしていくとよいと思います。
- Linuxのユーザーアカウント作成、削除、パスワード変更方法
- Windowsローカルアカウントのパスワード変更方法(RDP接続なのでC-A-delは使えない)
- Windowsローカルアカウントの一覧表示方法 →変なアカウントがあったら削除します
- document_rootなどを、SSH経由で別のLinuxサーバにバックアップする方法(scpでもrsyncでも、ssh stdin/outでも)
- DB(MySQL,PostgreSQL)のdump、バックアップ、リストア方法
- Macユーザーの方は、RDPクライアントアプリ準備
- Windowsユーザーの方は、SSHクライアント準備(ppkファイル、pemファイルのどちらでも使えるように、最新版にしておく)
- SSHポートフォワーディングができるように理解しておく →踏み台Linuxサーバ経由で、Windowsリモートデスクトップにログインすることがある
- リッスンしているポートが何のプロセスで使われているのか調べる方法(lsof コマンドがなくても調査できるようにしておく)
- 今誰がログインしているのかを調べる方法 →使っていないアカウントでログインがある場合は要注意
- 事前に環境情報などの資料が配られるので、資料は読んでおく
- 当日、スムーズに環境に接続できるようにするための準備(ssh_configやputtyの接続設定を作っておくなど)
- SlackやGoogleスプレッドシートなどを駆使して、情報は集約、共有しやすいようにしておく
- WindowsUpdate は必ず済ませておく
- 電源タップとACアダプタと、できれば念のための自前Wifiを忘れない
- 前日は早めに寝る
- 名刺は持ってくる