これは、2021/8/21~2021/9/4の期間で開催された、setodaNote CTFの Forensics 分野のwriteupです。全体writeupはこちら
paint_flag (50)
要調査対象者の端末からあるファイルを押収することに成功しました。どうやら外部の協力者に機密データを送ろうとしたようです。組織内の監視網をかいくぐるため、一見すると機密データが含まれていなかのように加工がされているようです。ファイルを解析して機密データを取得してください。
添付されたファイルを解析し、フラグを入手してください。
添付ファイルを解凍すると、paint_flag.docx
というドキュメントが。
開いてみると、こんな感じ。
Microsoft Officeのdocxは、実質…zipとして解凍できるのでしてみると、奥深くに黒塗りする前のイメージが隠れていました。
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
Mail (50)
あなたはメールデータの調査を依頼されました。組織内の要員が規定に反して組織内のデータを個人利用のクラウドサービスにバックアップとしてコピーしていたもののようです。メールデータに機密情報が含まれていないか、調査してください。
添付されたファイルを解析し、フラグを得てください。
添付されたファイルを解凍し、中身を確認してみます。
$ 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
一つずつ確認していると、Sent-1
のファイルに気密情報が載っていそう。
サーバから依頼のあったファイルを取得しておきました。 メールに添付いたしますので、ご確認ください。
というbodyで、Base64 encodeされた添付ファイルkiimitsu.zip
が。
base64部分を抜き出してkimitsu.txt
として保存し、これを下記コマンドでbase64 decodeしてzipファイルに書き出し。
base64 --decode kimitsu.txt > kimitsu.zip
このkimitsu.zipを解凍すると、flagの書かれた画像が出てきました。
Deletedfile (80)
そのファイルを削除した瞬間にそれが誤りであることをあなたは悟ります。どうやら重要なファイルが削除されてしまったようです。あなたはディスクのイメージファイルの入手に成功しました。削除されてしまったファイルを復元し、窮地を脱してください。
添付されたファイルを解析し、フラグを得てください。
添付ファイルを解凍すると、raw
ファイルが。flieコマンドで中身を見てみます。
$ 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
data partitioin までのoffsetがありそうなので、mmls
コマンドで調べてみます。
$ 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
offsetに128を指定して、削除されたファイルも含めて表示してくれるコマンドfls
を使ってファイル一覧を表示してみます。
$ fls -o 128 deletedfile.raw r/r 3: FOR001 (Volume Label Entry) d/d 6: System Volume Information r/r * 9: secret_word.jpg r/r 10: word.jpg d/d 11: $RECYCLE.BIN v/v 261635: $MBR v/v 261636: $FAT1 v/v 261637: $FAT2 V/V 261638: $OrphanFiles
このinode=9
のsecret_word.jpg
が怪しい。icat
コマンドでinodeを指定して抽出します。
$ icat -o 128 deletedfile.raw 9
flagの書かれたjpgが出てきました!
[secret_word.jpg]
Timeline (100)[未solve]
君はタイムラインを知っているかね。ベンチに腰かけた老紳士がこちらに向かって話しかけてきます。あまり使われてはいないようだがね。老紳士はそう話を続けながら正面に向き直りため息をつきます。だが、完全に消えてしまう前にどんなアーティファクトであったか確かめてみてもいいとは思わんかね。そういって老紳士は1枚のディスクを私に手渡すと、静かに去っていきました。どうやらディスクを解析する必要があるようです。
添付のファイルを解析し、フラグを入手してください。
添付ファイルを解凍すると、db系のファイルがいくつか出てきました。
$ 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
fileコマンドで中身を確認してみます。
$ file C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db C/Users/stella/AppData/Local/ConnectedDevicesPlatform/L.stella/ActivitiesCache.db: SQLite 3.x database, user version 27, last written using SQLite version 3025003
ということで、SQLite 3.x っぽいです。中身を色々と見てみましたが、flag見つからず。
$ sqlite3 ActivitiesCache.db SQLite version 3.28.0 2019-04-15 14:49:49 Enter ".help" for usage hints. sqlite> .tables Activity Activity_PackageId DataEncryptionKeys Metadata ActivityOperation AppSettings ManualSequence SmartLookup sqlite> select * from xxx...
そういえば、他にもファイルが有りました。db-shm
とdb-wal
。調べてみたところ、SQL3.7の新機能らしく、ロールバックするための一時ファイルとのこと。これらを適切に開くと良さそう。
更に調べると、windows10のtimeline
という機能のtopicが引っかかるように。
Additional information about deleted records may be contained in unused space, freelists, and the WAL file.
ということで、WALファイルをテキストにして読んでみると
ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\lookllookdammyflag.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\local\_.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\local\_.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\local\U.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\local\U.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\local\F.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\local\F.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\l.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\l.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\h.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\h.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\g.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\g.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\f.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\f.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\e.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\e.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\a.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\a.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\_.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\_.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\T.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\T.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\OKdammyFlag.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\OKdammyFlag.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\NiceTry.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\NiceTry.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\N.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\N.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\Heart.tif ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\Heart.tif ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\Heart.bmp ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\Heart.bmp ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\7.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\7.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\3.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\3.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\1.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\1.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\0.txt ECB32AF3-1440-4086-94E3-5311F97F89C4\E:\AppData\0.txt
こんな場所が。非常に怪しい。
同じファイル名が2回ずつ出てきているけど、1回ずつに直して一文字のtxt
ファイルの名前をつなげると lhgfea_TN7310
flagの文字を除き、数字をleetcodeとみなしてアルファベットに直すと he_TNteio
これをアナグラム風に並び替えたりするとflagになるのかと思ったけど、通らなかった…。要復習。
browser_db (100)
調査対象者のパソコンから Web ブラウザの情報を取得しました。ファイルを解析して調査対象者が怪しい行動をしていないか調査するのが今回のあなたの仕事です。
添付されたファイルを解析し、フラグを得てください。
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
そのままsqliteで開いてみます。
$ sqlite3 stella_9s84jetw.default-release_places.sqlite SQLite version 3.28.0 2019-04-15 14:49:49 Enter ".help" for usage hints. sqlite> .tables moz_anno_attributes moz_historyvisits moz_meta moz_annos moz_inputhistory moz_origins moz_bookmarks moz_items_annos moz_places moz_bookmarks_deleted moz_keywords
tableがたくさん。
このなかの moz_places
の中身を抜き出してみます。(他のテーブルはほとんど情報がなかったので)
sqlite> .output places.log sqlite> select * from moz_places;
抜き出したplaces.log
をflag
で検索すると https://duckduckgo.com/?q=flag%7Bgoosegoosego%7D&t=ffab
という文言が。これをパーセントエンコード、ないしブラウザのURLバーにに直接入力すると、flagが得られました。
MFT (100)
内部告発によりある要員が極秘情報をファイルサーバからダウンロードしていることが判明しました。組織は要員の身柄を抑え、端末から証拠となるデータを抽出しました。今回のあなたの仕事は、端末から抽出したデータを解析し、ダウンロードされた極秘情報のファイル名を特定することです。組織からは極秘情報のダウンロードされた日時が
2021-07-18 18:30頃
であることと、ファイルサイズが465030
であることのみが伝えられています。添付ファイルを解析し、極秘情報のファイル名を特定してください。例えばファイル名が
file.txt
の場合はflag{file.txt}
と回答してください。
配布されたファイル名はC_$MFT
。調べてみると下記のようなサイトがヒット。
- Forensics: What is the $MFT? | Where is Your Data?
- How to extract data and timeline from Master File Table on NTFS filesystem | Andrea Fortuna
NTFSファイルシステムの"マスターファイルテーブル"で、ここからファイいるの作成・アクセス・修正・変更などの履歴を解析したり、情報を抽出したりできるようだ。
windows環境はないので、今回はMacやLinux上で使える、pythonのMFT解析ライブラリを使って情報を抽出しました。
## install $ pyenv local 2.7.15 #3系では動かない $ git clone https://github.com/dkovar/analyzeMFT.git $ cd analyzeMFT $ python setup.py install ## extract $ cd .. $ analyzeMFT.py -f C_\$MFT -o extract.csv
これで、86.6Mもあるcsvが生成されました。
ヒントに日時やファイルサイズがあるので、これで検索してみます。
$ grep "2021-07-18 18:" extract.csv > date.txt
こんな感じで抽出したテキストの、怪しい時間帯を見ていると
"101525","Good","Inactive","File","8","91553","1","/Users/stella/Downloads/kimitsu.zip","2021-07-18 18:35:21.555244","2021-07-18 11:34:14.857170","2021-07-18 20:24:31.343565","2021-07-18 20:24:31.359190","2021-07-18 18:35:21.555244","2021-07-18 11:34:14.857170","2021-07-18 18:35:21.593037","2021-07-18 18:35:21.608727","76fdd5ce-e7df-11eb-8474-000c2951bb7b"...(略)
こんなレコードが。ファイルサイズを使う方法がわからなかったのだけど、(csvに載っている?)、いかにも怪しいファイル名だったのでflagに突っ込んだら通りました👍
tkys_another_day (100)
無事でいてくれているだろうか。あなたは後輩の端末に残されていたある画像ファイルが気になっています。作成された日付は音信不通となる前日。ファイルは作りかけなのか、断片的な情報しか表示されません。もしかすると後輩の消息についての重要な手がかりが隠されているのではないか。あなたはファイルを詳しく解析することにしました。
添付されたファイルを解析し、フラグを入手してください。
pngファイルが配布されます。
これ、macのfinderでサムネイル表示していると、しばらくして青い文字が浮き出てくる…。なんだこれ。
なんとmacのpreviewで開いたら、隠しファイルっぽいのも全部表示されてしまった。
これは想定解ではなさそう…。
TITLE (120)[未solve]
仕事を終えて帰宅の途につくあなた。人通りの少ない住宅街を通り過ぎ、自宅のマンションにたどり着きます。ちょうど部屋のドアの前に立った時に手に持っていた携帯が鳴りメールを受信したことを伝えます。
件名:これが最後の警告だ
そのメールには画像が添付されていました。
添付されたファイルを解析し、フラグを得てください。
こんなjpeg画像が添付されています。
この問題のタイトルから、このイメージのタイトル lo3rs1tkd.jpg
が怪しいかなと思って調べてみると、シュタインズ・ゲートで使われた画像と同じ名前らしい。
ということで、lo3rs1tkd
とかSTEINS;GATE
, steinsgate
, patghqwskm
あたりをpasswordやkeyにしてstego-toolkitを一通り試してみたけど、特に何も出てこず。
正解者が少ない問題だったので、真相が気になる。
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
というファイルが配布されます。
$ file Security.evtx Security.evtx: MS Windows Vista Event Log, 145 chunks (no. 144 in use), next record no. 13877
GitHub - williballenthin/python-evtx: Pure Python parser for recent Windows Event Log files (.evtx)
$ git clone https://github.com/williballenthin/python-evtx.git $ python python-evtx/scripts/evtx_dump.py Security.evtx > data.xml
この出力されたdata.xml
を解析します。
Windows Security Log Event ID 4624 - An account was successfully logged on より、ログオンが成功したときのEventIDは4624とのことなので、これで絞ります。良いxmlパーサーがあればササッとできそうだけど残念ながら用意が無いのでgrepで…。
$ grep ">4624</EventID>" data.xml -A 40 > log.txt
700件くらい見つかってる。この中で、"ネットワーク経由のログイン" とのことなので、上記ページよりLogonType=3
で絞ってみます。
LogonType: 3
更に、IpAddress
が外部ネットワークっぽいやつを探します。
こちら作業風景。
<TimeCreated SystemTime="2021-07-18 20:09:21.904846"></TimeCreated>
このレコードが上記条件に合致したので、flag{2021/07/18_20:09:21_4624}
を入れると通りました👍