Pyinstaller で作成した EXE ファイル、アンチウイルスソフトにウイルスと誤認識されることがあります。
いろいろ手を尽くしてもたまたまだったり、いたちごっこだったりするようです。
ここはユーザーにお願いして例外に登録してもらうのが良いようです。
目次
Python で作成したアプリを広く使ってもらおうとすると Pyinstaller などでアプリを EXE 化する必要があります。
Pyinstaller で EXE 化した場合、アンチウイルスソフトにウイルスと検知される場合があります。
もちろん、誤認識です。
結論から言うとこの誤認識を防ぐことは難しいようです。
アプリの利用者には、アンチウイルスのチェックを止めるなり例外として登録してもらうなりしてもらう必要があるようです。
◆アンチウイルスソフトの仕組み
アンチウイルスソフトは主に2つの方法でウイルスを検知しています。
パターンマッチング
シグネチャと呼ばれるウイルスのパターンを定義ファイルとして用意しておき、それに該当するものを検出します
定義ファイルに存在しない未知のウイルスは検出できませんヒューリスティック検知
- 静的ヒューリスティック検知
ウイルスが取り得る挙動をあらかじめ登録しておき、プログラムコードに含まれる挙動から検知します - 動的ヒューリスティック検知
コンピュータ内に検証用の仮想環境を作り、そこでプログラムを動作させてウイルスが取り得る挙動を検知します
- 静的ヒューリスティック検知
今回の誤認識はヒューリスティック検知で起きます。
◇ヒューリスティック検知のメリットとデメリット
ヒューリスティック検知は未知のウイルスを検知できることからほとんどのアンチウイルスソフトで採用されています。
メリット
- 未知のマルウェア検知に対応できること
- 検出を逃れるために大量に作成された亜種についても検出できること
デメリット
- 誤検出する可能性がある
◆Pyinstaller で作成した EXE が誤検出される理由
誤検知が発生する理由は次のようなことのようです。
アンチウイルスソフトのベンダーから情報を得られないので推測しているようです。
1つは、Pyinstaller が Python スクリプトを実行可能な実行ファイルに変換する際のパッケージングプロセスが、アンチウイルスソフトウェアのヒューリスティック検出アルゴリズムに引っかかる可能性があるようです。
もう1つは、Pyinstaller のユーザーにマルウェアの作成者がいて悪意のあるコードを含んだ EXE を作成し、それをアンチウイルスソフトが Pyinstaller を使用したアプリ全てをブロックすることで対応するためのようです。
◆ユーザーができる対策
誤認識されてしまった場合、アプリを使えるようにするには次のような方法があります。
ただし、既に誤認識されている場合は、復元する必要があります。
- 一時的にアンチウイルスソフトを停止する
- 誤検知をアンチウイルスソフトベンダーへ報告する
ただし報告してもすぐに対応される保証がないのでアプリをすぐに使えない問題が残ります - 例外を登録する
直ぐにアプリを使えるようにするには現実的な方法です
◇例外の登録方法方法
主なアンチウイルスソフトの例外の登録方法を簡潔に紹介します。
詳しくはベンダーのサイトで確認してください。
- Avast 例外登録方法
メニュー ⇒ 設定 ⇒ 例外 ⇒ 例外を追加する ⇒ ファイルを選択して例外に追加します - Norton 例外登録方法
設定 ⇒ ウイルス対策 ⇒ スキャンとリスク ⇒ 例外/低危険度 ⇒ スキャンから除外する項目の設定 ⇒ ファイルの追加 ⇒ 項目の追加 ⇒ ファイルを選択して例外に追加します - McAfee 例外登録方法
マイプロテクション ⇒ デバイス ⇒ Real-Time Scanning ⇒ 除外ファイル ⇒ ファイルを追加 ⇒ 選択したファイルを例外に追加します
※除外するファイルを選択した時にリアルタイムスキャンが働きマルウェアが検出されると除外できません
(未確認ですが先にリアルタイムスキャンを止めてから除外する必要があるようです)
◇誤認識されたファイルの復元方法
主なアンチウイルスソフトの復元方法を簡潔に紹介します。
詳しくはベンダーのサイトで確認してください。
- Avast 復元方法
プロテクション ⇒ 検疫 ⇒ 隔離されたファイル ⇒ その他のオプション(…) ⇒ 復元
「復元して例外に追加」を選ぶと例外に登録されます - Norton 復元方法
セキュリティ ⇒ 履歴 ⇒ 表示 ⇒ 検疫 ⇒ 該当の項目を選択 ⇒ オプション ⇒ 復元する
「復元してこのファイルを除外する」を選ぶと例外に登録されます - McAfee 復元方法
マイプロテクション ⇒ 隔離されたアイテム ⇒ 該当の項目を選択 ⇒ 復元
◆開発者としては
開発者としては、すぐに反映されないとしても誤認識されたファイルをアンチウイルスソフトベンダーへ送って分析してもらうのが良いと思います。
上手くいけばアプリをダウンロードしたユーザーが使う時には誤認識されなくなっているかもしれません。
また、Pyinstaller を使用した様々な EXE を分析してもらうことで、将来的に Pyinstaller を使用して作成した EXE が誤検出されなくなるかもしれません。
アンチウィルスソフトベンダーへのファイルの送り方は、前述の復元方法を解説しているベンダーの Web ページに別の対応方法として載っています。
◆さいごに
Python でいくつかフリーソフトを作成しています。
Pyinstaller を使って EXE にして配布しています。
Pyinstaller を使いはじめた頃は問題ありませんでした。
それが、だんだんと時々アンチウイルスソフトに誤認識されるようになりました。
対策をいろいろ調べて試してみるとうまく行く時もあります。
でも、同じ方法がうまくいかなくなります。
自分でも対策を記事にして公開しましたが、上手くいかなくなりました。
このままではと思っていたところ、Pyinstaller の GitHub のサイトの ISSUE_TEMPLATE というページにたどり着き、対策は難しいのだと判断しました。
そしてこの記事を書きました。
参考になれば幸いです。
◇ご注意
本記事は次のバージョンの下で動作した内容を基に記述しています。
- Python 3.8.5
- アバスト無料アンチウイルス 24.9.6130
- Norton, McAfeeについては、2024/10/18時点の Web ページの情報を元にしています
◇免責事項
ご利用に際しては、『免責事項』をご確認ください。
お気づきの点がございましたら『お問い合わせ』からお問い合わせください。
◆参考
- pyinstaller/.github/ISSUE_TEMPLATE/antivirus.md at develop · pyinstaller/pyinstaller
- PyInstaller False Positive: Windows Defender Flags App as Trojan – Python HelpDesk
- ウイルス対策の1種「ヒューリスティック検知」とは?概要を解説!|ITトレンド
- ヒューリスティック検知とは?他の方式との違いやメリットデメリットについて徹底解説|サイバーセキュリティ.com
- ヒューリスティック検知とは?最新技術動向からメリット・デメリットまで解説! | Study SEC