開発したソフトがウィルスに誤検出されないために
TwitがTrojanに感染してる - 一分一秒真剣勝負!
ヒビノアワ: Twit Ver3.90公開しました
アップデートする度に Twitter クライアント Twit がAvastやらカスペルスキーに誤検出されてるようですが、これには実は理由があります。
以前の記事に少し書きましたが、コンパイル時の設定に左右されることがあります。
結構適当なウィルス定義を持ってるAVG
窓の杜 - 【NEWS】「avast!」が大量のファイルをウイルスと誤検知する問題が一時発生
まず、一つが、Rich ヘッダの有無。 このヘッダは、Visual Studio でコンパイルすると自動で付くのですが、Twit の場合、 Delphiでコンパイルされているので、ヘッダがないのです。
EXEヘッダ(MZ)とPEヘッダの間にある Richの謎
まぁ、私の作ったソフトも、一部、小細工をしてRichヘッダをストリップしたりしてるんですが(ぁ
Twitのプロパティを見ると
バージョンタブがありませんね?
まず、これがもう一つの原因。過去に、バージョンのリソースの有無だけで、非検出になったり、誤検出になったことがあります。
この2つの複合要因で、Twitがバージョンアップの度に誤検出されているとみて間違いないでしょう。
このアルゴリズムは、カスペルスキーだけでなく、avast、AVG、Symantec、ウィルスバスターなどで使われてるので、どのセキュリティソフトにも誤検出される恐れはあるんですけどね。
しかし、こんないい加減なアルゴリズム誰が考えたんだろ…。
・MS社謹製のlink.exeを使う。
・Version情報を必ず付ける。
どっちかを実行するだけでかなり誤検出は避けることができます|・ω・)
Master of Epicの実行ファイルもよく見ると Version情報タブがありませんね。
関連サイト:
誤検知の対応について - ノートン コミュニティ 日本版
【アダ被】フォーラム :: トピックを表示 - 各種スキャン 誤検出情報
管理人からのお知らせ - RCX避難所 - したらば掲示板
アンチウィルスソフト誤検出!: 高機能サロン管理システム★さまれぼ!★開発日記
ハム好き夫ののほほん節約生活 「Master of Epic」がavast先生にウイルスと認識された!
~ Henry Le Chatelier ~[ヒューリスティックウイルスでっか?]
iBackup と WMP Skin Editor 2.25 がダウンロードできない障害について 圭佑の気まぐれ日記/ウェブリブログ
ヘッダなどを考慮しないバイナリ文字列の部分一致型パターン定義による誤検出を考察した結果であり、あまりハッキリした根拠がある話ではないのですが・・・
誤検出は実質タダの運(もとい確率)であり、回避できる類の物ではないと思います。
自作プログラムがavastに誤検出された時に、ファイル分割で検出パターンを絞り込めた事があったのですが、WinMainCRTStartup辺りのライブラリ側のコードがパターンとして登録されていました。
該当部分はライブラリの処理の特徴を含むコード断片であり、マルウェア固有コードとの偶然一致の可能性はありませんでした。
このパターンが大問題を起こしていなかった理由は単純で、広域変数のオフセットがパターンに含まれていたからでした。
つまり、ライブラリより先にリンクされた.dataセクション使用量が誤検出対象と一致したら誤検出です。
別の誤検出では、ファイルの先頭数十KBの前方一致として振舞うパターンもありました。
あるオフセットより前であれば何処を変更しても誤検出が抑制されたため、恐らくは衝突が発生する程度にビット数の少ないハッシュパターンだったと思われます。
この手の単純一致パターンやハッシュパターンはリンカのパラメータで容易に変化する為、それらを変えた時点で回避できるのは当然です。
とすれば、「こういったパラメータなら誤検出が少ない」というのは統計的にどちらが安全かという話でなくてはなりません。
PEヘッダの完全一致パターン(又はそれと同等の衝突率を持つPEヘッダのハッシュパターン)が存在するなら、Richヘッダやバージョンリソースで衝突率が明確に下がる可能性もありますが、幾ら馬鹿なアンチウィルスベンダでも流石にPEヘッダだけで検出はしないと思います。
以上の考察から、リンカの種類やリソース追加は関係なく、誤検出は運(もとい確率)によるものだと思います。