kstm 光芒祭CTF 2024 回答速報
本日は信州大学工学部光芒祭にお越しくださりありがとうございました。
この記事では、kstmの出展のCTFに登場した問題の一部について、簡単な解説をします。
CTFとは?
CTFとは、Capture the Flagの頭文字を取った、セキュリティに関するゲームです。
kstmメンバー総出で隠したFlagを皆さんに回収していただきました。
問題解説
Crypto Quiz
- 現代暗号には、共通鍵暗号、公開鍵暗号がある。
- 公開鍵暗号にて、公開するほうの鍵を公開鍵、公開しないほうの鍵を秘密鍵と呼ぶ。公開鍵暗号には、RSA暗号や楕円曲線暗号などがあり、RSA暗号は巨大な数の素因数分解が困難なことを安全性と根拠とした暗号化方式であり、楕円曲線暗号は、楕円曲線上の離散対数問題の困難性を安全性の根拠とする暗号である。
- SSL/TLSやIPsecなどのセキュリティプロトコルで用いられる鍵交換では、ハイブリッド暗号を用いた鍵交換が利用されていたが、TLS1.3では、ハイブリッド暗号を用いた鍵交換は廃止され、鍵交換アルゴリズムはDHEとECDHEに限定された。(後略)
- AESは、128長のブロック暗号化方式であり、鍵長は全部で3つある。また、ブロック暗号の中では最も安全である。危殆化した共通鍵暗号の3DESを用いたSSL/TLS攻撃の一つとして、SWEET32があるが、この攻撃には最低でも32GBの暗号化データを単一のSSL/TLSセッションから取得する必要がある。
以下、総評です。
Crypto Quizは、暗号に関する知識を問う小問集合になります。本CTF参加者が簡単に点数を取れるようにサービス問題として作問しました。実際のCTFにはこのような問題はないと考えてください。参加者の皆さん、フラグを入手する快感は味わえましたか?
さて、各問の内容について軽く触れたいと思います。
問題1, 2は、現代暗号に関する基礎知識を問いた問題です。そのため、ググらなくてもわかる人はわかるはずです。
問題3, 4は、少し難度が高いものになり、セキュリティの知識が多少あっても即答が難しい問題になっています。ただし、ググればわかるものになります。問題4について調べるコツとして、"DES/3DES 脆弱性 32GB"と打つとRet Hat社のSWEEET32に関する記事がヒットすると思います。この記事を見ると、なんと見事に答えが見つかると思います。このSWEET32について詳しく説明しませんが、DES/3DESにはSWEET32という脆弱性があり、利用が推奨されていないこと覚えておきましょう。ちなみに、問題文の"危殆化"とは、以前は安全だったものの技術の進歩や時間の経過で安全ではなくなったことを言います。
Hidden Developer's Message
kstm内にあるという設定の架空のチーム「ukkr」(うっかり)のホームページから開発者によるメッセージを探すという課題でした。
開発者ツールを使って、HTMLのコメント<!-- -->
を探すとflagが得られるようになっていました。
Shinshu
- 信州大学工学部が発足したのは1949年であるが、その前身である長野高等工業学校(後に長野工業専門学校と改称される)が設立したのは西暦何年か?
Wikipediaで信州大学工学部を調べると「長野工業専門学校 (旧制)」のページへ移動することができます。これで1943年とわかります。
現在の長野工業高等専門学校(長野高専)が検索にヒットしやすいという裏をかいた問題でした。
Txt File
フラッグの存在はすぐに気づけたと思いますが、正しくフラッグを転記するのに苦戦したと思います。
ファイル名変更ツールを使って後ろの文字列だけをコピーすることで、フラッグを楽に得られました。
File Camouflage
ファイル名の中に、Unicodeの文字方向に関する制御コード RLO制御コード を挿入することで、ファイル名を誤認させています。
今回は拡張子を.go
に偽装していたため、内容はファイル名が改ざんされたことを嘆くプログラム言語Goによるソースコードにしておきました。
二回目に現れる{
は、右から読む場合の閉じ中カッコであるので、その左にあるtの次は後ろから右に読み、kstm{gabihotog.abichi}
が得られます。
- (参考)事例 国内企業を標的としたウイルス感染調査を騙るウイルス添付メール、制御文字RLOを使った拡張子偽装を確認 トレンドマイクロセキュリティブログ
Mountain
画像をGoogleレンズなどの画像検索ツールで調べると、この山は函館山とわかります。函館山の標高を調べると、334 mとわかります。
Secret Button
開発者ツールでは、スタイルを変更することができます。
下の画像に示すdisplay: none;
をオフにするとボタンが現れるので、これをクリックすることで画面が遷移してflagを得ることができました。
なお、裏道として、formタグの設定を見ながらcurl
などのコマンドでPOSTでリクエストしてもflagを得ることができました。
So Sweet!
得られる甘いお菓子の正体はCookie(クッキー)でした。
開発者ツールのApplication欄からCookieを選択すると、回答らしき文字列が得られます。しかし、これはURIエンコードされており、そのまま回答することはできません。
Chromiumの機能を使ってURIデコードすると、きちんとkstm{ }
の形式となります。
Weak Password
この問題のユーザー名はadmin
、パスワードはpassword
でした。こんなユーザー名・パスワードにしてはいけませんよ!
ちなみに、救済措置として、コメントでユーザー名・パスワードを書いていましたので、Hidden Developer's Messageの要領で解くことができました。
Classical Cipher
シーザー暗号の問題でした。文字「p」が「k」となるようにシーザー暗号のルールでずらすと……
pxyr{Mfuud Kzssd Qzhpd}
kstm{Happy Funny Lucky}
が得られます。
In File
答えはファイル内にあるそうなので、閲覧してみましょう。例えば、シェルを使う場合は次のようにして調べられました。
cd Desktop
cat infile | grep kstm
In Image
画像データが途中で破損しており、ある程度のところから画像が壊れてしまっています。この破損部分を見に行くとflagが得られました。
実は画像ファイル内にflagをべた書きしていたので、回答を得るコマンドはIn Fileのものと同じです。
Conan FILE1096 Cipher
名探偵コナン FILE1096に登場したレールフェンス暗号の問題でした。暗号の長さは20文字であり、kstm{
が得られそうなレーン数・配置であたりを付けるだけで解くことができます。
k { s I A
s m T i i K T H R }
t h s A A
kstm{ThisisKITAHARA}
裏道として解析ツールを使う方法もありました(ヒント冊子に解析ツールが端末に用意されていることだけ案内していました)。ツールは /home/ukkr/ctf-tools/rail-fence.py
に配置してありました。
Gray Scale
ヒトの色覚特性とコンピュータが扱う赤・緑・青の強弱は必ずしも対応しません。クロード・モネの作品「印象・日の出」は真っ赤に描かれた明るい太陽が特徴的ですが、単に赤・緑・青の強弱の平均を取るだけでは空の色に埋もれてしまいます。
ヒトの色覚特性に近い係数比として(0.7, 0.1, 0.2)が知られており、今回はこの付近の回答がすべて正解となっていました。
Funny Rowlet
実は、問題文のURLのうち「funny-」部分を消してアクセスすると、X(旧Twitter)の投稿が見られました。この投稿のALTに回答がすべて書いてあります。
Inverse Element
- 15x ≡ 1 (mod 143)を満たすxを求めよ。
- 回答: 124なので
kstm{124}
- 回答: 124なので
Public-key Crypto
RSA暗号を求める計算式を順に解くことで得られます。
- p = 271、q = 241、e = 7のときm = 38をRSA暗号で暗号化せよ。
- 正解: 50065なので、
kstm{50065}
- 正解: 50065なので、
Researcher
GeoGuesserの日本マップの要領で場所、高校名を調べます。
次に、得られた情報について検索することになります。しかし、Web検索エンジンを使っても、欲しい情報から離れた情報が多く、回答に近づくことは難しかったのではないでしょうか。
研究者の検索に特化した検索システムを使うことで、回答にぐっと近づくことができます。信州大学であれば「信州大学学術情報オンラインシステムSOAR」がより信州大学の教員に特化していて良いでしょう。
なお、市名まで絞り込むことができていれば、じゅうぶん総当たり可能な件数になりました。
感想
- 暗号クイズをたくさん解いてくれて作成者冥利に尽きる。(Uni8sai, Crypto Quizの作者・解説者)
- 我々にとっては初めての試みであったので、開催してみて問題がやや難しめの調整だと気づいた。来年以降もCTFが開催出来たら面白いと思うので、今年の成果を参考によりよい出展にできたらと思う。(高原のな, 光芒祭CTFの発案者・Crypto Quiz以外の解説者)