NSRL(National Software Reference Library)はアメリカ国立標準技術研究所(NIST: National Institute of Standards and Technology)主導のプロジェクトです。様々なソフトウェアのハッシュ値で構成される参照用データセット(RDS: Reference Data Set)を作成し、調査対象のファイルと照合することにより調査の信頼性、効率の向上を実現しています。
RDSのフォーマットについては、2021年にVersion 3(v3)が発表されましたが、それまで長い間Version 2(v2)で運用されていたこともあり、2024年現在でも多くのフォレンジックツールはRDSv2形式を想定しており、RDSv3をv2に変換して利用しています。
本ページでは初めにv2のフォーマット、構成を簡単に説明し、その後v3での変更点を紹介します。
RDSv2
RDSv2のフォーマットは下記のホワイトペーパーで解説されています。
Data Formats of the NSRL Reference Data Set (RDS) Distribution
https://www.nist.gov/system/files/data-formats-of-the-nsrl-reference-data-set-16_0.pdf
RDSv2は4種類のファイル(レコード)で構成されます。各ファイルの役割とファイル内のフィールドは以下の通りです。
- NSRLFile.txt - ファイル単位
"ハッシュ値(SHA-1, MD5, CRC32)、ファイル名、ファイルサイズ、製品コード、OSコード、スペシャルコード" - NSRLMfg.txt - メーカ単位
"メーカコード、メーカ名" - NSRLOS.txt - OS単位
"OSコード、OS名、OSバージョン、メーカコード" - NSRLProd.txt - 製品単位
"製品コード、製品名、製品バージョン、OSコード、メーカコード、言語、タイプ"
この4種類のうちNSRLFile.txtがRDSの中枢データです。NSRLFile.txt内の製品コードはNSRLProd.txtと、OSコードはNSRLOS.txtと連動していて、それぞれの構成情報が記載されています。また、NSRLOS.txt内のメーカコードはNSRLMfg.txtに記載されています。
各フィールドに格納できる型としては、ファイルサイズと製品コードのみ数値型(integer)で、その他のフィールドは全て文字(列)型(char)と定義されています。
スペシャルコードはファイルに対して個別にフラグを設定するためのフィールドで、maliciousを示す"M"やspecialを示す"S"が設定できるようになっています。
RDSv3
RDSv3のフォーマットは下記のホワイトペーパーで解説されています。
National Software Reference Library Reference Dataset Version 3
https://s3.amazonaws.com/rds.nsrl.nist.gov/RDS/RDSv3_Docs/RDSv3.pdf
RDSv2との大きな変更点は以下の通りです。
- SQLiteデータベースを採用
- SHA-256の追加
- CRC-32の除外
- アプリケーションの様々な付属情報に対応
RDSv3 ER図
RDSv3からRDSv2への変換
RDSv3形式のデータをRDSv2に変換する手順が以下のドキュメントに記載されています。
https://s3.amazonaws.com/rds.nsrl.nist.gov/RDS/RDSv3_Docs/RDSv3_to_RDSv2_text_files_LINUX-OSX.pdf
変換に必要なテーブル、フィールドのみで構成されるminimalと呼ばれるサブセットの形式が公式サイトで提供されているため、RDSv2に変換する場合はminimalを入手して手順に従い変換することになります。
RDSv3 minimal ER図
sqlite3コマンドを使いcsv形式で対象となるフィールドのデータを抽出や置換をしていますが、元ファイルが数十GBと大きく変換にはそれなりの時間がかかります。
NSRLJPのフォーマット
公式のNSRLプロジェクトではRDSv3に移行しRDSv2での提供はなくなっています。しかし、実際の利用シーンではRDSv2に対応したツールが大半のため、ユーザ側でRDSv3をRDSv2に変換して対応しているのが現状です。そのため、RDSv3が普及するまでNSRLJPはRDSv2で提供します。
NSRLJPではフォレンジック調査に不要と思われる既知のデータのみを対象とする方針とし、マルウェアやグレーな判定をされやすいソフトウェアを対象から除外し、SpecialCodeは全てブランク(normal)としています。
NSRLJPではNSRLと干渉しないようにメーカコード、OSコード、製品コードを新しく割り当てています。
- メーカコード 5001〜
- OSコード 1001〜
- 製品コード 50001〜