サイバーセキュリティや人工知能(機械学習等)を中心に、最新技術を研究しています。
[目次]
推薦の言葉
まえがき
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
記述に際しては、細心の注意をしたつもりですが、間違いやご指摘がありましたら、こちらからお知らせいただけると幸いです。