♾️

DevSecOpsThonに参加してきた

2023/05/03に公開

DevSecOpsThonとは

GMOさんが開催されているインフラ寄りの学生向け大会です

「DevSecOpsThon」とは、【開発(development)】【セキュリティ(security)】【運用(operation)】の3つの要素を融合したDevSecOpsを学びながら、チームで協力して特定のお題に挑戦するコンテストです。
https://developers.gmo.jp/kitaq/devsecopsthon2023/

今年が2回目の開催で、2日間で10個のお題に挑戦してスコアを競うといった形でした
せっかくなので課題内容の振り返りと私の所属チーム(Bチーム)の回答、私が回答中に考えていたことを書いていきます
(他チームの回答楽しみにしてます)

他の参加者さんの記事

https://www.edp-ken.com/post-1/
https://zenn.dev/k4namen/articles/10b5f136854a92
https://qiita.com/kazukikanomata/items/b1cd7399d8bcf87981c3
https://qiita.com/na_ja_matsu/items/6065b922280547e5e3c7

課題

課題0

課題

リモートサーバー上にあるファイルの中身を読めという課題でした

回答

サーバーのipとsshのユーザー名、パスワードは提供されていたためsshで接続し、catで中身を表示してクリアとなりました

課題1

課題

監視サーバーから外部のWebサーバーにリクエストを送ると不正なレスポンスが得られる
しかし、Webサーバーに改ざんは発生していないため、原因を探り修正しろという課題でした

回答

監視サーバー以外からは正しいレスポンスが得られることからDNSの改ざんを疑い、resolve.confを確認したところローカルにあるDNSを参照していたため、1.1.1.1に変更してクリアとなりました

課題2

課題

A、Bという2台のサーバー間でB->Aのssh接続に失敗するようになったためこれを修正しろという課題でした

回答

fail2banが有効になっており、A上でBがbanされていたためそれを解除してクリアとなりました

ボーナス課題

A上でfail2banの設定を指定の条件に変更しろという課題でした

ボーナス回答

qiitaなどの記事を参考に条件の設定を行いクリアとなりました

課題3

課題

webサーバーからdbサーバーにローカル経由でアクセスできるようにしろという課題でした

回答

firewallが有効だったため3306を許可設定に入れたものの接続できず頭を捻っていたところヒントでdbサーバーのローカル側のインターフェースがdownしているという情報をもらったためup後ipを振ってクリアとなりました

課題4

課題

Zabbixに指定された条件を設定しろという課題でした

回答

チームメンバーがZabbixを誰も触ったことがなくドキュメントや記事などを見ながら手探りでといった感じでしたが、Zabbixのバージョンによって管理画面のUIが大きく異るため、該当項目を探すのに手間取り10個ある条件の内2つしか設定できませんでした

課題5

課題

WordPressのログイン画面にブルートフォース攻撃が来ているので不正なアクセス元を遮断しろという課題でした

回答

アクセスログを正規表現で解析するスクリプトを書いたものの、条件指定が間違っており、正解にたどり着くことはできませんでした

課題6

課題

性能を絞ったサーバー上で稼働するWordPressでなるべく多くのリクエストを捌けという課題でした

回答

リクエストをかけたところphp-fpmとmariadbが負荷の原因となっていたため前段にnginxのリバースプロキシを設置し、そちらですべてのレスポンスをキャッシュするという戦法を取りました

他の参加者さんの回答を見ると↑の解き方はかなり邪法だったみたいですorz

課題7

課題

  1. log4jの脆弱性をついて攻撃対象サーバーから環境変数に設定された文字列を取得しろ
  2. CVEを答えろ
  3. 影響範囲のバージョンを答えろ
  4. 影響を受けたサービスまたは企業名を3つ答えろ

という課題でした

回答

1

LDAPサーバー、Webサーバー、Javaファイルが用意されており、LDAPサーバーはWebサーバーへリダイレクトさせる機能が、WebサーバーにはJavaファイルを送信する機能とPOSTで受け取った内容を表示する機能があらかじめ実装されていました
そのため環境変数を読み取って攻撃元のWebサーバーへPOSTするコードを書いてクリアとなりました

2, 3

log4shellで調べて出てきた情報をそのまま回答しました

4

国内のMinecraftサーバーがこの騒動の際に一斉に運用を休止していたと記憶していたため、サーバー名を3つ答えましたが、案の定Minecraftという一括りでの扱いになってしまったため他に調べて出てきたCiscoとCitrixの製品名を回答しました

課題8

課題

ダウンタイムをなるべく少なくWordPressのサーバーを移行しろという課題でした

回答

今回の課題ではコメントの投稿などDBの変更が発生するリクエストがなかったため、移行元のサーバーを動かしたままDBのdumpとWordPressのフォルダーをscpで転送し、移行先サーバーの設定が完了し次第DNSを切り替えるという形でダウンタイム0となりました

課題9

課題

カーネルをアップデートした際にzfsのモジュールが読み込まれなくなったため修正しろという課題でした

回答

zfsの再インストールとmodprobe zfsは実行したものの解決できず、クリアとなりませんでした
dkimコマンドによるzfsモジュールのインストールが必要だったそうですが普段dkimなんで触らないため個人的には一番難易度の高い課題だったなと感じました

最後に

インフラ寄りなだけあり、参加者の中に自宅鯖を運用している人がかなり多く、新たな知見を得ることができました
特に、GMOさんが用意してくださった宿泊場所がホステルで、他の参加者の方とラウンジで夜中までいろいろな技術の話をすることができたのはとても良い経験になりました
このイベントを企画運営し、貴重な機会を提供してくださったGMOの皆さん、様々な話を通してたくさんの刺激をくださった参加者の皆さん、本当にありがとうございました

Discussion