はじめに
「セキュリティの知識を、もっと楽しく学べたらな〜」
そんなことを思っていたある日、CTF(Capture The Flag)という存在を知りました。
実際にチャレンジしてみたら思った以上に楽しく、そして実践的に学べたので、今回はその体験をネタバレなしでまとめてみました。
この記事を通して、CTFに興味を持つ方が一人でも増えたらうれしいです。
実施環境
特別な準備はしておらず、途中からDockerで仮想環境を用意しました。
なぜ仮想環境を用意したのか?
M1 Macを使っているのですが、CTFの一部課題では想定された動作環境と異なるため、コマンドの出力が異なる・進めないといった問題が発生しました。
常設CTFによってローカル環境の利用有無が異なるので、「最初に作っておく」のも、「必要になったタイミングで作る」のもどちらでも問題ありません。
使用したDockerfile
参考程度にどうぞ
FROM ubuntu:latest
RUN apt-get update && apt-get install -y gcc-multilib gdb-multiarch
COPY ./ /home/ubuntu/
WORKDIR /home/ubuntu/
CMD [“/bin/bash”]
CTFとは?
CTFとは “Capture The Flag” の略で、情報セキュリティに関する技術を駆使して「Flag(=隠された情報)」を見つけ出す競技形式のゲームです。
主に以下の2つの形式があります。
-
クイズ形式(Jeopardy):セキュリティの穴を探り、Flagと呼ばれる文字列を見つけて提出する形式
-
攻防戦形式(Attack & Defense):自チームのサーバーを防御しながら、相手チームのサーバーを攻撃する形式
主な出題ジャンル
-
Reversing:バイナリ解析
-
Pwning:脆弱性を突いた攻撃(バッファオーバーフローなど)
-
Web:Webアプリケーションの脆弱性を突く
-
Cryptography:暗号の解析
-
Forensics:ディスク・メモリなどの解析
-
Steganography:メディアファイルに隠された情報を見つける
この他にも大会によって上記以外の様々なジャンルがあります。
まずは「常設CTF」で気軽にチャレンジ
「大会」と聞くと身構えてしまうかもしれませんが、学ぶだけであれば大会に出場する必要はなく常設で遊べるCTFがたくさんあります。
今回は以下の2つを体験してみました。
XSS Game
👉 XSS game|https://xss-game.appspot.com/
名前の通り、XSS(クロスサイトスクリプティング)に特化したCTFです。
海外のサイトで英語で表記されていますが、難易度はそれほど高くなくJavaScriptの alert()
を実行させるのが主な目的です。
特に気に入ったのが、Hintが段階的に表示される点です。
一気に答えを見せられるのではなく、少しずつヒントが明らかになるので、考える余地があって楽しいです。
自分からヒントを見る癖に、すぐに答えがわかってしまうと萎えてしまうややこしい性格の私にはとても嬉しいですね。
全6問。最終問題はかなり手こずりましたが、公式ドキュメントをたくさん読み直してようやく突破できました。
知らないことを知ることができる良い常設CTFでした。
CpawCTF
👉 CpawCTF|https://ctf.cpaw.site/
常設CTFを調べると、必ずといっていいほど出てくる定番サイトです。
幅広いジャンルを扱っており、以下のような出題があります。
- Reversing : 実行ファイルを解析する問題
- Pwn : サーバプログラムが持つ脆弱性をつく問題
- Web : Webに関する問題。Webアプリケーションが持つ脆弱性をつく問題が多い。
- Crypto : 暗号を解読する問題
- Network : ネットワークの通信を解析する問題
- Forensics : 与えらたファイルを解析する問題
- Steganography : あるデータに隠蔽されたデータを探す問題
- PPC (Professional Programming and Coding) : プログラミングを使って解く問題
- Recon : ある特定の人物を調査する問題
- Misc : 上記のジャンルに当てはまらないコンピュータの雑学、練習問題
レベル1から始まり、レベル4まで(*)存在しています。
私は現在レベル3の途中で止まっていますが、全クリを目指してコツコツ進めていく予定です。
* 自分はレベル4がありそうな表記が見えているなか、記事によってはレベル3まであるという記述を見かけるのでどこまであるのか不明(クリアしたらここの情報を更新します)
印象的だった問題は「Q17. [Recon] Who am I ?」というもので、他の技術系問題のプログラム書いたり…アプリやコマンドで解析したり…とは違い、調査・推理が求められる内容でした。
こうした多様なアプローチが必要になるのもCTFの面白さだと感じました。
進捗
まとめ
CTFは、遊び感覚でセキュリティを学べる非常に面白い学習手段だと思いました。
私自身、学生時代はノートに書いて覚えるタイプだったので、”手を動かしながら覚える” というスタイルが自分に合っていると再認識でき、そんな私に向いている実践的形式で試行錯誤しながら学んだことで、知識が定着しやすく感じます。
時間制限もなく、自分のペースで学べるのも良いポイントです。
これにより”知っている” から “使える” へと一歩近づける気がします。
本来は競技の練習用サイトではあるのですが、セキュリティ意識の高まりが求められる今だからこそ、こうした手段を通じて楽しみながらスキルアップしていきたいですね。
「ちょっと試してみようかな」と思った人、私と同じ実践形式で学びたい派の人は、ぜひCTFで遊んでみてください!