あんたいとる

無駄の中に宝がある!

入門セキュリティコンテスト-ーーCTFを解きながら学ぶ実戦技術

CTFとは

Capture The Flagの略で、情報セキュリティ技術を競う競技。

CTFの種類

さまざまな種類があるが代表的なものは以下の2つ。

  • クイズ形式(Jeopardy形式)
  • 攻防戦形式(Attack & Defense形式)

著名なCTF

  • DEF CON CTF
  • picoCTF
  • Google CTF
  • SECCON

問題のジャンル

リバースエンジニアリング

SECCON 2018の「runme.exe」という問題が取り上げられている。
リバースエンジニアリング技術が問われ、逆アセンブラデバッグなどを利用してい解析を行うので、低レイヤの知識が必要。

暗号

SECCON 2015の「Unzip the file」という問題が取り上げられている。
古典暗号や現代暗号の暗号アルゴリズムの知識が必要。

フォレンジック

SECCON 2018の「History」という問題が取り上げられている。
必要とされる知識が多岐にわたる。
各OSのファイルシステムTCP/IPなどのネットワークなど。

Webセキュリティ

SECCON 令和CTFの「reiwaVote」という問題が取り上げられている。
Webアプリケーションとその周辺知識が必要。

ネットワーク

SECCON 2013の「Find the key!」という問題が取り上げられている。 パケット解析や各プロトコルの知識が必要。

Pwnable

SECCON 2017の「baby_stack」という問題が取り上げられている。 プログラミングの知識、プログラム解析のスキルが必要。

Misc

SECCON 2019の「Sandstorm」という問題が取り上げられている。
上記ジャンルに分類できない、その他雑多な問題。

感想など

私のような初心者でも、解説の文章を読めば何とか理解できるレベルの問題が取り上げられているので、タイトルどおりCTFの『入門』にぴったりの内容です。

今後の学習

以下で紹介する書籍で学習するのと、本書で紹介されていた入門者用のCTF(picoCTF)をやってみようと思う。

書籍紹介

私が持っている書籍の中から各ジャンルごとに役立ちそうなものを紹介します。
本書内に著者が「さらに勉強したい人に向けて」として各ジャンルのおすすめ書籍を紹介しているのですが、そこに記載されていたものと結構ダブってます。

Reversing(リバースエンジニアリング

著者が紹介している書籍で私が所持しているものはなかったが、関連しそうな書籍を何冊紹介する。
以前からこの分野に興味はあったので、購入はしているがまだ読めてない。

マルウエアの教科書 増補改訂版

リバースエンジニアリングツールGhidra実践ガイド (Compass Booksシリーズ)

Crypt(暗号関連)

こちらもかなり購入はしているがすべては読めてない。
読んだ中では、結城浩さんの「暗号技術入門 第3版」が分かりやすかった(著者のおすすめ本でもあります)

暗号技術入門 第3版 秘密の国のアリス

図解即戦力 暗号と認証のしくみと理論がこれ1冊でしっかりわかる教科書

現代暗号入門 いかにして秘密は守られるのか (ブルーバックス)

暗号技術のすべて

暗号技術 実践活用ガイド

Pythonでいかにして暗号を破るか

Forensics

おすすめ本として紹介されている「インシデントレスポンス 第3版」については、過去記事で読書メモを書いてます。 shin569.hatenablog.com

また、インシデントレスポンス関連では以下も評価が良いので購入してますがこちらは未読。

詳解 インシデントレスポンス ―現代のサイバー攻撃に対処するデジタルフォレンジックの基礎から実践まで

Web

おすすめ本として紹介されている 体系的に学ぶ 安全なWebアプリケーションの作り方 第2版 脆弱性が生まれる原理と対策の実践 は、一度読んでるが完全には理解できてない。
CTFを実際に解きながら見返す感じで学習するのが良いと思う。

Network

一番業務で扱う分野に近いので、逆に紹介する書籍が難しい。
パケット解析という点だけに絞れば、著者がおすすめしている本もいいいが、 パケットキャプチャの教科書 (Informatics&IDEA) もわかりやすかったのでおすすめ。

Pwnable(Exploit)

著者もおすすめしているが、 Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際 は今まで読んできたセキュリティ関係の書籍の中で一番面白かった。
ただかなり前の書籍になるので今見ると少し内容が古くなっている部分があるかも。
プログラム例がperlで書かれてたりするので、pythonで書き直してみたら勉強になるかもしれません。