CTF(Capture The Flag)のすゝめ

こんにちは!Hayasakaからバトンを受け取ったM2のはまでぃ~です。
今回、私が趣味で行っているCTFについて紹介できればと思います。CTFとはCapture The Flagの略語で、端的に言えば、アプリやプログラムの中にある脆弱性をつき、答えにあたるFlagを見つけ出す競技のことです。
Flagを探し当てた個数とその速さによってポイントがもらえ、その総合得点を競います。
私がCTFを始めた理由は研究室の同期から教えてもらったからで、当時アルゴリズム系の競技プログラミング(AtCoder等)を触っていたこともあり、セキュリティ版もあるよといった感じで教えてもらいました。
今継続しているモチベーションとしては、私自身暗号の研究を行っているのですが、暗号以外のセキュリティの攻撃手法としてどんなものがあるかにも興味があるため、幅広く学ぶ導入として続けています。

さて、CTFには問題のジャンルがいくつかあり、Web, Forensic, Reversing, Cryptography, Pwnableなどなど様々あります。私の研究分一番近いのはCryptography(暗号)です。英語では分かりにくいと思うので、ざっくりとした解説をしてみます。
Web
おそらく皆さんにとって最もなじみ深いWebアプリケーションに対する脆弱性をつく種類です。HTML,CSS,JavaScript等に含まれることもあるし、Webアプリケーションとサーバーの通信方法に含まれることもあります。
Cryptography
訳は”暗号”です。Flagがある暗号化(復号)プログラムによって暗号化されています。その暗号文と暗号化に使った値、暗号化プログラムが与えられるため、その情報から元のFlagを復元します。
Reversing
この問題では何かしらのプログラムファイルが与えられます。どうすればそのファイルからFlagを見つけ出せるか、を紐解きながら解きます。初心者向きで多いのはCプログラムの実行可能ファイルを渡されるため、様々なツールを駆使して元のCプログラムを解読する、といったものです。別の言語の実行可能ファイルであることも多いです。
Forensic
何かしらのファイルが与えられます。Reversingと違う点はプログラムであるかどうか・脆弱性の種類で、Forensicでは種類が多種多様・脆弱性というよりファイルの中に隠してあることが多いです。ネットワークの通信ログ(.pcap)、写真や画像(png, jpeg)、等です。そのファイルの種類によってツールを使いこなし、またどの辺りに隠せるかを考察しながら解いていきます。
Pwnable
リモートサーバーにアクセスし、そのサーバーの脆弱性をつく攻撃を行うことで権限を奪い、Flagを取得します。CTFの花形種目。

ざっくりとした紹介をさせて頂きましたが、いかがでしょうか。
筆者自身もそれほど解ける存在ではないため、詳しく理解できていない分野もあります。
もし今回の紹介で少しでも興味が湧いたなら、ぜひ一度挑戦してみてはいかがでしょうか。

CTFを始めたばかりの人たちが陥りやすい状態として、そもそも解くためのとっかかりが分からない、できると思ったけど全然解法が違った…、となる人が大半だと思います。
私の主観ですが、最初の内は分からない問題に時間をかけすぎず解答を見て考え方、視点をどんどん学んでいくことがおすすめです!
身もふたもない言い方かもしれませんが、こういった知識と実践の両方がバランス良く必要な場面では、ある程度知識を付けたらとにかく場数を踏むことが大事だと考えています。
多くの経験によって、昔解いた問題と同じ解き方が出来そう!といった、勘のような鋭さが次第に身についてくると思います。
また、ChatGPTなど大いに活用してください。私も全然使います。
自分のペース、やり方にあった勉強法でできるとモチベが保てて良いですね!

最後に、一人でも多くの人がCTFを楽しんでくれたらうれしいです!

次はだっちです、お楽しみに!