VirusTotal によるインシデント調査の効率化

セキュリティインシデントの調査を行う場合、関連するファイルが悪意のあるものであるかの評価を行う際、よくVirusTotalでのファイルのハッシュ値に対する評価を参考にします。

VirusTotal

ファイルのハッシュ値をVirusTotal のWebサイトから検索することで,複数のアンチウイルス製品を使用して検査を行い、どの製品が検出したか一覧を表示してくれます。2022年2月27日現在、67種類の製品が用いられていました。ハッシュ値を検索するだけ、既知のものであるか簡単にわかるため、非常に重宝します。ただし、調査すべきファイルが多数ある場合、手動でいちいちWebサイトで検索するのは面倒でかつ時間がかかります。

APIによるハッシュ検索

VirusTotalのコミュニティに参加(無料のアカウント作成)することで、APIによるハッシュ値の評価が行えるようになります。

Join the VirusTotal Community(コミュニティ参加アカウント作成サイト)

アカウントを作成すると、APIを使用する際に必要となるAPIキーを入手できます。

ハッシュ値の一覧がまとめてあるファイルから、ハッシュ値を1つずつ自動で読み取りVirusTotalの検知件数を表示するPowerShellプログラムを作成してみました。

$target = "https://www.virustotal.com/vtapi/v2/file/
$apikey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
$txt = "C:\Users\xxxx\SHA256s.txt"
$enc = [Text.Encoding]::GetEncoding("Shift_JIS")
$fh = New-Object System.IO.StreamReader($txt, $enc)
while (($hash = $fh.ReadLine()) -ne $null) {
    $para = @{
        resource = $hash
        apikey = $apikey
    }
    $result = Invoke-RestMethod -Method Post -Uri $target -Body $para
    if( $result.response_code -eq 0 ){
        echo "No matches found"
    }
    
    $echo_str=$hash+","+$result.response_code+","+$result.positives
    echo $echo_str
    Sleep 20
}

結果として、ハッシュ値ごとに、検索成否と検知された製品数が出力されます。

制限事項

なお、実は、コミュニティ版のAPI利用は、1日500件に制限されています。やりすぎてこんなメールをいただいてしまいました。

500件を超えた場合は、1日以上の間を空けて再度実施することになります。