CTF とは
CTFとは、Capture The Flag のイニシャリズムで、直訳だと旗取りゲームになります。
情報セキュリティの分野において、専門知識や技術を用いて、何らかの方法で隠されているFlag(答え)を見つけ出し、時間内に獲得したスコアで点数を競う、ハッキングコンテストや大会のことを指すようです。
情報セキュリティ分野に対する敷居を下げ、クイズなどのゲーム感覚で参加してもらうことで、セキュリティ分野でスキルアップ、キャリアアップを目指してもらおうという趣旨のようですね。アメリカで開催されるDEFCONが規模的にも有名なようで、日本ではSECCONなどが開催されています。
クイズを解く形式のものと、攻防戦形式のものがあるようですが、今回はクイズ形式のほうについて書いていきます。
CTF をやってみる
兎にも角にも、ひとまず触れてみるのが最初の一歩としてよいかと思います。というわけで、CTFを実際にやってみることができるサイトを調べてみました。
CELTF
fealoneさんという方が個人で開発されているCTFの練習サイトです。日本語で作られていて、2025年もロードマップが敷かれています。
CTFの説明や、問題のヒント・解説などしっかりと作られていて、日本語という点もとっかかりやすくておすすめです。
CpawCTF
法政大学生中心のプログラミングサークルCpawが作成したCTFです。こちらも日本語で、かつかなり入門向けのものから用意されているのでおすすめです。
ただ、Twitter(X)含め2019年から更新されていないようです。
picoCTF
中高生向けのCTFサイトです。英語です。毎年1~3月あたりにコンテストが開催されています。
picoGymという常設のもので過去のコンテストも解け、常設CTFの中では問題の数が最も多く、難易度の幅も広いようです。
規模としてかなり大きいため、検索で解説も見つけやすく「CTF 問題名 Writeup」で簡単に見つかるようです。
おまけ:CTFtime
各国のCTF情報が見られます。最も大きいCTFのプラットフォームらしく、イベント・コンテストやチーム、レートなどの様々な管理を行っています。
CTF のジャンル
CTFでは様々な分野から問題が出題されます。ここにある以外にも、独自のジャンルを設けているところもあるので、参考程度にご覧ください。
| ジャンル | 分野 | 概要 |
|---|---|---|
| Web | Webアプリケーションセキュリティ | SQLインジェクション、XSS、CSRFなど、Webサイトの脆弱性を突いてFlagを取得する問題 |
| Crypto | 暗号技術 | シーザー暗号、RSA暗号、AES暗号など、暗号文を解読したり、暗号アルゴリズムの脆弱性を見つけたりする問題。数学的な知識が求められることも多い |
| Reversing (Rev) | リバースエンジニアリング | 実行可能ファイル(バイナリ)を解析し、プログラムの動作や隠されたロジック(パスワードなど)を特定する問題 |
| Pwnable (Pwn) | プログラムの脆弱性攻撃 | C/C++などで書かれたプログラムの脆弱性(バッファオーバーフローなど)を突き、システムの制御を奪ったり、シェル権限を取得したりする問題 |
| Forensics | デジタルフォレンジック | ネットワークパケット(通信ログ)、ディスクイメージ、メモリダンプなどのデジタル証拠を分析し、隠された情報や手がかりを特定する問題 |
| Steganography | ステガノグラフィ | 画像、音声、ファイルなどに、一見して分からないように埋め込まれた秘密の情報(Flag)を見つけ出す問題 |
| Network | ネットワークセキュリティ | 通信プロトコルやネットワーク設定に関する問題、または与えられたパケットキャプチャファイル(pcap)を解析して情報を抽出する問題 |
| OSINT | オープンソースインテリジェンス | 一般に公開されている情報源(SNS、Webサイト、ニュースなど)を駆使して、特定の人や組織に関する情報を収集・分析する問題 |
| Misc | その他 (Miscellaneous) | 上記のどのカテゴリにも分類しにくい、パズル、クイズ、プログラミング、IoT関連など、多様な分野を扱う問題 |
例題
今回は全くの初心者でもなんとなく見えてくる、暗号問題の例題を解いてみましょう。
暗号の問題
Wklv lv d vdpsoh FWI xvlqj Fdhvdu flskhu.
IODJ{vdpsoh-fdhvdu-flskhu}
CTFでは、最初に説明した通り、FLAGを探すことになります。そうでないものもありますが、隠されているFLAG{hoge-fuga}という形式を見つけるものが割と用意されている印象です。
上の文字列を見て、なんとなーく見えてきませんか?
例題の答え
IODJが、なんとなーくFLAGと関わりがありそうに見えますね。
その通りです!
これは暗号について知らなくてもなんとなく皆考えたことがあるであろう、文字をずらす暗号です。「あいうえお」の50音を1文字ずつずらして、「いうえおか」から始まる50音表を作るように、「ABC」から始まるアルファベットを3文字ずらして「DEF」から始まるようにするというのが、この問題の答えでした。
FLAGから1文字ずつずらしていきます。
「FLAG」→「GMBH」→「HNCI」→「IODJ」
3文字ずらすと、「FLAG」から「IODJ」が導かれましたね。
この調子で全文直します。めんどくさい方はでコードしてくれるサイトを使ってみてください。
Wklv lv d vdpsoh FWI xvlqj Fdhvdu flskhu.
IODJ{vdpsoh-fdhvdu-flskhu}
This is a sample CTF using Caesar cipher.
FLAG{sample-caesar-cipher}
この場合、FLAG{sample-caesar-cipher}をサイトに用意されている解答欄から提出し、合っていればスコアとなります。
ちなみに、この3文字ずらす暗号については、シーザー暗号という名前が付いています。恥ずかしながら、自分はCTFに触れるまで名前が付いているのを知りませんでした。
CTFを(少しだけど)やってみて
暗号の問題もあれば、ソースコード上のもの、通信によるもの、パスワードの総当たり、脆弱性を利用したものなどなど、様々な知識が必要そうでした。ジャンルを見てみてもかなり前提となる知識が必要な感じがしたので、最初のほうは答えありきでどんなところを注意してみていけばいいのか、どんな考え方やツールがあるのかを知るところから始めるといいかもしれません。
他にも、CVE(共通脆弱性識別子)を日本語で掲載してくれているJVN iPediaや、そのCVEをもとにしたナレッジベースのMITRE ATT&CKなども参考にしながら、どのような攻撃が想定され、どのように対策すべきかという知見を集めていきたいと思います。
最近の脆弱性の問題への対策や、ホワイトハッカー的なのを目指したい方は、ぜひCTFをやってみてはいかがでしょうか。