ふるつき2

裏ブログです。うそです

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が運営するのは今回までだった気がするので、次回以降どうなるのかは気になる