wivern ロゴ

サイバーセキュリティ研究所

サイバーセキュリティを中心に、軍事、防犯、サーバーの管理と監視、その他、最新技術を研究しています。


アナライジング・マルウェア

マルウェア解析技術のバイブル

アナライジング・マルウェア

[目次]
推薦の言葉
まえがき
1章 ファイルをダウンロードするマルウェアの解析
2章 パックされているマルウェアの解析
3章 動的解析を妨害するマルウェアの解析
4章 コードインジェクションをするマルウェアの解析
5章 カーネルモード(Ring0)で動作するマルウェアの解析
索引
付録:マルウェア解析のためのWin32 APIチート表

[書評]
2015年末時点で、マルウェアの解析技術を学ぶための唯一の技術書です。
無駄のない内容や構成ですが、一定レベル以上の OS やアセンブラの知識がないと完全理解は難しいです。

また、2010年という最近の発刊にも関わらず、記載されているリンクがことごとく切れているために、自力で到達する必要があり、それでも100%は無理でした。
参考までに、私が調査できた情報を勉強メモとして記しておきます。

下記以外にも、記述不足だったりで記載内容を再現できない個所も散見されましたが、全体としては類書が見当たらないことを差し引いても、素晴らしい本だと思います。
これからマルウェア解析を学びたい人には必読の一冊です。
私も本書の記載に最新状況を取り込んで、実践を重ねることで自分なりのマルウェア解析の方法論を構築したいと思います。

出版社のサポートサイト
http://www.oreilly.co.jp/books/9784873114552/

著者のサポートサイト
https://sites.google.com/site/analysingmalware/

[参考文献]
マイケル・シコルスキー&アンドリュー・ホニッグ著
『Practical Malware Analysis: The Hands-On Guide to Dissecting Malicious Software』

 Amazon  楽天ブックス

[勉強メモ(2016/01/04:追記)]

・マルウェアの入手サイト
VX heavens       http://vxheaven.org/
Offensive Computing  http://www.offensivecomputing.net/
SHadowserver      https://www.shadowserver.org/wiki/

[追記]
Malwaretips.com    http://malwaretips.com/forums/virus-exchange-malware-samples.104/
Clean-mx.de      http://support.clean-mx.de/clean-mx/viruses.php
Vxvault.net      http://vxvault.net//ViriList.php

[参考]
「マルウェア検体を入手する方法について」ネットセキュリティブログ
http://www.japan-secure.com/entry/blog-entry-198.html

・ハニーポットソフトウェア
nepenthes    ERR_CONNECTION_TIMED_OUT
Capture-HPC   https://projects.honeynet.org/capture-hpc

[追記]
Amun    http://amunhoney.sourceforge.net/  低対話型ハニーポット
Nepenthes  http://nepenthes.carnivore.it/    低対話型ハニーポット
Dionaea   http://dionaea.carnivore.it/     低対話型ハニーポット(Nepenthes の後継)
Glastopf  http://glastopf.org/         Web ハニーポット
Kippo    http://code.google.com/p/kippo/   SSH ハニーポット

「ハニーポット観察記録(6)」www.morihi-soc.net
http://www.morihi-soc.net/?p=70

・ファイルの判別

fileコマンド
TrID    http://mark0.net/soft-trid-e.html
Stud_PE   http://www.cgsoftlabs.ro/studpe.html

・動的解析

Webサービス
Virus Total   https://www.virustotal.com/ja/
CWSandbox    http://cwsandbox.org/
Anubis      http://anubis.iseclab.org/

[追記]
VirusTotal             http://www.virustotal.com/
CWSandbox              http://www.cwsandbox.org/
Planet Security - Portscan     http://www.planet-security.net/index.php?xid=%F7%04T%BDP%92nD
Audit My PC - Firewall Test     http://www.auditmypc.com/
Der Keiler: Free Online-Portscanner http://www.derkeiler.com/Service/PortScan/
Shields UP!             https://www.grc.com/x/ne.dll?bh0bkyd2
Email Security Testing Zone     http://www.windowsecurity.com/emailsecuritytest/

[参考]
「第3回 サイトでPCのセキュリティ診断」日経コンピュータ
http://itpro.nikkeibp.co.jp/article/COLUMN/20071206/288981/

・ツール
[BinText]
http://www.mcafee.com/jp/downloads/free-tools/bintext.aspx?view=legacy

[LordPE]
http://www.woodmann.com/collaborative/tools/index.php/LordPE
http://www.woodmann.com/collaborative/tools/images/Bin_LordPE_2007-10-21_1.48_LordPE_1.41_Deluxe_b.zip
http://www.woodmann.com/collaborative/tools/images/Bin_LordPE_2010-6-29_3.9_LordPE_1.41_Deluxe_b.zip

[PEiD]
http://woodmann.com/BobSoft/Pages/Programs/PEiD
http://www.softpedia.com/get/Programming/Packers-Crypters-Protectors/PEiD-updated.shtml

userdb.txt
http://reverse-engineering-scripts.googlecode.com/files/UserDB.TXT

Tuts4YouサイトのUnPackMeフォーラム
http://forum.tuts4you.com/index.php?showforum=37

・デバッガによるアンパック
TitanEngine
http://www.reversinglabs.com/products/TitanEngine.php

Immunity Debugger
http://www.immunityinc.com/products/debugger/index.html

・自動アンパック
OllyScript
http://www.openrce.org/downloads/details/106/OllyScript

http://www.openrce.org/downloads/download_file/106 から OllyScript-0.94.zip をダウンロードして解凍すると、OllyScript 0.94.7z が得られ、これを解凍すると OllyScript.dll が得られる。
OllyDbg のプラグインフォルダが存在しないが、OllyDbg のインストールフォルダでOK。

Tuts4YouサイトのOllyScriptアーカイブ
https://tuts4you.com/download.php?list.53

RL!depacker
http://rce.su/files/crk/u/rldepacker_1.5.rar

※TitanEngine によるアンパックは動作確認できず。

Process Monitor
http://technet.microsoft.com/ja-jp/sysinternals/bb896645.aspx

Malcode Analysis Pack
http://www.woodmann.com/collaborative/tools/index.php/Malcode_Analysis_Pack

• ShellExt - explorer shell extensions
• socketTool - manual TCP Client for probing functionality.
• MailPot - mail server capture pot
• fakeDNS - spoofs dns responses to controlled ip's
• sniff_hit - HTTP, IRC, and DNS sniffer
• sclog - Shellcode research and analysis application
• IDCDumpFix - aids in quick RE of packed applications
• Shellcode2Exe - embeds multiple shellcode formats in exe husk
• GdiProcs - used to detect hidden processes
• jsDecode - IE based script decoder
• finddll - search processes for loaded dll
• Virustotal - bulk hash lookups or single file search from explorer right click menu.
• LoadLib - Load Dlls into memory from the command line.
※詳細は、ヘルプを参照のこと

SysAnalyzer
http://www.woodmann.com/collaborative/tools/index.php/SysAnalyzer

FlyPaper
見つからず

[参考]
http://d.hatena.ne.jp/ukky3/20080818/1219038951

BlackManta
https://tuts4you.com/download.php?view.2939

IDA Pro
https://www.hex-rays.com/products/ida/index.shtml

IDA Pro 購入情報:http://masatokinugawa.l0.cm/2015/04/ida-pro.html

公式:https://www.hex-rays.com/cgi-bin/quote.cgi
日本代理店:http://www.altech-ads.com/Others/IDAPro.htm
※買うなら、Named バージョン

参考書籍:「IDA Pro Book : The Unofficial Guide to the World's Most Popular Disassenbler」
http://www.idabook.com/

Microsoft PEファイルフォーマット仕様書
http://www.microsoft.com/whdc/system/platform/firmware/PECOFF.mspx
→pecoff_v83.docx ダウンロード

PEファイルフォーマットの全体像(OpenRCE)
http://www.openrce.org/reference_library/files/reference/PE%20Format.pdf

バイナリエディタ「Stirling」
http://www.vector.co.jp/soft/win95/util/se079072.html

sample.c を以下に改変
#include

int APIENTRY WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nCmdShow)
{
  MessageBox(NULL, TEXT("Hello World !"), TEXT("Hello World !"), MB_OK) ;
  return 0 ;
}

[参考]
http://gurigumi.s349.xrea.com/programming/visualcpp/win32api2010_1.html

DUMPBIN オプション
https://msdn.microsoft.com/ja-jp/library/756as972.aspx

Visual Studio( Visual Studio Community )
http://www.microsoft.com/japan/msdn/vstudio/express/

LoadPE
http://www.woodmann.com/collaborative/tools/images/Bin_LordPE_2007-10-21_1.48_LordPE_1.41_Deluxe_b.zip
http://www.woodmann.com/collaborative/tools/images/Bin_LordPE_2010-6-29_3.9_LordPE_1.41_Deluxe_b.zip

UPX
http://upx.sourceforge.net/

OllyDbg
http://www.ollydbg.de/

OllyAdvanced
http://openrce.org/downloads/details/241/Olly_Advanced

OllyScript
http://openrce.org/downloads/details/106/OllyScript

OllyDump
http://openrce.org/downloads/details/108/OllyDump

ImportRec
http://www.woodmann.com/collaborative/tools/index.php/ImpREC

ImportStudio
https://tuts4you.com/download.php?view.3438

OllyBonE
http://www.joestewart.org/ollybone/tutorial.html

p.88
OllyBonE の改変対象のソースファイルは、「ollybone-0.1\driver\ollybone.c」。

p.92 アンパックの実践(Windows7/64bit環境)
① OllyDbg + OllyDump + ImportRec:成功?
(1)パックした calc-upx.exe が起動できない(起動してもすぐに終了)。
(2)OllyDbg から「開く」で読み込んだら「恐らく32ビットPEファイルではありません。それでもロードしますか?」と出て、ロードしても「開始できません」と怒られる。
(3)Windows7/32bit環境からコピーしてきた calc.exe をパックした calc-upx.exe でも起動できない(起動してもすぐに終了)。
(4)OllyDbg から「開く」で読み込むことはできたが、ImportRec をアタッチする形で実行するので意味がない。
(5)対象を stirling.exe をパックした stirling-upx.exe に変更。
(6)アタッチしてもエントリポイントと思えないアドレス( pushad が見当たらない)を開くので、一旦終了。
(7) stirling-upx.exe を「開く」で読み込んで、エントリポイントから OEP と思われる「0x00469140」まで進めて OllyDump でダンプを保存(stirling-upx-dump.exe)。
(8)再度 stirling-upx.exe をアタッチして「0x00469140」を開く。
(9) ImportRec を起動して stirling-upx.exe をアタッチ。
(10)[IAT infos needed] の OEP 欄に( 0x00469140 の) 69140 を00069140 と入力して[IAT AutoSearch]をクリック
(11)「Found address which may be in the Original IAT. Try 'Get Import'.」と表示されるので OK ボタンをクリック。
(12)[Get Imports]をクリックして IAT の情報を読み込む。
(13)取得した IAT の情報でメモリダンプの IAT を修復するために[Fix Dump]をクリックして stirling-upx-dump.exe を指定。
(14)IAT の再構築完了

② OllyDbg + ImportStudio:失敗
(1)OllyDbg で stirling-upx.exe を「開く」で読み込んで、エントリポイントから OEP と思われる「0x00469140」まで進める。
(2)ImportStudio プラグインを呼び出す。
(3)上向き矢印のボタンをクリックして、[Dump process]ダイアログを呼び出す。
(4)右矢印ボタンで現在の EIP をエントリポイントとして取得。
 →EIP は「469140」なのに「469141」として取得されるで「469140」に修正。
(5)[Dump]ボタンをクリックしてダンプを保存(stirling-upx-dump.exe)。
(6)虫眼鏡のアイコンをクリックして[Grab imports from loaded module]ダイアログを呼び出す。
(4)[IAT Search range] の右矢印ボタンで現在の EIP をエントリポイントとして取得。
 →EIP は「469140」なのに「49C000」として取得されるがそのまま。
(5)下にある[Search]ボタンをクリック。
(6)フロッピーディスクのボタンをクリックして IAT を再構築しようとしたら、「Can not fix imports if there are unresolved imports!」と怒られて再構築できず。

[疑問点]
別に実行させているプロセスにアタッチすることでアンパックを行おうとしているが、「別に実行させている=マルウェア内で展開が済んでいる」状態での作業に意味があるのか?
既に実行させているため、OllyDbg でトレースしても OEP まで到達できない。
既に展開と実行がされている(= OEP を通り過ぎている)ために OEP ではブレークできない。

・アンパックを妨害するテクニック
ANTI-UNPACKER TRICKS
http://pferrie.tripod.com/papers/unpackers.pdf

An Anti-Reverse Engineering Guide
http://www.codeproject.com/KB/security/AntiReverseEngineering.aspx

Understanding the Import Address Table
http://sandsprite.com/CodeStuff/Understanding_imports.html

・動的解析ツール

Process Explorer
https://technet.microsoft.com/ja-jp/sysinternals/processexplorer.aspx

Windows Sysinternals
http://technet.microsoft.com/ja-jp/sysinternals/default.aspx

Fake RDTSC
http://deroko.phearless.org/ring0.html
http://deroko.phearless.org/fakerdtsc.zip
http://deroko.phearless.org/fakerdtsc.rar

Wine Project
http://source.winehq.org/source/include/winternl.h

p.130 3行目(目次も同様)
誤:「3.5.2 PEB!NtGlobalFlags」
正:「3.5.2 PEB!NtGlobalFlag」

p.132 12行目
誤:「CheckRemoteDebuggerPreesnt」
正:「CheckRemoteDebuggerPresent」

「仮想な背中」:ERR_NAME_NOT_RESOLVED

Detect if your program is running inside a Virtual Machine
http://www.codeproject.com/KB/system/VmDetect.aspx

.vmx ファイルのパラメータ
http://sanbarrow.com/vmx/vmx-advanced.html

「Red Pill」Joanna Rutkowaska
http://www.securiteam.com/securityreviews/6Z00H20BQS.html

※GDT( Global Descriptor Table )による仮想環境の検出については記載がない。

SetWindowsHookEx
http://msdn.microsoft.com/en-us/library/ms644990%28VS.85%29.aspx (英語)
https://msdn.microsoft.com/ja-jp/library/cc430103.aspx (日本語)

DebugView
http://technet.microsoft.com/en-us/sysinternals/bb896647.aspx (英語)
https://technet.microsoft.com/ja-jp/sysinternals/bb896647.aspx (日本語)

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\Windows\AppInit_DLLs
http://support.microsoft.com/kb/197571/en-us/ (英語)
https://msdn.microsoft.com/ja-jp/library/dd744762(v=vs.85).aspx (日本語 Windows7/WindowsServer2008R2)

LoadAppInit_DLLs
https://msdn.microsoft.com/ja-jp/library/dd744762(v=vs.85).aspx (日本語 Windows7/WindowsServer2008R2)

BHO
http://www.wischik.com/lu/programmer/bho.html

DllRegisterServer
http://msdn.microsoft.com/ja-jp/library/cc357210.aspx

CreateRemoteThread
https://msdn.microsoft.com/ja-jp/library/cc429075.aspx

Autoruns
https://technet.microsoft.com/ja-jp/sysinternals/bb963902.aspx

※本書では、カーネルモードで動作するマルウェアの解析環境として、
VMware Server、ホスト OS:WindowsXP(SP3) 、ゲスト OS:WindowsXP(SP2)
を使用しているが、同様の環境を再現できなかったので、
VMware Player、ホスト OS:Windows7(64bit) 、ゲスト OS:WindowsXP(SP3)(※)
を使用した。

[参考]
仮想環境との WinDbg 仮想シリアル接続について
http://hyphenlink.blog48.fc2.com/blog-entry-92.html

(※)WindowsXP 仮想マシンダウンロード(30日間有効:英語版)
https://dev.windows.com/ja-jp/microsoft-edge/tools/vms/windows/

WinDbg の開発環境を Windows7 環境下で整備するために、
https://msdn.microsoft.com/ja-jp/windows/hardware/gg454513 から、
Visual Studio Community 2013 with Update 5、
Visual Studio 2013 Language Pack(他の製品の関係でウマくいかなかった)、
WDK 8.1 Update (Windows 8.1、8、7 ドライバー用)、

をダウンロードしてインストールした。

Windows Driver Kit (WDK)
https://msdn.microsoft.com/en-us/library/windows/hardware/ff557573(v=vs.85).aspx(英語)
https://msdn.microsoft.com/ja-jp/library/windows/hardware/ff557573(v=vs.85).aspx(日本語)

[参考] WinDBG コマンド
http://www.cagylogic.com/archives/2008/10/15000057.php

しかし、WDK の Build Environment コマンドラインコンソールの立ち上げがわからなくて、本書記述の検証はできなかった。

LiveKd
https://technet.microsoft.com/ja-jp/sysinternals/livekd.aspx


記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。


→「徳丸浩のWebセキュリティ教室」
←「暗号解読(下)」


« 戻る