直近1~2週間でDefender AVの誤検知が3~4回あったので、定義ファイルってどうなってるの?と思って調べてみたメモです。(定義ファイルが読めれば、誤検知の原因も分かるんじゃないかと。)
結論を先に言います。→ 「バイナリファイルだったのでよく分からなかった。」
調べた内容
定義ファイルの保存場所
定義ファイルの保存場所は「C:\ProgramData\Microsoft\Windows Defender\Definition Updates\{GUID}」です。
エンジンも同じ場所に保存されています。
ファイル形式
拡張子は「vdm」となっていますが、ファイル形式はPEフォーマットでした。(先頭2バイトが0x4D5A)
PeStudioというビューアで見てみました。
→https://www.winitor.com/
DLLとして作成されていました。
定義は圧縮されてリソースとして格納されているもよう。
バージョン情報
各ファイルのファイルバージョンは以下の通り。
ファイル名 | バージョン | 備考 |
mp*base.vdm | 1.331.0.0 | ベースファイル |
mp*dlta.vdm | 1.331.1374.0 | 差分ファイル |
- mp*base.vdmが名前の通りベースファイルで、mp*dlta.vdmが差分ファイル。
通信負荷を抑えるためか、サイズが小さい差分ファイルを頻繁に更新し、サイズが大きいベースファイルの更新頻度は低いもよう(ファイルの作成日時から推測) - AntiVirusとAntiSpaywareの定義バージョンは同一だった。ファイルバージョン=定義バージョンだった
- 定義ファイルにはMicrosoftの署名が付いている。署名付ける目的でPEフォーマットなのか?
> Get-MpComputerStatus | Select-Object *Version AMEngineVersion : 1.1.17800.5 AMProductVersion : 4.18.2101.9 AMServiceVersion : 4.18.2101.9 AntispywareSignatureVersion : 1.331.1374.0 AntivirusSignatureVersion : 1.331.1374.0 NISEngineVersion : 1.1.17800.5 NISSignatureVersion : 1.331.1374.0
※NISは「Network Inspection System(ネットワーク検査システム)」のことらしい
定義ファイルを解凍する
vdmファイルには定義が圧縮されて格納されているらしいです。
解凍するためのPowerShellスクリプトがGitHubで公開されていたので使ってみます。
Ever wanted to better understand how Windows Defender implements its signatures? Here's a first step. I wrote a thing to decompress WDAV .vdm files. https://t.co/TKMILmcllL pic.twitter.com/FajkBb4Q1b
— Matt Graeber (@mattifestation) 2019年3月28日
> ls mpavbase.vdm | .\ExpandDefenderSig.ps1 -OutputFileName mpavbase.decompressed ... Mode LastWriteTime Length Name ---- ------------- ------ ---- -a---- 2021/02/20 12:35 78778304 mpavbase.decompresseds
解凍したらファイルサイズが約1.6倍になりました。
バイナリ形式らしく、ここからどうしたら良いかわからず諦めました。
「Hupigon」はWindowsのバックドア型マルウェアの名前らしい。
おまけ
Defender AVのリバースエンジニアリングの発表@2018年BlackHat
- 発表スライド(PDF)
DefenderCheck
与えたファイルのどの部分をDefenderが悪性と判定するか特定するツールなもよう、C#製。
github.com
WDExtract
こちらの「WDExtract」も定義ファイルの解凍に使えるツールです。
exeファイルなので、こちらの方が使いやすいかも
github.com