CTFとは

CTFの概略

 CTF(Capture The Flag)はセキュリティコンテストの一つである。コンテストの主要なスタイルは、セキュリティ技術を駆使して "Flag" と呼ばれる情報を探しだす、というものであり、名前もこれに由来する。

a)ゲーム形式で行うのでモチベーションの維持が容易
b)初心者向けCTFは、取り掛かりのハードルも十分に低く設定してある
c)現実の事件に即した、リアルな問題も出題される

ということから、単なるゲームとしてだけではなく、学習用の教材としても非常に優れている。

 チームを組んで参加することも一般的だ。個人での参加もできるが、やはりチームで戦ったほうが戦績は良くなる傾向にあるのも確かである。そのため、上位を目指すのであれば複数人でチームを組むのも有望な選択肢であると言える。


CTFの開催スタイル

 CTFの開催形式は、大きくはJeopardyとAttack-Defenceの2つに分類される.

 Jeopardy
 問題ファイルが与えられ、その中からフラグを探す。総得点数が多いチームが勝ち。多くのCTFはこの形式を採用している。
 また、リアルタイムで開催されるCTFの他にも、常設CTFというのもある。これは練習用、あるいは個人の楽しみのために常に参加できるCTFであり、こちらも同様にJeopardyのスタイルである。

 Attack-Defence
 各チームにサーバーやネットワークが割り当てられて攻防を行うチーム戦。DefconCTFやSecconCTFなど本格派の大会ではしばしば行われる形式。
  
 King of the Hill
 奪取したフラッグを維持し、維持した時間で得点を得る形式。

CTFの問題ジャンル

 主にJeopardyについてだが、大まかな問題分類が存在する。ただ、公式に決められたものというわけでもなく、CTFによって呼び方が違ったりする。そして、複数のジャンルをまたぐような問題もある。それらの点には注意すること。

 Web

  主にWebのセキュリティに関する問題。有名どころとしては、SQLインジェクションなど。

 Network

 ネットワーク技術に関連する問題。ネットワーク上を流れるパケットを記録したファイル(pcapファイル)を読んで、フラグを探したりする。

 Forensics

 与えられたファイルを調査したりする問題。ファイルに付加されている情報などを参考にして、ファイルからフラグを読み出す方法を探す。

 PPC(Professional Programming and Coding)

 条件を満たすようなプログラムを作成する問題。

 Rev(Reverse Engineering)

 機械語で書かれたファイルを渡され、それを解析することでFlagを得る形式の問題。

 Pwn(Pwnable)

 バイナリやソースコードを解析し、指定された環境の脆弱性を探す問題。脆弱性が見つかったらそれに対応する攻撃を行う(Exploitを書く)ことでフラグを取得できる。

 Crypto(Cryptography)

 暗号化アルゴリズムやハッシュアルゴリズム、エンコード方式などに関する問題。難読化されたファイルが渡され、それを解析することでフラグが得られる。

 Misc(miscellaneous)

 その他の問題。


CTFの見つけ方

 CTF Timeを参考にするのが良いだろう。

    https://ctftime.org/

 Upcommingのタブを開くと、近日おこなわれるCTFが一覧で表示されている。

 とはいえ、ローカルのCTFなどにおいてはCTF Timeに乗らないものもある。これらについてはTwitterのCTFのタグなどを見ると良いだろう。しばしば情報が出回っている。


参考資料

碓氷利宣, 竹迫良範, 廣田一貴, 保要隆明, 前田優人, 美濃圭佑, 三村聡士, 八木橋優. セキュリティコンテストチャレンジブック : CTFで学ぼう!情報を守る戦い方, 初版, マイナビ出版, 2015, p8-13.