今日からCTFを勉強しよう!と思いはしたものの、まだCTFが何かも分かっていない状況です。恥ずかしながら、今日までCTF (Capture The Flag) は Catch The Flag の略だと思っていました...
読んだネット記事など
以下のネット記事などを読んで、少し概要は分かってきました。
形式
「旗」という答えの文字列を探すことが目的。大会は数時間とか数日というスケールの長さらしくて、AtCoderとかよりも長そう。「問題を解く」というよりは、広く深いコンピューターの知識を用いて「パズルを解く」というような感覚に近そう。
大会は、Jeopardyという個々のクイズ形式のものと、Attack & Defence というチーム対決型の二つがあるらしい。どっちも楽しそう!
知識分野
セキュリティと一括りに行っても思ってた10倍くらいたくさんの分野があるみたい。さらにCTFではコンピューターの一般知識なども必要らしく、勉強すれば相当力がつくそうだなと思った。よく聞かれるのは以下らしい。
- PWN
プログラムの脆弱性を利用してexploitする。過去問の簡単なのを見てみると、「バッファオバーフローを利用してリターンアドレスを書き換える」というようなのがあったから、アセンブリみたいな低レベルの知識も必要そう - Crypto
これは暗号解読みたい。過去問などをみるとRSA暗号など、数学的な知識を用いて暗号をデコードするような問題が多そう。とても面白そう - Web
これはSQLインジェクションやXSSなどが対象そう。こういう系はWeb開発してる時にさらっと読みはしたけど、自分で攻撃できるレベルではない - Forensics
このサイトによると、「とあるファイルが与えられて、そこから有意な情報を抜き出す問題」らしい。これは他の分野に比べると典型パターンなどは少なめで、アドホックな問題が多いらしい。少し難易度が高そう - Reversing
コンパイルされたバイナリファイルを解析して、flagを見つける形式の問題。gdbみたいなデバッグコマンドや、バイナリ・アセンブリの知識などを使いながら解いていくそう。この記事が分かりやすそうなので今後読みたい - Misc
ある特定の分野に属さない、一般的な知識と発想力を用いた問題
まとめ
今日はここまでです。CTFの概要を調べて過去問などを見てみて、想像してたより格段に広く深い知識が必要になることが分かり驚いています。明日からは実際の問題なども解きながら本格的に勉強を始めていきたいと思います!