VirusTotalスレ
とあるアセンブラを使って、メッセージボックスを表示してからプログラムを終了
する Win32 API であるところの ExitProcess を 呼び出す最小のプログラムを作り、
その exe を VirusTotal で調査してみたたところ、以下のように3つの AntiVirus ソフト
が Virus 判定してしまうことが分かった:
Acronis suspicious
Cylance Unsafe
Endgame malicious (high confidence)
上記のうち、Cylance は、exe ファイルの中の PE ヘッダの部分の
IMAGE_FILE_HEADER の TimeDateStamp を変えるだけで
Unsafe が付いたり消えたりしてしまうことが分かった。
なお、ファイル自体の更新日時と上記の TimeDateStamp が
大幅にずれているわけでもなく、恐らく、ずれていても最悪でも
1秒くらい違っているかどうかなはず。 結論から言うと、
・VC++ 6.0 の最小の Win32 GUI アプリで、6/69 の誤検出。
・VC++ 6.0 の最小の MFC GUI アプリ(DLL版) では誤検出 0。
・VS 2008 Express の最小の Win32 GUI アプリで、1/67 の誤検出。
Win7, Pro, 64BIT 環境 + Visual C++ 6.0 で、Win32 用の GUI Application の
プロジェクトを新規作成。そのまま Release 版としてビルドし、
Virus Total でチェックしてみた。このプログラムは、
Menu を持つ Main Window と About Help の MessageBox だけ
が表示できる 40.0 KB (40,960 バイト) のものである。すると、69個中、6個
という数の AntiVirus ソフトが「誤検出」を報告することが分かった:
1. ClamAV Win.Trojan.Bredolab-2923
2. Cylance Unsafe
3. Cyren W32/Backdoor.RGYQ-4509
4. F-Prot W32/Backdoor2.YDF
5. Ikarus Trojan.BackDoor.Generic13
6. NANO-Antivirus Trojan.Win32.Bredolab.cxdnho
しかも、「suspicious」や「unsafe」などではなく、Malwareの「具体名」まで
表示されてしまう。次に、Version Resource を追加して試してみたところ、
上記の 3.の Cyren の報告が消えた。
なお、Win32 の変わりに、MFC Project を作り、DLL で MFC
を使う Release バージョンで試してみたところ、検出数は 0 個
に、VS 2008 Express での Win32 最小 GUI アプリだと、
1/67 の誤検出でとどまることも分かった。
マルウェア判定されるかどうかに、不条理と不安定さが有ることが分かる。