ICTSC2021 夏の陣に初参加した件

まずは選手及び運営の皆様、2日間の競技お疲れさまでした
運営の皆様におかれましては、前日から大変な準備をされたことと思います
ありがとうございました

ICTSCとは?

粗放に言うと、トラブルに対応、解決する力をチームで競い合う競技です

サーバやネットワーク周辺を主として、実際にトラブルが起こったという想定の環境が用意されます

そこでその問題をチームで解決し、問題ごとの難易度に応じた得点を競い合います

ICTSCホームページ

さいしょに(所見的な)

ちょうど今月の頭に、linuxサーバを自分で触り、動かし、勉強し始めました

本サイトも、同時期に借りたレンタルvps上で動いてます

それもあって
「nginx??? 聞いたことあるぞ、確かWebサーバでしょ」
みたいな感じで、簡単な雰囲気くらいはわかるんですが
やはりその程度の知識では難しいですね
いかに基礎知識を固めて、流行りの分野に目を凝らしているかが問われました

2日間ありましたが、結局自力で解けたのは50点(易しい)を2つ
チームメンバーのうち1人と探り合いながら150点(普通)を1つでした

チームの成績としては、最終的に1000点くらいです
メンバー内に有識者がいらしたので、点数のほとんどは彼のおかげです(笑)

私が解いた問題の簡単なWrite-upを下にまとめます(役立つかはわかりませんが)
ブログが念頭から零れ落ちてたので、写真の一切を撮り忘れていました
文字ばかりで申し訳ないです

全体通しての反省はまた最後に

1日目

初参加ということもあり、まずは問題を全体的に見通しました
そこで「これなら解けるぜ」ってやつをピックアップ、メンバー内で役割分担しました

途中で「これわかんねぇや」ってなった問題は、すぐに投げて次に取り掛かりました
↑ここ反省ポイント(後述)

この日は最終的に、「Webサーバが立ち上がらない」「テレワーク推進部」をクリア
「ンジンエックス」と「アドレスが配布できない・・・」は、とっかかりを見つけたものの断念

以下、該当問題の回答になります

Webサーバが立ち上がらない

Webサーバ起動時、エラーが出るので対処しなさいという旨の問題

エラー文を見るとflaskに対してnot foundが出ていたので、パスがおかしい可能性からモジュールを検索
そもそもflaskが入っていなさそうだったので、flaskを普通にインストールすると普通に立ち上がりました
ただ閉会式の話を聞いている限り、模範解答ではなさそう()
正式な解答が出れば、確認します

テレワーク推進部

テレワークを行うためVyOS上でWireGuardを構築する
クライアント側は君が構築したまえと上司に丸投げされた設定

記憶がだいぶ曖昧です
確かサーバ側は設定済みなのと、公開鍵が提示されていたので、クライアント側の設定だけ行ったような
VyOSもWireGuardも未履修のため、「WireGuard VyOS」で検索
クライアント側の秘密鍵を確認
鍵やアドレスを整理して、wg0.confファイルを正確に定義すれば立ち上がりました

2日目

他メンバーも前日に成果を上げ、易しい問題をすべて解き終わってしまったため
普通レベルの問題へ

「たぶんこの辺りなんだろうな」って目星が付くのがいくつかありましたが
それ以外は、私の知識ではまったく見当のつかないものばかりでした

そこで前日にピックアップしたものの中から、“解きたい”問題をチョイスしました

頑固なindex.html

OS再起動するたびに、/var/www/html/index.htmlの内容が
「Welcome to ICTSC」に書き換わるから、対処しなさいという旨の問題

同ディレクトリ内に別ファイルを用意しても、OS再起動時に消えたりとかはなかったので、あくまでindex.htmlの問題と断定
最上位ディレクトリで
$grep -r index.html ./*
index.htmlの文字列を含むファイルをすべて並べました
すると/etc/tmpfiles.d/ictsc.confの、
F /var/www/html/index.html 0777 root root – Welcome to ICTSC
がヒット
tmpfiles.dについてググると、このファイルがindex.htmlを上書きしていると判明
普通に削除でもよかったのですが、壊すとまずいので
$mv ictsc.conf wawawa.txt
index.html編集後再起動しても内容がそのままだったため、クリア

本問題は、早い段階から「起動時のスクリプトか何かが諸悪の根源」とアテはついてました
なのでrc.localとcrontabを確認した(当日検索して初めて知った)のですが、それっぽいものは見つからず
ファイル監査ログを取ろうと思い立ちaudit(これも当日検索ry)を使用するも的外れ
nginxのconfファイルに目を向けたりし、結局grepしたのが2日目の昼休憩あたりと、だいぶ大回りをした印象です
grep後も、見落としで数時間また大回りをし(多分.pmファイルを見つけてにらめっこ)
メンバーの気付きでようやく問題のファイルを発見
競技終了1時間前くらいにギリギリ解決しました

さいごに

浅かった知識が少し深まった感じがしました
問題のタイトルや状況なども、とても面白かった印象です
(特に「何もしてないのに壊れた」はツボです)
「わからん」が「わかった」になるのは非常に気分がいいですね
CTFもそうですが、実際に手を動かすことの重要さが改めて身に沁みました

ここからは反省、気づきを少々

試したことは記録しよう
まずはこれに尽きます

2日目で、チームメンバーのつよい先輩の助言でようやっと気づきました
やはりチームでの競技ですから、情報共有は大事ですね
よく聞くフレーズですし、理解した気になっていました
特に途中で投げた問題は特に
解き終わったとしても、振り返りができるし、やはり形に残すべき

そもそも本ブログも振り返りの目的で作ったのに何をやっとるんだバカタレ

あとは全体的に圧倒的な知識不足でした
当然のことですが、分野ごとの知識の有無が大きく出た印象です
恥ずかしながら、linuxOSに対する知識ですらまだまだ浅いレベルですので
これからの勉強における、とてもいい指標になったと思います

次回、枠があれば、また力試しに参加したいと思います

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です