先日のウイルスバスターの誤検出についての解析
まずは、ウイルスバスター クラウドの誤検出でMicrosoft の電子署名の入ったインストーラーファイルまで誤検出するという件に誤りがあったのをお詫びします。(正確には、同じバージョンの定義で検出するか検証できてないが、修正されてしまったらしいので分からない)
あんまり誤検出自体は重く考えてなかったので、詳しい解析をしていなかったのですが、一連の流れでウイルスバスターの動作もおかしいようなので、技術的にまとめておきました
1.誤検出した環境について。
Windows XP 上で デスクトップにあった vcredist_x86.exe を実行。
このインストーラーを右クリックしたところ電子署名があったので、正規のファイルだと思っていたのですが、Windows 2000用に書き換えたものでした。
ただし、改変個所は1バイトで、NT5.0だった場合にエラー終了する場所ジャンプ命令を書き換えただけです。
2.検出時の動作
インストーラーを起動すると %temp%\{5679ba8c-3ec1-426c-89af-e2dd9877d34f}\.be に vcredist_x86.exe が起動され、インストール処理はそっちが行います。
この、vcredist_x86.exe にも電子署名があるんですが、このファイルオリジナルのファイルが展開しているのかと思ったら、自分自身を書き換えて動的に生成しているファイルなので、オリジナルが違ったら、こちらのファイルも電子署名が合わなくなってしまうようです
ウイルスバスターが停止して削除するのは、こちらのファイルだけ。
オリジナルのプロセスが生きているので、このメッセージが表示されます
電子署名が間違ってるファイルを削除するというのなら、オリジナルのファイルを検出しないのが不具合であり、電子署名が理由で無いなら、ただの誤検出ということになります。
ドロップしたファイルが不正なファイルというのなら、ドロップ元のプロセスに不干渉なのも納得がいきません。
今回は不正なファイルという理由でウイルスの検体名も何も無かったのですが、なにが不正なのか書いてあるとユーザーはうれしいですよね。
ちなみに、「許可する」というホワイトリストに入れるボタンがあるので、ウイルスとして検出したわけではないのでしょう。
入れると、検出しなくなりました。
結論としては
1.今回 誤検出したのは実は 証明書が無効だったから。
2.今回 誤検出したのは 証明書があるのに証明書が無効だったからではない。
3.実行ファイルが同じでファイルサイズが小さいだけのファイルをウイルスバスターは誤検出する。
4.誤検出したときに、ウイルスバスターは詳しいことを教えてくれない。
5.ウイルスバスターは検出した不正なファイルの親プロセスを教えてくれない&チェックしていない。
6.現時点で証明書が無効なファイルも不正なファイルとして検出できなくなっている(つまり修正された?)
7.証明書が有効なファイルが検出されるかどうかは検証できなかった。
こんなところでしょうか ・ω・
結論に疑問があります.
> 1.今回 誤検出したのは実は 証明書が無効だったから。
これは記事では検証されていません.
この記事から言えるのは「疑わしいと検出されたあるファイルは,署名の検証ができないファイルだった」ことです.
たとえば,そのファイルを生成した親プロセスの疑わしさが影響している場合,生成された側のファイルの内容だけでは説明がつかないかもしれません.
> 2.今回 誤検出したのは 証明書があるのに証明書が無効だったからではない。
これは記事では検証されていません.
この記事から言えるのは「疑わしいと検出されなかったあるファイルは,署名の検証ができないファイルだった」ことです.
単に疑わしさのパラメータが閾値を越えなかった可能性もあれば,作り置きのファイルだったのでフルスキャンを受けており別の判定アルゴリズムが使われていた可能性,このファイルが誰でもダウンロードできる環境に置かれており既に解析済みだった可能性等,簡単に思いつくだけでも切り分けるべき可能性がみつかります.
> 3.実行ファイルが同じでファイルサイズが小さいだけのファイルをウィルスバスターは誤検出する。
情報が足りないと思います.
たとえばふたつのファイルは生成方法や起動方法 (Explorer に対する UI 操作かプロセスによるプロセス起動か) が異なります.
少なくともこれらのパラメータに対する検証は行われていません.
> 4.誤検出したときに、ウィルスバスターは詳しいことを教えてくれない。
「誤検出したときに」というのは「疑わしいファイルとして判断したときに」ということでしょうか?
無害な理由で実行を阻害した場合はユーザーに通知するのも親切だとは思いますが,今回の判定理由はいまだ不明というのが私の理解です.
もちろん,判定理由を公開しすぎると,ウィルス作成側の対策が容易になるのは言うまでもありません.
(つづき)
> 5.ウィルスバスターは検出した不正なファイルの親プロセスを教えてくれない&チェックしていない。
親プロセスをチェックしていないことについては,検証が行われていません.
少なくとも,単に疑わしさの閾値を越えなかった場合との切り分けができていません.
また,記事では,子プロセス起動時にファイルが削除されたのか,もっと前のファイルが作られた直後に削除されていたのかの検証も行われていません.
なお,親プロセスを知らせるような機能が付いたら付いたで対策されるだけのような気もします.たとえば cmd.exe 等を経由させてプロセスを起動するようになるのではないでしょうか.
> 6.現時点で証明書が無効なファイルも不正なファイルとして検出できなくなっている(つまり修正された?)
表示されていたダイアログに,「不正なファイル」という記述はありませんでした.あくまで疑わしいファイルとして削除されただけです.
たとえば以下のようなケースであるとした場合,署名は関係なく単にホワイトリストに一致しただけということになります.
– 当時: 何らかのパラメータに基づいて疑わしいファイルと判定
– 現在: 何らかの方法で検体を入手し,検証の結果問題ないとしてハッシュ値ベースのホワイトリストに載せた
こういったケースとの切り分けができていません.
> 7.証明書が有効なファイルが検出されるかどうかは検証できなかった。
結局これだけ書けばよかったと思います.
ご意見ありがとうございます。
1. については正規のファイルが引っかかるか検証できなかったので、未検証であっています。2で正反対のことを書いてしまっているのでミスです。
2. で言いたかったのは証明書が壊れた別のファイルが検出されていないので、それが検出の必須理由ではなかったという点です。
3と5. 起動パラメータについては、検出時にどちらも同じだったことを確認しています。また、プロセス起動直後の削除であっています「プロセスを停止しました」「削除しました」と表示されました。検出元のファイルがプロセス追跡によって、 親プロセスが生成したことが分かるのに、それをやってないという点です。確かにスクリプト言語で動的に不正なファイルを作れますが、その場合は、元のスクリプトが追跡で分かると思います。
4. については、せめてヒューリスティックデータベースに適合したためなどのざっくりした理由がほしいです。プロセス停止はよく他のソフトでも見ますが、確認なしに削除までやるので問題にしている人も少なくありません