python製マルウェアをデコンパイルしてみたら、珍しい子だった件

きっかけ

とあるイベントでpythonで書いたコードをpyinstallerでexe化したmalwareのデコンパイルに遭遇した。

少し前に、別件でpython製のmalwareを見かけて放置していたので、そいつをデコンパイルしてみる。

準備

tool

githubから以下のtoolをダウンロード

https://github.com/countercept/python-exe-unpacker

モジュールを追加する。python2系だって。

pip2 install --user -r requirements.txt

uncompyle6をインストール。flareVMには最初から入っていた。

pip2 install uncompyle6

対象のmalware

この検体は元々野生でjarファイルで設置されており、実行後に何度かのstepを経てpython製malwareが生成されたもの。野生のmalware観測中に遭遇して、放置していた子です。この度、再度探してきました。

localで生成されたので、なんとなくhash値を伏せておきます。

デコンパイル

1.exeをpyinstxtractorにて展開

PS C:\python-exe-unpacker-master> C:\Python27\python.exe .\pyinstxtractor.py .\1.exe
[*] Processing .\1.exe
[*] Pyinstaller version: 2.1+
[*] Python version: 27
[*] Length of package: 5526223 bytes
[*] Found 28 files in CArchive
[*] Beginning extraction...please standby
[*] Found 340 files in PYZ archive
[*] Successfully extracted pyinstaller archive: .\1.exe

You can now use a python decompiler on the pyc files within the extracted directory

ヘッダを追加

展開されたフォルダを見てみる。

今回は”mein”がデコンパイル対象。

python2.7で記述されたことがわかる。

sqlite、暗号関連、sslときたら、chromeのデータを読み取るのに使用した気がする。VTでもstelerの名前が出ていたため、stelerの可能性が高い。

このmeinはヘッダが欠けているため、手で追記する必要がある。

ネットで調べたヘッダ情報にはめられたので、自分で作って移植することにします。まずは、pythonのversionをあわせます。

左がPC上のpython、右がmalwareのpythonのバージョン(dll)です。追加でpythonをインストールする必要はなさそうです。てか、windowsだと、異なるpythonのバージョンを共存させれるんですね。。

pycを作成するには、適当なスクリプトを用意して以下を実行する

> python -V
Python 2.7.1
> python -m py_compile .\test_python27.py

するとpycが作成される。バイナリエディタで見てみる

この8byteが2.7.16利用時のヘッダであると想定される。meinにヘッダを足して、mein.pycとして保存する。

で、このmein.pycをuncompyle6でデコンパイルする

> uncompyle6.exe .\mein.pyc > mein.py

Excellent!!!!!!!!

後は、12000行を読めば以上終・・・・えっ、長いって!?w

malwareの特定

opensourceのtoolが悪用されていそう。

https://github.com/AlessandroZ/LaZagne

こちらのお方をカスタムしていると思います。

で、前段のjarと、美味しいラザニアだという事がわかったので、再びOSINT検索です。

https://www.zscaler.com/blogs/research/qealler-new-jar-based-information-stealer

Qeallerとかいう新しめのmalwareだそう。12000行の速読で疲れたよ、パトラッシュ。

レアっぽいけど、洗練されたmalwareとはいえないな〜w

おまけ

Pyinstallerの使い方は下のページが参考になる。

ちなみに、自分の環境では、python3系の場合、upxを無効にするオプションをつけないとexe化できなかった。多分upxのpathの問題な希ガス

pyinstaller.exe .\target.py --onefile --noupx