ctfを始めてから1か月が経った
ので書きました。
pwnにはまりました。
何故始めたのか、何が面白いのか
a
るくすさんから、高専プロコンに参加した際等にセキュリティやctfに関する話を聞いて、面白いと思ったのが大きい。 具体的には、
- stackには関数の戻りアドレスが積まれているが、これを適切に書き換え連鎖させることで、継続渡しのように攻撃コードを構成する技法(return-oriented programming)がある。
- asciiの表示可能な文字の範囲内のみしか送れない等の制約を満たして攻撃コードを送るため、命令に縛りのあるコーディングがなされることがある。
- データにメタデータを紐付けながらエミュレートしてデータの流れを解析する技法(taint解析)があるが、これを回避する手法としてbrainfuckにおける加算に酷似した手法がある。
- 形式証明が脆弱性の発見のために用いられている。 (例: OpenSSL)
といった話に惹かれた。元々私の興味のあった範囲とかなり被っていた。 実際、ctfをやっていて得た知識を元にesolangの記事がひとつ書けた。
b
特に最初にまともに参加したctfは、SECCONのオンライン予選であった。 集まった人々でチームを組んで一緒に参加しよう、という集りが家から遠くない場所であり、これに参加した。 感じたこととして、
- 問題の幅がかなり広いので、既存の知識が十分通用する問題が少なからずあり、解けるので楽しい。
- チームで解いたので、全然分からなくてもけっこう楽しい。
実際、ctfはflagをcaptureする問題である。 セキュリティが関係している必要はないので、クイズのような問題や、気合でひたすら作業しても解ける問題もあった。 決して簡単な問題ではないが、まったくプログラミングができなくても解けるような問題もあった。
特に、このSECCONの後からctfの問題を解きだした。 ちょうど1か月前である。
c
特に競技プログラミングに慣れている人に関して、ctfには競プロそのもののような問題も多く、全体として似ているので有利である。 既存の知識が使えることと新しい範囲であるため、解ける問題がどんどん増えていくのでかなり楽しく感じられるだろう。
まとめ
- 分野そのものが面白い
- 解けるので楽しい
- 競技屋におすすめ
どうやって精進すると良さそうか
書籍
- セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方
- かなり初歩的
- といってもこの本の範囲の知識があれば、村人Bを倒せないということもない
- Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際
- そこそこ詳しめ
競技プログラミングであれば蟻本が1冊あれば、少なくともイエローコーダーになるには十分であるが、 ctfに関しては知識の比重がかなり重いため、これさえあれば十分という本はないように見える。
過去問
過去問は以下にまとまっている。
writeupを書く文化があるので、検索すれば解説が出てくるので安心。 知らなければ解けないような問題は多いので、一通り調べてみて方針が立たないようなら解説を見るべき、ということである。
また、pwn良問集(bata氏による)があるので、これを埋めていくとよさそう。
常設
オンラインジャッジのように、常時解答を受け付けているctfが存在する。 ただし、常設のものに関しては解答の公開を控える文化があるので、解けそうにない問題に挑戦するのは時間を浪費するだけに終わる危険がある。
- http://cpaw.spica.bz/
- 初心者にかなり易しい
- http://ksnctf.sweetduet.info/
- 有名所
コンテスト
短期のctfの開催の情報が登録されるサイトがあるので、これを見て参加すればよい。 どのコンテストもチームでの登録を要求するが、単独でチームを作って参加してもまったく問題ないので、気軽に参加するとよさそう。
また、ちょうど今(Thu Jan 7 2016)開催中の長期のctfとして次がある。
道具
- gdb-peda
- gdbのpromptがとても豪華になる
- pwnlib
- pwnに便利なpython2のlibrary
- http://pwntools.readthedocs.org/en/2.2/
- rp++
- rop-gadgetを探してくれる