CTFに挑戦してみる その1(PatriotCTF 2023)
はじめに
今回はCTF(Capture The Flag)という、セキュリティコンテストに挑戦してみたというお話です。図書館でCTFの本を見つけて、面白そうだったので参加してみました。セキュリティやプログラミング、コンピュータ関連の謎解きといった感じでした。
本を読むだけでなく、まずは実践!と思って挑みましたが、さすがに難しかったです。セキュリティ関係は専門ではありません。
ロボットとは全然関係ない分野に思えますが、将来的にはロボットにもセキュリティ対策を施したいところです。攻殻機動隊を見ながら作業していたら、ローカルならまだしもインターネットに繋げると危険なのでは?というのが気になっています。
▼CTFのホームページはこちら
▼過去の問題について、その解答例がWriteupとして公開されています。
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の開催自体は多いので、時々挑戦してみようと思います。