🐷

Memory Analysis - Ransomware (BTLO WriteUp)

2022/04/28に公開約4,500字

概要

これはBlue Team Labs Onlineのチャレンジ問題、「Memory Analysis - Ransomware」のWriteUpです。

問題背景

「アカウント・エグゼクティブはとても苛つき怒った様子でSOCに連絡してきました。曰く、コンピュータ内部の全てのファイルにアクセスすることができず、また、ファイルが暗号化されたことを示すポップアップが出現し続けるとのこと。あなたは、彼のコンピュータをネットワークから切断し、メモリダンプを取得、Volatilityを使用して分析を開始しました。ランサムウェアがどのように動作するか、そしてどのように防ぐか、調査を継続せよ!」
とのことで、メモリダンプが与えられています。全7問。
よくある話ですが、誰に責任があるにせよ分析など対応を行う人間に対して怒りとか苛つきとか負の感情を向けることは何のメリットもないのでやめてほしいですね。コンピュータの対応で手一杯なのに人の感情まで面倒を見ないといけないというのはかなり辛い状況です……。

問題の解説

とりあえずVolatilityが必要そうなのでダウンロードしてきます。Volatilityってなんぞ?という人はググりましょう。私もググりました。
どうもpythonの2系で書かれたvolatilityと3系で書かれたvolatility3がある模様です。
後々わかることですが今回の問題は無印volatilityを想定して作られているみたいです。が、無印のほうはサポートが切れているそうなので3のほうを落としてきましょう。なおpython2系自体もすでにサポートは切れています。

https://github.com/volatilityfoundation/volatility3.git
をgit cloneでコピーしてきます。
どうでもいいことですが、開発元のVolatility Foundation、揮発性のあるFoundationってかなり怖い名前ですね……。

とりあえずダウンロードしたものの、私の如き初心者はどうしたら良いものかと途方にくれます。とりあえずPATHは通した。
で、問題をみたところ、なんとコマンドが指定されています。初心者にはありがたい教育的配慮。

Q1

Run “vol.py -f infected.vmem --profile=Win7SP1x86 psscan” that will list all processes. What is the name of the suspicious process?
すべてのプロセスをリスト化する“vol.py -f infected.vmem --profile=Win7SP1x86 psscan” を実行せよ。不審なプロセスの名前は何か?

無心で“vol.py -f infected.vmem --profile=Win7SP1x86 psscan”を打ち込むとエラーを吐きます。というのも、どうやらこのコマンド、無印のvolatilityのものの様子。
volatility3ではprofileを廃止して分析毎に自動で生成する仕組みになった模様。
(参考:https://blogs.jpcert.or.jp/ja/2021/08/volatility3_offline.html)
というわけで、嬉々としてvol.py -f infected.vmemとだけ打ち込みます。

きました。スゲー!かっけー!
で、怪しいって何を以て怪しいとすればいいんですか……
と思いながら適当にスクロースしてみると

なんかいますけど。そんな怪しいことある?
正直ネットワーク上の挙動以外は詳しくないのですが、WannaCryとかそのあたりでしょうか。なんだよDecryptorって。Encryptorなんじゃないの。
ということで@WanaDecryptorと入力すると無事正解でした。

Q2

What is the parent process ID for the suspicious process?
その不審なプロセスの親プロセスIDはなんでしょう?
も、見たままPPIDの2732を入力すると正解です。
教育的配慮に富んだ問題です。

Q3

What is the initial malicious executable that created this process?
このプロセスを作成した、最初の不審な実行ファイルは何か?
先程、不審なプロセスのプロセスIDが判明したので、PIDが2732になっているものを探せば良いだけです。
目grepしてor4qtckT.exeがそれっぽいので、入力すると無事正解です。

Q4

If you drill down on the suspicious PID (vol.py -f infected.vmem --profile=Win7SP1x86 psscan | grep (PIDhere)), find the process used to delete files
不審なPIDについて掘り下げ(vol.py -f infected.vmem --profile=Win7SP1x86 psscan | grep (PIDはここ))、ファイル削除に用いたプロセスを見つけよ。
今回もコマンドまで指定されています。なんて優しいんだ……!
不審なPIDってどれだろうな、とちょっと悩みつつ、まあファイル削除をするってことはさっきのexeファイルから呼び出されるんじゃないかな、と予想して下記のコマンドを入力します。
例のごとく、volatility3用にコマンドは変えます。
vol.py -f infected.vmem psscan | grep 2732
結果はこちら。

ググってみたところ、taskdl.exeはwannaCry系で使われる、一時ファイルを削除する機能を持ったプログラムのようです。

https://www.dell.com/ja-jp/blog/secureworks-wcry/
というわけで、taskdl.exeを入力すると正解です。

Q5

Find the path where the malicious file was first executed
不審ファイルが最初に実行されたパスは?
psscanにはパスの情報は含まれないので、ちょっと突き放された感があります。手取り足取り全部やってあげることが教育ではないということか。
で、適当にググると、どうやらdlllistというプラグインでパスの情報が取得できるっぽいという情報を得ます。

http://sectanlab.sakura.ne.jp/sendaictf/resource/seminartext_lab01.pdf
どうもvolatility3ではdlllistでpidを指定して分析はできなさそうなので、先程と同じくgrepでpid:2732に関係するものを抽出します。
vol.py -f infected.vmem dlllist | grep 2732

ということで、一番上の行にor4qtckT.exeの実行されたパスが記載されています。
正解はC:/Users\hacker\Desktop\or4qtckT.exeでした。

Q6

Can you identify what ransomware it is? (Do your research!)
このランサムウェアが何か特定できるかい?(てめーで調べな!)
taskdl.exeでググったらWannaCry関連の記事がたくさん出てきます。マルウェアの名称に関しては、色々な呼ばれ方があるし、亜種がいくらでも出てくるので、名称を特定するという作業は難しいものがあります。誤ったマルウェアとして判断してしまうことで、対策や影響範囲の特定も間違ってしまうかもしれませんので、慎重になる必要があります。。
が、とりあえずそんなことは無視してWannaCryと入力しておきます。無事、正解です。

Q7

What is the filename for the file with the ransomware public key that was used to encrypt the private key? (.eky extension)
プライベート鍵を暗号化するために使用されたランサムウェアの公開鍵が含まれるファイルのファイル名は何か?(拡張子は.eky)
これ、たぶんvolatility3の仕様の違いやバグ?の影響だと思いますが正攻法では見つけられませんでした。やり方あれば教えていただきたい……
というのは、おそらくこれは怪しいプロセスのメモリをダンプして".eky"というキーワードを検索していくのではないかと思います(他所のwrite upを見る感じそう)。
が、これまた恐らく、解答である00000000.ekyが含まれているであろうpid:4060 taskdl.exeについてのダンプが取れません。
pidを指定してのダンプの方法にはwindows.pslist.PsListプラグインや、先程使ったpsscanプラグインによる方法などがありますが、前者ではpid:4060を見つけられず、後者はpidを指定するとエラーはいて落ちます。その他にはfilescanで.ekyをgrepする方法などが考えられますがそもそもfilescanがうまく動かない様子です。(自分の環境の問題?)
ということで、strings infected.vmem | grep .ekyを適当にtxtファイルにリダイレクトして、出てきたものを突っ込んで正解でした。

感想

volatilityの使い方から手取り足取り丁寧に教えてくれる感じの問題でした。
3系を使っているとちょっと勝手が違いますが、勉強になってよいのではないでしょうか。
最後の設問は良い解き方あれば教えていただきたい。

Discussion

ログインするとコメントできます