【Write up】CTF for GIRLS「4-Girls ぷち CTF」

先日、SECCON 2023 電脳会議にて開催されたCTF for GIRLSのワークショップ・ハンズオン・懇親会に参加してきました。

ハンズオンは大会形式でありwrite up歓迎とのことだったので、当日解けなかった問題も含めてまとめます。

 

当日の問題と結果

出題カテゴリはReversing、Crypto、Forensics、Web、Miscの5分野(Tutorialを除く)で、それぞれ初級から上級まで3問ずつ出題されました。

難易度については、初心者歓迎ということもありヒントを確認すればどうにかなりそうな問題がいくつかありました。

 

結果は1540点獲得で、6位でした。

(Forensicの上級でFirst Blood賞もいただけて、ニンマリです。)

 

write up

問題文だけでなくヒントも掲載するため、少々長くなっています。

また当日はCTF未経験者の方もいらっしゃったので、ツールについても記載しています。

 

Tutorial

Welcome(100)

問題:

初心者の方向けに練習の場をご用意しました(知ってるよ!って方もしばしお付き合いください)
CTFでは問題を解く中で以下のような文字列が手に入ることがあります。これを「フラグ」と呼びます。
この問題のフラグ:ctf4g{Happy_10th_anniversary!}
この場合は記号の部分 ctf4g{} を含めたすべての文字列を下のフォームに入力して「submit」をクリックします。正解すればポイントが獲得できます。フラグにはアルファベットと数字と記号が含まれますが大文字/小文字は気にしなくて大丈夫です。

 

答え:ctf4g{Happy_10th_anniversary!}

 

Reversing

banner4you(100)

問題:

Flag is hidden somewhere...

ヒント①:ChatGTPにあるバナーを作ってもらったけどちょっと違うかな?
ヒント②:stringsコマンド(Windowsの場合はtypeコマンド)でファイルの中身を見ると...

 

fileコマンドでファイルの形式を確認したところ、ELFファイル(Linuxにおける実行可能ファイル)のようです。

 

ここでstringsコマンドを打ち、grepコマンドで「ctf4g」と指定します。

答え:ctf4g{S4nt4_C14us}

 

Find Me(200)

問題:

フラグはどこにある?

ヒント①:stringコマンドでは文字列が抽出できないようだ。どうやって解析する?
ヒント②:IDAで不思議な文字列を探してみよう
ヒント③:gdbブレークポイントを張って動かしてみよう

 

fileコマンドでファイル形式を確認したところELFファイルであり、stringsコマンドではフラグは出ませんでした。

ファイルを実行すると「Find me in memory!」という文字列が確認できます。

 

ファイルをIDAで開き、F5キーを押してデコンパイルしました。

for文あたりの処理が怪しそうです。

フラグ獲得のための手順を以下に示します。
①for文が終わったであろう箇所にbreakpointをつける
b *0x0000555555555186
②実行
run
レジスタ情報確認
i r 
レジスタ情報表示
x/1s $rdx

(左側はデバッガ画面で、右側はobjdump画面を示しています。)

答え:CTF4G{10v31y_61n63rbr34d}

 

Misc

この模様はなーんだ?(100)

問題:

この画像からフラグを取得してみましょう

ヒント①:MaxiCodeという規格の2次元コードらしいです。
ヒント②:2次元コードリーダーで読み取ってみると。。。

https://products.aspose.app/barcode/ja/recognize

https://www.dynamsoft.com/barcode-reader/barcode-types/maxicode/

 

ヒント②の2番目に記載されているサイトに、ファイルをアップロードしました。

答え:ctf4g{Hotwine0rHotChocolate?}

 

christmas card(200)

問題:

Flag is hidden in this christmas card.

ヒント①:画像の中にフラグが埋め込まれているようです。
ヒント②:StegOnlineで調べてみると...

https://stegonline.georgeom.net/upload

 

EXIF情報には何も見当たらないので、ステガノグラフィーを疑ってみます。

ヒント②に記載されていたサイトで与えられた画像をアップロードし、LSB Halfを選択しました。

答え:ctf4g{3nj0y_5te9}

 

参考:

うさみみハリケーンに同封されている「青い空を見上げればいつもそこに白い猫」というツールも有用です。

うさみみハリケーンの詳細情報 : Vector ソフトを探す!

3 keywords(300)

問題:

仲間と協力してキーワードを見つけてください。 見つけたキーワードをアルファベット(辞書)順に並べたとき、導き出される場所があります。
その場所の公式サイトのセカンドレベルドメインがフラグです。
例)たとえば答えが「浅草橋ヒューリックホール&カンファレンス」なら、公式サイトは https://hulic-hall.com/ なので、フラグは ctf4g{hulic-hall} となります。

ヒント①:最初のキーワードはあなたの目の前にあります、受付でもらったものをよく観察してみましょう。 また、この問題を解くには自分以外に最低2人の協力者が必要です。勇気を出して情報交換することも必要かもしれません。
ヒント②:フラグはある実在する場所の名前です。 キーワードは集まりましたか?3つのキーワードで特定の場所を示す方法はないでしょうか?検索してみましょう。

 

受付でもらったものの一つとして、CTF for GIRLSの10周年ステッカーがあります。

赤枠のところの文字を変換すると以下のようになります。

表記 文字列 変換後
ASCII(16進数) 0x73 0x65 0x63 0x74 sect
アルファベット 5 14 3 15 21 18 1 7 5 ENCOURAGE
モールス信号 -・・・ ・ ・- -・・・ ・・・ BEADS

 

アルファベット順に並べた「BEADS ENCOURAGE sect」を以下サイトで調べます。

https://what3words.com/

すると、フィンランドにあるサンタクロース村という場所がひっかかりました。

答え:ctf4g{santaclausvillage}

現地ならでは問ですね。

 

Crypto

問題:

Do not use the default password!(100)

世の中には暗号鍵を扱うツールやキーストアの仕組みは色々ありますが、その中でもおちゃめなデフォルトパスワードを持つものがあります。
有名なデフォルトパスワードを持つ鍵ストア「mykeystore.zip」をお渡ししますので、パスワードを推測して中身を見てみてください。

ヒント①:mykeystoreはJavaで取り扱うキーストアです。
ヒント②:keytool -list <one more option!> -keystore mykeystore

 

「mykeystore デフォルトパスワード」とググったら、changeitと出てきたので、これがパスワードと推測します。
またkeytoolのコマンドをブラウザで入力したら、サジェストにそれっぽいコマンドが出てきたので打ってみます。

※Enter keystore passwordという箇所で「changeit」と入力しています。

答え:ctf4g{holidayiscoming2023}

 

R.I.P(200)

問題:

R.I.P 2023 
K=1025A62F14749D12B6A089A22B481CE99049A0F4CD69B9F7
iv=772E34E730489472

$ md5sum cipher.bin 38be707135b795fd0cb0e23e22d610ef *cipher.bin

ヒント①:2023年以降の使用が禁止された暗号といえば?
ヒント②:Triple***で復号!

 

以下記事より、3DESという暗号アルゴリズムが2023年に終了するとわかります。

さらばDES暗号、2023年終了へカウントダウン | 日経クロステック(xTECH) (nikkei.com)

 

私はプログラム書くのが苦手なので、ChatGPTに3DESで復号したい旨を伝えたところ、以下コードを書いてくれました。(python)

-------------------------------------------------

from Crypto.Cipher import DES3
from Crypto.Util.Padding import unpad
from binascii import unhexlify

file_path = "/content/cipher.bin"

# 鍵とIV
key = unhexlify('1025A62F14749D12B6A089A22B481CE99049A0F4CD69B9F7')
iv = unhexlify('772E34E730489472')

try:
    with open(file_path, "rb") as file:
        # バイナリモード ("rb") でファイルを開く
        encrypted_data = file.read()

        # 3DESの複合
        cipher = DES3.new(key, DES3.MODE_CBC, iv)
        decrypted_data = unpad(cipher.decrypt(encrypted_data), DES3.block_size)

        # バイナリデータを表示
        print(decrypted_data)

except FileNotFoundError:
    print(f"ファイルが見つかりません: {file_path}")

except Exception as e:
    print(f"エラーが発生しました: {e}")

-------------------------------------------------

これの出力結果として、バイナリデータが出ます。

出力結果からPDFファイルであることが分かったため、以下コードでPDFファイルとして保存しました。

-------------------------------------------------

file_path = "/content/output.pdf"  # 保存先のファイルパス

try:
    with open(file_path, "wb") as pdf_file:
        pdf_file.write(decrypted_data)  # decrypted_data はバイナリデータ

    print(f"PDFファイルが正常に保存されました: {file_path}")

except Exception as e:
    print(f"エラーが発生しました: {e}")

-------------------------------------------------

出力されたPDFファイルを確認すると、フラグが記載されていました。

答え:ctf4g{R.I.P_TripleDES}

 

Forensics

Snow covered(100)

問題:

flagは雪の中に埋めてしまった。

ヒント①:flagの情報が書かれた画像の上に、別の画像が重ねられているみたい。 このPDFファイル中には画像データがそのまま残っていそう。なんとかして取り出せないだろうか?
ヒント②:LibreOfficeやforemostなどを使うと、PDF上の画像も扱うことができそうだ。

 

与えられたPDFファイルを確認すると、以下のようになっていました。

たまにニュースで聞く、PDF黒塗りできてない問題と同じかな?と思い、LibreOffice Drawを開いて画像を並び替えました。

答え:ctf4g{PdFw0nd3rLan:D}

 

Check the Connection(300)

問題:

怪しい通信が行われているようだ。
※添付ファイルはWindows Defenderなどのウイルスソフトのアラートが上がる可能性があります。ダウンロード先フォルダを検知対象外に設定するなどのご対応をお願いいたします。

ヒント①:実行時の通信をWiresharkなどで観察してみましょう。
ヒント②:宛先のドメインはどこでしょう?
ヒント③:宛先のポートはどこでしょう?

 

問題文から、与えられたファイルを実行するとどこかのサーバに対して通信を行うらしいということが推測できます。

作問者の意図としてはWiresharkで確認をしてほしいのだと思いましたが、とりあえず動的解析ツールであるHybrid Analysisに投げました。

Free Automated Malware Analysis Service - powered by Falcon Sandbox - Viewing online file analysis results for 'CheckTheConnection (1).exe' (hybrid-analysis.com)

接続先は「xxx.girls.seccon[.]jp」であることが判明しました。

またInformativeのNetwork Related欄にフラグが記載されていました。

レポート内容から発生した通信を推測すると、宛先ドメイン「xxx.girls.seccon[.]jp」、宛先ポート80に対してGETメソッドで「/?flag=ctf4g{Turkey0rFriedChicken?}」というリクエストを送信していたと考えられます。

答え:ctf4g{Turkey0rFriedChicken?}

 

なお上記の解き方は作問者の意図したものではないと判断したため、後日実際にファイルの実行からWireshakでのキャプチャまで実行してみましたが、DNS要求以外の通信は確認できませんでした。調査不足か環境によるものか判断がつかないため、ほかの方の解答を楽しみにしています。。

 

参考:

Wiresharkのダウンロードページ:Wireshark · Download

Wiresharkの使い方が学べるUNIT42のページ:Wireshark チュートリアル: Wiresharkワークショップビデオシリーズを公開 (paloaltonetworks.jp)

 

Web

トナカイ専用(100)

問題:

トナカイが使うブラウザでしか閲覧できないサイトです

ヒント①:サイトの閲覧には「ReindeerBrowser」を使う必要があるみたいです。
ヒント②:ブラウザのことを「UserAgent」って呼んだりもします。UserAgentを偽装してどうにかフラグを読む方法はないでしょうか?

 

webページにアクセスすると、かわいいサイトが表示されました。

ReindeerBrowserというブラウザは存在しないようなので、BurpSuiteを用いてUser-Agentを「ReindeerBrowser」に書き換えました。

するとフラグが確認できました。

答え:ctf4g{y0u_ar3_th3_r3d-n0s3d_r31nd33r}

 

別解として、開発者ツールやCurlコマンドの利用もいいかもしれないですね。

 

参考:Try Hack Me「Burp Suite: The Basics」TryHackMe | Burp Suite: The Basics

 

Escape(200)

問題:

サンタさんの担当エリアを確認するサイトがあるけどどうやら脆弱性があるみたい。 サンタさんのサーバから隠された情報を探してプレゼントをゲットしてやるぞ。
まずは、Kyotoの担当を調べてみよう。

ヒント①:Kyoto と入れて確かめてみよう。 京都の担当サンタさんの情報が出てきたよ。
裏側にサンタさんのデータベースがあるのだろうから、SQLi が狙えそうだ。 ' or 1=1;-- と入れてみると.... サンタさんのえもじにエスケープされてしまった! orの代わりに使える文字がないか調べてみよう。
ヒント②:or の代わりには 「||」が使えることがわかったよ。 「' || 1=1;-- 」と入れてみよう。 tableの情報を抜き出すことができて、flag1を取得できた。
続いて、flag2が欲しいけど、このテーブルにはないみたいだから、他にテーブルがないか調べてみよう。UNION句を使って調べることができそうだ。
ヒント③:UNION句の使い方を書く スペースの代わりに何が使えそうか...

 

webページにアクセスすると、サンタさんの担当地域を検索するページが表示されました。検索欄にkyotoと入力したら以下のようになりました。

見るからにSQLiの脆弱性がありそうですね。

とりあえず「kyoto' or 1=1;-- 」と入力したところ、以下のようになりました。

MySQLが使用されていることが分かりましたが、「or」と空白がエスケープされているように見えます。

「or」は「||」に、空白は「%09」として記載もできるため、「kyoto'%09||%091=1;--%09」と入力してみました。

フラグの半分が取得できました。

残り半分のフラグは別テーブルにありそうなので、information_schemaからテーブル名等を確認してみます。

UNION句を用いて、以下クエリを入力します。

「kyoto'%09||%091=1%09UNION%09SELECT%09table_schema,2,table_name,column_name%09FROM%09information_schema.columns;--%09」

SecretSantaというテーブルのsecret列が怪しそうなので、以下クエリを入力します。

「kyoto'%09||%091=1%09UNION%09SELECT%09id,position,santaname,secret%09FROM%09SecretSanta;--%09」

答え:ctf4g{Chr1stm@s_Pre5ent:)}

 

SecretKey(300)

問題:

Alice「シークレットセールはしめ切っちゃったみたい。なんとかセールに参加できないかなあ。」
ID: alice PW: p@ssw0rd!

ヒント①:シークレットセール締め切りのポストに飛んでみると、notice.html というページだった。 他のポストのURLからシークレットセールのログインページにアクセスできないかな?
ヒント②:シークレットセールのページは、他のページのURLと連番になっていそうだとわかるので、 10458.html にアクセスしたらみつかったよ。 Aliceのアカウントでログインすると、締め切られたって言われた。 管理者に成りすますことはできないかな?
ヒント③:AliceとしてログインしてCookieを見てみよう。 この形式はなんだろう。
ヒント④:JWTが使われていることが分かった。 roleをadminにしたら成りすませそう。 アルゴリズムを見ると、HS256だから、secretが署名に使われているのかな。
ヒント⑤:問題文にあったワードリストを使って総当たりを試してみよう。

 

webページにアクセスします。

各ページの中身やrobots.txtには何もありませんでしたが、ページのソースを確認したときに10458.htmlが飛ばされていることが気になりました。

10458.htmlにアクセスしたところログインページが表示されました。

問題文に記載があったIDとPWを入力してみたところ、シークレットセールのエントリーは締め切ったと言われてしまいました。

ヘッダーのDATEでセール終了前の日付を指定してみましたが、違うようです。

ここでアプローチを変えて、管理者としてログインできないか試みます。

aliceアカウントでログインした状態で、リクエストをBurpSuiteで確認したところ、以下のCookieが確認できました。

これはJWT(JSON Web Token)と呼ばれる形式でエンコードされたCookieのようです。

以下サイトでJWTのデコードや検証ができるらしいので、先ほどのCookieを入力してroleをadminに、secretにreindeerと入力します。

JSON Web Tokens - jwt.io

得られたCookie「eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJhdXRoIjoxNzAzNTgwMDk2OTcxLCJhZ2VudCI6Ik1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMTMuMC41NjcyLjkzIFNhZmFyaS81MzcuMzYiLCJyb2xlIjoiYWRtaW4iLCJpYXQiOjE3MDM1ODAwOTd9.smQo-NgCbGqlQJmFv0-jz5OPVg7hUSkDlY_2U49e7uI」をセットして再度アクセスしてみました。

答え:ctf4g{5nt@'s_s@ck!}

 

さいごに

ctf4gの開催、ありがとうございました。

現地参加は初めてかつソロでの参加でしたが、ご一緒してくださった方々とお話することができ、楽しい一日を過ごせました。

オンライン・現地ともにまた参加できることを楽しみにしています。

来年度からの新体制、応援しています!

 

最後に、当日いただいたものを載せて終わります。(とってもかわいいです!)

 

【THM】Core Windows Processes【write up】+個人的まとめ

Try Hack MeのCore Windows Processesルームのwrite upです。

write upはほぼおまけで、内容を個人的に理解するためにまとめました。

 

ルームのURL

TryHackMe | Core Windows Processes

 

Write Up

Task3 System

Q: What PID should System always be?

A: 4

Task4 System > smss.exe

Q: Aside from csrss.exe, what process does smss.exe spawn in Session 1?

A: winlogon.exe

Task5 csrss.exe

Q: What was the process which had PID 384 and PID 488?

A: smss.exe

Task6 wininit.exe

Q: Which process might you not see running if Credential Guard is not enabled?

A: lsaiso.exe

Task7 wininit.exe > services.exe

Q: How many instances of services.exe should be running on a Windows system?

A: 1

Task8 wininit.exe > services.exe > svchost.exe

Q: What single letter parameter should always be visible in the Command line or Binary path?

A: k

Task9 lsass.exe

Q: What is the parent process for LSASS?

A: wininit.exe

Task10 winlogon.exe

Q: What is the non-existent parent process for winlogon.exe?

A: smss.exe

Task11 explorer.exe

Q: What is the non-existent process for explorer.exe?

A: userinit.exe

 

まとめ

本ルームの説明とSANSのチートシート(参考1)を考慮すると、プロセスツリーは以下のようになるかと思います。

ルームの振り返りにもなりますが、出てきた用語(プロセスの機能や特徴等)をざっくりとまとめます。

パスなどの情報はSANSのチートシートを参考にしてください。

 

System

説明:NT Kernel & System

カーネルモードのみで実行されるOSの基本的な処理に関するプロセス。

smss.exe

説明:Windowsセッションマネージャー

セッションの開始等を担当する。Windowsセッションであるセッション0と、ユーザセッションであるセッション1で作成するプロセスが異なる。セッション作成用のsmss.exeを作成すると、マスターであるsmss.exeは終了する。

csrss.exe

説明:クライアントサーバーランタイムプロセス

Win32コンソールウィンドウと、プロセススレッドの作成と削除等の役割を担う。

wininit.exe

説明:Windowsスタートアップアプリケーション

セッション0内でservices.exe、lsass.exe、lsaiso.exe(資格情報ガードが有効な場合)を開始する。

lsass.exe

説明:Local Security Authority Process

コンピュータ等にログインしているユーザの確認、パスワード変更の処理やアクセストークンの作成などを行う。

LsaIso.exe

説明:Credential Guard & VBS Key Isolation

資格情報ガード(Credential Guard)が有効な場合に開始される。lsass.exeと通信し、ユーザのトークンハッシュを格納する。

services.exe

説明:サービスとコントローラーアプリケーション

サービスの読み込み、対話、開始や終了の処理を担う。

svchost.exe

説明:Windowsサービスのホストプロセス

Windowsサービスのホストと管理を担う。関連する複数のサービスを一つのプロセスで管理している。

RuntimeBroker.exe

説明:Runtime Broker

ユニバーサルWindowsプラットフォーム(UWP)アプリ(Calculator.exeのようなモダンアプリケーション)とWindows API間のプロキシのようなもの。UWPアプリがハードウェアやファイルシステムに対して必要なアクセスを提供するために使用される。通常RuntimeBroker.exeは、UWPアプリ一つにつき一つ存在する。

taskhostw.exe

説明:Windowsタスクのホストプロセス

Windowsタスクの汎用ホストプロセス。このプロセスは定義されたスケジュール、ユーザログオン、システム起動等のトリガーイベントを待ち続けるループを実行する。

winlogon.exe

説明:Windowsログオンアプリケーション

対話型のユーザログオンとログオフの役割を担う。このプロセスはSecure Attention Sequence(SAS)というキーボード操作の組み合わせ(Alt+Ctrl+Deleteキー)が入力された際、ユーザからのログオン要求を受け取る。

userinit.exe

説明:不明

ユーザ環境の初期化を行うプロセス。ログオンスクリプトの実行やネットワーク接続の再接続などの役割を担う。explorer.exeを生成したのち、userinit.exeは終了する。

explorer.exe

説明:エクスプローラ

ユーザに対して、フォルダやファイルへのアクセスを提供する役割を担う。

 

まだまだ分からないことだらけですが、まとめたらちょっと理解が深まりました。

 

参考

1. Hunt Evil | SANS Poster

TTask 5  csrss.exeA1

マルウェア調査方法まとめ

こんにちは、refです。

今回は不審な通信発生に対して、マルウェア感染が起因しているかを明らかにする方法をまとめます。

なおこの記事はマルウェア解析ではなく、マルウェア調査を目的としているので、解析の観点はほとんど記載していません。

 

本調査方法は私が調査する場合のメインの方法を記載していますが、これに合致しないからといってマルウェアに感染していないとは言い切れないことと、知識が浅いことより誤っている箇所がある可能性をご了承ください。

 

それでは本編です。

 

調査の流れ

不審な通信(IPアドレスドメイン、URLなど)が発生したときの調査方法は以下の通りです。

1.レピュテーション情報の確認

2.マルウェアの特定

3.マルウェアの追加情報調査

 

あえて2と3は分割して書きましたが、実際はほぼ同時に行います。

それぞれの調査段階で使用するサービスとその目的を次項以降でご紹介します。

 

1.レピュテーション情報の確認

VirusTotalを利用します。悪性判定を受けているかを確認すると同時に、不審なファイルや通信先との関連が無いか、大まかに把握します。

VirusTotal

https://www.virustotal.com/gui/home/upload

 

2.マルウェアの特定

ここでは、ドメインIPアドレスからマルウェアを特定するためのサービスを列挙しています。

Hybrid AnalysisとJoe Sandboxは、ファイルから発せられたトラフィックの結果を表示してくれるので、不審な通信を発する原因となったマルウェアを特定することができます。

Hybrid Analysis

https://www.hybrid-analysis.com/

Joe Sandbox

https://www.joesandbox.com/

URL haus

https://urlhaus.abuse.ch/

Fedo Tracker

https://feodotracker.abuse.ch/

ThreatFox

https://threatfox.abuse.ch/

 

その他の情報を取得するために、以下のサービスも利用します。

対象のIPアドレス等に対する、評価・情報が確認できます。

AbuseIPDB

https://www.abuseipdb.com/

Open Threat Exchange

https://otx.alienvault.com/

 

3.マルウェアの追加情報調査

追加の調査として、マルウェアの実態や挙動、C2サーバーなどの情報を確認します。

Hybrid AnalysisとJoe Sandboxのレポートだけでも確認できますが、お好きなものを使ってください。

Hybrid Analysis

https://www.hybrid-analysis.com/

Joe Sandbox

https://www.joesandbox.com/

VirusTotal

https://www.virustotal.com/gui/home/upload

Hatching Triage

https://tria.ge/

ANY.RUN

https://app.any.run/

InQuest

https://labs.inquest.net/

 

マルウェアの種類まで特定できたら、その特徴を以下サービスで確認します。

malpedia

https://malpedia.caad.fkie.fraunhofer.de/

 

実例を用いた調査

先ほど述べた調査方法・サービスをもとに、実際に不審な通信を検知した場合の調査の流れを確認します。

(意図しないアクセスを防ぐために、それぞれのサービスでの検索結果へのリンクは貼っていません。)

 

今回の調査対象とする不審な通信は、ドメイン「www[.]dnautik[.]com」です。

これは、2023年3月8日にNTTセキュリティ・ジャパン株式会社さんが運営しているTwitterのアカウントで公開されたEmotet設置ドメインになります(もう答え出てますが、、)。

参考:https://twitter.com/GlobalNTT_JP/status/1633400901242347521?s=20

 

それでは調査を開始します。

 

1.レピュテーション情報の確認

まずVirusTotalで、ドメイン「www[.]dnautik[.]com」のレピュテーション情報を確認します。

11のセキュリティベンダーからMalwareもしくはMalicious判定を受けていることが確認できます。

RELATIONSタブを確認すると、悪性判定を受けているファイルとの紐づきも確認できます。

 

2.マルウェアの特定

次に、ドメイン「www[.]dnautik[.]com」がマルウェアに関連したものであるか確認します。

当該ドメインを検索したところ、以下サービスで結果が表示されました。

Hybrid Analysis

Joe Sandbox

URL haus

 

URL hausで結果が表示されたことより、当該ドメインマルウェア配布に使用されていると推測することができますが、今回は結果が分かりやすかったHybrid Analysisを例に挙げます。

2件結果が出て、片方はwordファイルでしょうか、malicious判定を食らっているので見てみます。

レポートを見る感じ、このwordファイル(sha256:d7e61d7d1f31426d1c59eeab4e60fdd433b6889a548b94129e0ae34fb766a7cf)が当該ドメインを含むHTTPトラフィックを発しているようです。

 

3.マルウェアの追加情報調査

ファイル(sha256:d7e61d7d1f31426d1c59eeab4e60fdd433b6889a548b94129e0ae34fb766a7cf)を調べてみます。

今回はVirusTotalとHatching Triageで調べました。

・・・Emotetですね。

ここから先は目的により調査内容が変わってくると思いますが、ファイルの情報、実行時の挙動、IOC情報等を調べたりします。(本記事では省略します)

 

ということで、ドメイン「www[.]dnautik[.]com」が検知された原因は、Emotetダウンローダーを開いたことによるものと仮定してよさそうです。

 

相当省略しましたが、特定までの流れはこんな感じです。

 

さいごに

本記事は、不審な通信がマルウェア感染によるものかの調査を迅速かつ的確にできたらいいなという気持ちで作成しました。

これを書いたことで、頭のなかにやんわり入っていた知識と手順がまとまとまったのでうれしいです。

フィッシングメール解析

フィッシングメールの解析レポートを以前作成したので、こちらにもまとめてみました。

以前作成したものなので、情報は古いです。ご了承ください。

 

解析対象

今回の解析に使用するメールをご紹介します。

2022年10月29日、アプラスから「本人認証サービスに関するお知らせ」と思われるメールを受信しました。(初フィッシングメール受信!!)

一見すると送信元に不審な点は見られず、本文中のURLもaplusと書いてあるので、寝ぼけていたらリンクを押してしまいそうです。

 

メール解析

ヘッダーの解析

ヘッダーの解析を行うことで、実際の送信者のメールアドレスやIPアドレスを明らかにすることができます。

以下は特に着目するべきヘッダーフィールドと、解析対象メールの実際の値です。

フィールド 詳細情報 実際の値
From メール作成者のアドレス netstation@aplus[.]co[.]jp
Sender メール送信者のアドレス aplus-update-account@whjtmc[.]shop
Return-Path メール配信失敗時に返送されるアドレス aplus-update-account@whjtmc[.]shop
Received-SPF SPF処理の結果 Pass (protection.outlook.com: domain of whjtmc[.]shop designates
106[.]75[.]101[.]213 as permitted sender) receiver=protection.outlook.com;
client-ip=106[.]75[.]101[.]213; helo=whjtmc[.]shop; pr=C
To 受信者のアドレス XXX@outlook[.]jp(マスキング済み)
Date メールが作成された日時 Sat, 29 Oct 2022 20:06:04 +0800
Subject メールの件名 NETstation*APLUS]会員のお知らせ
Message-ID メールに割り当てられる一意のID 20221029200611612838@whjtmc[.]shop

以上の結果より、解析対象のメールは中国(106[.]75[.]101[.]213)から送信され、実際の送信元メールアドレスは「aplus-update-account@whjtmc[.]shop」であることが分かりました。

 

また余談ですが、送信元のドメイン「whjtmc[.]shop」」には、クロネコヤマトのフィッシングサイトに使用されていたドメイン「kuronekoyamato[.]whjtmc[.]shop」が紐づいていました。

 

ボディの解析

ボディの解析では、フィッシングサイトへのURLや添付ファイルを明らかにします。

・URL
hxxps://www[.]netaetion-aplus2[.]com/signup.php
・添付ファイル
なし

 

本項で明らかになったURLをもとに、次項にてフィッシングサイト調査を実施します。

 

フィッシングサイト調査

このメールの存在に気が付いたのが受信から2週間以上経過したあとだったため、実際にフィッシングサイトへアクセスすることはできませんでした。

そのためドメインIPアドレスサーバー証明書の調査のみ行いました。

 

情報整理

  • 正規のアプラスカード会員向けページのURL
    hxxps://www[.]aplus[.]co[.]jp/creditcard/netstation/index.html
  • フィッシングメールに添付されていたURL
    hxxps://www[.]netaetion-aplus2[.]com/signup.php

以降は正規ドメインを「www[.]aplus[.]co[.]jp」、偽ドメインを「www[.]netaetion-aplus2[.]com」として進めます。

 

ドメイン調査

ドメインwhois情報を確認します。

ほとんどの情報が「Redacted for privacy」となっていましたが、気になる情報を以下に記載します。

--------------------------------------

Domain Name: NETAETION-APLUS2.COM

Registrar: Gname.com Pte. Ltd.

Creation Date: 2022-10-28T11:59:43Z

Registrant State/Province: KYOTO

Registrant Country: JP

--------------------------------------

登録者の国情報が日本の京都となっていますが、この情報は鵜呑みできそうにないですね、、

参考:netaetion-aplus2.com-Domain name query- domain name information query- search whois (gname.vip)

 

IPアドレス調査

ドメインに紐づいているIPアドレス(96[.]62[.]102[.]104)のwhois情報等を確認します。

--------------------------------------

ASN:AS64262 - Evocative, Inc.

Registrant Name: VPLS-DAL1

--------------------------------------

urlscanという、対象URLをスキャンできるサイトで同ASNを調査したところ、複数のフィッシングサイトと思われるURLと紐づいていることが分かりました。

参考:AS64262 - EVOCATIVE4, US - urlscan.io

 

証明書調査

最近サーバー証明書について少々学んだので、サーバー証明書の観点からも正規サイトと偽サイトを比較してみます。

  • 正規サイト

Subject DN:
jurisdictionCountry=JP, businessCategory=Private Organization, C=JP, ST=Tokyo, L=Chiyoda-ku, jurisdictionCountry=JP, O=APLUS Co.\, Ltd., businessCategory=Private Organization, serialNumber=1200-01-137521, CN=www.aplus.co.jp

Issuer DN: 
C=US, O=Entrust\, Inc., OU=See www.entrust.net/legal-terms, OU=(c) 2014 Entrust\, Inc. - for authorized use only, CN=Entrust Certification Authority - L1M

Validity: 
2023-01-06 05:58:15to 2024-01-06 05:58:14 (364 days, 23:59:59)

参考:

https://search.censys.io/certificates/0164e7f3027bd00527ff3b19381a30ed07eb21f175e80969b9031a7ec7cb14df

 

  • 偽サイト

Subject DN:

CN=www[.]netaetion-aplus2[.]com

Issuer DN: 

C=US, O=Let's Encrypt, CN=R3

Validity: 

2022-10-28 11:08:57to 2023-01-26 11:08:56 (89 days, 23:59:59)

参考:

https://search.censys.io/certificates/0164e7f3027bd00527ff3b19381a30ed07eb21f175e80969b9031a7ec7cb14df

 

上記結果より、偽サイトの証明書ではLet's Encryptが使用されていることが分かります。

Let's Encryptは3か月ごとに更新しなければならないので、金銭的な理由等がない限り、長期利用が考えられるログインページへの利用は不審に思えます。

また同ドメインの証明書発行日が最も古い日付は、2022年10月28日でした。アプラスのサービス提供期間を考えると、これも不審な点であると考えられます。

 

レピュテーションサイトでの確認

各種レピュテーションサイトを利用して、メールアドレスや偽サイトがフィッシング目的であるか明らかにします。

 

PhishTank

PhishTankは、フィッシングサイトの判定や検証等ができるコミュニティサイトです。Cisco Talos Intelligence Groupによって運営されています。

偽URL「hxxps://www[.]netaetion-aplus2[.]com/signup.php」を検索しましたが、情報はありませんでした。

参考:PhishTank | Join the fight against phishing

 

VirusTotal

VirusTotalは、ウィルスやファイル、URLなどを分析できるサービスです。

ドメイン「www[.]netaetion-aplus2[.]com」を検索したところ、8つのセキュリティベンダーから悪性判定を受けており、一部はフィッシング判定を受けていることが分かります。

試しに偽URLでも検索してみましたが、Fortinetがspam判定しているのみで、一見すると不審なサイトではない・・・?と思えてしまいます。おもしろいですね。

参考:VirusTotal - Home

 

Simple Email Reputation

Simple Email Reputationは、ドメインの寿命や公開情報などから対象のメールアドレスが危険であるか判断できるサービスです。

メールの実際の送信元アドレス「aplus-update-account@whjtmc[.]shop」で検索したところ、RISKYと表示されました。

参考:Simple Email Reputation

 

まとめ

以上の解析・調査結果より、今回受信したメールは、アプラスを装った中国からのフィッシングメールであると考えられます。

 

さいごに

今回ご紹介した解析方法以外にも、様々なオンラインサービスを利用してフィッシングメールか否か判断することができます。

基本的にフィッシングメールは開かない方がいいとは思いますが、解析にご興味がある方は危険性を理解したうえで実施してみてください。

 

他にも有効な観点等ありましたら、ご教授いただけますと喜びます!!!

【Write up】NISM CTF

NISM CTFに参加をしたので、そのwriteupを書きます。

 

NISM CTFって?

NISM(Nagasaki Info-Sec Meetup)と連動した初心者向けCTF

開催期間:

2022年12月17日(土) 14:00(JST) ~ 2022年12月25日(日) 14:00(JST)

参考:NISM (siebold-cyber.net)

 

CTF開催前に2日間にわたるイベントが開催されていたらしく、各分野の問題を解くのに必要な知識やツールの紹介を含む資料が事前公開されていました。

フォレンジック初心者の私からしたら、本当にありがたいです。

ちなみにCTFに関する説明・ハンズオンに関しては、学生の方が実施されていたらしいです。すご~、、、、

 

というわけでWriteup、いきます。

 

Welcome

When is Christmas ?

2022年のクリスマスの日を答えました。

Answer: NISM{2022_12_25}

 

Forensics

Lost USB memory

青空白猫を使用して、pdfファイルを抽出しました。

Answer: NISM{1t_1s_34sy_t0_r3st0r3_d3l3t3d_f1l3s}

※ダウンロードファイルが消えてしまったため詳しく書けずすみません。

 

Hidden files

青空白猫を使用して、各ファイルに隠されている別ファイルからflagを発見。

Answer: NISM{5pl1tt3d_1mp0rt4nt_f1l35_1nt0_53v3r4l_p4rt5}

exif見るのかな、、、とか思っていろいろ調べたけど違った;;

※ダウンロードファイルが消えてしまったため詳しく書けずすみません。

 

A file is opening

volatilityを使います。そして事前配布されていた資料を見て進めます。(ありがとうございます!!)

 

以下コマンドを入力します。これにより、対象プロセスの実行時のコマンドを明らかにします。

python3 vol.py -f "Win10_MEMORY.DMP" windows.cmdline.CmdLine

notepad.exe実行時のコマンドの一部をbase64でデコードします。

Answer: NISM{M3m0ry_dump_t377_u5_5t4t3_0f_th3_PC_1n_th3_m0m3nt}

 

Find Reg Value

OSがインストールされた時間を明らかにします。

最終的に、レジストリハイブ「¥SystemRoot¥System32¥Config¥SOFTWARE」下のレジストリーキー「Microsoft\Windows NT\CurrentVersion」の値を明らかにしたいです。

まず、レジストリハイブのオフセットを表示するために以下コマンドを打ちます。

python3 vol.py -f  "Win10_MEMORY.DMP" windows.registry.hivelist.HiveList

オフセットは「0x8edec008」であると分かりました。

 

次に、判明したオフセットを用いて、レジストリーキー「Microsoft\Windows NT\CurrentVersion」の値を明らかにします。

python3 vol.py -f "Win10_MEMORY.DMP" windows.registry.printkey.PrintKey --offset 0x8edec008 --key "Microsoft\Windows NT\CurrentVersion"

InstallTime、ありました。

これを指定の表記に変換します。

w32tm /ntte 133012080566588255

Answer: NISM{2022_07_02_13_00_56}

 

WEB

超、易問!

与えられたURLにアクセスし、色のリンク(white、redなど)を押したところすべて誤りであるといわれました。

そこで答えはblueか?と思い、URLのクエリにblueを指定しました。

Answer: NISM{7h1s_ls_4_GE7_qu3ry.}

frog,frog,frog

与えられたURLにアクセスしたところ、一部タイトルしかトグルで表示できませんでした。

見たところ「The flag hiding」にフラグがありそうですね。

ということで、Burp Suiteを使用して「The flag hiding」を表示させました。

すると、新しくページが表示されました。

なんとなくページのソースを表示したところ、気になるところを発見しました。

divタグのidに、hlddenとhiddenという箇所があります。

スペルミス?と思いつつhlddenの「君には何が見えている?」が、表示されていないことに気づきます。

ここでcssの中身(/stylesheet.css)が気になったので見たところ、ビンゴ!

Answer: NISM{Why_c4n_y0u_C_m3!?}

 

米食べろ

パッと見SQLか~となったので、情報を取得するために以下を入力しました。

2010' UNION SELECT table_schema,table_name,column_name from information_schema.columns;--

出力結果より、以下情報があることが判明しました。

スキーマ: flags
テーブル:flags
列:id,flag

 

おそらくflag列にフラグが存在すると思い、以下を入力しました。

' UNION SELECT id,flag,null from flags.flags;— 

いくつかある中から、NISM{ではじまるものを選びました。

Answer: NISM{wh3r3_m3t4d4t4_1s_loca7ed_d3p3ndz_on_7he_7ype_of_d@t@b@se.}

 

NW

Electrical talk

q1.pcapを見てみます。

送信元アドレス:192.168.100.2から複数のホストへping要求が飛んでいることが分かります。

フィルタに「icmp.type==0」を指定します。これでping応答をしているホストのIPアドレス(192.168.200.98)が判明しました。

q1_ホスト名対応表.csvより、IPアドレス:192.168.200.98はホスト名:tHekLRUU3dRMH5kJ5Qに紐づいていることが分かりました。

Answer: NISM{tHekLRUU3dRMH5kJ5Q}

 

Insecure communications

q2.pcapを開き、アクセス先(hxxp://network[.]tuda-organization[.]siebold-cyber[.]net/)を特定します。

パケットを見ていると、メルマガ認証と思われるプログラムへ何度かPOSTしていることが分かります。

追跡で中身を見てみます。

ユーザー名とパスワードが何度もPOSTされています。

マジでなんだっけを挟み・・・

それっぽいのを見つけました!

/magazine.htmlに、ユーザーネーム(mu05201914)とパスワード(zaCra-a4a_l9@kU3-8g)を入れます。

きました!

Answer: NISM{like_a_magic_highway_and_network_is_deep_but_fun}

 

Where am I?

192.168.1.0/28のネットワークにおいて、192.168.1.93のネットワークアドレスを答える問題です。
第4オクテットを2進数にすると、01011101です。
第4オクテットの上位4bitまでがネットワークアドレスになります。

Answer: NISM{192.168.1.80}

 

Misc

カラーコード

NISMのロゴ(rgb(0,153,204))のカラーコードを明らかにするために、カラーコード変換webサービスを使用しました。

Answer: NISM{#0099CC}

 

奇妙な文字列

「TklTTXtiQHNlNjRfYzRuX2IzX2VhNWkxeV9kZWMwZGVkfQ==」をBase64でデコードしました。
Answer: NISM{b@se64_c4n_b3_ea5i1y_dec0ded}

 

 

最後に

本CTFの開催と関連する資料を公開してくださった運営の方々、ありがとうございました!!

ちょっとだけ自信につながった、とても思い出深いCTFになりました。

WEBサイトOSINT方法まとめ

SOC業務の調査において、使用頻度が高いサービスをまとめます。

様々な端末から使用できるように、ブラウザからアクセス可能なサービスのみ記載しています。

用途ごとにまとめて書いているので、使用するサービスは重複する場合がありますが、その際はサービスの説明は省略しています。

最終更新日:2023/01/08

 

IPアドレス検索

目的:IPアドレスの所有団体や用途などの情報を収集する。

ICANN Lookup

IPアドレスやASN、ドメイン名(SLDあたりまで)の検索ができる。ICANNにあるIANAという機能が、インターネット上のIPアドレスなどの情報の大元を管理しているため、情報源としてはかなり信頼できる。

ICANN Lookup

JPNIC WHOIS Gateway

日本が所有しているIPアドレスを調べたいときに使用する。

JPNIC WHOIS Gateway - JPNIC

ipinfo.io

IPアドレスの利用目的や該当サーバーの位置情報などが一目で分かる。

Comprehensive IP address data, IP geolocation API and database - IPinfo.io

 

ASN検索

目的:IPアドレス同士の関連性等を明らかにする。

BGPView

ASNに該当するIPアドレス等が分かりやすくまとめられている。ipinfo.ioのASN検索でも同様の結果が得られる。

BGPView - BGP Toolkit and BGP ASN Routing Lookup Tool

 

ドメイン名検索

目的:ドメイン名が登録された時期や、レコード情報、過去結びついていたIPアドレス等の情報を収集する。

ICANN Lookup

ICANN Lookup

ViewDNS.info

過去のIPアドレス情報やレコード情報など検索が可能。

ViewDNS.info - Your one source for DNS related tools!

SecurityTrails - Domain stats

過去のIPアドレス情報やレコード情報など検索が可能。アカウント必須。

Stats - SecurityTrails

Microsoft Defenser Threat Intelligence

Microsoftが提供している脅威インテリジェンス。ある程度は無料で使えるが、アカウント必須。

Microsoft Defender Threat Intelligence

Domain Dossier

レコード情報や紐づいているIPアドレスwhois情報も表示してくれるため、非常に便利。

Free online network tools - traceroute, nslookup, dig, whois lookup, ping - IPv6

DnsDB LOOKUP

IPアドレスドメイン名の検索が可能。使用頻度低め。

dnsdb website server domain name hosting ip address lookup history (dnsdblookup.com)

 

リバースルックアップ

目的:IPアドレスしかわからないときに、実際にアクセスしたであろうサイトのドメイン名を明らかにする。

IPアドレスを検索して、証明書情報からドメイン名を取得する。

Censys Search

DNSlytics

リバースルックアップ以外にも、類似ドメイン名の検索もできる。

 Reverse IP - Find websites hosted on the same IP address, server or subnet (dnslytics.com) 

ViewDNS.info

ViewDNS.info - Your one source for DNS related tools!

SecurityTrails - Domain stats

Stats - SecurityTrails

Microsoft Defenser Threat Intelligence

Microsoft Defender Threat Intelligence

 

サブドメイン列挙

目的:サブドメインを明らかにする。

SecurityTrails - Domain stats

Stats - SecurityTrails

DNSdumpster

サブドメイン列挙だけでなく、グラフ化もしてくれる。

DNSdumpster.com - dns recon and research, find and lookup dns records

crt.sh

証明書情報から、サブドメインを明らかにする。

crt.sh | Certificate Search

Censys search

Censys Search

 

使用サービス・技術列挙

目的:使用されているサービスや技術を列挙する。

BuiltWith

項目ごとに分けられており、見やすい。IPhistoryやGoogleのタグ情報なども表示できる。アカウント割と必須。

BuiltWith Technology Lookup

Wappalyzer

ブラウザ拡張機能でしか使わない。

Find out what websites are built with - Wappalyzer

 

アーカイブ情報取得

目的:過去に公開されていた情報を取得する。

Wayback Machine

過去に公開されていたwebページの情報だけでなく、SNSアーカイブも見ることができる。

保存されているページは、クローラーによる自動保存と、手動により保存されたものが含まれているため、インターネット上にあるすべてのコンテンツが保存されているわけではない点に注意。

マルウェア関連サイトの過去の動きを調査する際に使用できたりもする。

Internet Archive: Digital Library of Free & Borrowable Books, Movies, Music & Wayback Machine

 

その他

その他、使用頻度が高いサービスを紹介する。

urlscan.io

キャプチャとしての魚拓用や、リダイレクト情報、読み込んでいるファイル情報を取得・検索するために使用する。

読み込んでいるJavascriptファイルやpngファイルなどの情報も取得してくれるため、調査対象のファイルが複数の正規のサービスで使用されているか(つまり正規のものなのか)調査することが可能。

urlscan.io

ブログ始めました

はじめまして。refと申します。

 

自分が学習したことをアウトプットする目的で、ブログを始めます。

投稿内容は主に以下を予定しており、セキュリティに関する情報発信をしたいと考えています。

・CTF writeup

・Try Hack Me writeup

・学習のまとめ

・解析レポート

などなど

 

ちょっと堅苦しくなりましたが、ゆるっと楽しくアウトプットしていけたらいいなと思っています。

 

2023年1月1日現在の私のプロフィールを書いておきます。

現在の職:SOCアナリスト

セキュリティ歴:1年とちょっと

趣味:セキュリティ、ゲーム

 

自己研鑽と学習記録をするために作成したようなものなので、飽きずに続けていきたいです。