はじめに
フォレンジック特にディスクイメージ解析をあほほど解きたくなって探した末に見つけたsetodaNoteCTFを解きたいと思いました。writeupというより、解いた道筋を書いていますので、最短距離を知りたい人にとっては意味わからないものかもしれません。ご了承ください。begginerのお戯れと思って暖かく見守っていただければ幸いです。フォレンジックをメインにやっていこおうと思っています。また、研究室の友人や海外のctfプレイヤーがgithub上でwriteupを公開しているので、そちらをやってみたいとも思いますので、githubにチャレンジするかもしれません。
開閉
- はじめに
- morse_one
- paint_flag
- Deletedfile
- Timeline
- browser_db
- MFT
- tkys_another_day
- MESSAGE
- CSIRT_asks_you_01
- unallocated_space
- CSIRT_asks_you_02
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というものがある。怪しい。見たら答えあり。終了。道のりはわかりやすい問題でした。
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)
また、.msfファイルが目立つ。これは何だ。
知識(msfファイル)
インデックスにめぼしい情報がなさそうなので、そのほかのファイルを見ていく。└─# 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)。そのような復元のサイトもある。