feature image

2020年3月13日 | ブログ記事

CTFを始めよう【新歓ブログリレー2020 5日目】

この記事は、新歓ブログリレー2020 の5日目、3月13日の担当記事です。

15B / 19M の @nari です。この記事では、Capture The Flag という競技を知らない人に向けて紹介したいと思います。

Capture The Flag とは

Capture The Flag、縮めて CTF とは、サイバーセキュリティに関する競技の一つです。

サイバーセキュリティとはサイバーなセキュリティなことで、つまり インターネットやパソコンにまつわる様々な事物に伴う危険因子を未然に防いだりする分野 のことです。最も身近に感じることが出来る例としては、定期的に注意喚起がなされるパスワードの使い回しだとか、今見てるウェブサイトのアドレスバーに表示されてたりする鍵マーク(HTTPS)だとか、パソコンに入れるよう言われているアンチウイルスソフトだとか、そういうことを取り扱っているのがサイバーセキュリティです。

HTTPSを表す図

繰り返しになりますが CTF はこのサイバーセキュリティに関する競技で、目的としてはセキュリティ意識の向上や、セキュリティ技術の習得などが挙げられます。つまりいわゆる 「良いハッカー」 のための競技ですね。

そんな CTF という競技では実際に何が行われているかと言うと……

サーバを攻撃するCTF参加者の図

悪いハッカーになるための練習をします。

「お前は何を言っているんだ」と思うかもしれませんが、 悪いハッカーの視点や攻撃手法を学ぶ ことで、それらが通用しないシステムを作ったり、悪いハッカーより先にバグを見つけて潰しておいたりなど、 最終的には自分たちのシステムを守るため に行っています。敵を知り己を知れば百戦殆うからず、ということですね。

そういうことで、CTF の競技では運営者が予め「攻撃対象となるサービス/プログラム/ファイル」を用意しておき、参加者がそれを解析したりして情報を盗み取る、ということが行われます。一般的な Jeopardy(ジョパディ)方式では、運営者が各システムに「フラグ」と呼ばれる特定の秘密の文字列を埋め込んでおき、参加者はそのフラグを入手して運営者に提出することでスコアを得ます。つまるところ めっちゃ技術を結集した宝探しゲーム です。ネットゲームがタダでやれてサイバーセキュリティの力まで身につくなんて、案外お得なゲーム[1] ですね。

CTFが提供する成功体験の図

注意すべきこととして、あくまでこれは CTF という競技だから攻撃が許可されているだけで、 一般のサービス/プログラム/ファイルに攻撃を仕掛ける行為は法律違反となる可能性があります 。十分気をつけましょう。

一般のサービス/プログラム/ファイルの脆弱性を調査する、という目的で攻撃を仕掛ける人は存在します。例えばバグバウンティという、バグを見つければ報酬金が得られる、という制度などがあったりします。が、これらは十分セキュリティに精通した人でないとうっかり個人情報をゴニョゴニョしちゃうことがあるため、十分注意して行う必要があります。

CTF の概観

ここでは CTF がどういう見た目をした競技なのかをスクリーンショットを交えながら説明することで、実際にどうやって競技が行われるかを解説します。

参加登録をする

CTF では各コンテストごとにまずアカウント作成と参加登録を行う必要があります。参加登録はメールアドレスさえあれば出来ます。

コンテストによってはチーム参加が可能なものもあります(というより大規模なものはほとんどがチーム参加可能です)。是非チームを組んで、相談しながら参加してみてください。

開始を待つ

コンテストの開始を待ちましょう。ちなみにコンテストの期間は、ものによりますが数日単位で行われるものが多いです。コンテスト期間の半分ぐらいまでは新しい問題が徐々に増えていくという形式を取っているものもあります。

問題を見に行く

コンテストが始まったら問題を見に行きましょう。以下は CTFd というオープンソースの CTF フレームワークで作ったサンプルの CTF のスクリーンショットです。

問題一覧

多くの CTF コンテストでは、このようにジャンルごとに問題が並んでいます。それぞれの問題名の下に付いている数字は解いた時に得られるスコアを表しています。

実際に問題を見てみます。

問題例

問題文が出てきます。この問題文から得られる情報を使って、フラグ (FLAG) と呼ばれる文字列を手に入れることが目的となっています。

解く

頑張って解きます。

なお、CTF の問題は問題名自体がヒントになっていることが多いです。何も分からなかったときは、問題名の単語を取り出してググってみるのも大事です。

今回は Caesar からシーザー暗号であることが推測できるので、FLAG{This is flag} がフラグだと分かります。

提出する

先程の画面の Flag の欄に、先程のフラグをペーストして提出をします。

提出例

すると Correct の表示が出て、問題を解くことに成功します。やったね。

このように、問題を読む → フラグを手に入れる → 提出する を繰り返すことでスコアを重ね、スコアの総和でランキングが付けられる、というのが CTF コンテストの流れとなっています。

CTF の問題ジャンル

CTF は一口にサイバーセキュリティと言っても、様々なジャンルが包含されたものになっています。ここでは代表的な問題ジャンルについて説明します(といっても基本的に以下のジャンル以外は見かけません)。

Binary

実行可能なプログラムが渡されるので、それを解析するジャンルです。大きく二種類に分けられ、プログラムをデコンパイル等して挙動を解析する Reverse (略称 Rev)、挙動を解析した上でそのプログラムを乗っ取る操作をする Pwnable (略称 Pwn) / Exploitable (略称 Exploit) があります。

主に機械語やアセンブリ言語、C言語といった比較的低レイヤーな知識が要求されます。Pwn で良く問われる脆弱性としてバッファオーバーフローなどがあります。

Web

Web に関するジャンルです。Web ブラウザや HTML / JavaScript / CSS、更には通信に用いられるプロトコルや Web サーバで動かされているプログラムやデータベースの挙動について問う問題が出ます。

Web ブラウザがあれば解ける問題も多く敷居は低いですが、多くの問題はそれに用いられているフレームワークや言語に関する知識を要求します。調べながら解くと Web に関する知識が身につきます。有名な脆弱性として SQL injection などがあります。

Network

Web の HTTP 通信や USB の通信など、通信に関するジャンルです。HTTP 通信なら Web と複合した問題だったりします。基本的に .pcap という拡張子のファイルが与えられて、Wireshark と呼ばれる定番ソフトで解析するという流れになります。

Forensics

THE 宝探しのようなジャンルで、与えられたファイル群から頑張ってフラグを探すジャンルです。単純にファイルの数がたくさんあったり、イメージファイルが渡されたり、壊れた zip ファイルが渡されたり、何の変哲もない画像が渡されたりします。とにかくファイル形式に関する知識が要求されます。

なお、画像の中に情報を埋め込むジャンルは Steganography (略称 Stegano) と呼ばれることもあります。普通に見える写真の中に実は文字が薄く書かれてる、とかそういうのを解析します。

Cryptography

(略称 Crypto)

暗号に関するジャンルです。先程例に挙げたシーザー暗号のような古典暗号から、現代実用されている実際の暗号方式まで様々な(解読できる)暗号を解読したりします。Forensics が宝探しなら、Crypto は目の前の宝箱をこじ開けるジャンルになります。暗号は主に数学をベースとしたパズルのようなものが多く、数学やプログラムに関する知識を要求します。

Professional Programming and Coding

(略称 PPC)

プログラミングとアルゴリズムに関するジャンルです。一般に競技プログラミングと呼ばれるような問題が出ます。特殊なものもあり、AtCoder とかとは違い手元でプログラムを実行させたり、サーバと通信しながらプログラムを実行させたりします。

Open Source Intelligence / Reconnaissanse

(略称 OSINT / Recon)

ネットストーキングするジャンルです。Twitter などの SNS から得られるような個人情報を聞いてきたりします。

Miscellaneous

(略称 Misc)

「その他」のジャンルです。雑多な知識問題が多く、例えば #! はなんと読むでしょう?みたいな問題があります (ksnctf より引用)。

CTF を始めるには?

CTF は攻撃されるサーバを用意するというコストがかかるため、常設された CTF サーバというものがあまりありません。が、有名な常設 CTF がいくつかあり、入門にピッタリなのでそこから始めるのが良いと思います。

では常設でない CTF コンテストはどうなのかというと、実はほぼ毎週とかそのぐらいのレベルで行われています。が、基本的に海外のコンテストで、主催もバラバラなので非常に多種多様な問題となっています。それらのコンテストをまとめた CTFtime というページがよく参照されています。

CTFtime.org / All about CTF (Capture The Flag)

日本で開催されている CTF として有名なのが SECCON CTF というもので、それを目指すのも良いと思います。その他、毎年開催されている CTF コンテストで有名(主観)なものを以下にいくつか挙げます(2019年のリンクです)。

また、traP では毎年新歓イベントとして CPCTF (競プロとCTFの体験会)[3] を開催しており、入門者に向けた易しめの CTF 問題が多数置かれています。今年も開催予定となっていますので、是非参加してみてください。

終わりに

以上、CTF について紹介しました。

大学に入ってやりたいことを探している人におすすめの競技の一つです。是非参考にしてください。traP には SECCON CTF 2019 International 等のコンテストに参加したメンバーが所属しており、サークル内 SNS で質問したり勉強会を開いたり、またサークルでチームを組んで CTF に参加したりしています。

もちろん traP では CTF 以外にも、パソコンを用いた様々な活動を行っています。きっと面白いと思えるものにも出会えると思いますので、今後のブログリレーもお読みいただけると幸いです。

明日は @0214sh7 さんの記事です。お楽しみに!


  1. NEW GAME! 第2巻 48P 桜ねねのセリフを改変 ↩︎

  2. 参考: https://twitter.com/kotatu0909/status/906857017331007489 ↩︎

  3. Competitive Programming & Capture The Flag の略 ↩︎

nari icon
この記事を書いた人
nari

競プロ(C++) / CTF(Crypto/PPC) / ゲーム作成(C++/Java/JavaScript) 参加プロジェクト: Traps of Typing(プログラマ) / Polar Snow Fantasy(プログラマ)

この記事をシェア

このエントリーをはてなブックマークに追加
共有

関連する記事

2020年5月15日
【新歓ゲーム制作特集 第2弾】Inverse製作秘話
Saltn icon Saltn
2019年4月22日
アセンブリを読んでみよう【新歓ブログリレー2019 45日目】
eiya icon eiya
2020年5月19日
【新歓ゲーム制作特集 第6弾】個人でゲームを作る話
Facish icon Facish
2020年5月1日
爆☆誕 traQ-S【新歓ブログリレー2020 54日目】
spa icon spa
2020年4月12日
Growl Bassの研究【新歓ブログリレー2020 35日目】
fomalhaut icon fomalhaut
2020年4月6日
はじめてのドット絵
xxpoxx icon xxpoxx
記事一覧 タグ一覧 Google アナリティクスについて