CTFに関するアレコレをまとめてみた

CTFアカデミックチーム「[KUDoS](https://ctftime.org/team/71813)」のLorseです。

CTFについて、必要な知識と役に立つ本やサイトをまとめました。

Rev,Netはチームメンバーのあくあんさん(@Aquan_Investor)に書いていただきました。

# そもそもCTFって何？
CTFとはCapture The Flagの略で、情報セキュリティの技術を競う競技です。
Jeopardy（クイズ）形式とAttack&Defence形式の2つがありますが、主に開催されるのはJeopardy形式のものです。

Jeopardy形式では問題がいくつかのジャンルに分けられており、メンバーが得意ジャンルを解いて、チームの合計点を競います。
今から各ジャンルの解説をしつつ、本やサイトを紹介していきます。

# Crypto
暗号に関する問題です。
有名なシーザー暗号も出てくることがあります。

## 必要な知識・ツール
### 暗号
当然と言えば当然ですが、暗号に関する知識が必要です。
問題として出てくる暗号の種類は結構多いので、どの暗号が使われているかを判断できるようになるといいでしょう。

### 数学
暗号を解読する際に数学の知識が必要になります。主に整数論などの離散数学。
特にRSAの原理について理解できる程度の数学力は必要です。(と言っても高校数学レベルですが)

### Python
暗号を解読する際によく使われます。
もちろん別の言語でもいいのですが、解読コードを検索するとPythonで書かれていることが多いので、Pythonを使っていると非常に楽です。

### [Sage](http://doc.sagemath.org/html/ja/tutorial/index.html)
離散対数問題などを解く際に使えるソフトウェア

## 本・サイト
### [秘密の国のアリス](https://www.amazon.co.jp/dp/B015643CPE/)
「数学ガール」の結城浩先生が書かれた本です。
CTFに必要な暗号の知識の多くが書かれています。

# Web
Web系の問題。一番身近に感じるジャンルだと思います。
必要な知識の幅がかなり広いです。

## 必要な知識・ツール
### PHP
Web問では高確率でPHPのコードもくっついてきます。このコードの中に脆弱性があることがほとんどなので、PHPの知識が必須です。

### JavaScript
こちらもPHP同様に高確率でくっついてきます。JavaScriptの脆弱性をついたり、XSSをしかけるために書く必要があるため、必須です。

### SQL
SQLインジェクションもよく出るため、必須です。

### OSコマンド
OSコマンドインジェクションをしかけるために必須です。

### Chrome
Web問を解く時はChromeを使うととても楽です。F12で出てくるデベロッパーツールの機能が必須です。

### ローカルプロキシツール(BurpSuite,Fiddler)
Webサーバとブラウザ間の通信内容の確認や変更ができます。

### Nikto
脆弱性診断ツール
XSSやSQLインジェクションなどの脆弱性があるか確認できます。

### sqlmap
SQLインジェクションの脆弱性を調べてくれます。

## 本・サイト
### [体系的に学ぶ 安全なWebアプリケーションの作り方](https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E7%AC%AC2%E7%89%88-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8/dp/4797393165)
通称:徳丸本
Web問に必要な知識が書かれており、具体的な攻撃方法も載っているため、これを一周読むだけでもある程度戦えるようになります。
ただ、約700ページとかなり分厚いので、一周したらあとは辞書として使うといいでしょう。

# Rev
与えられた実行ファイルなどを解析してFlagをゲットする問題。単純なものだとファイルを読むだけですが、実行ファイルの逆アセンブル解読やそこからメモリに格納された内容を読むなど、アーキテクチャ・CPU寄りの問題も出たりします。

## 必要な知識・ツール

### Linux環境

渡されるファイルにはELF(Linuxで実行されるファイル)などがあり、解析をする上でもLinux環境は好き勝手にいじって壊れたらやり直す、ということが可能なのでLinuxは用意すべきでしょう。VirturalBoxなど仮想環境を使うのがオススメ。

### アセンブリ言語などの知識

逆アセンブルされたファイルの読み解きにはアセンブリ言語の基本的な知識が必要です。「セキュリティコンテストチャレンジブック」や「Hacking:美しき策謀」などを参考にすると良いと思います。

### 簡単なプログラミング

1000パターンくらいを試すみたいなこともあるので、簡単なプログラミングはできた方がいいです(といってもCTFに興味がある人はプログラミングできそうだけど)。

### dnSpy
.NETのデコンパイラ
使いやすいし機能もすごい

### IDA
逆アセンブラツール。無料のFREEバージョンで構いません。

# Pwn
(後ほど追記)

# Foren
画像やログ、ディスクイメージの中からフラグを探します。
体系的に学べる本は無いので常設や過去イベントの問題を解いたり、Writeupを読むといいでしょう。

## 必要な知識・ツール
### steganography
視覚復号型秘密分散法などの画像を使った暗号方式を知らないと解けません。

### ファイルシステム
ディスクイメージの中からフラグを探す場合、どの情報がどこのファイルにあるかを知ってる必要があります。

### FTK Imager
ディスクイメージからファイルを探すことができます。
マウントして探し出してもいいのですが、渡されるイメージファイルが破損してる場合、マウントすることはできません。
このツールだと破損していても探すことが出来ます。

### KaniReg
レジストリファイルを読むためのツール

### GIMP
画像が複数レイヤーの場合、GIMPを使って開くのが手っ取り早いです。

### binwalk


### steghide

# Network

主に.pcapというパケットキャプチャファイルを読み解く(パケット解析)といった問題です。

## 必要な知識・ツール

### Wireshark

神。pcapファイルを解析して色々なことができます。インストールしましょう。

### TCP/IPの知識

ネットワークの問題なので当然出てきます。といってもTCPやIPレイヤが大雑把にどんなことをやっているのかということと、HTTPやFTPなどアプリケーションレイヤの動きを知っていればやっていくうちにわかると思います。

## 本・サイト

### [実践パケット解析](https://www.amazon.co.jp/dp/4873118441/ref=cm_sw_r_tw_dp_U_x_XLcnCbJVFHV3W)

Wiresharkを使ったパケット解析の基本的なことが書いてあります。

### [マスタリングTCP/IP 入門編](https://www.amazon.co.jp/dp/4274068765/ref=cm_sw_r_tw_dp_U_x_NNcnCb8W99XTT )

ネットワーク界の聖書です。TCP/IPの基本がほぼ全て書いてあり、応用編や各種の発展的な話題が網羅された続編も出版されています。

# 共通
### [セキュリティコンテストのためのCTF問題集](https://www.amazon.co.jp/dp/4839962138/)
実際に問題を解く時のアプローチ方法を知ることができます。
ただし、ある程度の知識があることが前提です。

### [Hacking:美しき策謀](https://www.amazon.co.jp/dp/4873115140/ref=cm_sw_r_tw_dp_U_x_AQcnCb157PF2P)

少し難しめの本ですが、実行環境が公式ページでUbuntuとして配布されており手を動かしながら様々なセキュリティの話題を学ぶことができます。

# 最後に
CTFは敷居が高く、なかなか最初の一歩が踏み出せないと思います。
しかし、やってみるとやりごたえがあり、自力で解けた時の喜びはとても大きいです。

ジャンルが多く、1人だとどこから手をつければいいのか、そもそも何を勉強したらいいのかわからないと思います。
私たちKUDoSはそのような初心者の方の最初の一歩のきっかけになれたらいいな、と考えています。

チームメンバーはいつでも募集していますので、気軽にリクエストを送ってください。
https://ctftime.org/team/71813