はじめに
基礎技術研究室、リサーチエンジニアの中川です。 今回は FFRI Dataset 2021 について紹介します。
FFRIセキュリティでは 2013 年から毎年、マルウェア対策人材育成ワークショップ (MWS) にて、研究者向けデータセットを配布しています。 2017 年以前は Cuckoo Sandbox で実行したマルウェアの動的解析ログを、2018 年以降はマルウェア及び良性ファイル (クリーンウェア) の表層情報を提供しています。
過去のデータセットについては FFRI Dataset 2018 や FFRI Dataset 2019 などの紹介記事がありますのでそちらをご参照ください。 また、FFRI Dataset 2020 については "FFRI Dataset 2020のご紹介" のスライドにまとまっているので、そちらをご参照ください。
今回は、FFRI Dataset 2020 と比較して FFRI Dataset 2021 で強化された点をピックアップして紹介します。
パッカー検知・推定ツールの出力を追加
FFRI Dataset 2020 からの大きな変更点として、パッカー検知・推定ツールの実行結果をデータセットに追加した点が挙げられます。 これは MWS Slack チャンネルで「PEiD では見逃されるケースが多いため、他のパッカー検知・推定ツールの出力も追加してほしい」というフィードバックを受け対応したものとなっています。
複数のパッカー検知・推定ツールを社内で比較検討し、Manalyze と Detect-It-Easy (DIE) を FFRI Dataset 2021 に追加しました。 Manalyze はパッカーの検知用 (既知・未知を問わず) に、DIE は既知パッカーの種別推定用に追加しています。
Manalyze と DIE の出力のサンプルを以下に示します。
Manalyze の出力例
{ "level": 2, "plugin_output": { "info_0": "Unusual section name found: UPX0", "info_1": "Section UPX0 is both writable and executable.", "info_2": "Unusual section name found: UPX1", "info_3": "Section UPX1 is both writable and executable." }, "summary": "The PE is packed with UPX" }
DIE の出力例
{ "arch": "AMD64", "detects": [ { "name": "UPX", "options": "NRV,best", "string": "packer: UPX(3.96)[NRV,best]", "type": "packer", "version": "3.96" }, { "name": "Microsoft Linker", "options": "Console64,console", "string": "linker: Microsoft Linker(14.21**)[Console64,console]", "type": "linker", "version": "14.21**" } ], "endianess": "LE", "filetype": "PE64", "mode": "64", "type": "Console" }
Manalyze については Manalyze の packer プラグインの結果を取得し、データセットに含めています。 packer プラグインにはパックされたバイナリに見られる特徴を検知するルールが複数定義されています。 例えば、見慣れないセクション名が含まれる・既知のパッカーで使われているセクション名が含まれる・IAT のエントリー数が極端に少ない、などです。 このルールにマッチした結果が JSON 形式で出力されています。
Manalyze の packer プラグインのルールは、パックされたバイナリに見られる比較的一般的な特徴を検知するものとなっています。 そのため、未知のパッカーが使われている場合でもある程度検知が可能です。
DIE については DIE のコマンドラインツールの出力結果をそのまま含めています。 DIE は PEiD と同じようにシグニチャベースで既知のパッカーの推定に利用可能です。 FFRIセキュリティでの検討結果によれば、PEiD と比較し、低い誤検知率でほぼ同程度の種別推定の性能を持っていることがわかっています。 詳細はこちらのリポジトリに検討結果がまとまっておりますので、ご参照ください。
LIEF のバージョンをアップデート
もう 1 つの大きな変更点として、利用している LIEF のバージョンをアップデートした点が挙げられます。 これにより、デジタル署名やリソースセクションのパース処理が強化され、出力結果に含まれる情報が増加しました。
デジタル署名のパースに関して、ソースコードを見ればわかりますが (デジタル署名のパース処理の現在の実装と作り直される前の実装)、パース処理がほぼ 0 から作り直されています。 LIEF の開発者によるブログ記事にも説明がありますので、興味のある方はそちらもご参照ください。
また、今回のアップデートで、これまで取得できていなかった以下の 3 種類のリソースが取得できるようになっています。 (余談ですが、これは私個人の OSS 活動により加えられた変更です。)
- string table
- html
- accelerator
残念ながらまだ全部のリソースをサポートしているわけではありません。 現在、徐々にサポート可能なリソースの種類を増やしている段階です。
データセット作成スクリプトの並列化・FEXRD の提供
データセットを拡張できるように、データセット作成スクリプトも FFRI Dataset 2021 向けに更新しました。
https://github.com/FFRI/ffridataset-scripts/releases/tag/v2021.1
DIE や Manalyze 追加の他、Joblib を用いた並列実行をサポートしました。 従来のシリアル実行と比較し、並列数 2 で約 1.5 倍、並列数 4 で約 1.7 倍高速化されています。
また、FFRI Dataset を利用した機械学習の研究を支援するために、FEXRD を公開しました。 これは FFRI Dataset の JSON 形式のデータを固定長の数値ベクトルに変換するためのライブラリとなっています。
もちろん、FFRI Dataset 2021 にも対応しており、すでに利用可能です。
https://github.com/FFRI/FEXRD/releases/tag/v2021.2
使い方をまとめたドキュメント・example も用意していますので、FEXRD を使い FFRI Dataset を使った機械学習の研究を簡単に始められるようになっています。 バグの報告などは GitHub であげていただければ随時対応可能です。
共同研究募集
FFRIセキュリティでは FFRI Dataset を利用した共同研究を募集しています。 FFRI Dataset 2019 では 50 万件提供していたデータセットですが、FFRI Dataset 2020 以降は 15 万件にまで減少してしまいました。 ですが、50 万件のデータセットを使っての共同研究を行いたいという方がいらっしゃれば、個別に対応可能です。 興味のある方はぜひお問い合わせください。