ブログ

FFRI BLOG

2013-01-24 .NET製マルウェアの検出手法に関して


プロダクト開発第二部の岡野です。

ニュースなどで、遠隔操作ウイルス「iesys」といった.NET製のマルウェアが話題となっています。

近年のマルウェア開発言語として.NETは増加傾向にあります。下記のグラフは、G Data社のMalware Report に記載されている.NET製マルウェア(G DataのレポートではMSILと記載された項目)の半年ごとの遷移を抽出したものです。2009年後半を境に、増加傾向にあることがわかります。


.NETファイルは複雑な構造をしており、解析には手間がかかります。しかし、.NETファイルのメタデータにはマルウェア判別に有用な情報が多く含まれており、解析することには大きな意味があります。

我々の部署では、将来的にFFR yaraiを.NETマルウェア対応させるための研究として.NETファイルを分析し、.NETファイル構造を静的に解析することでマルウェアの特徴点となるデータを抽出しました。


.NETマルウェア検出手法

マルウェアが利用するAPIには特徴があることが知られています。そこで、我々の部署ではP/Invokeという仕組みを利用する.NETファイルのうち、マルウェアと通常アプリケーションのAPI出現頻度の差異をもとにマルウェア判別のルーチンを試験的に開発しました。

P/Invokeとは

P/Invokeは.NETアプリケーションがWindowsネイティブのAPIを呼ぶための仕組みです。例えば、ビープ音を鳴らす仕組みは.NETに用意されていないため、.NETアプリケーション側でビープ音を鳴らしたい場合、WindowsネイティブAPIを利用する必要があります。このような場合にP/Invokeを利用してネイティブAPIを利用することができます。


利用APIの特徴

P/Invokeを利用する.NETファイルのメタデータには、その.NETアプリケーションが呼び出すネイティブのAPIをリスト化した情報が含まれています。これはメタデータのうちImplMapテーブルに列挙されます。同様に、どのDLLを利用するかはModuleRefテーブルに列挙されます。


この情報をもとにしたマルウェアと通常アプリケーションそれぞれの利用APIの上位10件は下表のとおりとなり、.NETアプリケーションにおいても、利用するAPIには差異があることがわかります。

順位マルウェア通常アプリケーション
1 GetProcAddress SendMessage
2 LoadLibrary GetPrivateProfileStringA
3 VirtualProtect GetPrivateProfileString
4 ReadProcessMemory SetForegroundWindow
5 GetAsyncKeyState WritePrivateProfileString
6 OpenProcess WritePrivateProfileStringA
7 WriteProcessMemory SHGetFileInfo
8 SetWindowsHookExA SendMessageA
9 MoveFileEx CloseHandle
10 LoadLibraryA ReleaseDC

実験結果

弊社保有の.NETファイルのうち、ImplMapテーブルを保持する検体を抽出しました。マルウェア検体はマルウェア検体交換によって入手した検体18878検体を利用しています。通常アプリケーション検体はネット上のフリーソフト配布ページなどから収集したもの885検体を利用しています。

経験的にマルウェアが使用する割合の高いAPIを選定し、そのうち複数のAPIを利用している検体をマルウェアであると判別しました。その結果、マルウェアに対する検知数は14015件となり検知率は約74%となりました。正常アプリケーションに対する検知数(誤検知)は2件となり誤検知率は約0.22%となりました。

マルウェア正常アプリケーション
検体数 18,878 885
検知数 14,015 2
検知率 74.2% 0.22%




まとめ

P/Invokeを利用する.NETアプリケーションは、メタデータの情報を解析することで利用するAPI名を抽出することができます。

メタデータにはこれ以外にも、アプリケーションで使われているクラス名や変数名などの情報が記載されており、これらを解析していくことでより検出精度を高めることができると期待されます。プロダクト開発第二部では、今後も継続的にFFR yaraiを強化するため、様々な角度から検出精度の向上に取り組んでいきます。



関連記事

「セキュリティ アドバイザリ 2794220」:Internet Exploer脆弱性検証結果

Monthly Research 「Man in the Browser in Androidの可能性」

FFRI-Tech-Meeting #3-3 「Windows 8 Store AppのSandbox AppContainer」