タイトルは完全にアツい夏の宮古島!Hardening II Collective 参加レポート - Eyes, JAPAN Blogのパクリです。
Hardening Projectとは
https://wasforum.jp/hardening-project/
セキュリティ堅牢化の競技会です。脆弱なサーバが大量に渡されて、「今から攻撃するから、頑張って守ってね」という大会です。
今回は初の札幌開催で、テーマはSU(スピード感のある動き)だそうです。セキュリティインシデントが発生してからの対応、復旧の素早さが評価ポイントになります。
設定
ロールプレイングな競技なので、次のような設定が存在します。
- プレイヤーは北海道の名産を販売するECサイトの運営会社の社員として振る舞う。
- ECサイトを巡回してくるクローラが自社の商品を購入すると得点になる。
- 各プレイヤーは6人ごとのチームに分かれて、さらに3チームごとの「連合」に分かれる。
- 「チーム」が1つの営業所で、「連合」が1つの会社のようなイメージ。連合ごとの得点数を競う。
事前準備
チーム内にハードニング参加経験者がいたので、その人の先導のもと事前準備を進めました。
- 初動対応の洗い出し、優先順位づけ
- デフォルトのパスワード変更
- ドキュメントルートのバックアップ
- DBのバックアップ
- 怪しいプロセスの停止 など
- 狙われそうな脆弱性の列挙
- 役割分担
- トリアージ要因
- セキュリティエンジニア(今回私はここを担当)
- 検知要因 など
自分はLinuxコマンドの操作で怪しいものがあったので、その辺の勉強をしていました。
1日目(競技)
なにやら怪しいムービーから始まります。N津留さん曰く、「毎回内輪にはやたらと受けて参加者はきょとんとしている」らしいです・・・
初動
最初の1時間は攻撃されないので、その間に色々します。パスワード変更、その後バックアップという予定でしたが、ここで早速計画が崩れます。発生した問題と原因、対策について書きます。
- 踏み台サーバであるWindowsのパスワード変更ができない
- サインインオプションのパスワード変更ボタンがdisabledになっていた。
- 原因)おそらく、ActiveDirectoryで個々の端末によるパスワード変更が禁止されていた。(c.f. https://www.tenforums.com/tutorials/87274-allow-prevent-user-change-password-windows-10-a.html)
- 対策) ADを理解している人が一括で変更する
踏み台サーバから競技用サーバにログインできない
- 原因)競技用サーバのパスワードがチームメンバーによってすでに変更されていて、それの共有ができていなかった
- 対策)共有するのもそうだが、そもそもパスワードは手動で変更せずAnsibleなどを使う(Softning dayの時に教えてもらった)
バックアップでまごつく
ことハードニングという競技においては、この最初の1時間が極めて重要だと思いました。パスワード変更完了→競技用サーバにログイン→バックアップまでがスムーズにできれば有利に競技を進めることができると思います。とても簡単なことに聞こえますが、実際にやると上手くいかないのです・・(RDP繋がらなかったり、慣れないWindowsで辛い思いしたり。)
中盤以降
前半のドタバタも落ち着いて徐々にサーバの堅牢化を進めていきました。全体的にはマーケットプレイスが解放されて課金し放題になったり、顧客のクレジットカードが流出したり、漏洩したパスワードが読み上げられたりなど楽しいイベントが盛りだくさんでした。
私が行ったことはだいたい次の通りです。
- XSSの修正
- これは事前資料でも指摘されていました。
- 作りかけになっていた問い合わせフォームの製作完了
- システムユーザーのログイン無効化
- 秘密鍵のパーミッション指定
- TLS用の鍵に対して400指定
- 不要なサービスの停止
- Dockerやzabbix、webminなど
サーバ設定の見直し
- ディレクトリリスティングの禁止
- phpmyadmin、pgmyadminの移動(放置していると勝手にDBがいじられる)
改ざんが見つかったらバックアップからそれの復旧
- その他、ボーナスがもらえるもの
- フォトギャラリーに写真追加したり
やりたかったけどできなかったことは次の通りです
DBの防衛
mysql.user
のHost
を見ると必要以上に広いセグメントからのアクセスを許可していたのには気づいた。多分外から直接ログインできたと思う。- このテーブルをどうやって弄ろうかと考えていたが他のタスクに追われてできなかった。
- 後々気付いたが、DMZのFWを使ってDBがリッスンしているポートを遮断するのが一番簡単だと思う。
競技全体の俯瞰
- スコアボードを見る余裕が一切なかった。
- インシデントが発生してからの対処フローをしっかり確認することができなかった
2日目(振り返り&結果発表)
2日目は振り返り、通称Softning dayです。仕込んであった脆弱性のネタバラシとそれに対する対策の説明が行われました。主なネタはこんな感じ
- DBが外から見えているチーム多すぎ問題
- FWで遮断
- DHCPの静的割り当てが原因の不安定
- ECサイトそのもののバグ(マイナス個数で注文可能)
- DBの認証情報が平文
- パスワード変更後、以前のパスワードでログインできないことを確認すべき
- これは普段行うことがないので、開発時には意識してみようと思いました。
- スマート電源タップでチームの電源ごと落とす攻撃が途中あった
- そんなもん分かるか
結果
残念ながら賞をいただくことはできませんでしたが、見込み販売力では2位でした。
最後に
もう少し色々できたんじゃないかなぁという心残りがあるので、また参加してみたいです。 今回チームの仲が非常に良くてとても楽しめました。他チームの参加者や運営の方々からも親切に接して頂き、非常に勉強になったと思います。運営やスポンサーの皆様、ありがとうございました。