解析メモ

マルウェア解析してみたり解析に役に立ちそうと思ったことをメモする場所。このサイトはGoogle Analyticsを利用しています。

VirusTotal Intelligence の使い方 ~検索式の組み立て方~

f:id:k1z3:20191104111150p:plain

以前、VirusTotal Innteligence を使ったハンティングを軽くまとめましたが、VT も UI が変わったり機能が追加されたりしてきているので、現時点での使用方法をまとめてみました。

k1z3.hatenablog.com (以前まとめた記事。ここでは engines を利用して PLEAD を探していました。)

はじめに

VirusTotal (以下 VT) Intelligence では色々な検索クエリ(modifier)を組み合わせることで、単純にハッシュ値検索に頼らずに検体を見つけることができます。例えば、特定の日付以降に投稿されたものとか、PDF ファイルだけとか、悪性判定が一定数以上のもの、などを検索によって探すことができます。

参考になる資料

簡単な検索方法

VTI では GUI で条件を設定して検索することができるようになりました。これを使用することで、基本的な modifier を使った検索をしたり、複数のハッシュ値を一気に検索したりすることができます。

f:id:k1z3:20191104111853p:plain SEARCH → 検索入力欄右側のスライダーボタン → 条件設定画面

f:id:k1z3:20191104112439p:plain ここで利用できる検索条件は以下の通りです。

  1. ファイルの種類(代表的なもの)
  2. 悪性判定数
  3. ファイルサイズ(最小、最大)
  4. AVソフトの検知名
  5. Behavior (サンドボックス) レポートに含まれる文字列
  6. メタデータに含まれる文字列
  7. 署名に含まれる文字列
  8. 検体がダウンロードされる時の URL に含まれる文字列
  9. ファイル名
  10. タグに含まれる文字列
  11. 初めて/最後に投稿された日付
  12. 投稿数
  13. 投稿者数

ここに値を入れることで、自動的に modifier を生成して検索してくれます。上の検索条件と modifier の対応を以下に記します。

  1. type : ファイルの種類(代表的なもの)
  2. positives : 悪性判定数(p でも良いです)
  3. size : ファイルサイズ(最小、最大)
  4. engines : AVソフトの検知名
  5. behavior : Behavior (サンドボックス) レポートに含まれる文字列
  6. metadata : メタデータに含まれる文字列
  7. signature : 署名に含まれる文字列
  8. itw : 検体がダウンロードされる時の URL に含まれる文字列(In the Wild の略です)
  9. name : ファイル名
  10. tag : タグに含まれる文字列
  11. fs/ls : 初めて/最後に投稿された日付(first submission, last submission の略です)
  12. submissions : 投稿数
  13. us : 投稿者数(unique users の略です)

これ以外に使いそうなものとしては、以下が挙げられます。

  1. submitter : 投稿者の国 (ISO 3166-1 - Wikipedia ※ここの alpha-2 の値が使えます。)
  2. lang : Exif 情報から判定された言語 (peexe, pedll, office file のみ)

positives, size, submissions, us の様に数値で値を指定するものは数値の後ろに + や - を付けることで「以上」「以下」を指定することができます。同様に、fs, ls の様に日付を表すものも + や - を付けることでその日付「以降」「以前」を指定することができます。

例:2019年8月1日から2019年9月30日までの間に投稿された悪性判定 10 以上のファイル

f:id:k1z3:20191104113745p:plain (p:10+ ls:2019-08-01+ ls:2019-09-30- ※時分秒は入れなくてもOKです。)

f:id:k1z3:20191104113548p:plainGUI で指定する場合はこんな感じになります。)

条件式の組み立て

GUI から行う検索では、検索条件をすべて AND で指定することになります。※ VT の検索においてスペースで分けた検索条件は AND 条件として解釈されます。検索式の入力欄に上述の modifier を使った式を自分で入れる場合、OR や NOT、(括弧)を使った検索式を作ることができます。

  • AND 条件:両方の条件に一致するもの
  • OR 条件:どちらか一方の条件に一致するもの
  • NOT : 直後に指定した条件に一致 し な い もの
  • 括弧 : 複数の条件をひとまとまりとして扱う

例えば、EXE ファイルDLL ファイルのどちらかのファイル種別で、サイズは 1MB 以下のファイルを見つけたい場合を考えます。まず、type:peexe (EXEファイルの指定) と type:pedll (DLLファイルの指定) を OR でつなぐことにより、どちらか片方を満たしたファイル種別を探すことができます。

例1:EXE ファイルか DLL ファイルのどちらかのファイル種別を検索 f:id:k1z3:20191104114423p:plain (type:peexe OR type:pedll)

この中からサイズ 1MB 以下のものを見つけるので AND 条件 (スペース) として size:1MB- (1MB以下のファイルサイズ) を指定すれば、目当てのファイルを見つけることができます。

例2:EXE か DLL で、サイズが 1MB 以下のファイル f:id:k1z3:20191104114604p:plain (type:peexe OR type:pedll) size:1MB-)

さらにこの中から投稿数が 1 のものを除く場合は、NOT を使用して投稿数 (submissions) から 1 を除外します(この場合、投稿数 0 か 2 以上のものがヒットします)。

例3:EXE か DLL で、サイズが 1MB 以下のファイル。投稿数 1 のものは除く。 f:id:k1z3:20191104114808p:plain (type:peexe OR type:pedll) size:1MB- NOT submissions:1
 ※ 検知数0 か 2以上の検体が見つかっています。)

練習問題

以下は「VirusTotal for Investigators」に乗っている例題をベースにした問題集です。上述の modifier と OR, NOT, 括弧 を利用してファイルを探してみてください。

  • Windows の実行ファイルで HTTP で通信を行うもの
     (ヒント:ファイルの種類=type、通信の挙動=behavior
     (答 え:(type:peexe OR type:pedll) behavior:http

  • 悪性判定が少ない(10以下)で検知された Windows 実行ファイルで fre.php と通信を行う検体
     (ヒント:悪性判定=positives、通信先=behavior
     (答 え:(type:peexe OR type:pedll) positives:10- behavior:fre.php

  • invoice という名前のファイルで US から投稿されたマクロを含むファイル
     (ヒント:ファイル名=name、投稿元=submitter、マクロの有無=tag
     (答 え:name:"invoice" submitter:US tag:macro

  • "dropbox.com" からダウンロードされた悪性判定 10 以上の Windows 実行ファイル以外のファイル
     (ヒント:ダウンロード元=itw、以外=NOT
     (答 え:itw:dropbox.com positives:10+ (NOT type:peexe OR NOT type:pedll)

  • 2019年9月1日以降に初めて投稿された検知名 Emotet の DLL
     (ヒント:初めて投稿=fs、検知名=engines
     (答 え:fs:2019-09-01+ engines:Emotet type:pedll

  • メタ情報に "Windows User" を含む CVE 付きの脆弱性を利用している RTF ファイル
     (ヒント:メタ情報=metadata、CVE 付き=tag, engines:exploit, engines:cve
     (答 え:metadata:"Windows User" type:rtf (tag:cve OR engines:exploit OR engines:cve)

  • CVE 付きの脆弱性を含むロシア語で記述された文書ファイル
     (ヒント:言語=lang
     (答 え:(tag:cve OR engines:exploit OR engines:cve) lang:RU type:document