FFRI Dataset 2019 の紹介

Posted by 茂木 on 2019-10-24
機械学習

はじめに

基礎技術研究部所属、リサーチエンジニアの茂木です。本記事では、FFRI Dataset 2019 についてご紹介させていただきます。

FFRIでは 2013 年から毎年、情報処理学会コンピュータセキュリティ研究会マルウェア対策人材育成ワークショップ (MWS) において、研究者向けにデータセットを配布しています。
これは、データセットを利用した共同研究や、知名度の向上を目的としております。

過去のデータセットにつきましては、FFRI Dataset 2018 の紹介 1/2 でご紹介しておりますので、詳しくはそちらをご参照ください。
ここでは、簡単な説明にとどめておきます。

FFRI Dataset 2013~2017 では、Cuckoo Sandbox で実行したマルウェアの動的解析ログを提供していました。
しかし、ログの取得にかかる時間から提供できる検体数の限界があることや、マルウェアの情報のみの提供となるといった問題点がありました。
そこで FFRI Dataset 2018 では、マルウェア及び良性ファイル(以下クリーンウェア)あわせて 50 万件の表層情報を提供いたしました。
これにより機械学習にもより使いやすくなりました。

一方で、課題もありました。特に pefile によリ取得できる各ファイルの表層情報が、テキスト形式で提供されており、パースが困難でした。

そこで FFRI Dataset 2019 では、FFRI Dataset 2018 からさらなる改善を行いました。

FFRI Dataset 2019 について

FFRI Dataset 2019 は、2018 と比較し以下のような特徴を持ちます。

  • 均衡なデータセットとして(マルウェア: 25 万件、クリーンウェア: 25 万件を)提供
  • 1 行が 1 検体の表層情報に対応する JSON Lines ファイルとして提供
    • 特に、2018 ではテキスト形式で提供されていた表層情報を、LIEF による JSON 形式で提供
      • さらに LIEF は C/C++ から容易に利用できるため、C/C++ で高速な検知器を作りたい、という場合にも有効
  • ファイルサイズ、TLSH 及び strings の追加
  • データセット作成に用いたクリーンウェアとしては AV-TEST の FLARE サービスにより提供されたものを使用

JSON Lines ファイルの 1 行の JSON には、以下の情報が含まれております。JSON のように各キーに対応した説明を文字列で入れていますが、実際のデータはその部分にキーに対応する値が入ります。

各データフィールド:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
{
id: "検体の SHA-256",
file_size: "ファイルサイズ",
label: "マルウェアは 1,クリーンウェアは 0",
date: "収集日 (マルウェアのみ)",
hashes: {
md5: "ハッシュ値",
sha1: "ハッシュ値",
sha256: "ハッシュ値",
ssdeep: "ファジーハッシュ値",
imphash: "インポートテーブルから算出したハッシュ値",
impfuzzy: "インポートテーブルに ssdeep を適用したファジーハッシュ値",
tlsh: "ファジーハッシュ値",
totalhash: "peHash の実装の一種",
anymaster: "peHash の実装の一種",
anymaster_v1.0.1: "peHash の実装の一種",
endgame: "peHash の実装の一種",
crits: "peHash の実装の一種",
pehashng: "peHash の実装の一種"
},
lief: "PE ファイルをパースした結果",
peid: {
PE: "32bit または 64bit",
GUI Program: "GUI プログラムか否か",
Console Program: "Console プログラムか否か",
DLL: "DLL か否か",
Packed: "パッキングの有無",
Anti-Debug: "AntiDebug の有無",
mutex: "mutex の有無",
contains base64: "Base64 文字列の有無",
AntiDebug: "AntiDebug 手法",
PEiD: "マッチした PEiD シグネチャ名"
},
trid: "ファイル種別推定結果",
strings: "ファイルに含まれる文字列"
}

取得に用いたツール:

一方で、課題もあります。一つは主に strings と LIEF 情報により、ファイルサイズがかなり大きくなったことです。データセット全体で 100GB を超えました。もう一つは、LIEF 情報のスキーマを決めるのが困難であることです。
LIEF 情報の JSON は、何重にもネストがあり、各キーはファイルによって異なるものもあります。
利便性と情報量のバランスについては、今後の検討課題です。

データセット作成スクリプト

さて、データセットを用いて、マルウェアの検知器を作成したとします。
さらに手元には、データセットに含まれていないマルウェアとクリーンウェアを持っているとします。
このとき、FFRI Dataset 2018 では、作成した検知器を、手元のマルウェアとクリーンウェアに試すことが、それほど簡単ではありませんでした。
このようなケースを想定し、今回は FFRI Dataset 2019 のデータと同形式のデータをバイナリファイルから作成するスクリプトを公開いたしました。

リポジトリは以下です。

https://github.com/FFRI/ffridataset-scripts

本ツールの利用方法については README をご覧ください。
本ツールによって、データセットの拡張が簡単に行なえ、研究の再現性や汎用性のチェックがしやすくなるのではないかと考えております。

フィードバックがございましたら issue や PR をお出しいただけますと、スクリプトだけでなく、次回以降のデータセットに反映されるかもしれません。一緒にデータセットを改善していければ幸いです。

本ツールそのものは Apache License 2.0 で提供しております。ただし、スクリプトで使用が想定される各ツールについては、各々利用条件をお確かめの上、ご利用ください。

共同研究募集

FFRIでは FFRI Dataset 2019 を利用した共同研究を募集中です。興味のある方はお問い合わせください。