CTF初心者による初心者のためのForensics入門


#  前置き
この記事はforensicsに関する専門的なものではなく、ctfに挑戦してみたいけどforensicsに関することが何もわからないという人に向けた入門記事です。細かい部分は間違っていたりもすると思うので、全体の流れやまずとりあえず何をしたらいいかの確認にご利用ください。


# 目次

1.フォレンジック(forensics)とは
2.ctfで問題を解く時の流れ
3.よく使うlinuxコマンド、ツール
4.問題を解く様子


# 1. フォレンジック(forensics)とは

そもそもFrorensicsとは犯罪捜査や法医学の鑑識などを表す言葉で、そこからIT用語では電磁的記録の証拠保全や調査・分析などを行う事を指します。

平たく言えば **メモリやファイルを調査してサイバー犯罪の証拠を掴むことです** 

法医学と分けるため、デジタルフォレンジックとも呼ばれます。ここではctfのジャンルとしてのフォレンジックについて述べるため、単にforensicsと表記します。

CTFでは簡単のためファイルやメモリの中身をみて、犯罪の証拠ではなくフラグを探すという流れになります。

まるで探偵のようでワクワクしますね。

# 2. CTFで問題を解く流れ
ではCTFでは実際にどの用に問題を解いていく流れを説明します。

先ほど述べたようにフォレンジックの目的はファイルなどを解説してフラグを探すことです。

しかしながらファイルといっても様々な種類があります。.txtのようなテキストファイルから.pngのような画像、音声やメモリダンプなど様々です。ですのでそれぞれにあったフラグの探し方が必要となります。

仮に.txtのような拡張子がついていれば一目でファイルの中身が分かるのですが、CTFでは多くのファイルで拡張子が隠されていたり凡庸的なものに変わっていたりします。ですので大抵の問題ではまずファイルが何なのかを調べるところから始まります。

ファイルの調べ方
1. 実行してみる
2. 問題から推測する
3. Linuxコマンドで調べる

1.ができれば一番手っ取り早いです。しかしながらうまくいかないことも多いです。2.は題名や問題文からファイルを推測することです。うまくいけば素早くファイルを特定できますがこれまた成功率は低いです。結局3.で調べることが多いです。慣れてしまうと寧ろこっちのほうが簡単と思えるので、積極的に使って身につけましょう。詳しいコマンドは後ほど紹介します。


ファイルがわかったら後はそのファイルにあった方法でファイルを探すだけです。(それが大変)
ここからはぶっちゃけ解き方を知っているかが問われるので、自分で〇〇ファイル、CTFとググったりしてwriteUpなどを見たりファイルそのものについて調べるほうが手っ取り早いです。
ですのでここでは典型的なものをいくつか紹介します。
- バイナリファイルなど特に特徴のないファイル
- 画像ファイル
- メモリダンプ
- パケットファイル

バイナリファイルなどはstringsコマンドなどを用いいて直接中身を覗いたり、exiftoolを用いたファイル情報の確認、ファイルに隠されたフォルダがないか調べる。またこれらで得られた16進数を変換してフラグの文字列を入手する。

画像ファイルは上記の方法に加えて、ステガノグラフィーと呼ばれるファイルのバイナリデータの一部を書き換え画像内にデータを隠す手法がある。それ用のサイトやツールを用いてバイナリデータをいじってみるとフラグが見つかる。

メモリダンプはどのメモリか特定してしまえばそのメモリについて調べると簡単に出てくる。
例えばRDPビットマップキャッシュをと呼ばれるキャッシュファイルは、BMC-Toolsという専用のファイルをダウンロードすると画像データを取り出す事ができる。またisoファイルも専用のツールを用いて隠しファイルや画像ファイルを抽出できる。

パケットファイルはネットワークに分類されることもあるが、wiresharkなどを用いれば16進数にダンプされた中身が確認できたり、ネットワークのやり取りを復元する事ができる。

上記の方法はあくまで簡単な問題に対するアプローチであり、より高度な問題は専門的な知識や目で見てバイナリデータから不審なところを探すような経験の要る問題になっていることがある。あくまで初歩的な問題に対するものであると認識しておいて欲しい。

# 3.よく使うコマンドやツール
コマンド
- file :ファイルの隠された拡張子など、どのようなファイルかを調べる
- strings :バイナリファイル内の可読部分を文字列にして出力する
- exiftool　:画像などから詳細情報やメタデータを得る
- binwalk　:ファイルの中に隠されたファイルを見つける事ができる
- foremost　:ファイル内のデータを抽出、復元する
- [dencode.com](https://dencode.com/)　:大体の変換されたものはデコード可能。もっとカスタマイズできるのもあるが割愛
- [aperisove.com](https://www.aperisolve.com/)　:ステガノグラフィーに有効。ただしwindowsあるならうさみみハリケーンのほうが優秀

# 4. 実際に問題を解く様子
1. picoctfのinformationという問題を解く。
    1. まずサイトからファイルをダウンロード![スクリーンショット 2024-08-12 23.41.08.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853234/c4462f0c-194d-ebbb-3b0a-329105d59a3d.png)
    2. するとこのような画像が出てくる。
![cat.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853234/873ae36b-402a-8b38-3d32-e6f0562683d6.jpeg)
    3. 先程のコマンドを上から順にやってみる。するとライセンスの部分に怪しげな文字列が出てくる。
![スクリーンショット 2024-08-12 23.49.33.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853234/fbb44da1-d6df-d0e0-0686-60ccd36a97b0.png)
    4. dencode.comで全てに設定し、UTF-8から順にやってみる
    ![スクリーンショット 2024-08-12 23.56.07.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853234/1647bc89-a1cc-057e-2b77-9287fc13d1cf.png)
無事にフラグが得られた。
    

# おまけ  
先日開催されたwaniCTFの問題を用いて解説します。waniCTFの問題自体は気が向けばまたwriteUpを投稿しようと思います。

    1. fileコマンドを用いてみるとdataとしか出なかったが、stringsコマンドを用いてマジックナンバーを特定するとrdp8bpmとわかる
    
    2. 問題になにかしらのキャッシュファイルとあるので、与えられたbinファイルはRDPのキャッシュファイルと予想できる
    3. RDPビットマップキャッシュを解析するため、BMC-Toolsをダウンロードし画像データを取り出す
    4. macやiphoneでは見れないのでwindowsに転送する
    5. 画像の中にフラグらしきものの断片が見つかるのでそれらをつなぎ合わせる

このようにしてフラグが得られた

実際の画像ファイルの断片
![IMG_8132.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3853234/afaebed0-e5b3-8eff-de4f-a62250b58f2e.jpeg)