CTFに挑戦してみる その1(PatriotCTF 2023)

はじめに

 今回はCTF(Capture The Flag)という、セキュリティコンテストに挑戦してみたというお話です。図書館でCTFの本を見つけて、面白そうだったので参加してみました。セキュリティやプログラミング、コンピュータ関連の謎解きといった感じでした。

 本を読むだけでなく、まずは実践!と思って挑みましたが、さすがに難しかったです。セキュリティ関係は専門ではありません。

 ロボットとは全然関係ない分野に思えますが、将来的にはロボットにもセキュリティ対策を施したいところです。攻殻機動隊を見ながら作業していたら、ローカルならまだしもインターネットに繋げると危険なのでは?というのが気になっています。

▼CTFのホームページはこちら

https://ctftime.org/

▼過去の問題について、その解答例がWriteupとして公開されています。

https://ctftime.org/writeups

CTF関連の書籍

 私は2冊の本を読みながら、ネットでも情報を収集しているところです。CTFに参加してみて、分野が広いうえに専門的だと感じました。すべてをまとめた情報源があるとは思えません。様々な手段で知識を広げ、深めていく必要があるでしょう。

▼プログラミング言語、アセンブリ言語、暗号、攻撃手法などの概要が書かれた本です。分厚い本ですが、辞書みたいに使うのがいいと思います。

▼解析の手法と、そのために使うツールが紹介されている本です。実際に解くときの足掛かりになるかと思います。

ファイルを16進数で出力する

 16進数で出力できるコマンドがあったので、Linux環境で実行してみました。Raspberry Pi 400で実行しています。

 画像ファイルを16進数で表示すると、キーワードが隠されていたりしました。ちなみに、Windowsでpng形式などのファイルをメモ帳で開くと、文字化けしていました。

▼xxdを使うために、vimをインストールしました。

 sudo apt install vim

▼16進数で出力するコマンドの例。

 xxd 画像.png

▼grepコマンドで検索することもできます。

 xxd 画像.png | grep flag

jarファイルを逆コンパイルする

 jarファイルは、Javaのファイル形式の1つです。Java ARchiveの略だそうですね。

▼こちらの資料が詳しいです。

https://docs.oracle.com/javase/jp/7/technotes/guides/jar/jarGuide.html

 普段はJavaで開発をしているのですが、jarファイルを開くのにJD-GUIを使っていました。今回のCTFでも、jarファイルを逆コンパイルして解く問題がありました。

▼JD-GUIのページはこちら

http://java-decompiler.github.io/

 ファイルを開いてみると文字列をエンコードするプログラムだったので、デコードを試したりしているうちに解けました。

▼こちらの記事でも紹介しているのですが、Replitというブラウザでプログラムを実行できる開発環境があります。Javaのプログラムはこちらで試しました。他の言語も実行できます。

Replit: the collaborative browser based IDE - Replit

これからプログラミングを学びたい方へ(実行環境、書籍の紹介)

 ここでは、これからプログラミングを学びたい方に向けた情報をまとめています。最近はコードを書かないものもありますが、コードを書くものを紹介します。  プログラミ…

Windowsでelfファイルを解析する

 elfファイルはLinuxの実行形式だそうです。問題として配布されているファイルにはフォーマットが指定されていないものもあったのですが、fileコマンドで確認できました。elfファイルのものが多かったです。

 今回は書籍でも紹介されていた逆アセンブラであるIDAを使ってみました。

▼ダウンロードページはこちら

https://hex-rays.com/ida-free/#download

 逆アセンブルしてみると、プログラムの流れが分かるようになっていました。アセンブラ言語の記述もありますが、フローが分かりやすく表示されます。

 中身は見れたものの、その後どうやって解くのかが分からなかったです。明らかに解答が書かれていそうなファイル名を見つけたのですが...

Googleのデベロッパーツールを使う

 Webページに隠された暗号を見つける問題がありました。今回はGoogle Chromeのデベロッパーツールを使いました。HTMLの要素を見ることができます。

 Consoleから関数を呼び出して、プログラムを実行することもできました。正解の暗号だったらtrueを返す関数に、引数を渡してチェックするのに使いました。

▼Google Chromeの設定から、その他のツールのところにあります。

▼例えば私のホームページだとこんな感じ。コメントアウトされているところに、暗号が隠されていたり...

Visual Studio Codeでファイルの差分を表示する

 これはCTFというよりも便利な機能ですが、VS Codeで2つのファイルを比較して、どこが違うのかを表示させることができます。

▼検索欄で、 >Compare と入力し、比較したいファイルを選択します。

▼ファイルが横並びになって、差分が表示されます。

 差分を書き出すと、答えが出てくる問題がありました。

Windowsで付箋を最前面に固定する

 差分を書き出すのにメモを取りたかったので、Windowsの付箋を使ってみました。

 Microsoft PowerToysで、付箋を最前面に固定すると便利です。

▼アプリのインストールはこちらから

https://apps.microsoft.com/store/detail/microsoft-powertoys/XP89DCGQ3K6VLD

 [Ctrl] + [Windowsキー] + [T]で最前面に固定できます。

▼アプリを起動するとこんな感じ。

▼付箋を最前面に固定すると、黒枠で囲まれます。

最後に

 CTFが終了してから、解答例が挙げられています。解けなかった問題の解法を見るのが楽しみです。少し見たところ、いろんな手法があるんだなと感じています。モールス信号をデコードしていたり...

 ファイルがあるのは分かるけど、その次の手が分からないということも多かったです。難易度Mediumの問題が1問、Easyの問題がいくつか解けただけで、HardやExpartは太刀打ちできませんでした。

 CTFの開催自体は多いので、時々挑戦してみようと思います。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です