以前、VirusTotal Innteligence を使ったハンティングを軽くまとめましたが、VT も UI が変わったり機能が追加されたりしてきているので、現時点での使用方法をまとめてみました。
k1z3.hatenablog.com (以前まとめた記事。ここでは engines を利用して PLEAD を探していました。)
はじめに
VirusTotal (以下 VT) Intelligence では色々な検索クエリ(modifier)を組み合わせることで、単純にハッシュ値検索に頼らずに検体を見つけることができます。例えば、特定の日付以降に投稿されたものとか、PDF ファイルだけとか、悪性判定が一定数以上のもの、などを検索によって探すことができます。
参考になる資料
- VirusTotal for Investigators
https://storage.googleapis.com/vt-gtm-wp-media/virustotal-for-investigators.pdf
※ VTI を使っていくうえで学ぶべきことがまとまっています。 - 検索に使う modifier 一覧
https://support.virustotal.com/hc/en-us/articles/360001385897-Search-modifiers
※ 今回の記事では主にここに書かれている内容を紹介します。 - クエリを活用した War Game (CTF 的なもの)
https://www.virustotal.com/wargame/
簡単な検索方法
VTI では GUI で条件を設定して検索することができるようになりました。これを使用することで、基本的な modifier を使った検索をしたり、複数のハッシュ値を一気に検索したりすることができます。
SEARCH → 検索入力欄右側のスライダーボタン → 条件設定画面
ここで利用できる検索条件は以下の通りです。
- ファイルの種類(代表的なもの)
- 悪性判定数
- ファイルサイズ(最小、最大)
- AVソフトの検知名
- Behavior (サンドボックス) レポートに含まれる文字列
- メタデータに含まれる文字列
- 署名に含まれる文字列
- 検体がダウンロードされる時の URL に含まれる文字列
- ファイル名
- タグに含まれる文字列
- 初めて/最後に投稿された日付
- 投稿数
- 投稿者数
ここに値を入れることで、自動的に modifier を生成して検索してくれます。上の検索条件と modifier の対応を以下に記します。
- type : ファイルの種類(代表的なもの)
- positives : 悪性判定数(p でも良いです)
- size : ファイルサイズ(最小、最大)
- engines : AVソフトの検知名
- behavior : Behavior (サンドボックス) レポートに含まれる文字列
- metadata : メタデータに含まれる文字列
- signature : 署名に含まれる文字列
- itw : 検体がダウンロードされる時の URL に含まれる文字列(In the Wild の略です)
- name : ファイル名
- tag : タグに含まれる文字列
- fs/ls : 初めて/最後に投稿された日付(first submission, last submission の略です)
- submissions : 投稿数
- us : 投稿者数(unique users の略です)
これ以外に使いそうなものとしては、以下が挙げられます。
- submitter : 投稿者の国 (ISO 3166-1 - Wikipedia ※ここの alpha-2 の値が使えます。)
- lang : Exif 情報から判定された言語 (peexe, pedll, office file のみ)
positives, size, submissions, us の様に数値で値を指定するものは数値の後ろに + や - を付けることで「以上」「以下」を指定することができます。同様に、fs, ls の様に日付を表すものも + や - を付けることでその日付「以降」「以前」を指定することができます。
例:2019年8月1日から2019年9月30日までの間に投稿された悪性判定 10 以上のファイル
(p:10+ ls:2019-08-01+ ls:2019-09-30- ※時分秒は入れなくてもOKです。)
(GUI で指定する場合はこんな感じになります。)
条件式の組み立て
GUI から行う検索では、検索条件をすべて AND で指定することになります。※ VT の検索においてスペースで分けた検索条件は AND 条件として解釈されます。検索式の入力欄に上述の modifier を使った式を自分で入れる場合、OR や NOT、(括弧)を使った検索式を作ることができます。
- AND 条件:両方の条件に一致するもの
- OR 条件:どちらか一方の条件に一致するもの
- NOT : 直後に指定した条件に一致 し な い もの
- 括弧 : 複数の条件をひとまとまりとして扱う
例えば、EXE ファイルか DLL ファイルのどちらかのファイル種別で、サイズは 1MB 以下のファイルを見つけたい場合を考えます。まず、type:peexe (EXEファイルの指定) と type:pedll (DLLファイルの指定) を OR でつなぐことにより、どちらか片方を満たしたファイル種別を探すことができます。
例1:EXE ファイルか DLL ファイルのどちらかのファイル種別を検索 (type:peexe OR type:pedll)
この中からサイズ 1MB 以下のものを見つけるので AND 条件 (スペース) として size:1MB- (1MB以下のファイルサイズ) を指定すれば、目当てのファイルを見つけることができます。
例2:EXE か DLL で、サイズが 1MB 以下のファイル (type:peexe OR type:pedll) size:1MB-)
さらにこの中から投稿数が 1 のものを除く場合は、NOT を使用して投稿数 (submissions) から 1 を除外します(この場合、投稿数 0 か 2 以上のものがヒットします)。
例3:EXE か DLL で、サイズが 1MB 以下のファイル。投稿数 1 のものは除く。
(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)