Python自作プログラムでノートン誤検出・誤検知→解決!
Python(パイソン:プログラミング言語)で自作したプログラムがシマンテックのノートン(ウィルス対策ソフト)で「Heur.AdvML.B」というウィルスとして誤検出・誤検知されてしまいます。
情報共有のために書きます。
2021年05月05日追記
解決した気がします!
確認環境は
- Windows 10 Home(64bit)
- Python 3.9.5(32bit)
- PyInstaller 4.3でexe化
- シマンテック ノートン インターネットセキュリティ オンライン Ver.22.21.2.50
です。
PyInstallerでexe化してもNortonに削除されませんでした。
以前NGだったPyInstaller 4.0でもOKとなっていましたので、Norton側で修正されたと思われます。
個人的にNortonにかなり働きかけたから、ということにしておきましょう。
もし、まだ誤検知されてしまう方がいましたら、情報共有のためにコメントしてくださるとありがたいです。
この問題については「解決」となりますが、以下、戦いの履歴になります。
興味ある方や解決していない方はどうぞ。
(2020年08月17日、PyInstaller 4.0について追記しました。解決か?未解決でした… 現時点での対応策も追記しました。)
また、Microsoft Defender SmartScreenについてコメントしてくれている方がいますので、気になる方は一番最後のコメント欄を確認してください。
目次
確認環境
確認環境(1)
- Windows 10 Home(64bit)
- Python 3.8.2(32bit)
- PyInstaller 3.6でexe化
- シマンテック ノートン インターネットセキュリティ オンライン Ver.22.20.2.57
確認環境(2)
- Windows 10 Home(64bit)
- Python 3.8.2(32bit)
- PyInstaller 4.0でexe化
- シマンテック ノートン インターネットセキュリティ オンライン Ver.22.20.5.39
状況説明
Python 3.8.2(32bit)でPyInstallerを用いてexeを作成すると、ウィルス対策ソフトのノートンにより「Heur.AdvML.B」と見なされて(誤検出・誤検知されて)削除されてしまいます。
「PyInstallerでexeが作成されない」と悩んでいる方は、Norton等ウィルス対策ソフトによって削除されていないか確認してみた方がよいでしょう。
作成したexeを配布したいと思っているので、特定フォルダをウィルススキャンから除外するというような方法は根本対策になりません。
デジタル署名(コード署名)はまだ付加していませんが、それで状況が改善するとも思えないので、誤検出問題を先に解決しておきたいところです。
デジタル署名について、最後の方に追記しました。(2020/07/15追記)
原因調査
原因調査を行いました。
ソースコード自体は問題ないことが前提となりますので以下の1行のみのプログラムで確認しました。
print ("Hello, Python")
いろいろやってみて、ウィルス判定される条件が分かりました。
表にするとこんな感じです。
PyInstallerオプション | 32bit | 64bit |
---|---|---|
なし | OK | OK |
--onefile(-F) | OK | OK |
--noconsole(-w) | Heur.AdvML.B | OK |
--onefile --noconsole | Heur.AdvML.B | OK |
まず、64bit版のPython(PyInstaller)でexe化した場合は問題ありませんでした。
また、32bit版でも「--noconsole」のオプションをつけない場合は問題ありませんでした。
結論としては、
32bit版のPython(PyInstaller)の「--noconsole」でexe化した場合に、「Heur.AdvML.B」として誤検出されるということです。
もちろん「-w」でも同じ状況です。
これだけの条件で発生するとなると、結構大問題になっている気がするのですが、どうなんでしょう。
多くのところで発生しているならこのページのアクセスが上がりそうなものです。
Pythonで作成したプログラムをexeとして配布したい人は少ないのかな?
個人的には64bitでも問題ないのですが、人様に配布するので念のため32bitにしたいというところです。
対処中
シマンテック・セキュリティ・レスポンスにファイルを送信する方法
上記ページの「ファイルを送信する」ではなく「誤検知を報告する」から対処中です。紛らわしいですね。英語で送信しました。
はっきり言って、こんなことに時間を取られたくないのですが、今までノートンが守ってくれていたと考えて受け入れたいと思います。
2020年05月05日追記
3週間近く経ちましたが、シマンテックから連絡はありません。
(2020年06月03日でも連絡はないので一生連絡はないのでしょう。そもそもが連絡くれるフローなのかどうかも分かりませんし。)
他のブログでも同じような情報を見たので、昔からの誤検出なのだと思います。
ちなみに、自分は32bit版はPy2exeでexe化することにしました。
そのために、(その時点でPy2exeはPython 3.8に対応していなかったので)旧バージョンのPython 3.7をインストールもしました。
Py2exeの32bit版で作成したexeはウィルスとして誤検出はされません。
が、Py2exeの個人的な大きなデメリットは「1本のexeファイルにならないこと」です…
Py2exeのインストールについては以下のサイトを参考にしました。
私は試したことがありませんが、UPXというものを使用して1本のexeにできるという話があります。
他のウィルスチェックはどうなの?
SymantecのNortonではウィルスとして誤検出されますが、他のウィルス対策ソフトではどうなの?ということで、某ブログを参考にオンラインのファイルチェックサイトで確認しました。
「ウイルスチェックのためにアップロードしたファイルはセキュリティベンダーなどに公開されてしまうため、機密情報を含むファイルには使用できません。」とのことです。
PyInstaller(32bit版)で作成したexeをアップロードしてみると、72種類のウィルスチェックエンジンのうち、10で陽性判定(ウィルスと判定)のようです。
私が知っているようなところでは、Symantecの他にMicrosoftとMcAfee-GW-Editionというものでウィルスと判定しているようです。
一方で、Avast、AVG、F-Secure、Kaspersky、Kingsoft、McAfee、TrendMicro、ZoneAlarm by Check Point等では陰性(問題ないファイル)と判定しているようです。
ちなみにMcAfee-GW-Editionでは陽性判定、McAfeeでは陰性判定です。2つの違いについてはこちら。
それくらい判定が難しいというか、グレー部分が多いものなんでしょうね。
なので間違ってもいいのですが、間違いを正すフローはあるのかな?
基本は「疑わしきは罰せよ」だとしても、疑うのならちゃんと調べて疑いが晴れたら釈放してほしいものです。
ノートン先生は、間違ったら謝るって親に習わなかったのかな?
2020年06月11日追記
Nortonにチャットで質問して、再度フォームからファイルを送信しました。
一応、何かしらの応答はあるようですので何かありましたらここに追記します。
2020年06月25日追記
ノートンライフロックのフォームから質問しましたが返信はありません。
で、何がムカつくかっていうと、フォーム送信後の比較的早い段階で「対応についてアンケート」みたいなものが送られてきたこと。
まずはこっちの質問に回答してからアンケートしようや。
回答もせずにアンケート(質問)してくるって、どういう神経の会社なんだ?
ちなみに2020年02月くらいに「シマンテック」から「ノートンライフロック」に社名変更しているようです。
「Heur.AdvML.B」の誤検知問題については他のプログラミング言語も含め、多くのプログラマーがやられているようです。
デジタル署名+USBにコピー
デジタル署名(コードサイニング証明書)の有無とビット数の組み合わせに対して、USBにコピーしたとき以下のような動作になります。
デジタル署名 | 32bit | 64bit |
---|---|---|
無し | NG | OK |
あり | OK | OK |
32bit版でデジタル署名無しの場合のみNG(Heur.AdvML.Bとして削除される)となります。
32bit版でもデジタル署名ありの場合は削除されません。
64bit版はデジタル署名の有無に関係なく削除されません。
要するにデジタル署名があれば、USBにコピーしたときに削除されない、ということです。
ノートンライフロックの件は応答ありません。調子こいてるカス企業。地道に不買運動とかやった方がいいのかな。
2020年08月17日追記 解決?
2020年08月08日に、PyInstaller 4.0がリリースされたようです。
修正履歴を見るとBugfixに
(win32) Fix Security Alerts caused by subtle implementation differences between posix anf windows in os.path.dirname()
. (#4707)
(↓機械翻訳)
(win32)のposix anfウィンドウ間の微妙な実装の違いによって引き起こされるセキュリティ警告を修正しましたos.path.dirname()
。(#4707)
上記の記載がありました。
「--noconsole」の記載がないので不安ですが、これで直ることを願っています。
これから動作確認してみます。
確認してみました。
結論はNGでした。
直っていません。相変わらず誤判定されます。
確認環境は以下になりました。
- Windows 10 Home(64bit)
- Python 3.8.2(32bit)
- PyInstaller 4.0でexe化
- シマンテック ノートン インターネットセキュリティ オンライン Ver.22.20.5.39
期待して裏切られるって辛いな…
現時点での対策まとめ
大体の人が以下の対応になるかと思います。
- 32bit版ではなく64bit版で何とかならないか再確認
- 「--noconsole」をあきらめる
- ウィルスとして誤判定されることを容認(デジタル署名で削除を防ぐ)
- 削除されても復元する(USBで渡すときは要注意)
- Py2exe等他の方法を用いる
- 新しいPyInstallerが出るのを待つ
- NortonかPyInstallerに対応してもらえるよう連絡して待つ
2020年08月24日追記 10月に「Python」3.9がリリースされたら試してみたいと思います。
その他PyInstaller関係
以下の記事を作成しました。PyInstallerで調べたいことがある方は読んでみてください。
以上。
後記
最後までお読みくださりありがとうございます。
こんなに更新したのに、現在はほぼ誰も見ていないゴミカスクズ無価値ブログです。
よければ(はてな)ブックマークや拡散をお願いいたします。
更新の原動力として励ましが欲しいのです…<(_ _)>
ディスカッション
コメント一覧
Microsoft Defender SmartScreenの保護が動作する問題がありましたが
bootloaderをビルドして置き換えることで解消しました
https://pyinstaller.readthedocs.io/en/stable/bootloader-building.html
Build Tools for Visual Studio 2019をインストールし、上記URLに従ってビルドした4つのrun*.exeをsite-packages/pyinstaller/bootloaderフォルダに配置されているものと置き換える
python 3.8.3 32bit / pyinstaller 4.0 / windows 10 64bit
情報ありがとうございます!
>
現在はほぼ誰も見ていないゴミカスクズ無価値ブログです。いやいや、役に立ちました。打ち消し線が付いてましたが、その後アクセス増えてますでしょうか?/笑
役に立ったというかまぁ、当方も解決には至っていないのですが、開発サイドで完全に対応するのは不可能っぽいと理解できました。たまたまある時点ではスルーしてもセキュリティソフトの仕様や定義ファイルが更新されれば、またブロックされる可能性が
まる様、コメントありがとうございます。
> その後アクセス増えてますでしょうか?/笑
増えていないですね~^^;
この記事だけでいうと、公開から半年程度で約1500くらいのアクセスです。
同じような状況になっている人がそこそこはいるということでしょうか。
「自分以外の他の人のところでも現象が発生している」「解決は難しい」ということが伝わればよし、
さらに「解決したときには顛末を追記しよう」という思いで作成した記事になります。
なんとかならないものですかね。
仕事中にコソコソっと書き込みしたので、なんか不完全なまま投稿してましたね/苦笑
アンチウイルスソフトやらブラウザやOSが寄ってたかってソフトのダウンロードを邪魔してきて、他の開発者はどーやって回避してるんだろうと思ったら、みんな困ってるんだ..と知れた事はまぁ心強いと言うかなんかホッとしたという感じです/笑
まる様、コメントありがとうございます。
解決には至らなくてもある意味お役に立てた、ということであれば幸いです。
配布もそうですがネット上に.exeをアップしたり、ダウンロードしてもらったりということが
以前に比べて敷居が高くなって不便になってきた気がしますね。
python3.8.3、pyinstaller4.1でも同じような症状で悩んだ末にこのブログにたどり着きました。
どうしても32bitブートローダーrun.exeが削除されてしまいます。同士がおられて安心しました笑
情報・コメントありがとうございます。
直接の解決には至っていませんが、当方の状況をお伝えすることで少しでも役に立てたのであれば幸いです。
同じ状況で困っています。
なんか情報があればアップデートしてもらえると助かります。
もり様、コメントありがとうございます。
承知しました。
解決した際には情報を更新します。
うちも、自作プログラム消された
仲間がいてうれしい(涙)
Visual studio コンソールプログラムです。
通りすがり様、コメントありがとうございます。
こういうの、本当に困りますよね。
改善を期待しているのですが、難しそうですね…