CTFはじめました

Kevinrobot34
The Finatext Tech Blog
Jun 4, 2021

--

Photo by Shahadat Rahman on Unsplash

こんにちは、Finatextグループのナウキャスト(最近HPリニューアルしたのでみてね)でデータエンジニアをしているけびんです。

前回はプログラミングコンテストの中でもアルゴリズムの力を競う競プロのTipsを紹介しました。最近CTFと呼ばれるタイプのコンテストにも興味を持ち始めたので、今回はこちらの紹介をしたいと思います!

CTFとは

ご存知ない方もいると思いますが、CTFは ”Capture The Flag” の略で、コンピュータセキュリティの技術や知識を競うコンテストです。どこかに隠されたFlag( ctf{test} 的な文字列 )を探し出し、それを提出することで得点がもらえます。最終的に獲得した総得点を競います。

ジャンル別紹介

いくつかのジャンルについて簡単な紹介と、僕が読んだ参考書を紹介していきます。参考書は基礎知識のキャッチアップという観点で選んだので、直接CTFの問題解説が載っているわけではなかったりしますが、どれも良書でおすすめです!

Crypto
Flagがなんらかの手法で暗号化されており、それを復号できるかが問われるジャンルです。RSAやAES等の理解、さらにはトリッキーなものではQRコードの仕組み等まで扱われます。

まずは『数学ガール』で有名な結城さんの『暗号技術入門』で暗号に関する全体像を学びました。RSA暗号の数学的な背景などを一部キャッチアップするために黄色の『暗号理論入門』も輪読しました(継続中!)。

Binary & Reversing
何らかの実行ファイルが与えられるので、それを様々な手法で解析し、隠されたFlagを見つけ出すというジャンルです。アセンブリが読めないと何もできなかったりしてつらいですが、一方でプログラムをハックしてる感があって楽しいです。

僕はそもそもバイナリ解析の知識が一切なかったので、以下の入門書から始めました。C言語の簡単な読み書きができると進めやすいと思います。

Web / Network
Webの脆弱性を探したり、難読化されたJavaScriptを読んだり、パケットを解析したり、Web/Networkの幅広い知識が問われるジャンルです。

徳丸本は言わずと知れた有名な本でしょう。Web開発を日頃している人であれば一度はお世話になっているのではないでしょうか。Web系の基本的な脆弱性の原理、またそれに基づいた攻撃手法を一通り確認できます。

また、自分はそもそもNetworkに関する基礎知識も不足していたので、Real World HTTPもを読みました。Go言語の勉強にもなっておすすめです!

PPC
Professional Programming and Codingの略で、競プロerの人は活躍しやすいジャンルです。PPC以外でもCTFで競プロの知識が役立つことはたくさんあるようです。皆さんAtCoderやりましょう。前回の記事もぜひ覗いてみてください!

全般

最後はジャンルの紹介ではなく、CTF全般の参考書の紹介です。CTFの参考書といったら以下の通称ハリネズミ本ではないでしょうか。バイナリ解析から、Pwn・ネットワーク・Webまで幅広く扱っています。しかしCTFの勉強を始めたての時には少し難しく感じました。今までに紹介した各ジャンルの参考書を一度軽く読んだ後、ハリネズミ本を読み直すのがおすすめです!

SECCON Beginners CTF 2021に参加してみた!

プロコンはやはりコンテストに実際に参加することで力がつくし、より楽しめるということで、先日開催されたSECCON Beginners CTF 2021に、ナウキャストの有志(@ryohey, @yummydum)で参加してきました!

初参加で分からないことだらけでしたが、最終順位は96位で上位約10%でした!チーム内で僕はCrypto/Reversingを中心に担当して、合計5問解きました。CryptoやReversingはここまで紹介した参考書を読んでいたので、ある程度戦えましたが、Pwnなど対策が甘い分野はまだ手も足も出ず…という結果でした。

暗号理論入門を@yummydumと輪読していたので特にCryptoに力を入れており、終盤は p-8RSA に取り組んでいました。こちらはRSA暗号の亜種を実装したpythonファイルが与えら得ていて、それを踏まえ復号方法を見つけられるかという問題でした(詳細は作問者のwriteupへ)。「フェルマー法による素因数分解」・「RSA暗号の基礎」・「カーマイケルの定理」等の知識が問われたのですが、素因数分解までしかできず、まだまだ実力不足を痛感しました。しかし、いろいろ調べながら試行錯誤して問題に取り組むCTFの楽しさを知ったので、今後もコンテストに参加していこうと思っています!!

おわりに

僕の所属するFinatextグループでは金融領域で様々な事業を展開しており、幅広くエンジニアを募集しております!興味がある方は以下の採用関連ページへアクセスいただくか、@Kevinrobot34まで直接ご連絡ください!

また、6/23(水)にはナウキャストが主催するAirflow2.0に関するイベントがありますのでこちらもぜひ参加してください!!

--

--

Data Scientist, Data Engineer at Nowcast Inc. / Kaggle: Master / AtCoder: Blue