※これは、CTF Advent Calendar 2021 - Adventar 20日目の記事です。 前回は超強々プレーヤーであるだこつ(y011d4)さんの「2021年の CTF Crypto 問を振り返る | y011d4.log」でした。 (2021年Crypto問のキャッチアップをさせていただきました!)
0. はじめに
『我々は(フラグを取れず)人権を失った。しかし、これは敗北を意味するのか?否!始まりなのだ!強大チーム比べ、我が N30Z30N の戦力は 30 分の 1 以下*1である。 にもかかわらず今日まで戦い抜いてこられたのは何故か? 我が N30Z30N の目的が正義だからだ!?』
このところ一層の難化傾向*2にある CTF 界隈ですが、逆にそんな状況だからこそ「Babyレベル すら怪しい(弱)一人チーム(小)プレーヤー」であっても(「解けない方がメジャー」なので)気楽に参加しやすく*3、さらに問題がうまいこと得意分野とマッチすれば上位 10 ~ 20 %くらいのポジションにすんなり入れてしまう*4こともあるので、むしろチャンスであると見ることができます。
また、初見よりも実際にトライした問題のほうが後で Writeup を読んでもシックリとくるので、解けなくてもチャレンジをする方が断然戦力強化の効果が大きいかと思います。
ただし、解けていない問題を復習せずに放置し続けてしまうと、折角の機会を無駄にすることになります*5。
・・・ということで、今年参加した CTF のうち、5 つの大会を取り上げ「弱小プレーヤーがムズめのCTFに立ち向かった記録」と称し振り返りを行います*6。 ※なお、ここでは「反省」を主体とすることから、心残りが少ない(後からキャッチアップできた)大会は除外されています。
1. Challenge 1: Google Capture The Flag 2021 (2021/7/17 9:00 JST - 7/18 8:59 JST)
Google CTF は「ムズ系」(高難易度) CTF で、2020 年にも参加してどうにか 2 問を解いたことから、今年はさらなる飛躍を誓い参加したンゴ。
結果
1 問(Misc)だけ解いて、275th / 379 teams。
Crypto を 1 問も通せなかったので惨敗認定です。
反省点
Good
- とりあえず(一番易しかった) Misc 1 問は通せた。
Bad
- 約 48 時間のうち、集中できた時間が少なかった(半ばあきらめてしまった)。
- 問題として提示された比較的長めのスクリプトを読む気力がなかった。
- 楽しむ心の余裕がなかった。
2. Challenge 2: Cypto CTF 2021(2021/7/31 1:00 JST - 8/1 1:00 JST)
Crypto CTF は Crypto 問に特化した CTF で、難易度も「易」~「難」まで揃っているので、Crypto の腕試しとして参加しがいのある大会であると言えます。
なお、easy 問の Writeup は以下に残してあります。 qiita.com
※個人的には、
- Crypto only かつ多彩な問題が出題される点
- チームアイコン(画像)を登録できる点
が気に入っています。
結果
10 問(Warmup 1、easy 3、medium-easy 1、medium 4、hard 1)を解いて、35th / 443 teams。
やり残しが多数あるので勝利という気分にはなれませんが、今年参加した CTF では一番頑張った感があるので及第点としておきましょう。
反省点
Good
- 昨年よりも良い成績を残せた(問題も多く解いた)。
- 24 時間本気モードで問題に取り組めた。
Bad
- 24 時間ガッツリやったので、競技後一週間くらい意識朦朧として周囲に迷惑をかけたこと。
- プログラミング力があれば時短できた問題が多かったこと。
- solve 数が多い問題を落としていること(もう少し勉強していれば解けたはず!)。
3. Challenge 3: TSG CTF 2021(2021/10/2 16:00 JST-10/3 16:00 JST)
qiita.com TSG CTF は東大コンピュータサークル「TSG」が主催する CTF ですが、国内主催の CTF の中でもファンが多く*7、Team N30Z30N も 2020 年から(別名での参加を含めれば 2019 年から)参加しています。
※個人的には、
- 問題オープンのスケジュールが事前に公開されている点
- 問題は全体的に難しいが解きやすいものもあり、かつ美しい点
- 出題画面やスコアボードの UI
などが気に入っています。
結果
SanityCheck、Survey 以外に Crypto 2問(うち1問はBeginner)、pwn 1問(Beginner)を解いて 86th / 776 teams。
CTF をよく知らない人に順位だけ言うと「やるじゃん」的な反応が返ってきますが、実態は上の如く Crypto 消化不良な状態なので、要追試といったところでしょうか。
反省点
Good
- Writeup と称して参戦記を残したこと(プレイ時の記憶がはっきりと蘇る)。
- Beginner 問とはいえ、比較的早期に 1 問フラグを取り士気高揚できたこと(一人チームなので、フラグを取らない気持ちがと盛り上がらない)。
- Crypto CTF の反省を踏まえ、短時間(3時間)とはいえ寝て体力回復を図ったこと。
Bad
- 提示ソースが ruby で書かれている問題を捨てた(毎年出題されてるんだから読めるようにしておこうよ、的な)。
- Crypto 全完を目標に立てたものの、勉強不足で結果が遠く及ばなかったこと。
4. Challenge 4: HITCON CTF 2021(2021/12/4 11:00 JST - 12/5 23:00 JST )
qiita.com HITCON は思い出深い CTF で、ムズめな CTF で最初にフラグを取れたのが HITCON 2019 でした*8。
結果
SanityCheck のほか、Crypto 1 問(一番易しいやつ)を解いて 69th / 288 teams。
惨敗は言い過ぎですが、やはり要追試といったところでしょう。
Good
- とりあえず 1 問解いた。
Bad
- 面白そうなを目にしながら、ほとんど手出しできなかった。
- 36 時間の時間配分に失敗した。
5. Challenge 5: hxp CTF 2021(2021/12/18 0:00 JST - 12/20 0:00 JST)
hxp CTF は昨年登録するもフラグゲットできなかったので、今年はリベンジを誓い出場したンゴ。
結果
Crypto 問「gipfel」(一番易しいやつ)だけ解いて 137th /150 teams。
順位的には惨敗ですが、登録チーム数は 1022 チームだったようなので今回は赦免ということで(謎)。
反省点
Good
- とりあえず 1 問解いた。
Bad
- SanityCheck すら通せなかった(達磨&グリコ状態*9)。
- 体調を整えられず、1 問を解いた後はほぼグッタリとしていた*10。
- Crypto 問に限らず、旬の話題をキャッチアップできていない。
6. まとめ
振り返りを雑にまとめると・・・
Good
- ムズい CTF でも易しめな問題には手を出せている。
- 相性の良い CTF では実力を上回るパフォーマンスが発揮できているっぽい。
Bad
- 出場した後の振り返りが不十分(特に解けなかった問題の補完)。
- 24h over の大会でのパフォーマンスが低い(体力不足)。
今後の取り組み事項
技術面
- 解けなかった問題はもちろん、解けた問題も Writeup を読んで別解法を習得する。
- 出場する大会を絞り(原則月 2 回までくらい)、学習とプレイとのバランスを最適化。
- 数学力(特に楕円曲線・超楕円曲線、計算機数学)、情報工学力(有用なアルゴリズム*11)の強化。
非技術面
7. おわりに
「弱小」は「強大」の対義語ですが、それらはいずれも相対的なもので、何をもって「強い」「弱い」とするかは主観によります。
ただ、「自分は弱い」と感じている人は、自分がイメージする「強さ」とのギャップを感じているのでしょうから、具体的進路を見出してそれを実践することで「強さ」を(比較的容易に)手に入れる可能性を持っているはずです。つまり、この先強くなるかどうかは「やるか、やらないか」で決まるのでしょう。
さて、CTF Advent Calendar 2021 - Adventar 21日目は 過密 (@kam1tsur3) | Twitterさんによる「 (仮)流行らなくていいよmusl libc」の予定です。 このあたりのことは疎いので、記事が公開されたら勉強させていただこうと思います!
*1:お気持ち的な値。
*2:「Welcome問題だけフラグゲットしたチーム」が半数とか。とにかくヤバい。
*3:無駄に排他的な雰囲気がないところもCTFカルチャーの良いところだと思います。
*4:そうするとお気持ち的に超盛りあがってくるのでモチベーション特大UPにつながります。
*5:この点が今年の大いなる反省点でした。
*6:要するに反省文以外の何物でもないので、特にツヨツヨな方にとって有益な情報は皆無かと思われます。その点はご容赦ください。
*7:難易度詐欺(difficulty:beginnerからしてムズい)としても有名らしいのですが、それでも参加せずにはいられない魅力があります。
*8:当時は「N30Z30N」結成前でしたので、別名で出場。
*9:「手も足も出ない」&「お手上げ」。
*10:SECCON の Speedrun までには回復。
*11:LLL とか AGCD とか Half CGDとか。