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の設定から、その他のツールのところにあります。
![](https://404background.com/wp-content/uploads/2023/09/6986b2d01b731a51f2e5138b7dbad080.png)
▼例えば私のホームページだとこんな感じ。コメントアウトされているところに、暗号が隠されていたり…
![](https://404background.com/wp-content/uploads/2023/09/f97d48537ae44fe0c8c78b90cc21e48e-1024x565.jpg)
Visual Studio Codeでファイルの差分を表示する
これはCTFというよりも便利な機能ですが、VS Codeで2つのファイルを比較して、どこが違うのかを表示させることができます。
▼検索欄で、 >Compare と入力し、比較したいファイルを選択します。
![](https://404background.com/wp-content/uploads/2023/09/19636fce0337a2ed42c180ae467f811b-1024x281.png)
▼ファイルが横並びになって、差分が表示されます。
![](https://404background.com/wp-content/uploads/2023/09/c68a28da97aced84f4d12f0e514acdda.png)
差分を書き出すと、答えが出てくる問題がありました。
Windowsで付箋を最前面に固定する
差分を書き出すのにメモを取りたかったので、Windowsの付箋を使ってみました。
Microsoft PowerToysで、付箋を最前面に固定すると便利です。
▼アプリのインストールはこちらから
https://apps.microsoft.com/store/detail/microsoft-powertoys/XP89DCGQ3K6VLD
[Ctrl] + [Windowsキー] + [T]で最前面に固定できます。
▼アプリを起動するとこんな感じ。
![](https://404background.com/wp-content/uploads/2023/09/3fd4126176942d9f7a0fb669aa854eb5-1024x647.png)
▼付箋を最前面に固定すると、黒枠で囲まれます。
![](https://404background.com/wp-content/uploads/2023/09/46fb917c5e1a429d73bc7374ed178827-1024x478.png)
最後に
CTFが終了してから、解答例が挙げられています。解けなかった問題の解法を見るのが楽しみです。少し見たところ、いろんな手法があるんだなと感じています。モールス信号をデコードしていたり…
ファイルがあるのは分かるけど、その次の手が分からないということも多かったです。難易度Mediumの問題が1問、Easyの問題がいくつか解けただけで、HardやExpartは太刀打ちできませんでした。
CTFの開催自体は多いので、時々挑戦してみようと思います。
趣味的ロボット研究所をもっと見る
購読すると最新の投稿がメールで送信されます。