Вопрос или проблема
Я только что написал и скомпилировал программу Hello World на C# (использую Visual Studio 2022), и когда я отправил файл на VirusTotal, 1 антивирусная программа обнаружила exe как небезопасный (результаты VirusTotal программы C# Hello World). Когда я переписал ту же программу на C++ и отправил ее на VirusTotal, 4 антивирусные программы обнаружили вирусы ([результаты VirusTotal программы C++ Hello World). Указывает ли это на то, что программы действительно являются вирусами или это просто ложное срабатывание? Также, как я могу сделать так, чтобы программу не определяли как вирус?
Это не ваша вина. Это не связано с тем, на какой платформе вы работаете. Некоторые антивирусы на VirusTotal работают неправильно.
Вот эксперимент, который я провел, чтобы это доказать после того, как нашел еще один отчет антивируса о бинарном файле, зараженном вирусом. Я написал эту программу, запустил ее, а затем отправил.
На самом деле, я допустил небольшую ошибку в своей предыдущей попытке (количество каталогов данных = 2 вместо 16), из-за чего фактический загрузчик Windows вылетел, так что предыдущий хэш был другим, и он показывает новый сегодня. У вендоров было почти год, чтобы исправить проблему после последнего раза, когда я потратил время на сообщение о ложном срабатывании на VirusTotal, и это не было исправлено.
00000000 4d 5a 80 00 01 00 00 00 04 00 00 00 20 00 00 00 |MZ.......... ...|
00000010 80 02 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000020 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000030 00 00 00 00 00 00 00 00 00 00 00 00 80 00 00 00 |................|
00000040 bb 12 01 c6 47 0d 0d 89 da b4 09 cd 21 b8 03 4c |»..ÆG...Ú´.Í!¸.L|
00000050 cd 21 48 65 6c 6c 6f 2c 20 57 6f 72 6c 64 21 00 |Í!Hello, World!.|
00000060 0a 24 cc cc cc cc cc cc cc cc cc cc cc cc cc cc |.$ÌÌÌÌÌÌÌÌÌÌÌÌÌÌ|
00000070 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000080 50 45 00 00 4c 01 01 00 00 00 00 00 00 00 00 00 |PE..L...........|
00000090 00 00 00 00 e0 00 23 01 0b 01 00 00 ac 00 00 00 |....à.#.....¬...|
000000a0 00 00 00 00 00 00 00 00 00 10 00 00 00 10 00 00 |................|
000000b0 00 00 00 00 00 00 40 00 00 10 00 00 00 02 00 00 |......@.........|
000000c0 01 00 00 00 00 00 00 00 03 00 0a 00 00 00 00 00 |................|
000000d0 00 20 00 00 a0 01 00 00 00 00 00 00 02 00 00 8f |. .. ...........|
000000e0 00 00 01 00 00 00 01 00 00 00 01 00 00 80 00 00 |................|
000000f0 00 00 00 00 10 00 00 00 00 00 00 00 00 00 00 00 |................|
00000100 1c 10 00 00 3c 00 00 00 00 00 00 00 00 00 00 00 |....<...........|
00000110 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000150 00 00 00 00 00 00 00 00 68 10 00 00 10 00 00 00 |........h.......|
00000160 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
00000170 00 00 00 00 00 00 00 00 2e 74 65 78 74 00 00 00 |.........text...|
00000180 ac 00 00 00 00 10 00 00 ac 00 00 00 00 02 00 00 |¬.......¬.......|
00000190 00 00 00 00 00 00 00 00 00 00 00 00 20 00 00 e0 |............ ..à|
000001a0 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |................|
*
00000200 31 ed bb 52 00 40 00 55 53 53 55 ff 15 70 10 40 |1í»[email protected]ÿ.p.@|
00000210 00 6a 00 ff 15 68 10 40 00 cc cc cc 58 10 00 00 |.j.ÿ.h.@.ÌÌÌX...|
00000220 00 00 00 00 00 00 00 00 78 10 00 00 68 10 00 00 |........x...h...|
00000230 60 10 00 00 00 00 00 00 00 00 00 00 85 10 00 00 |`...............|
00000240 70 10 00 00 00 00 00 00 00 00 00 00 00 00 00 00 |p...............|
00000250 00 00 00 00 00 00 00 00 90 10 00 00 00 00 00 00 |................|
00000260 9e 10 00 00 00 00 00 00 90 10 00 00 00 00 00 00 |................|
00000270 9e 10 00 00 00 00 00 00 4b 45 52 4e 45 4c 33 32 |........KERNEL32|
00000280 2e 44 4c 4c 00 55 53 45 52 33 32 2e 44 4c 4c 00 |.DLL.USER32.DLL.|
00000290 00 00 45 78 69 74 50 72 6f 63 65 73 73 00 00 00 |..ExitProcess...|
000002a0 4d 65 73 73 61 67 65 42 6f 78 41 00 |MessageBoxA.|
Обнаруженные оскорбительные сигнатуры (отсортированы по типу отчета):
TR/Crypt.XPACK.Gen от Avira (без облака) и WithSecure
Это какая-то общая сигнатура; похоже, она означает, что бинарный файл упакован и, следовательно, не подлежит сканированию. Но бинарник совершенно не упакован.
W32.AIDetectMalware от Bkav Pro
Этот ИИ должен объяснить. В этом отчете нет полезной информации.
Malicious.high.ml.score от Trapmine
Учитывая, что ml явно означает машинное обучение, этот алгоритм не очень хорошо учится.
Malicious (оценка: 99) от Cynet
Хмм; у нас есть какая-то мера уверенности. Немного поиска показывает, что диапазон составляет 0-100. У нас есть кто-то, задающий вопрос, который ссылается на это, но ответа не произошло.
Generic.Malware от TEHTRIS
Хорошо, так что этот считает его плохим, но по крайней мере признает, что не знает, почему.
Unsafe от Cylance
В этом отчете нет полезной информации.
Ti!8D9B256C375F от McAfee Scanner
В этом отчете нет полезной информации. Я не уверен, является ли это число внутренним номером ссылки или хэшем бинарного файла.
Если вы жалуетесь на контрольную сумму; посмотрите на контрольную сумму бинарного файла C#, скомпилированного с помощью dotnet; она будет равна нулю, и эта контрольная сумма также равна нулю. Нулевая контрольная сумма означает не проверять контрольную сумму (считалось, что это невозможно значение для контрольной суммы во время написания спецификации PE; это может произойти сейчас, но вам нужен бинарник в пределах 64К от максимального размера, чтобы это когда-либо получить).
Этот эксперимент должен быть воспроизводим примерно дюжину раз. Создайте новые бинарные файлы Hello, World новыми способами и посмотрите, как их обнаруживают.
Из ссылки в комментариях, Cylance предоставил ответ.
“Образец был маленьким. Он не показал ничего плохого, но и ничего хорошего не показал; Программы с одной функцией почти всегда являются вредоносными; Отладочные сборки статистически странные; Использование mingw вместо visual studio статистически странно. Выходной бинарник ‘странный.’”
Это абсолютно недопустимо. Чрезвычайно несправедливо иметь предвзятость против открытых компиляторов.
Ответ Хайрума также плох:
“Напротив, очень мало “полезных” безвредных файлов, которые являются маленькими, определенно слишком мало, чтобы опровергнуть вышеуказанный опыт.”
Это пример культурной предвзятости; знакомство с культурой Unix быстро выявит, насколько ошибочно это мнение. (Да, маленькие полезные бинарники существуют и на Windows.)
Стоит отметить, что Cyren исправил абсурдное обнаружение.
Croud Strike ответил разумно. Я не буду цитировать полностью, но частично:
“[W]e expose confidence values and allow customers to set their own thresholds. While in this instance our file analysis engine was arguably too aggressive, generally this behavior is by design: if a file does not look like a legitimately useful application while also exposing unusual traits, then the sound call is to prevent it from executing. Avoiding odd looking yet potentially benign objects should be a familiar concept should you have ever opened an office fridge before.
Я не скажу, что полностью с этим согласен, но в этом мнении есть некоторый здравый смысл.
Ответ или решение
Почему ваша программа "Hello World" на C# обнаруживается как вирус
Одной из распространенных проблем, с которыми сталкиваются разработчики, является ложное срабатывание антивирусного программного обеспечения, особенно при создании простых программ, как например программа "Hello World". В данной статье мы подробно рассмотрим причины такого поведения антивирусов, а также предложим несколько рекомендаций по минимизации этих проблем.
Причины ложных срабатываний антивирусов
-
Общие сигнатуры: Многие антивирусные программы используют общие сигнатуры для обнаружения вредоносных файлов. Программы, которые создаются с использованием минимального размера кода, таких как "Hello World", могут соответствовать шаблонам, используемым для распознавания вирусов, просто потому что они выглядят необычно.
-
Ошибка классификации: Антивирусные движки могут ошибочно классифицировать безопасные программы как вредоносные из-за ряда факторов, таких как странное поведение файла или его структура. Например, если программа не содержит многих привычных функций или имеет нулевую контрольную сумму, это может привести к ошибкам классификации.
-
Реакция на необычные особенности файла: Если исполняемый файл создан с использованием нестандартных компиляторов или имеет какие-то нетипичные характеристики, антивирус может ошибочно классифицировать его как подозрительный. Например, исполняемые файлы, созданные с помощью MinGW, могут быть подозреваемыми для некоторых антивирусов.
-
Общие алгоритмы машинного обучения: Некоторые антивирусные решения используют машинное обучение для определения потенциально вредоносных файлов. Такие алгоритмы могут принимать решения на основе статистики, что создает риск ложных срабатываний.
Как избежать ложных срабатываний?
-
Используйте стандартные компиляторы и настройки: Использование стандартных версий Visual Studio и соответствующих параметров компиляции может помочь снизить вероятность ложного срабатывания. Добавьте минимальные параметры кода, чтобы файл выглядел как более сложная программа.
-
Изменение настроек сборки: Если у вас есть возможность, измените параметры сборки на "Relase" вместо "Debug". Debug-сборки могут часто выглядеть подозрительно для антивирусов из-за наличия отладочных символов или других аномалий.
-
Добавление функционала: Простые программы, такие как "Hello World", часто вызывают ложные срабатывания. Попробуйте добавлять дополнительный функционал, который может подтвердить благоприятную природу программы.
-
Отправка в антивирусные базы данных: Если вы уверены, что ваш файл безопасен, вы можете отправить его в антивирусные компании для анализа и исправления ложного срабатывания. Большинство антивирусов включает в себя функционал для отчетов о ложных срабатываниях.
Заключение
Обнаружение простой "Hello World" программы в качестве вируса — это не редкость и часто связано с особенностями работы антивирусного программного обеспечения. Понимание причин таких ложных срабатываний и применение предложенных рекомендаций поможет вам уменьшить вероятность подобных инцидентов в будущем. Не забывайте, что важно всегда проверять и тестировать любые исполняемые файлы перед распространением или запуском на других системах.