セキュリティを学びたくてCTFに入門した話

![advent_calendar_2021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42253/47b8e36d-d729-519e-d4ca-ddca51fe0c59.png)

こちらは[READYFOR Advent Calendar 2021](https://qiita.com/advent-calendar/2021/readyfor)の24日目の記事です。

こんにちは、READYFORエンジニアの@s-moriです。
自分史上、例を見ないラッコブームの到来により、頻繁にラッコの動画を探してはぼーっと眺めて癒される日々を送った年でした。

さてさて本編ですが、「セキュリティ意識大事ですね」と頭では認識しつつ、「何からやろうかな」となったことはないでしょうか。
自分はそのタイプで、徳丸先生の書籍をはじめとするセキュリティ関連の書籍（属性的にWeb寄りの）を読んだりしたものの、いまいち上手く活用できていない感がありました。
書籍に書いてあることは攻撃手法の一部であり、応用した攻撃や、掲載されていない攻撃もあるよな〜アンテナ立てたいけど、どうすればいいんだ〜？のような。
全てを把握したいわけではないけれど、広く・応用が利く知識を付けたいんだよなぁと考えた時に、攻撃する側の気持ちになれると良いのでは？というところに至って手を出したのがCTFでした。

# CTFとは
<iframe src="//www.slideshare.net/slideshow/embed_code/key/LEJ0URxChPcULV" width="595" height="485" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/hiromu1996/ctf-32346373" title="CTFとは" target="_blank">CTFとは</a> </strong> from <strong><a href="https://www.slideshare.net/hiromu1996" target="_blank">Hiromu Yakura</a></strong> </div>
こちらのスライドがわかりやすいので拝借をしつつ（ありがとうございます :pray: ）…。
CTF（Capture The Flag）とは、用意されたWebサイトなどからFlagと呼ばれる情報を探し出したりする旗取り競技です。
出題される問題を解いていくJeopardy形式など、いくつか形式があります。
出題される分野は様々で、Webアプリケーションの脆弱性を利用してフラグを得るものや、暗号を解読してフラグを得るものなどがあります。  
自分は専らJeopardy形式のコンテストに1人で参戦しています。仲間が欲しいです。
いつか誰かが興味を持ってくれたらいいな…チームとか…組めないかな…という希望を込めて、会社のSlackにCTFチャンネルを作り、コンテストの開催情報を流すbotになりきったり、個人のtimesチャンネルでひっそりと参加結果を書き込んでいます。

# CTFはじめの一歩
「よし、CTF入門するか」と思ってコンテストに参加し始めたのが昨年の2020年のこと。
初級者向けのコンテストに突撃して、見事に惨敗します。そりゃそうだ。
この時の自分は「CTFというものがあるらしい」ぐらいの知識です。

当然そのまま突き進むのは無理なので、はじめの一歩として、Web上のコンテンツや書籍を活用して、解法や基礎的なところを学んでいく作戦をとっています。

## とにかく実践
コンテスト自体は期間限定で開催されているものですが、常設のCTFもあります。

* [CpawCTF](https://ctf.cpaw.site/)  
日本語かつ入門者向けの問題もあるので、取り組みやすく、「実際のコンテストってこんな感じなのか」という感覚がつかみやすいです。そして楽しい。
* [picoCTF](https://picoctf.org/)  
中高生向けではありますが、13歳以上であれば誰でも登録・参加できます。  
ちょうど1月〜2月にかけてコンテストが開催されるようです。狙い目ですね。  
picoGymという常設CTFのようなところでは過去のコンテストで出された問題も解けるようになっており、学習用の位置付けになっているようでヒントもあって解きやすく、楽しいです。
* [CTFtime](https://ctftime.org/)  
各国のコンテスト予定が掲載されているので、参加できそうなものを見つけてはふらっと参加しています。  
流石に英語以外は分からないものの、結構開催されているんだなぁということが見て取れるのも楽しいです。

あとは開催情報を見つけては参加したり、コンテスト後に「どう解いたか」を解説するWriteupという記事が公開されていたりするので、公開されているWriteupを読み漁ったりします。

## 書籍で理解しようとする
「実践あるのみ」もつらくなってくるので、下記の書籍も参考にしています。

* [セキュリティコンテストチャレンジブック　CTFで学ぼう！情報を守るための戦い方](https://www.amazon.co.jp/dp/B017X3D3GE)  
通称(?)ハリネズミ本。  
出版から数年経っており書籍の内容丸っと再現が難しいところもありますが、広く「こんな感じか、難しいな」を把握する際に助けられた記憶。  
[セキュリティコンテストのためのCTF問題集](https://www.amazon.co.jp/dp/B074888F88)もあるので、そちらと合わせて見ていました。
* [詳解セキュリティコンテスト](https://www.amazon.co.jp/dp/B094J7ZCJN)  
今年の夏頃に出版された書籍で、最近(やっと)読み始めました。  
正直読み始めなのでまだ触り程度ですが、「どう解いていくと良いか？」というところや「どうしてこの攻撃が通るか？」を把握することができ、理解が進みそうな感覚があります。

## 基礎固め
やっているうちに、やっぱり基礎固めもちゃんとしないとダメだなと思うようになったので、下記のサイトで基礎固めを図っています。
どちらも実行環境が用意されているので、学ぶ→手を動かしながら理解するという流れが作れるので、個人的に重宝しています。

* [Web Security Academy](https://po![advent_calendar_2021.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/42253/00ed8a15-e370-2d66-36a0-559797b5068f.png)
rtswigger.net/web-security)
* [TryHackMe](https://tryhackme.com/)

TryHackMeでは、12月頭から開催されているAdvent of Cyber3にもコソコソと参加しています。
https://tryhackme.com/room/adventofcyber3

とある会社に勤めているエルフさんがクリスマスを守るためにサイバー攻撃と戦う、というストーリー展開に沿って、毎日入門者向けの問題が公開されています。
入門者向けということもあって、同時に公開されるwalkthrough動画がとても親切なので、「何すれば良いんだ…」となってもwalkthroughを見て進めることができます。
Advent of Cyber3以外にもいくつかクリスマスに絡めたセキュリティ関連のイベントを見かけており、この時期のサンタさんやその関連会社は、セキュリティ面も強くなければいけないのか…応援…という気持ちになっています。

そんなAdvent of Cyber3も、残りわずかとなりました。
がんばれエルフさん！負けるなエルフさん！

# CTFを始めて良かったと思うこと
いくつかコンテストに参加しても「今回絶好調だわ」という日と「いや今日もう何もできなかった」という日もあります。
できない時は気分も落ちますが、それでも(無謀な突撃からでも)CTF始めて良かったなぁと思うことの方が多いです。

* 「いつかどこかのコンテストで出るかな〜」という気持ちで、ぼんやりとCVEを眺めるようになる  
「これはどこかで出題されそうかな…？」と思ったものは対策や再現方法を調べたりしています。  
ぼんやり見ている中で、「お、これはうちのサービスは大丈夫かな？」とかが気になるようになってくるので、アンテナが立てられるようになる日が近づいていることを期待しています。
* 「攻撃って何かよくわからないもの」という気持ちが薄くなる（気がする）  
CTFを通して「とある情報を取りに行きたいので、この方法を試す」という一連の流れが繋がるところがあるので、よく見かける攻撃も「何もわからないもの」ではなくなったりします。  
何もわからないものに向き合うのはちょっとした恐怖感も伴うので、1mmぐらいでも知っているに越したことはないかな、ぐらいの感覚です。  
普段バグと向き合う時もそういう気持ちになるはず。  
過去の、実害はないけれど気になったログを思い出しては、「あれはこういう狙いがあったのかな〜」と思いを馳せたりします。  
* 英語を頑張ろうかなという気持ちになる  
普段コード書いたりしていると大体英語に遭遇するのでCTFに限らずですが、手を出し始めると、とにかく英語のオンパレードなので、英語苦手とは言っていられなくなりました。読むしかない。  
これは良い機会かと思って、だいぶあやふやになってしまった文法の復習から始めました。  
一緒に英文の読解力も上がってくれると嬉しいなぁ…と思っています。
* 楽しい  
何かに取り組む上で楽しめるかは割と重要視しているので、結構大事です。  
「セキュリティこわい！攻撃とかこわい！つらい！」の状態だと全く身に入らないと思っているので。

# おわりに
「セキュリティ完全に理解した」「攻撃者の気持ち完全に理解した」とは、まだまだ全然言えないところにいますが、「セキュリティについて学んでいくぞ〜」という気持ちの部分を自分が楽しめる形で作れているので、まあそれは良いスタートかなと思っています。
楽しめることが一番です。
CTFも、各分野について万遍なく弱いという現状があるので、たまに特定分野を強化しつつ、まずは初級レベルを越えられるようにしたいところです。

---

明日12月25日はいよいよ最終日、@itohiro73さんの記事が公開されます！
ぜひ明日の記事もご覧ください。お楽しみに！