ふるつき2

裏ブログです。うそです

CSAW CTF Quals 2021 / RCTF 2021

CSAW CTFといえば歴史の長いCTFで、特に初心者向けという噂だった。私がCTFを始めた頃には既にそうで、とりあえずと思って挑んでみたがよくわからないまま撃沈した気がする。それでは今はどうか。あまりおもしろいと感じないCTFになってしまった。典型問題をいくつも解いた末にやっとフラグが手に入る問題や、50個のformat string bug pwnを解いて初めてフラグにたどり着ける問題などが出題された。やるだけではあるがあまりにも面倒すぎるし、取り組む意味を感じられない。

今回のCSAW CTFでは、perfect blue, dicegang, CryptoHackといった名だたるチームや組織が問題提供としてpartenerに入っていたので期待していたが、彼らは本当に問題提供だけをしていて他にどのような問題が提供されるかは見ていなかったらしい。彼らの提供した問題は面白かったが、OSIRIS Labの学生が作ったという他の問題についても確認していただきたかったところだ。それらの問題はCTF初心者にとっては、そういった参加者は他にもっとよくできた初心者向けの典型問題が存在することを知らないが故に面白く感じられたかもしれないが、ある程度以上の知識をもった参加者にとってはひたすら面倒でフラストレーションがたまるばかりに思える。初心者向けの問題ではあるものの中級者以上にとっても面白く感じられる問題や、そこまではいかないまでも取り組むくらいならなんでもない問題を作ることだってできるはずなのだから、特にCSAWのようなネームバリューがあってお金のかかっているCTFでは頑張っていただきたい。特にCTFという競技では時間をかけて解く問題も多くあるわけで、一つのくだらない問題によって生じる面倒さというのは、おそらく出題者が想像している以上に大きい。

ところであまり良い話ではないけど初心者であればこういう問題セットは楽しめるというのであれば、うまく初心者にやってもらうことはできないだろうかということを考える。こちらは本題ではなく、要するにCTFチームの中でちゃんと代謝ができたほうが良いのではないか、という話である。今の我々のチームではそれぞれに精進の余地を残していることは間違いないが、一方でそれぞれがある程度以上のレベルの実力を有していて、初心者チームとはもう名乗れなさそうであることも間違いない。

初心者らしき人が一人もいないというのは我々の老害化をうまく止める仕組みがない・もし誰かが引退したあとチームの力が向上するのが難しいなどの問題をはらんでいるように思える。このあたり、学校や会社の部活動でやっているようなCTFチームであれば毎年代謝が起こるのでうまくクリアできるのだろう。我々は組織からの引退によるチーム脱退というリスクは抱えていないが、チームに新しい風を取り込むためには誰かをどこかからスカウトしてくるか、あるいは向こうからこのチームに入りたいというアプローチをしてもらうしかない。チームという単位で考えてもCTF界隈全体で考えても、後進が育成されるような仕組みがあったほうが良いことは間違いないだろう。もっとも、CTFは非常に個人の技能によるところが大きい競技かつ、大人数の面倒を見るのは難しい競技でもあるのでよっぽどうまく仕組みを作らないとスポーツの強豪校のようなブランドを確立して毎年強いチームであるということはとてもむずかしいだろう。

突然思い出したので別の話題だけど追記。先にも上げたとおりCSAW CTFは歴史ある有名な大会で参加者も多い。1点以上獲得したチームは1216チームある。DEFCON Qualsでは433チームだったからCTFの中ではかなり巨大な方と思ってよいだろう*1。CTFで参加者が多くなると不安になるのがスコアサーバのレスポンスだが、CSAWはあまり良くなかったようで、度々サーバが500を返すようなことになったり、一部の問題が停止していたようだった。CSAW CTFではCTFdを採用していたが、CTFdも随分改善されてきた印象があるとはいえ大量のアクセスを適切にさばくのはやはり難しいらしい。どうすればCTFdで1000チーム以上の参加をうまく扱えるのか、またCTFd以外ではどのようなスコアサーバが選択肢に上がるのかはCTFを開催するときには常に検討したい*2

今週末はもう一つ、RCTFが開催されていた。WMCTFのことがあったからXCTFで何かしらの改修があってCTFに参加できるチーム数に制限がかかったりしているのではないかと心配していたがそんなことはなく、普通に参加することができた。しかしいつものようにXCTFではあるチームから抜けたユーザはその後48時間は他のチームに参加できないので、チームメイトの幾人かはフラグを自分では提出できなかった。どうにかしてほしい。

RCTFではCryptoは2問だけ出題された。同じような問題設定だったがそれぞれ解き方が違っていて、しかも面白くできていたので良かった。いっぽうでCrypto以外のジャンルの問題は5問〜だったのに対して、CryptoはBlockChainとあわせても4問しかなくカテゴリごとのバランスという点で良くなかったと思う。しかしこれはうまい問題がつくれるかどうかというところにかかってきてしまうので仕方なくもある。どうしても作れないときは作れない。それにしてもこれではあまりチームに貢献できず申し訳ない気持ちになる。やはり空きがちなMiscやRevをやるか。しかし大変という印象がありあまり積極的に手が伸びない……

*1:ちなみにzer0pts CTF 2021は951チームが1点以上を獲得している。こう考えると多い

*2:実際はCTFdのインスタンスを巨大にするか複数建ててロードバランスするしかないだろう。また他のスコアサーバの選択肢はrCTFくらいしかない

CakeCTF 2021 / WMCTF 2021 / FwordCTF 2021 / ALLES! CTF 2021 ...

先週はCakeCTF 2021を運営していて忙しかったのでCTF日記を書いていなかった。一週間立って落ち着いてみるとはるか過去の話のように感じる。しかしサーバを全部落としたのは今日の話で、随分直近の話だ。おそらくCTFの運営をしていた時間が濃すぎて他の時間が薄く間延びして感じられているのではないかと思う。CTFの運営については書きそびれた話もありつつも、表日記に書いたのでこれ以上書くことはそんなにない。CakeCTF開催直前〜直後くらいまでは、もうこのCTFの運営はやらないでおこうと思っていたのが、アンケートなどを見ていると来年もまたやって良いかな、という気分になったことくらいか。しかしそのためには、WebとReversingの作問をとにかくなんとかしないといけない。しかしそれでCryptoがおろそかになっては、CakeCTFくらいなら運営できそうにしても他CTFへの出場を楽しむことが難しくなる。

CakeCTFの裏番組では(と言うよりはCakeCTFが裏番組だが)WMCTF 2021とFword CTF 2021が開催されていた。どちらも楽しみにしていたがCakeCTFの運営で忙しかったりして出られていない。CakeCTFの開催日程を決めたときはどちらのCTFもまだCTFtimeには登録されていなかったので、後から被せられたような気持ちになっている。こういうところでロックを取るという意味でもCTFを開催する場合にはCTFtimeには登録しておくのが良いのだろう。折り良く(?)CakeCTFの開催直後にCTFtimeにアップデートが入って、Casual CTF(参加してもratingが入らないCTF)が開催できるようになった。クオリティについて一定の評価が得られているし、楽しみにしてくれているひともいるだろうから今後Casual CTFを開くときには使っていきたい機能である。

さて、WMCTF 2021はなぜかregistrationが事前に締め切られてしまって参加登録すらできなかった。どうにも参加できるチーム数に上限があったようなのだが、XCTFを使っているはずなのでインフラが不安定になるということもないだろうから不可解である。一応、運営に突撃するとバッチで参戦処理をしてくれるタイミングが2回ほどあったのは確認しているが、そこまでして参加するほどでもないと思ったので登録していない。また、WMCTF運営は問題はCTF開催後に公開されるのでそちらで我慢してくれ、と最初は言っていたはずなのだが問題が公開されたというアナウンスは見ていない。どうなっているのだろうか。

FwordCTFはチームとしては出ていて、Cryptoは全部S3v3ru5が解いてくれたのでまったく触っていない。難易度的には私がギリギリ全部解けるか解けないか、というところだと思っているのであとからupsolveして行きたいと思っているが、このところCTFの問題の復習ができていないくてFwordCTFにまでたどり着けるか怪しくなってきている。

Fwordというチームについては、zer0ptsに移籍してきたkahlaの話もある。Webプレイヤーなのだが、Fwordには他にWeb担当がおらず、ワンマンになってしまっていることが辛いと感じたのでFwordCTF 2021を最後にFwordを抜けることにしたらしい。個人的にはzer0ptsはチームとして大きくなりすぎのような気がするのでこれ以上メンバーが増えることには消極的なのだが、WebはWeb屋ということで任せている。ワンマンといえばzer0ptsではpwn担当もワンマン気味になってしまっている。問題を解くには至らないまでも壁打ち役くらいにはなりたいと思っている。やりたいことが多すぎる。

先週の話が長くなった。今週はALLES! CTF 2021だった。ALLES!は独自プラットフォームの色が強いCTFで、難しいという認識があった。実際難しく、pwnやwebでは全然全く解かれない問題というのがあったように見える。一方でcryptoは一般的で簡単なcrypto問題が2問出題されたほか、solahというブロックチェーンに関連する問題が3問でた。正直に言ってcryptoの体験としてはあまり良くない。ブロックチェーンの問題も取り組むのにコストが大きくてどうしても面倒でやっていない。crypto屋としてはなかなか厳しいCTFだった。代わりにいくつかmisc問題を見てみた。普通のmiscという感じで、解けなかったものの取り組んである程度の楽しさはあった。しかしこの楽しさはまだジャンルに精通していないが故の楽しさという気がしていて、もっと良い類題がありそうな問題もたくさんあった。anti-sandmannは別でかなりよくできていてこれ系統の問題では一番を争えるのではないかと思った。しかし1問解けていれば賞金の範囲内だったので解けなかったことは悔しいし、./Vespiaryが解いていたこともあって2倍悔しい*1。ptr-yudaiの不在も痛手だった

また、今週はnit ic ctfもあった。どこの高専かわからないがとにかくnitとあるからには高専生が開催しているCTFである。このCTFについて語る言葉は多く持たないが、CTFってこんなに雑に運営していいんだという驚きのようなものがある。このあたりは対象としている参加者層にもよる話だと思うし我々が開催・参加しているCTFとは少し毛色が違うのだろうなと思っている。そしてどちらもある程度必要なものなのだろう。いわばCTF入学式のようなCTFか。そういう目的で開催するならちゃんとしたCTFらしいCTFとして開催するほうが参加者にとっては良いだろうから、単に運営の楽しみとして開催しているのだろうことはわかるけど、存在意義やCTFという界隈への影響を考えるとそんな感じだと思う。

そういえばCakeCTFを開催したときの一部の「初心者向けではないと思います」という声には本当に辟易している。初心者「CTFプレイヤー」が楽しめる問題も提供しつつも、「初心者向け」ではないCTFを開催していたわけだけど、過去のCTFの評判を聞いたり日本語で案内されていたり、誰でも登録できたりしたから誤解したんだろうなとは思っている。この話題どんだけ引きずるのか。やめよう

*1:なぞのライバル意識がある

DEFCON / BSides Noida CTF / RaRCTF 2021

週末は三連休だった。そしてCTF界隈最大の祭典、DEFCON CTF 2021の決勝があった。私は残念ながら数ある予選のどれにも通過できず、DEFCONへの直接の参加は叶わなかったが、Perfect Guesserのお手伝いいかがですか、という誘いを受けていた*1。私はDEFCONの競技自体にはさほど興味がなかったので参戦するつもりはなかったが、DEFCONはCTFの発祥でありもっとも権威のある大会で、CTFerのお祭りでオフ会という認識だったのでそれがどのようなものか、トッププレイヤーがどのように取り組んでいるのかを見学させてもらうことにした。

しかし結局DEFCONがどういう競技かは全然わからなかったし、何をやっているのかもほとんどわからなかった。事前の情報収集が欠けていたこともあるし、チャットの流速は速く英語だったのですべてを追い切れなかったこともある。ルールも全然理解してなかった。しかし入念に事前準備がなされていたことやReversing問題がめっっちゃたくさん出ていたこと、Crypto担当は暇がち、ということがわかった。今後もDEFCONに参加したいとは全然思わないが*2、DEFCONへの参加権をえられるくらいには強く有りたいと思う。あとDEFCONのワイワイ感をVegasで感じたくないかといえばちょっと感じたいですね……。おそらくVegasに行くのは怖いしCTFerと交流なんてできそうもないですが……。

さてそれではDEFCONをやらなかった代わりに何をやっていたかというと、裏で行われていたBSides Noida CTFとRaRCTF 2021に参加していた。どちらもなかなかおもしろくてまともなCTFだった。楽しく取り組めたし時間を溶かした。強いチームが大体DEFCONに行っていたので上位もとれて、勝ち得たという感じではないけど1位は1位だし2位は2位なので良かった。

BSides Noida CTFのCryptoは2問解けなくて、それ以外は大体簡単だった。取り組んだタイミングもあるだろうけど、大体./Vespiaryが既に解いていてすごかった。Cryptoの典型速解きは得意分野、というかそれしかないと思っていたけど意外とそれもあまり強くないのかもしれない。事実、今回のlow power cryptoはひと目見てInvalid Curve Attackでしょう、ということはわかったのに、そこから小さい素因数を位数に持つ楕円曲線をもとめてdiscrete logをといてCRTするだけをずっとバグらせて解けなかった。discordに多分こうだと思うんだけど……というスクリプトを貼って寝たら、S3v3ru5がおそらくそのスクリプトを使って解いてくれていたので本当になんというか、最後まで解ききるということがうまくできない。

また、意外とbabycryptoも解けていなかった。素因数分解できそうだな〜と思いつつ、しかしfactorなんかにかけてもうまくいかなかったので別の方法があるのかと探っていたけど、これはECMを使うとうまく行ったらしい。しばらくCryptoをやっていたら当然知っていそうな知識だし、CTFerなら「factorがうまくいかないけど素因数一つ一つは小さいんだから」とおもって試せるべきだったが、詰めの甘さ知識量の少なさ諦めのはやさが出てしまった。

そしてもう一つ知識といえばbamn boiがある。これはROCAだったらしいんだけど、見たことあると思いつつROCAというワードにたどり着けずに解けていなかった。今思い返せばmoduloの生成方法なんて全く同じ問題を解いたことがあるはずなのに、うまく知識のインデックスを張れなかった。今週DEFCONがなければもっとめちゃくちゃな数解かれていただろうし、これは取れる問題だった。

他方の解けなかった問題であるprngは全く歯がたたなかったと言って良い。ほとんどやる気がなかったというのもあるけど、変な条件の生成とかDecimalとsqrtとかそういうのでかなりやられていて、LLLをすれば良さそうというところにさえたどり着けていないし、なんなら何をやっているかということの解析もまるでできていない。今見てもまだこれがLLLで解けるのかどうかわからない。しかし頑張ったら解けるはずで、全く歯がたたない難易度ではないと思う。今回解けなかったことを憶えておいて次回類題が出たら瞬殺したい。けどまだ復習してないんだよな

RaRCTF 2021はBSides Noida CTFより楽しいCryptoが多かったと思う。そしてスコアサーバが独自の割によくできていた。よくできていたが誰がどの問題を解いたか、というのが見えないのに不満がある。あと開催時間が長すぎる。これなら24hか36hくらいでいいんじゃないでしょうか。

こちらの面白かった問題はrandom padとかsnoreとか。random padはひと目見て方針がわかってすぐ解けた(実装は下手をやって時間かけたけど、それでも比較的早かった)けど、discordを見ていると他のチームの名前を知っているようなcrypterが苦戦したりしていて意外だった。最近はrandomを使っているのをみると全部mersenne twisterにつなげようとする。

snoreはかなり苦戦した。どうみても kエントロピーが小さいのに2式で xを消してMutivariate Coppersmithをしてもn式をたててHNPを解いてみてもうまくいかない。なぜ……とおもって見ていたら k = bytes_to_long(xor(pad(message, 32)[::-1], otp)) # OTP secureというようにバイト逆順になっていた……。なぜこんなことをしたんでしょう。あとどこかで kを単に全探索して賢いなと思った。

a3sもmini-a3sも解けなかった。暗号文一個で解けるんだから絶対S-Boxが線形だろうということはわかるんだけど、副鍵の生成とかpermutationとかをうまく線形で表して方程式一個でスパッって表すことができなかった。これを解いていれば1位だったし、解法をみると解けそうだなと思った。いや自分で思いつくのはできなさそうですが……。

全然話題が違うけど、BSides系のCTFをCTFチームが運営しているのを見るけど実は結構すごいなと思っている。これはCognitive CTF, 自衛隊CTF, 高専セキュリティコンテストなんかとの比較だけど、だんだんCTFというものが知られたり人気が出たりして注目を集めて「うちもCTFを開こう」となったときにまず頼りたくなるのは会社だろうなと思うけど、CTFにかけては在野のプロがいるのだからそちらにやらせてほしい。まあ日本でもCODEBLUEとかはあるんで、やっぱりそういうカンファレンス系だと契約の自由が効きやすい、CTFプレイヤーに知己がいやすいということなんでしょうけど……。なんか微妙なクオリティの大会を開催して満足するのは大変迷惑ですねと思ってしまいますね

*1:私が誘いを受けたわけではなく、DEFCONへの参加を目指していた合同チームに声がかかった。私もそのチームの一員だった

*2:OOOverflowが運営するのは今回までだった気がするので、次回以降どうなるのかは気になる

今週末はCTFに出なかった

土曜日にbWluaSBoYXJkZW5pbmc=というイベントがあってそちらに参加していたので、土曜日のCTFには出られなかった。なぜbase64エンコードしたかというと、私はこの競技(と運営)が少し苦手に感じたのでそういう愚痴を書くけど、それを運営や他の参加者が検索でみつけてほしくないと思ったから。見つけてほしくないのは嘲笑われるのが嫌だからです。

ISUCONの練習とおもって参加したんだけど、申請していた3人だけではなく知らない人もまぜこぜのチームになっていて、いきなりコミュニケーションしろと言われてもできないし、あいてのスキルもわからないからとりあえず我々が作業者になって残りの二人は悪いけど特に何も言わず放っておいたら、うまいこと役割をみつけてくれていた。競技では複数の言語によるマイクロサービスの実装とか、mysqlとかdrupalwordpressと7年前からcommitされていない個人開発っぽい掲示板が動いていたりするインスタンスとかが合計4つ与えられて、それを守ればよかった。これみよがしに複数の実装があったり古い実装があったりしたのでそちらを修正すべく作業してしまっていたが、本質はインフラで、とにかくRedisのbindingをやめるとかDBのパスワードを変えるとかw でセッションを見張るとかLinuxのなかに何が入っているかをみるとか、そういう調査や抜本的改善が必要だった。複数言語による実装のマイクロサービスなんて放っておいてもよいくらいだった。

競技も難しくて、現実世界がそういうものだから、というのはあるだろうけどこちらの措置にたいして点数が良くなったとか悪くなったとかいうフィードバックはない。いきなりサービスが停止するような攻撃が飛んできたり、どれが仕様で何は逸脱していいのかわからなかったりする。大昔の高専セキュリティコンテストもそうだけど、何を求められているかわからないけどはいやってね、というのは苦手だ。結局何をやってもうまくいかないし競技に集中していたら空腹になるしで言葉も多少乱暴になってしまいよくなかった。しかしISUCONではこうなるまいと思えたので、とりあえずISUCONの練習という目的は達成できているかもしれない。

……ということがあったので土曜日は疲弊していてCrypto CTFには出られなかったし、UIUCTFは翌日からでも良かろうと思ってそもそも参加する気がなかった。去年も何かしらがあって出場できなかったので、2年連続でCrypto CTFを逃したのは惜しいことだ。しかしUIUCTFについては担当である暗号分野はほとんど解いてもらっていたし、問題数も少なくとくに面白くもないようだったので全然参加する気にならず、結局日曜日も月曜日の朝も参加することはなかった。quantumみたいな問題があって解けないということで呼ばれたが、guessingっぽかったのでやはりやらなかった。UIUCTFって去年もこんなだっただろうか。もうすこし歯ごたえのある問題と言うか、まともな問題が出ていたような気がしていた。

しかしこれは私の印象で、Web分野なんかはそう悪くなかったらしい。カテゴリが違えば作問者が違うだろうから、同じチームにいたり同じadminのチェックを受けていてもやはり問題のレベルや数や質というものは変わってくる。今回はたまたまWebはあたりで、cryptoは外れだったんだろうと思う。他の分野はどうかしらないが、OSINTはチーム内でもやはり面白くなかったという声を聞いた(面白いOSINT問題というのは見たことがない)。

開催されていたCTFを楽しめなかったのは悲しいことだ。CTFというのはだいたい半分以上はそういうクオリティなのだから、面白くないなりに例えば素早く解いてしまうとか、あるいはレーティングやprizeをモチベーションにするとかして、とにかくなんでもいいから解ききる力を身に着けたり、チームに貢献できるようになりたいと思う。一方でやはり面白くないCTFに参加しても仕方がない、チームごとボイコットしてしまえという気持ちもある*1

*1:このあたり、カテゴリによって問題の質が大きくなるCTFではより難しい

IJCTF 2021 感想戦

IJCTF、そんなに良い印象をもってなかったがやってみると悪くなかった。去年あんまりよくないなぁと思ったのはなんだったんだろう。一年も経つとかなり記憶が朧気になってしまっている。こういうことがあるから、CTFに出るごとに「こういうところがよかった」あるいは「悪かった」ということをメモっておいたり、個人的CTF評価シートを作ったりする必要がある。

何が悪くなかったかというと、24時間という時間設定とか、開始が土曜午後からであるところとか。また問題数が無駄に多くて初心者向け()な問題で疲弊させてきたりしなかったう。全体的に中級程度の問題がバランス良く提供されていたし、forensicsジャンルもguessingということはなく解けていたようだった。総じてどういうCTFを開催するかというバランス感覚が良かったと思う。

一方で良くないところもあった。一つは5xx CTFになったところ。そんなにアクセスが集中した感じではないだろうから何か別のところに理由があったんだと思う。実際すぐ直った*1。CloudFlareが入っていたようだからそれがなにかあったのかもしれないが、わからない。その後復旧までの間にdiscordで問題が配られたが、ファイルがまとまっていなくて扱いづらかった。問題はzipやtarにまとめておくべきだろうし、こういうトラブルがありうるので事前にファイルの情報をまとめておくと良い気がする。また、あとから知った話だがpwnの問題はインドのローカルCTFで提供されたものがそのまま出ていたらしい。最悪。印象が一気に悪くなりました

Cryptoの問題はBlock Signがわけがわからなかった以外は概ね良かった。ECSignやQuaraticは中程度の難易度で楽しく解けるよい問題だったと思う。一方、個人としてあまり貢献できなかったのは良くなかった。個人としてやったのはdiscrete-logの方針を建てることと(方針は建てたがなんか実装がうまくいかなくて、その間にS3v3ru5が解いてくれた)、square sumの後半(pを求めるところまではS3v3ru5がやってくれた)、 ECSignの実装をやったことだけが貢献ポイントになっている(こちらはS3v3ru5が爆速で方針を建てて放置していたので実装した)。Forensicsなどでまだ貢献できる部分があったので、Block Signにやる気を削がれずにそちらをやったりすればよかっただろうか。

ECSignについては  xs_2(s_1 - s_2)^{-1} - ys_3(s_1 - s_3)^{-1} \equiv 0 \mod n という式のsmall rootsを求めたんだけど、 defundのmultivairate coppersmithでは[0, 0]が出てきてしまって困った。しかたないのでInequality Solving with CVPで片付けたけど、こういうときどうやるとうまく解けるんだろう。また、今回は思考停止でInequality Solving with CVPを使ったけど、そこまでする必要もない問題だった気がするので、ちゃんとLLLをやる力はだいぶ失われていそうな気がする。

なんにせよ、チームとしては圧倒的な一位で終われて*2、prizeとしてDigital OceanのCreditがもらえそうなので良かった*3。これで思い出したけど、競技中にjoseph(skateboarding dogのCrypto強いひと)から"zer0pts tsuyosugi"とDMが来ていた。私はCryptoの強い人には基本的にめちゃ好感を持っているのでDMが来て嬉しかったのだが、このタイミングではじめてscoreboardを確認したと思う。私にとっては順位とかレーティングとかは結構どうでも良くて、目の前の問題がたのしいか、それを解けるかというのが大事なんだろうな。prizeはもらえると嬉しいですが……

*1:すぐ直ったと言っても運営にとってはめちゃくちゃ長い時間落ちていたように感じただろうな

*2:主要なチームはCyBRICSを頑張っていたんだと思う

*3:余らせている

Google CTF 2021 感想戦

writeupはこちら

furutsuki.hatenablog.com

なんかGoogle CTFは久々にたくさん労力を注いだCTFになったと思う。いくつか理由があると思う。たとえば、たまたまその日早起きできた。8:30くらいに起きて、9時からの開始に間に合うように参加できたのは大きかった。なんとなくの感覚だけど、CTFに開始からどれだけすぐに参加できるかというのはそのCTFにどれだけ取り組めるかと関連していそうな気がする。開催から時間がたってしまったCTFにあとから参加するのはなんとなく怖いような印象があってやるきが上がらない。それからzer0pts単体で出たというのも大きかった。去年は合同チームで出たのだけど、合同チームになるとどうしても働かないほうのアリになってしまう。強い人が他にいるからやらなくていいじゃんという気持ちになってしまったり、解いている途中で雑に考えを日本語でメモすることに抵抗があったりする、要するに自由度が低く感じられてしまって我が物顔で振る舞えないのが良くないんじゃないかと思う。あとは単に時間の自由があったということだろう。家族が家に居て生活の様子を合わせないといけないとか、明日は学校だから準備をしないといけないとかがなくて何にも邪魔されなかったし、先の気兼ねもなかった。

しかし取り組みに比して問題が解けていないな、と思う。主にCryptoに取り組んでいたけど独力で解いたのはH1だけだった。他にもかなりリソースを割いてほとんど解けているという状態に持ってきた問題にしても最後解ききることができていなかったりした。例えばtiramisuで最後のCRTをやるパート、なにを勘違いしたのか復号後の文字列に flag が含まれているかどうかで判定していたが、フラグのフォーマットは CTF だったので見つけられなかった。これは「あれおかしいな」と思って全部出力してみてあとからそれっぽい文字列でgrepするとか、あるいは復号後のバイト列がprintable-asciiですか、とかそういうことをすればすぐに解決した問題なんだけど、そういうタイミングでサッと手を動かして再実行ということが全然できない。

それから単純に実力不足というのはある。やはりtiramisuでsecp256r1-validな点を作るために中国剰余定理を使うのを思いつかなかった。なんか大きい数を使えばいいのでは? と思ったけどそれを作るツールとして中国剰余定理を思い出せなかったのはダサいなぁとおもうし、tonalitiyはサッとみて「これはdを復元するのは無理なので……」という方向に舵を切るような問題だと思うけどそれができていなくてずっと「dGを定数倍できる場合にdiscrete-logが解けないか」みたいなことを考えていた。世の中のCTF PlayerやCryptoやるひとというのはこのあたりがめちゃくちゃ正確で強いというイメージがある。中国剰余定理サッと思いついて解けるし、なんか解けていなかったときにデバッグするのが上手。私は「これはあっているはず」という思い込みをめちゃくちゃやるのと、実験してみようというのを面倒がるのとで一度ハマるとほとんど諦めたも同然になってしまう。性質的なものなのでどう改善したものかもわからないのも難しい

反省すべき点は多いけど、楽しく取り組めた。goとかdartとかでプログラムが書かれていたり、通信するのにprotobuf使っていたりと非本質パートで嫌な色を出してきたことを除いては、Google CTFのCrypto問題はよくできていたと思う。インフラもさすがgoogleという感じで安定していたし、めちゃくちゃなつなぎ方をしてもBANされたりしなくて非常によかった。

一方でWebはそうでもなかったらしい。zer0ptsはチームとして一問もWeb問題を解けなかったし、どうやら評判としてもすこぶる良い問題だったとはいかないようだった。CTFの問題がどうなるかなんていうのは作った人によるとしか言いようがないし、誰が作ってもだめなときはだめだったりするので運という感じはするけど、そこを実力や工夫でうまく安定させて質の高い、無理のない問題を作るのが実力だし、参加者が満足するCTFというのはそういうものだと思う*1Googleはそういうところがめちゃくちゃ上手だと思っていたので意外だった。

話はかわるけど、今回のCTFではだいたい開催から36時間経つかたたないかのあたりで元気がだいぶ失われてしまった。そもそも根を詰めるというのは大変なことである上に、だんだん解けそうな/取り組めそうな問題が減っていくわけでこのあたりが限界か……となる。私は上位を取るためとか賞金がほしくてというよりは解く楽しみのためにCTFをしているので「疲れてきたな」とか「つまらないな」と思った瞬間にコントリビュートできなくなってしまう。そしていくら競技や問題が面白くても体力的な限界は36時間くらいで訪れる気がする。夜ちゃんと寝られなかったけど昼寝はしたので体力的な問題というよりは継続して取り組む限界がそのあたりにあるんじゃないかなと思っている。これは私の話です

なんか思いついたら書き足したりする

*1:ctftimeバイアスというのがあって(作った)、単に開催回数がおおいCTFのレーティングが高くなって人気になりやすいという問題があるので「人気のCTF」という言葉を使わなかった