setodaNote CTFらいとっぷ(フォレンジックの旅)

はじめに

フォレンジック特にディスクイメージ解析をあほほど解きたくなって探した末に見つけたsetodaNoteCTFを解きたいと思いました。writeupというより、解いた道筋を書いていますので、最短距離を知りたい人にとっては意味わからないものかもしれません。ご了承ください。begginerのお戯れと思って暖かく見守っていただければ幸いです。フォレンジックをメインにやっていこおうと思っています。また、研究室の友人や海外のctfプレイヤーがgithub上でwriteupを公開しているので、そちらをやってみたいとも思いますので、githubにチャレンジするかもしれません。

開閉

morse_one

30 友人から「秘密のメッセージを送るね」とあるテキストファイルが送られてきました。どうやらそのままでは読めないようです。添付されたファイルを解析し、秘密のメッセージを見つけ出してください。

フラグは得られた文字列を flag{} で囲んで答えてください。フラグに英字が含まれている場合はすべて大文字で答えてください。例えば得られた文字列が Flag の場合は flag{FLAG} となります。
ということで、何かしらのzipファイルを渡された。解凍して出てきたファイルを解析していく。

└─# file morse_one.txt
morse_one.txt: ASCII text, with no line terminators
└─# strings morse_one.txt
DDDBSDDSBDDDSDBDSBBBSDBBDSDBDDSDSBDDB

という感じ。なかなかに意味不明。morseがモールスのようだ。モールス信号に関係しているのかな?(モールス符号)を参考にした。4拍の組み合わせでメッセージを伝えるものなのかな。でも、37音が送られているのはひっかかる。でも、・、ー、 、の三つを表していると考えられる。わからないのでまた今度。

paint_flag

50 要調査対象者の端末からあるファイルを押収することに成功しました。どうやら外部の協力者に機密データを送ろうとしたようです。組織内の監視網をかいくぐるため、一見すると機密データが含まれていなかのように加工がされているようです。ファイルを解析して機密データを取得してください。

添付されたファイルを解析し、フラグを入手してください。
unzipするとwordファイルを渡された。

└─# file paint_flag.docx
paint_flag.docx: Microsoft Word 2007+

拡張子と実際の形式に違いはない。実行して開くのは怖いので、どう解析していきましょうか。unzipしてみましょうか。

└─# unzip paint_flag.docx
Archive:  paint_flag.docx
  inflating: docProps/app.xml
  inflating: docProps/core.xml
  inflating: word/document.xml
  inflating: word/fontTable.xml
  inflating: word/media/flag.png
  inflating: word/media/image1.png
  inflating: word/settings.xml
  inflating: word/styles.xml
  inflating: word/theme/theme1.xml
  inflating: word/webSettings.xml
  inflating: word/_rels/document.xml.rels
  inflating: [Content_Types].xml
  inflating: _rels/.rels

flag.pngというものがある。怪しい。見たら答えあり。終了。道のりはわかりやすい問題でした。

Mail

50 あなたはメールデータの調査を依頼されました。組織内の要員が規定に反して組織内のデータを個人利用のクラウドサービスにバックアップとしてコピーしていたもののようです。メールデータに機密情報が含まれていないか、調査してください。

添付されたファイルを解析し、フラグを得てください。
ということでまずはunzip。

└─# unzip mail_0805f895cca0c713b0fa499b1671d4948bae4172.zip
Archive:  mail_0805f895cca0c713b0fa499b1671d4948bae4172.zip
   creating: ImapMail/
   creating: ImapMail/mail.setodanote.net/
  inflating: ImapMail/mail.setodanote.net.msf
  inflating: ImapMail/mail.setodanote.net/Archives.msf
  inflating: ImapMail/mail.setodanote.net/Drafts.msf
  inflating: ImapMail/mail.setodanote.net/filterlog.html
  inflating: ImapMail/mail.setodanote.net/INBOX
  inflating: ImapMail/mail.setodanote.net/INBOX.msf
  inflating: ImapMail/mail.setodanote.net/Junk.msf
 extracting: ImapMail/mail.setodanote.net/msgFilterRules.dat
  inflating: ImapMail/mail.setodanote.net/Sent-1
  inflating: ImapMail/mail.setodanote.net/Sent-1.msf
  inflating: ImapMail/mail.setodanote.net/Sent.msf
  inflating: ImapMail/mail.setodanote.net/Templates.msf
  inflating: ImapMail/mail.setodanote.net/Trash.msf

ImapMailというものが渡された。

知識(ImapMail)
ImapMail (IMAP と POP とは何ですか。)を参考にした。「IMAP を使用すると、任意のデバイスから、どこにいてもメールにアクセスできます。」ということのようだ。

また、.msfファイルが目立つ。これは何だ。

知識(msfファイル)
msfファイル (拡張子「.msf」のファイルとは?開く方法をご紹介!)を見た。「Mozilla Thunderbirdのインデックスファイル」だそうです。

インデックスにめぼしい情報がなさそうなので、そのほかのファイルを見ていく。└─# cat Sent-1をしたらアカリとステラのやり取りが載っていた。

Content-Type: application/x-zip-compressed;
 name="kimitsu.zip"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
 filename="kimitsu.zip"

その中でkimitsu.zipというものを添付している模様。
この記述ののちに以下のような文字列から始まる超絶長い文字列がある。

UEsDBBQAAAAIAEKk8lIYGu97DhgHAG8YBwALAAAAZ29vZGpvYi5wbmdUumN3JUy0Rrtj27Zt

これをcyberchefに投げると

base64エンコードされているが、PKというマジックんばんばーが見える。つまり、zipの内容がそこに書かれているようだ。これを抽出しないといけないのかな?厳しい。がやるしかない。Sent-1を編集して、base64エンコードされてる部分だけのファイルを作り、└─# strings Sent-1.txt | tr -d '\n' | base64 -d > kimitsu.zipとすると

└─# file kimitsu.zip
kimitsu.zip: Zip archive data, at least v2.0 to extract, compression method=deflat

しっかり、zipファイルが完成する。あとはそれをunzipすると

└─# unzip kimitsu.zip
Archive:  kimitsu.zip
  inflating: goodjob.png

怪しいpngファイルが手に入るので、それを見ればflagゲット。終了。

Deletedfile

80 そのファイルを削除した刹那、あなたはそれが誤りだったと悟ります。どうやら重要なファイルが削除されてしまったようです。あなたはディスクのイメージファイルの入手に成功しました。削除されてしまったファイルを復元し、窮地を脱してください。

添付されたファイルを解析し、フラグを得てください。
念願のディスクイメージをいただいた。解析解析。

└─# file deletedfile.raw
deletedfile.raw: DOS/MBR boot sector MS-MBR Windows 7 english at offset 0x163 "Invalid partition table" at offset 0x17b "Error loading operating system" at offset 0x19a "Missing operating system"; partition 1 : ID=0xee, start-CHS (0x0,0,2), end-CHS (0x0,254,63), startsector 1, 4294967295 sectors

windows7のデータのようだ。

└─# mmls deletedfile.raw
GUID Partition Table (EFI)
Offset Sector: 0
Units are in 512-byte sectors

      Slot      Start        End          Length       Description
000:  Meta      0000000000   0000000000   0000000001   Safety Table
001:  -------   0000000000   0000000127   0000000128   Unallocated
002:  Meta      0000000001   0000000001   0000000001   GPT Header
003:  Meta      0000000002   0000000033   0000000032   Partition Table
004:  000       0000000128   0000016511   0000016384   Basic data partition
005:  -------   0000016512   0000020479   0000003968   Unallocated
└─# fsstat deletedfile.raw -o 128
FILE SYSTEM INFORMATION
--------------------------------------------
File System Type: FAT12

FAT12ファイルシステムを使っているようだ。調べたらいろいろ学べそうだが、sutopsyにぶち込んだら。復元されている削除したファイルが見つかったので、終了。

Timeline

100 君はタイムライン機能を知っているかね。ベンチに腰かけた老紳士がこちらに向かって話しかけてきます。あまり使われてはいないようだがね。老紳士はそう話を続けながら正面に向き直りため息をつきます。だが、完全に消えてしまう前にどんなアーティファクトであったか確かめてみてもいいとは思わんかね。そういって老紳士は1枚のディスクをあなたに手渡すと、静かに去っていきました。どうやらディスクを解析する必要があるようです。

添付のファイルを解析し、フラグを入手してください。

└─# unzip timeline_12296f199f1eb1c6d327a469af6b8e4fd8b83374.zip
Archive:  timeline_12296f199f1eb1c6d327a469af6b8e4fd8b83374.zip
   creating: C/
   creating: C/Users/
   creating: C/Users/stella/
   creating: C/Users/stella/AppData/
   creating: C/Users/stella/AppData/Local/
   creating: C/Users/stella/AppData/Local/ConnectedDevicesPlatform/
   creating: C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/
  inflating: C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db
  inflating: C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db-shm
  inflating: C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db-wal

ということで、Cドライブの中をもらったような感じ。一番下の階層にあるActivitiesCache.dbについての記事があった。

知識(タイムライン(ActivitiesCache.db))
タイムライン(ActivitiesCache.db) (Windowsタイムライン(ActivitiesCache.db)の解析方法)を参考にした。ActivitiesCache.dbを解析することで、「端末上でどんな操作が行われたか」を知ることができるようだ。

何かしらのツールで解析する方が良いようなことが書かれていた。一応、ActivitiesCache.dbはSQLiteDBなので、それを解析するツールでもできそうな気はするが。WindowsTimeline parserを使ってみる。

読み込んだ。よく見ていると}.txtというものがメモ帳で作られている。flagのにおい。下に見ていくとflagを分割してファイル名にしているようだ。CUIでまとめてみる。WxTCmdを使ってもcsvにするだけなので、それならWindowsTimeline parserで見た方が自身は好きかも。CUIならdbファイルをそのままstringsすればよい気がする。時間変化を気にするならWxTCmdもいいのかもしれない。CUIでいい感じに抽出しようとしたができなので手打ちしてflagゲット。

browser_db

100 調査対象者のパソコンから Web ブラウザの情報を取得しました。ファイルを解析して調査対象者が怪しい行動をしていないか調査するのが今回のあなたの仕事です。

添付されたファイルを解析し、フラグを得てください。
stella_9s84jetw.default-release_places.sqliteというファイルを与えられた。

└─# file stella_9s84jetw.default-release_places.sqlite
stella_9s84jetw.default-release_places.sqlite: SQLite 3.x database, user version 54, last written using SQLite version 3035004, page size 32768, writer version 2, read version 2, file counter 2, database pages 37, cookie 0x1f, schema 4, UTF-8, version-valid-for 2

SQLite 3.x databaseらしい。strings stella_9s84jetw.default-release_places.sqlite | grep flagで出てきたflagを入力したら正解だった。本来の解き方はwriteupを見るとしよう。

MFT

100 内部告発によりある要員が極秘情報をファイルサーバからダウンロードしていることが判明しました。組織は要員の身柄を抑え、端末から証拠となるデータを抽出しました。今回のあなたの仕事は、端末から抽出したデータを解析し、ダウンロードされた極秘情報のファイル名を特定することです。組織からは極秘情報のダウンロードされた日時が 2021-07-18 18:30頃 であることと、ファイルサイズが 465030 であることのみが伝えられています。

添付ファイルを解析し、極秘情報のファイル名を特定してください。例えばファイル名が file.txt の場合は flag{file.txt} と回答してください。
ということで$MFTが渡された。ここでMFTについておさらい。(マスターファイルテーブルとは【用語集詳細】)から

マスターファイルテーブル(Master File Table、MFT)は、Windowsが採用しているNTFS(NT File System)において、システム内に存在するすべてのファイルに関する場所、物理上の位置、メタデータ(作成日、更新日、アクセス日など)を保存したレコードファイルです。

ファイルデータが入っているようだ。MFTExplorerで見ていく。が、今回はファイルサイズや日時が与えられているのでタイムライン解析した方がよいと考えた。仙台CTFの解説をもとにMFTECmd.exeとmactimeを用いて解析する。(仙台CTF2018 セキュリティ技術競技会(CTF))。まずはtimeline Exporerでざっと見る。ファイルサイズで検索した方が速そうなのでファイルサイズで検索。

そうするとそれっぽいファイルが見つかった。終了。

tkys_another_day

100 無事でいてくれているだろうか。あなたは後輩の端末に残されていたある画像ファイルが気になっています。作成された日付は音信不通となる前日。ファイルは作りかけなのか、断片的な情報しか表示されません。もしかすると後輩の消息についての重要な手がかりが隠されているのではないか。あなたはファイルを詳しく解析することにしました。

添付されたファイルを解析し、フラグを入手してください。
pngデータが渡された。

文字が脱落している。復元させるのが目標なのかな?

└─# file tkys_another_day.png
tkys_another_day.png: PNG image data, 640 x 480, 8-bit/color RGBA, non-interlaced
└─# binwalk tkys_another_day.png

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
0             0x0             PNG image, 640 x 480, 8-bit/color RGBA, non-interlaced
99            0x63            Zlib compressed data, best compression
5808          0x16B0          Zlib compressed data, best compression
10651         0x299B          Zlib compressed data, best compression
10718         0x29DE          Zlib compressed data, best compression
12661         0x3175          Zlib compressed data, best compression

stringsコマンドしてもそこまでヒントはなかった。zlibがこんなに入っているのかと思うが、pngにzlibはそこまでおかしくはない。(aperisolve.com)に入れてみる。APNG Assembler 2.91というのが気になった。stringsしても見えていた。

知識(APNG)
APNG (GIFアニメからAPNGの時代に!次世代画像形式APNGを使いこなそう)を参考にした。「APNG(エーピング)とはアニメーションするPNG画像のことで、アニメーションGIFに取って代わる次世代の新しい画像形式です。」ということで動画みたいなものらしい。だからzlibが複数あったのだろうか?
└─# exiftool tkys_another_day.png
ExifTool Version Number         : 12.65
File Name                       : tkys_another_day.png
Directory                       : .
File Size                       : 13 kB
File Modification Date/Time     : 2021:07:25 16:47:40+00:00
File Access Date/Time           : 2024:03:31 06:40:05+00:00
File Inode Change Date/Time     : 2024:03:31 06:35:43+00:00
File Permissions                : -rw-r--r--
File Type                       : APNG
File Type Extension             : png
MIME Type                       : image/apng
Image Width                     : 640
Image Height                    : 480
Bit Depth                       : 8
Color Type                      : RGB with Alpha
Compression                     : Deflate/Inflate
Filter                          : Adaptive
Interlace                       : Noninterlaced
Animation Frames                : 5
Animation Plays                 : inf
Warning                         : [minor] Text/EXIF chunk(s) found after APNG IDAT (may be ignored by some readers)
Software                        : APNG Assembler 2.91
Image Size                      : 640x480
Megapixels                      : 0.307

アニメーションフレームが5あるのは5枚入っているということかな?調べてみるとdisアセンブラもあるようだ。してみると5枚出てきた。2,4にflagの断片あり。入力したら終了。exiftool も観てみるのはいいかもしれない。

MESSAGE

120 仕事を終えて帰宅の途につくあなた。人通りの少ない住宅街を通り過ぎ、自宅のマンションにたどり着きます。ちょうど部屋のドアの前に立った時に手に持っていた携帯が鳴りメールを受信したことを伝えます。

件名:これが最後の警告だ

そのメールには画像が添付されていました。  

添付されたファイルを解析し、フラグを得てください。

└─# file lo3rs1tkd.jpg
lo3rs1tkd.jpg: JPEG image data, JFIF standard 1.01, aspect ratio, density 1x1, segment length 16, baseline, precision 8, 1280x959, components 3

JPGファイルが渡された。
aperisolve.comにぶち込む。あんまりいいものが見つからない。画像解析は苦手じゃ。

CSIRT_asks_you_01

150 組織内のインシデント対応部署から急ぎ解析してほしいとの依頼が舞い込みました。不正侵入が確認された端末の Windows イベントログの調査で、状況把握のために侵害に関する詳細な日時を確認してほしいということのようです。

今回のあなたの仕事は送られてきたファイルを解析し、不正な方法によってネットワーク経由のログインが成功したことを示している最初の記録日時(TimeCreated SystemTime) と Event ID を特定することです。

フラグは UTC での記録日時 を yyyy/mm/dd_hh:mm:ss 形式にし、最後に Event ID をアンダースコアでつなげた形で答えてください。例えば 記録日時 が 2020/01/10 7:05:13.9234567Z 、Event ID が 1234 の場合は flag{2020/01/10_07:05:13_1234} となります。記録日時は UTC+0 で回答することに注意してください。
ということで、Security.evtxを渡された。hayabusaを用いて解析していく。(Windowsイベントログ解析ツール「Hayabusa」を使ってみる)を見ながらCSVファイルにする。不正なログインが成功したことを示すものを探しに行く。イベントIDから探すのがよさそう。4624のログイン成功や4625のログイン失敗をもとに探していく。4625のログイン失敗は2回ほど大量にログとして残っている。これは不正アクセスが行われた証拠なのだろうか?

大量の4625の中に4624が記録されたのが一か所だけある。これによって総当たり攻撃のようなものが成功したことが分かる。ここがflagだと思う。見ているtimeスタンプはUTC+9であることに注意すること。終了。

unallocated_space

150 「こりゃ今夜は帰れそうにないな」同僚がそう言いながらハードディスクやUSBメモリが大量に詰まった箱をどさっとデスクに置きます。すべてある組織で使用されていたもので本来は破壊処理されるはずが、不正に利益を得ようとした人物が仲介したことにより、破壊処理されずに中古市場に出回ってしまったもののようです。今日が記念日だという同僚を早く帰すため、あなたはディスクの解析調査を手伝うことにしました。復元可能なデータがないか確認してください。

添付されたファイルを解析し、フラグを入手してください。

└─# file unallocated_space
unallocated_space: DOS/MBR boot sector MS-MBR Windows 7 english at offset 0x163 "Invalid partition table" at offset 0x17b "Error loading operating system" at offset 0x19a "Missing operating system", disk signature 0x23303fcc

渡されたのは何かのディスクイメージのようだ。mmlsは反応なし。autopsyに代入してみる。難しそう。少し後回し。

CSIRT_asks_you_02

200 組織内のインシデント対応部署から引き続き急ぎ解析してほしいとの依頼を受けています。

一つ目の解析依頼(CSIRT_asks_you_01)の結果と別の証拠などから、あるアカウントのパスワードが脆弱である可能性が示唆されています。添付されたファイルを解析し、そのパスワードを特定してください。

フラグはアカウント名とパスワード(平文)をアンダースコアでつないで回答してください。例えばアカウント名が user 、パスワードが pass の場合は flag{user_pass} と回答します。

ということで、samとsecurity、systemのファイルを渡された。

└─# file SAM.LOG1
SAM.LOG1: MS Windows registry file, NT/2000 or above

LOGという拡張子はレジストリ情報のようだ。
あまりやみくもに探しても時間がかかるので、(インシデント対応へのフォレンジック 技法の統合に関するガイド)を参考にパスワードを探していく。
まずSAMについて

パスワード。ほとんどの OS は、ユーザのパスワードに対応するパスワードハッシュをディスク上に保持している。Windows システムでは、サードパーティ製のユーティリティを使ってSAM(Security Account Manager)データベースからパスワードハッシュをダンプできる。UNIX システムでは、通常、/etc/passwd ファイルまたは/etc/shadow ファイルにパスワードハッシュが格納されている。4.3.2 項で説明したように、パスワードクラッキングプログラムを使ってパスワードハッシュからパスワードを抽出できる。

と書いてあった。もしかしたらハッシュからパスワードを復元するのかな?(Windows のユーザー名、パスワードを復元 : hashcat, impacket)。そのような復元のサイトもある。