CTFを始めるときのTips

この記事は, OIT Advent Calendar 2019の21日目の記事です.

目次


はじめに


CTFを触ったことがない人を対象としています.
CTFを始めるまでのハードルを下げることを目的にしています.
記事の信憑性については保証できません.

CTF(Capture The Flag)とは


なんらかの脆弱性やら設定不備やらを突いてFlagと呼ばれる文字列を手に入れる競技.
Jeopardy形式とAttack&Defense形式があるが一般的にはJeopardy形式を指すことが多い.
(オンラインコンテストや常設サイトはJeopardyがほとんどのため)

  • Jeopardy形式
    クイズ形式.

  • Attack&Defense形式
    基本的にはオフラインコンテスト.
    各チームごとに与えられたコンピュータに対して攻撃と防御を行う形式.
    派生系にKing of the Hill形式がある. この記事では触れない.

必要とされる知識


Computer Scienceを完全理解していると良い.
出題範囲はコンテストによって異なるが, 多くのサイトで以下のジャンルが出題されることが多い.

  • Reversing
    実行ファイルの挙動を解析する.
    アセンブリ言語や実行ファイルフォーマットの知識など.

  • Web
    任意の脆弱性を持つWebページを攻撃する.
    Web系言語やWebのセキュリティ機構の知識など.

  • Pwnable
    実行ファイルの脆弱性を突く.
    Reversingの知識や実行ファイルのセキュリティ機構の知識など.

  • Crypto
    暗号.
    数学や暗号の脆弱性に関する知識など.

  • Forensics
    与えられたファイルを解析し隠されたデータを抽出する.
    OSに関する知識など.

  • Misc
    どのジャンルにも分類されない問題.

すべてのジャンルをマスターするのは厳しいので, 多くの人間は担当するジャンルを絞っていることが多い.
初めは色々なジャンルに手を出して得意なジャンルを探すと良い気がする.

常設サイト


オンラインコンテストは難易度が不透明なことが多く, 初めは常設サイトでCTFに慣れるのが良い.
cpawCTFpicoCTFは簡単な問題が多いのでおすすめ.

CTFでは無いがLinuxコマンドの練習としてOverTheWire Banditもおすすめ.

ある程度CTFに慣れてきたら

など

オンラインコンテスト


基本的に期間限定のコンテスト.
CTFtimeのCalendarを見ていれば大体のオンラインコンテストは見逃さない.
CTFtimeにチーム登録すると参加したコンテストの順位に応じてレートが付いたりする.

多くのコンテストは終了後一定期間を経てコンテストサイトが閉じるので, 問題と問題ファイルはDLしておいたほうが良い.

コンテストが終了すると多くの人間がWriteup(解法)をアップロードするので, それを読みながら復習すると良い.

CTF環境を作る


環境としてLinuxとWindowsの両方があったほうが良いと思う.
(exeが降ってきたときにWindowsが無いと実行できない.逆も然り.)

環境が汚れたり, マルウェアだったりすると面倒なので仮想マシンに環境を作ったほうが良い.

始めるにあたって最低限必要になりそうなツールの紹介だけ.

  • Reversing
    IDA, Ghidraなどのリバースエンジニアリングツール
    gdb-peda等のデバッガ
    dnSpy等のデコンパイラ

  • Web
    Burp Suite, Fiddlerなどのプロキシツール
    CookieやUserAgentを変更できるブラウザプラグイン

  • Pwnable
    radare2等のリバースエンジニアリングフレームワーク
    checksec等のセキュリティ機構調査ツール
    rp++等のROP Gadget解析ツール
    socat等のプロキシツール
    gdb-peda等のデバッガ
    pwntools等のライブラリ

  • Crypto
    紙とペン

  • Forensics
    Volatility等のメモリフォレンジックツール
    FTK imgaer, Autopsy, The Sleuth Kit等のディスクフォレンジックツール
    青い空を見上げればいつもそこに白い猫(汎用ファイルアナライザ)
    bviやstirling等のバイナリエディタ
    Wireshark等のネットワーク・アナライザ

あとは必要に応じて追加していく.

便利なサイト


  • CyberChef
    各種エンコード, デコードなど.
    エンコードされてるっぽい文字列があればCyberChefのMagicに突っ込むといい感じにデコードしてくれる.

  • Post HTTTP Requests Online
    HTTP request各種をWeb上で作って投げれる.

  • RequestBin
    一時的にHTTP requestを記録してくれる.
    WebのXSS問題でadminのcookieを奪うときなどに利用する.
    (本来, 自前のサーバを公開してそこにアクセスさせる.)

思い出したら追記する.

おすすめ書籍