ふるつき2

裏ブログです。うそです

pbctf 2021 感想戦

目下最強のチームことperfect blueが開催するpbctf 2021がありました。去年のpbctfではTSGCTFで登場したctfd-theme-tsgctfを取り入れていて驚きがありましたが、今年は去年と同じものを使ったみたいですね。TSGCTFではupdate版が用いられていただけに同じ機能を期待してしまいましたが、流石に時間に余裕がなかったということでしょうか。

CTFの構成とか

48h CTFは長いと思います。長いと思うけど、pwnやwebの問題は48h全部つかっても全部は解けないという感じにみえるので難易度からしたらこの時間になってしまうのは仕方がないといったところでしょうか。そもそもCTFが48hあるのは公平性のためで、どの問題も24h以内に解けるみたいな前提があるものと思っていましたが、昨今の全体的な難化の傾向に伴いそういう前提は崩れていそうです*1

問題は……どうだったんでしょう? 少なくともpwnについてはあまり評判がよくなるという感じではないのではないかと思います。難しい問題を解けるということは重要なことですし、難しい問題に取り組むことは楽しいことでしょうが、その難しさが謎アーキテクチャや難化のためのad-hocな制限によって担保されているとなると話は別になります。なんらかのCTFの決勝で非CTFプレイヤーっぽい運営がそういう問題を出してきたらまあ難易度のために仕方なかったのかな、カスだなと思うくらいでしょうが、perfect blueがこういう問題を出すとCTFを突き詰めた先の面白さがこの程度しかないのかという悲しさを覚えることになりそうです。

webは0dayが出たらしいですね。0dayはCTFの競技としての立場を危うくするものだと思うので嫌いです。

cryptoは良かったです。rbtree大先生のwell designedなタスクが広範なジャンルに渡って出題され、難易度も簡単すぎることも難しすぎることもないといった様子でした。まったく見習いたいことです

問題ふりかえり

Alkaloid Stream

あまり語ることはないと思います。一見複雑に見えるけど単純な解法があって、easiestな問題としてよくできていると思いました。個人的には手を動かしてfakeの構成要素をサッとダンプできて、綺麗にexploit*2を書けたので良かったです。

Steroid Stream

こちらはS3v3ru5が解いてくれましたが、私も多分解けていたと思いたいですね。なにをすればよいかはわかって、そこできちんとn bitの値m個をGF(2)上のm x n行列にできていたかは多少怪しいです。しかしxorのことを考えるときにGF(2)で扱うのは典型なのでひらめきとかではなく知識にしてしまって、次は瞬殺できると良い。

GoodHash

これもS3v3ru5が解いてくれました。ネタバレですけどこのあと大体全部S3v3ru5が解いてくれたって書きます。この問題に関しては完全にお任せしていて、GCMについては何をしているか知っているし多項式を考えればいいこともわかるけど、具体的にどういう操作になっているのかということや変形の仕方、ソースコード上でのうまい扱い方というのは知らないままでいるのですぐにでも勉強しないといけないところです。kurenaif先生がやってくられるらしいのでその機会にガッと勉強したいですね

yet another PRNG

S3v3ru5が解いてくれました。結局nested moduloをどう扱ったものかわからないままです。sageでGF(p1)とGF(p2)をうまく使って式を建ててmagicallyに解ければいいけど、そうもいかないんですね。まだ何が起きていたかわかっていなくて、そういう意味ではこのCTFで一番難しい問題だったと思います。でもsolve数は結構あって謎(謎ということもない……)ですね

yet anothr RSA

S3v3ru5も解けなかったし私も解けませんでした。これを解いていれば……という後悔は非常に大きいです。あとから見たら絶対解けるし、去年のpbctfでも同様の考え方をする問題がでていたわけでそれは解けていたわけだから本当に解けて然るべきでした。今後 p^2 + q^2という形を見るたびにこの問題を思い出そうと思います。

Seed Me

これだけUnblvRによる問題です。問題のシンプルさや難易度が絶妙かつ、こういうことができるんだという驚きがあって良い問題と思いました。LLLでぎりぎり解けないというところをハイパーパラメータをチューニングしていましたが、S3v3ru5の方が上手にチューニングしてシードを出していましたが、シードセット時のscrambleを見落としていてそこは私がやったので協業です。

しかし一点納得いかないのはこれがJavaで出題されて、かつJavaではhttps://github.com/mjtb49/LattiCGというライブラリが存在しこれが想定解法であったところです。なんとももにょる

チームとして

5位でした。一時は1位になるなど、よく取り組めていたと思いますが結局5位というのは悔やまれるところです。我々(すくなくとも私)は面白い問題に取り組むためにCTFに参戦しているので、順位やそれによって得られる賞金・レーティングの比重というのはそう重たくないつもりでいるのですが、しかし賞金圏内や一位が見えているならば目指したくなるし、たどり着けなければ悔しいというのが人情というものでしょう。あと1問解けていれば3位という接戦だったので悔しさもひとしお、あとから見返せば十分解けているべき問題を落としているとなればふたしおです。

今回はweb問題がチームとしては比較的よく解けていた用に思います。ありがたいことです。ptr-yudaiもこの以上難易度のなかを諦めず取り組んで2solveをもぎ取ってくれました。一方Cryptoは……S3v3ru5がよく頑張ってくれた分、最後の一問を私が解ききれていれば理想でしたね。

個人として

かなりの時間を費やしたと思います。それにしては序盤にAlkaloid Streamを通した以外の成果がなく費用対効果としてはかなり低いです(しかし取り組んだこと自体が良いことだし、それ自体は楽しかったので良いです)。ずっとyet another RSAに取り組んで解けずに時間を溶かしました。ptr-yudaiは式変形が得意なので相談してみればよかったなと今にして思います(しかしptr-yudaiはクソbrowser exploitにかかりきりで他のことをやる余裕はなかったのでした)。

ptr-yudaiやkeymoon先生と通話しながらやっていたのですが、通話をすると抜けるタイミングが難しくて生活が壊れていくのが難点です。しかし私は夜ふかしをすると途端にただでさえ高くない生産性がガタ落ちするので、力強く早寝早起きをするべきだなと思いました。2日目はなんとかこれを実践して日付が変わる前に寝ますといって寝て、朝起きて取り組むということができました。0CTF Finalsのときはこれで2問解けたのでどうかと思ったのですが、yet another RSAは思考が凝り固まっていて解けませんでした。厳しい

*1:そもそも昔の問題だって今見返しても難しい問題はいくらでもあるので、この前提を持っていたということは十分上を見上げられていなかった、という話のような気もします

*2:pwnのexploitに相当するcrypto分野の単語ってなんでしょう