自動的にマルウェアを分類するためには、いくつかの方法が存在するという。以下は、その代表例である。

  • ビヘイビアによる分類
  • N-Grams/N-Permsによる分類
  • Basic Block Distance(Microsoftによる分類法)

このような分類法が生み出されている一方で、それぞれに利点と欠点が存在していると同氏は指摘したうえで、分類法として信頼性の高い方法と、それを活用するシステム(VxClass)について紹介を行った。

今回行った分類のアプローチ(Structural Classification)とは、特定のマルウェアの実行可能ファイルの構造を明らかにしたうえで、他のマルウェアとBinDiff(SABRE Security社製のバイナリ比較ソフト)を使用して類似性を見出すことだという。

具体的には、マルウェアのサンプルをアンパック(難読化ならびにアンチデバッギング技術を施すコードを解除すること)したうえで、実行可能ファイルをディスアセンブルする。そのうえで、ディスアセンブルの結果得られた命令セットの関連性をグラフ化するのだという。このグラフは結果的に関数呼び出しの状況を投影するグラフ(コールグラフ)となり、たとえば、ある関数を別のものに(たとえば、strcpy()をstrncpy()へ)変更したとしても、呼び出し元と呼び出し先との関連性は変わらないという。したがって、このグラフを元に実行可能ファイルの比較を行うことで、似たものどうし、すなわちマルウェアの分類を行うことができるという。

デメリットは、計算時間がかかることだが、関数と関数との結びつきに焦点をあてるだけで精度の高い類似性を見出すことができるという。そして、この方法を実証するために、ハニーポットで収集されたマルウェアをVxClassに分析を行わせた。その結果、数千種のマルウェアが収集/分析された一方で、それらはほんの数十種のマルウェアの派生でしかなかったという。

その一例として、Halver Frake氏は実際にRustokと、あるボットの類似性をVxClassとBinDiffを使用して提示した。そこには、Rustokのコードの中にNOPやレジスタのゼロクリアなどの意味のないコードが追加されただけの類似性の高いコードが、あるボットには使用されていた。

VxClassによる自動分類結果の表示例(出典はこちら )

この方法に関しては、たとえば偽の分岐命令をたくさんいれることで迂回できる可能性があるが、それは一方でマルウェア開発者側の労力を増すことになるという。

同氏は来場者からの「最も驚いた結果は何か?」という問いかけに対しては、2つあるとし、

  • ウイルス対策ソフト会社のマルウェア分類状況とはまったく違う結果が出たこと
  • ボットのコードは別のボットに流用されており、また、ルートキットにも使用されていること

であったと答えた。