きなこもち。

セキュリティとかCTFとか色々書いてます(´・ω・`)

CTF初心者が考えるCTF入門

2020/5/3 記事を書いて1年以上経ったので、大幅に加筆&修正いたしました。

 

どうも、きなこです(´・ω・`)

 

先日ツイートしたCTF初心者についての内容がちょっとばかり反響があったこと、そして、私自身がCTFに関して右も左も分からない状態から、ある程度経験を積んだことにより、簡単な問題なら解けるようになったので、今日はCTF初心者から考えた、CTF初心者向けの学習の道筋を書こうと思います(´・ω・`)

 

 

ちなみに私はSECCON等各種大会に出場経験は一切ありません(´・ω・`)デタイ

 

 

 

読者対象

  • CTFに興味があるけど何をしたらいいか分からない人
  • いわゆるハリネズミ本を購入してみたものの、よくわからずCTFを投げた人
  • 身の回りでCTF for beginnersのようなイベントが開かれない地域に住んでいる人

 

 

1.まず敵を知る

CTF初心者がまずすべきことは、CTFをよく知ることです。

野球をプレイするには、野球のルールを知らなければなりません。

それと同じで、まずはCTFのルールやジャンルを知りましょう。

 

CTFのジャンルに関しては、後に参考になる本やリンクと共に詳しく解説しているので、このまま読み進めてください。

ルールに関してはググってね(´・ω・`)

 

 

また、初心者の方はいわゆるハリネズミ本( セキュリティコンテストチャレンジブックという本 )↓を読むといいかもしれません・・・が、この本はいきなりBinaryとPwnという、初心者が前提知識0で読むと意味不明の分野(後述)から説明しているので、かつての私のような右も左も分からない初心者は「CTF難しすぎる・・・諦めよう」となりかねません(´;ω;`)

 

そういった事態を避けるためにも、後述するcpawCTFなどである程度経験を積んでから読むことをおすすめします。

 

 

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

セキュリティコンテストチャレンジブック -CTFで学ぼう! 情報を守るための戦い方-

 

 ( いわゆるハリネズミ本。私は大学3年の春に購入しましたが、その難易度からすぐに投げ、1年経った現在やっと6割くらいは分かるようになりました。。。 )

 

 

 

CTFで出題されるジャンル(と個人的な偏見)

Cryptography( Crypto )

  • 暗号に関する問題。簡単なものでシーザー暗号、難しいものでは数学の深い知識(数論)が要求されるものもある。
  • 各種暗号はネット上に解いてくれるWebサイト・ツールが転がっているので、素直に使った方が楽。でもコード書いても勉強になる。

 

--参考書籍--

 

暗号技術入門

暗号技術入門 第3版

暗号技術入門 第3版

 

- アリスとボブ。全て理解する必要はないと思います。

 

 

暗号技術のすべて 

暗号技術のすべて

暗号技術のすべて

 
  •  「ハッカーの学校」「ハッキングラボの作り方」で有名なIPUSIRONさんによる、暗号論のテキストです
  • 読者対象に、「CTFのCrypto分野を得点源にしたい人」との記述がありましたので、紹介しておきます(暗号のみならず、乱数やHTTPSの仕組みまで解説してあります!)
  • 余談ですが、意外と本が柔らかい(?)です

 

 

 はじめての数論

はじめての数論 原著第3版 発見と証明の大航海‐ピタゴラスの定理から楕円曲線まで

はじめての数論 原著第3版 発見と証明の大航海‐ピタゴラスの定理から楕円曲線まで

 
  • 中高生向けに書かれた初等整数論のテキストです。
  • 中身はバリバリの数学書なので、読み終えるにはそれなりに時間をかける必要があります

 

 

Network

  • ネットワークに関する問題。Wiresharkを使ったパケット解析など。
  • 暗号化が施されていない通信プロトコルからフラッグを見つける初歩的な問題を解いていくのが王道。
  • この記事を書いて早一年、野良CTFではあまり見かけなくなった印象...(出題されてもUSBのパケット解析が多いような?)
  • 個人的にこのページが大変参考になりました。

CTF ネットワーク問題の基本問題(1) - namdicul's blog

 

--参考書籍--

 

マスタリングTCP/IP-入門編-(第6版)

  • 言わずと知れたマスタリング本。1年前は第5版が最新でしたが、新版が出たので刷新。
  • パケット解析だけなら、次に紹介するパケットキャプチャの教科書のほうが詳しいです 

 

 

パケットキャプチャの教科書

パケットキャプチャの教科書 (Informatics&IDEA)

パケットキャプチャの教科書 (Informatics&IDEA)

 
  • Wiresharkを用いたパケット解析の本。
  • 結構ボリュームが多いです。L2からL7まで解説しているので、マスタリング本に劣らずプロトコルの勉強には有用

 

 

Binary Exploitation(Bin) & Reversing(Rev)

  • BinはBinary Exploitation。バイナリファイルを解析するジャンル
  • RevはReversingで、リバースエンジニアリングに関するジャンルです
  • StringsコマンドでFLAGが手に入るもの簡単なものから、かなり経験を積んだ人しか解けないようなものもある。
  • C言語アセンブリ言語の知識が前提。加えて、メモリやレジスタの知識も要求される。
  • WindowsのexeファイルからLinuxのelfファイルなどによって諸々異なるので、覚えることやや多し。 
  • RevではIDAやGhidra、gdbを用いた解析がメイン。ツールの使い方を習得することが必要で、問題を解く準備期間が長くかかるかもしれない(が、後述する資料があれば大丈夫!)

 

--参考書籍--

 

冴えないIDAの育て方

booth.pm

 

 リバースエンジニアリングツールGhidra実践ガイド

  • ↑の冴えないIDAの育て方の著者様が最近出版した、Ghidraというリバーシングツールを解説した本
  • まだ買ってないのですが、Boothの本がこの本の出版に伴いリンク切れとなったので差し替え 

 

 

Hacking: 美しき策謀

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

Hacking: 美しき策謀 第2版 ―脆弱性攻撃の理論と実際

 
  •  言わずと知れた策謀本。
  •  64bit環境がデフォとなった今、再現できないコードがやや多いですが、用いるテクニックなどは今と変わらないので一読しておいて損はないです

 

 

リバースエンジニアリングバイブル

リバースエンジニアリングバイブル ~コード再創造の美学~

リバースエンジニアリングバイブル ~コード再創造の美学~

 
  • 第1章のアセンブリの章だけでも初心者は読む価値あり。私はこの本でアセンブリ言語を勉強しました
  • PEヘッダなどexeファイルの解析なども載っています。

 

書籍以外にも、以下のスライドが参考になるかも知れません(; ・`ω・´)

CTF for ビギナーズ バイナリ講習資料

 

 

Web Exploitation(Web)

  • Webセキュリティに関する問題。
  • クライアントサイドの問題と、サーバサイドの問題に二分できる。
  • クライアントサイドでは、XSSJavaScriptの難読化などがメイン。
  • サーバサイドはSQLインジェクションパストラバーサル、JWTなどのセッション関連、XXEなどなど列挙するには多すぎるほどジャンルが多いです...
  • よって解くに当たって求められる言語の知識が多く、JavaScriptからPHPPerlSQLなどの知識が求められます。
  • それ以外にも、各データベースの差異、言語の関数の特徴などなど。しかし、解いていくうちに慣れるので心配しなくてOKです

 

--参考書籍--

 

体系的に学ぶ 安全なWebアプリケーションの作り方(第2版) 

  • 業界では知らない人はいない、通称徳丸本。
  • PHPで書かれていますが、スラスラ読むことができると思います。PHPが不安な方は独習PHP 第3版あたりを読んでおけば無問題!(; ・`ω・´)
  • 初版ではなく第2版を買いましょう

 

XSSを学ぶのに有用な教材(無料)

 

Pwn

  • プログラムの脆弱性を突く分野(エクスプロイトする、とも言う)。
  • 世間一般の人々が想像するハッカーがやってることに最も近いイメージで、かつ難易度がとても高い(; ・`ω・´)
  • Reversingなどの他分野の知識がかなり要求されるので、初心者がpwnから入るのはおすすめしない。
  • Pwnが解ける人はかっこいい

 

このSlideshareのスライドが大変わかりやすく参考になると思います

PWNの超入門 大和セキュリティ神戸 2018-03-25

 

Pwnの基礎固めとしておすすめのかたわれさんのブログ↓kataware.hatenablog.jp

  • 完全に余談ですが、1年前の5月はISPで夜間のサーバ監視のバイトをしていて、眠らなければ何してもOKだったのでこのかたわれさんのret2libcやret2pltの記事を写経していた思い出があります...あれから1年か。。。 

 

 

 

--参考書籍--

 

コンピュータハイジャッキング

コンピュータハイジャッキング

コンピュータハイジャッキング

 
  •  64bitのLinux環境を用いて、初歩的なバッファオーバーフローからシェルコードの仕組み、リバースシェルの貼り方まで解説した本。
  • Pwn系の書籍に比べると内容が新しいので、策謀本やる前にこれを読むことを強く推奨します
  • 誤植がやや見受けられる&本自体がなぜか脆いです

 

Malleus CTF Pwn

bookwalker.jp

  • ksnctfで有名なkusanoさんの本。簡単なBOFはもちろん、one_gadgetなどを用いたExploitなどをわかりやすく解説しています
  • heap問まで収録している。 

 

Forensics

  • フォレンジック。データから情報を抜き出しFLAGを探します。
  • fileコマンドでファイルの種類を調べたり、時には画像ファイルをバイナリエディタにぶち込んだりしてFLAGが紛れてないか調べます。
  • このQiitaの記事に載っている知識で結構解けます

qiita.com

 

 

 

 Forensicsにはステガノグラフィー(Steganography)と呼ばれる分野が含まれており、以下のページが大変参考になります。

digitaltravesia.jp

 

OSINT(Open Source INTelligence)

  • オシント。公開されている情報をもとに、個人を特定したり。ネットストーキング。
  • OSINTメインのCTFなどもあるらしい。
  • 野良CTFではほぼ見ないです。

 

Miscellaneous (Misc)

  • 雑多を意味する。上記に該当しない問題。
  • base64系とか、難読化シェル系が多い印象。

 

--参考書籍--

 

難読化シェル芸の世界 

難読化シェル芸の世界 ~Bashとすてきな難読化~ (プレミアムブックス版)

難読化シェル芸の世界 ~Bashとすてきな難読化~ (プレミアムブックス版)

  • 作者:kanata
  • 発売日: 2019/04/24
  • メディア: 単行本(ソフトカバー)
 
  • SECCON CTFで作問にも携わっているkanataさんの本。
  • (ごめんなさい、難読化シェルどころかシェルスクリプトのすら勉強していないのでまだ読めてないです...)
  • 当ブログを紹介してくださっているkanataさんリスペクト(; ・`ω・´)

 

 

 

今は全て覚える必要はなく、後述の常設CTFで問題を解きつつ覚えていきましょう。

 

 

 

 2.常設CTFで経験を積む

常設CTFとは、いつでもCTFの問題に挑戦できるWebサイトのことです。

 

常設CTFは国内から海外のものまで様々な種類があり、国内で有名なのはksnctfでしょうか。

 

 

 

 

 

 

 

 

 

 

 

初心者はまずcpawCTFを解きましょう。

初心者はまずcpawCTFを解きましょう。

初心者はまずcpawCTFを解きましょう。

 

 

 

 

 

 

 

 

 

 

・・・マジで。(´・ω・`)

 

 

 

 

 

 

 

 

 

 

 

私が人生で初めて挑戦したのはksnctfでしたが...

 

私の珍エピソード:村人A ( ksnctfにはVillager Aという有名な問題がある )

CTF超強い人「ksnctfの村人Aという問題おすすめですよ」

私「はい!解いてみます!」

 

 

 

 

 

 

私「」

(当時sshやncコマンドすら知らなかった私はそもそもリモートサーバに接続することも困難でした笑)

 

 

 

 

...お恥ずかしながら、この記事を書いていた当時はksnctfの問題はほぼ解けておりませんでした(´;ω;`)

なので、白紙の状態からCTFを始めた人が、これらの常設CTFの問題が解けずにCTFに取り組むこと自体を諦めないためにも、まず初心者向けに作られているcpawCTFから始めることを強く勧めます。

 

cpawCTF→CpawCTF - Main page

 

ksnctf→ksnctf

 

 

 

ちなみに、cpawCTFをだいたい解き終わり、次のステージに進みたい方は、海外の常設CTFになりますがpicoCTFに進むのがオススメです。

 

picoCTFは各問題にヒントが付いており、またCTFに必須ないくつかの技術、

例えば前述したncコマンドを用いたリモートサーバへのアクセスだとか、Binary分野を解く際に必要なstringsコマンドやForensicに必須のexiftoolコマンドの習得を目的とした問題がたくさん用意されているので、解きつつ必須の知識を学べるという初心者にとっては非常によいサイトだと思っています( ・`ω・´)

 

 

さらに、picoCTFに関してはYoutubeにwriteupをほぼ全てアップしている外国人の方がいらっしゃるので(英語も聞き取りやすい!)、詰まったらYoutubeに駆け込みましょう(; ・`ω・´)

 

また、kusuwadaさんという方がブログの方で詳細なwriteupを書いてくださっているので、ギブアップのときは参考にしてくださいね(´・ω・`)

 

picoCTF→picoCTF - CMU Cybersecurity Competition - Homepage

 

kusuwadaさんのブログ「好奇心の足跡」↓

kusuwada.hatenablog.com

 

3.最後に 

どうしても解けない問題に直面した場合は、素直に答え(writeup)を見ながら解いてもいいと思います。

 

答えからどうやって解くかを学び、次似たような問題が出た時に瞬殺できるようになることができれば、それでいいと思います(´・ω・`)

 

自分のレベルにあった常設CTFを解きつつ、並行してCTFに関連する知識を積み上げていけば、必ずレベルアップすると思っています!(´^ω^`)

 

↓個人的なCTFや競プロに対する考え方↓

 

初心者のうちは、定石をひたすら頭に叩き込んで、あとは組み合わせていけばそれなりに解けるようになると思っています(´・ω・`)

 

つまり基本が大事ということですね(´-ω-`)

 

 

 

 

 

 

それではよいCTFライフを!(´^ω^`) 

 

 

 

 

 

 

おわり

 

 

 Twitter:

twitter.com