ウイルス・マルウェア検知

今ではマルウェア対策ソフトと言えば主要なものだけでも数十種類はある。 既知のマルウェアに対してはデータベースとの比較による検出が基本だが、未知のマルウェアも検出できるような機能を持っているものも多い。 ただ、その手法は経験的に怪しいかどうかで判定するもので、誤検出もある。
ひとつ知っておくべきなのは、世間の大多数の人はパソコンなんか使わないし、使っていてもせいぜいがネットワーク端末として、あるいはワープロとして程度のものだ。 彼等はマルウェアを検証する上での根拠はマルウェア対策ソフトが検出したかどうかだけに頼ることになる。 もしもあなたがそれなりの知識をもっていて、確信をもって誤検出だと言える場合があったなら積極的に報告すべきだと思う。
参考までに私が経験した誤検出の例を挙げることにする。 もちろん、マルウェア対策ソフトが怪しいと検出する以上、本当にマルウェアである場合もあるということは念頭に置いて欲しい。 私はこういった誤検出されやすいものをよく扱うことから、今ではマルウェア対策ソフトを全く使っていない。 6年以上前の記憶を基にしているので、現状と一致しなかったり、そもそも思い違いである可能性もある。

バイナリパッチ

特定の実行ファイルを書換えるソフトはウイルスとして検出されやすい。 他のソフトに感染していくウイルス特有の挙動と区別がつきにくいからと思われる。 書換えた結果としてどのような挙動を引き起こすかは単体では判断できないのである程度は厳しく監視する必要があるのだろう。
結果として、自己展開型のバイナリパッチはウイルス扱いされやすくなる。 古いソフトウェアにある設定ファイルを持たずに設定を実行ファイルに直接書込むタイプのものも同様だ。

コードセクション書換え

実行中にコードセクションを書換えるものもウイルス判定されやすい。 普通はコードセクションに書込みすることは無いので、書換えていれば確かに怪しくはある。
実行ファイルの難読化や圧縮をした場合にウイルス判定されるケースがあった。
NXビットが有効になっている環境であれば、そちらでひっかかるかもしれない。

特定の API

特定の API を使っているかどうかでマルウェアらしいかどうかを判定する場合があるようだ。
起動中の他のプロセスの内部にアクセスする種類の API (CreateRemoteThread 等) を使っているとかなり高い確率でマルウェア扱いされる。
何故か暗号関連の API (CryptAcquireContext 等) にも反応しやすいらしい。

マルウェアとは何か?

Wikipedia の記述を引用しよう。

不正かつ有害な動作を行う意図で作成された悪意のあるソフトウェアや悪質なコードの総称

http://ja.wikipedia.org/wiki/%E3%83%9E%E3%83%AB%E3%82%A6%E3%82%A7%E3%82%A2

この定義は曖昧だ。 悪意は無くても有害な動作を起こすものは有るし、あるユーザが期待する挙動があるユーザにとっては迷惑であることもある。
具体的には特定の IP アドレスからの接続を拒否するパケットフィルタがマルウェアとして検出されたことがあった。 調べてみると、どうやらネットワーク接続を阻害するものとして検出されているようだった。 接続を邪魔しているのは事実である。 これはマルウェアと言ってよいだろうか?
つまり、そもそもマルウェアかどうかの線引きはそれほどはっきりしていないのである。 マルウェア対策ソフトにとってはある程度安全側に、即ち、なるべくマルウェアとして検出した上でユーザに判断をゆだねるしかない。 結果として誤検出のようになってしまうわけだ。
Document ID: 59aaac51e41a2d156f6b22186bcbe6a9