リアルタイムCTFでボコされた

反省会の一幕
 土日でとあるリアルタイムCTFに参加した。結果から言えば全く解けなかった。参加したCTFの問題レベルは想定上に高く、現状のチームのスキルレベルでは手が出ないものであった。
 取り組んだのは主にはrev、web、cryptoで、いずれも10時間程度粘ってはいたもののとっかかりが掴めなかった。
 rev問題は実行ファイルが渡されてそれを解析することで、実行時に望ましい結果が出るような入力方法を探す、というものが多かった。実行ファイルはstrippedなバイナリで、objdumpの結果を見ると2万行を超える命令列が並んでいた。おそらくは動的解析で解くことが期待されている問題で、静的解析で解くことは相当にアセンブリに精通していないと厳しいと思われた。とはいえ、シンボルが落とされているので動的解析しようにもどこにブレークポイントを打つべきか検討がつかなかった。そして、そもそもチームの動的解析への習熟度が低いというのもあって静的解析に安易に流れた。そして、タイムオーバ。
 web問題はsqlの入力フォームが公開されているので、フラグの内容をリークさせるような上手いsql文を考えるというものであった。ただし、sql文のスキームは事前にgraphqlのmercuriusというプラグインで規定されていて、そのスキームに反する構文を書くとエラーが吐かれるようになっている。これについてはとにかく考えられるさまざまな入力をひたすらに試してみたがうまいこといかなかった。取り組み始めて5時間くらいで略記して書かれたものはエラーにならないことが判明したが、解答には繋がらなかった。これは無念。そして、Web問題のコードはことごとくnode.jsで書かれている。picoCTFでもweb問題のコードはnode.jsでかかれていることが多い。毎回メソッドの意味や構文の意味を調べていて非常に非効率であるので、どこかでnode.jsの使い方を勉強した方が良いかもしれない。node.jsかけたらWebアプリケーション作成の技術も上がると思うので、潜在的モチベは高めだ。そして、SQL injectionの勉強をもっとちゃんとやること。
 Cryptoもダメダメでした。そもそも暗号技術を真面目に勉強したことがない。クラスメートの一人が非常に熱心に取り組んでいたのはRSA暗号の問題で、当然効率的な解き方なんてしらないので、色々考えて、ついには高速素因数分解のためのツールとかも引っ張ってきていたけど、pもqも100桁を超えているので現実的な時間では解けず諦めることになった。暗号技術については特に主要な暗号に関わるものについてはきちんと学ぶ必要があるということで、ゼミの形式で勉強会を開催しようか、とかそういうことを言っていた。
 それから個人的に驚いたのはblockchainの問題ジャンルがあったということ。これは完全にノーマークだった。確かにこの頃どこでもblockchainは使われているし、それ由来の攻撃の存在もしばしば散見されれるので、これが出題ジャンルになるのも当然か。いや、blockchainについてもそろそろ勉強しなければならないか。
 結構勉強してきたつもりだったけど、こう考えてくると全然勉強が足りていないことがわかる。基本的に知らないことばかりだ。知らないことばかりというのはどこでも誰にでも適用できるステータス説明だが、この場合知っている必要があるのに知らないことが多いという分類なので重みが違うんですね...

0 件のコメント:

コメントを投稿

注: コメントを投稿できるのは、このブログのメンバーだけです。