Если ваше Windows-приложение приняли за вирус — как реагировать на ложные срабатывания Microsoft Defender и жить с влиянием на производительность
· Го Комура · Microsoft Defender, Антивирусная защита, Ложные срабатывания, Подпись кода, SmartScreen, Распространение приложений, Безопасность, C#, .NET, Разработка Windows, Техническая консультация
«На компьютере клиента наше приложение приняли за вирус и удалили» — если вы распространяете собственные или заказные Windows-приложения, рано или поздно вам позвонят с такой новостью. Рабочее приложение, которое ещё вчера прекрасно работало, вдруг попадает в карантин сразу после обновления определений Defender. На машине разработчика всё в порядке, а срабатывание происходит только в окружении клиента. И вредоносный код вы точно не писали.
Это не редкая случайность. Современные антивирусы оценивают «подозрительность» не только по совпадению с известными образцами вредоносного ПО, но и с помощью машинного обучения, анализа поведения и облачной репутации, а значит, подозрение в адрес легитимного бинарного файла без репутации неизбежно по самой конструкции системы. И в реагировании на ложное срабатывание чётко разделены допустимые действия (сообщить о ложном срабатывании в Microsoft, применить точечное исключение) и недопустимые (отключить антивирусную защиту, применить широкое исключение).
В этой статье с точки зрения разработчика разберём, почему возникают ложные срабатывания, что можно сделать заранее до распространения приложения, каков правильный порядок действий при обнаружении, что такое исключения как экстренная мера в окружении клиента и какие риски они несут, а также ещё одну типичную жалобу — «Defender (MsMpEng.exe) тормозит систему».
1. Сначала вывод
- Ложное срабатывание может произойти даже с легитимным приложением. С 2015 года Defender перешёл от движка, построенного вокруг статических сигнатур, к предиктивной модели на основе машинного обучения и облачной защиты, поэтому неизвестный файл может быть помечен исключительно по «подозрительности», даже не совпадая ни с одним известным образцом.12
- Правильный путь к окончательному решению — подача файла в Microsoft (заявка о ложном срабатывании). Отправьте его как разработчик через портал отправки образцов Microsoft Security Intelligence и отслеживайте вердикт. Если вы не согласны с решением, можно запросить повторное рассмотрение через контактную форму для разработчиков.34
- Файл из карантина можно восстановить. Через «Журнал защиты» в Windows Security или из командной строки с помощью
MpCmdRun.exe -Restore.5 - Исключение — это временная мера до получения результата по заявке. Исключение — это брешь в защите, и Microsoft прямо указывает использовать его умеренно и с регулярным пересмотром. Если исключение всё же добавляется, ограничьте его минимальным объёмом по полному пути и ведите запись об этом.6
- Основа профилактики — последовательная подпись кода. У Microsoft нет программы предварительной регистрации для предотвращения ложных срабатываний; официально рекомендованный способ ускорить установление происхождения и попадание в список доверенных — постоянно подписывать файлы сертификатом доверенного корневого удостоверяющего центра.4
- Собственное сканирование перед релизом и заблаговременная подача заявки снижают проблему «нулевой репутации». Дистрибутив можно проверить через кастомное сканирование
MpCmdRun.exe, а сама Microsoft отмечает, что отправка образца неизвестного файла помогает начать формировать его репутацию.78 - «Defender тормозит» — начинайте с измерения. С помощью Performance analyzer (
New-MpPerformanceRecording/Get-MpPerformanceReport) определите, какие файлы или процессы создают основную нагрузку на сканирование, прежде чем думать о мерах. Исключение и здесь — последний по очереди вариант.910
2. Почему легитимное приложение принимают за вирус
Если исходить из представления «антивирус = сверка с известными сигнатурами вирусов», ложное срабатывание выглядит необъяснимым. Но современный Defender устроен иначе. Microsoft прямо заявляет, что в 2015 году перешла от движка на основе статических сигнатур к модели, использующей предиктивные технологии — машинное обучение, прикладную науку и ИИ.1
Обнаружение работает в несколько слоёв. На устройстве сначала работают лёгкие модели машинного обучения, анализ поведения и эвристика; если устройство не может однозначно вынести вердикт, метаданные файла отправляются в облачную защитную службу, которая в большинстве случаев возвращает решение за миллисекунды. Если и этого недостаточно, система запрашивает образец файла и прогоняет его через облачное сканирование, детонацию (запуск в изолированной среде) и анализ больших данных. В окружениях с включённой функцией «блокировка при первом обнаружении» открытие файла может даже временно задерживаться до получения облачного вердикта.211
Смысл этой конструкции очевиден: в основу вердикта закладывается не только «совпадение с чем-то вредоносным», но и «репутация безвредности». В классификации Microsoft явно выделена категория «Unknown» (нераспознанное ПО), а предупреждения о неизвестных программах с малой историей загрузок рассматриваются как система раннего предупреждения о ещё не обнаруженном вредоносном ПО. Не всякая редкая программа вредоносна, но риск категории «неизвестное» для среднего пользователя высок — таково официальное объяснение.8
Иными словами, только что выпущенное собственное приложение с точки зрения защитного механизма Windows выглядит как «бинарный файл с нулевой репутацией, который в мире ещё никто ни разу не запускал». А подозрение усиливается, если к этому добавляются следующие черты.
- Структура, скрывающая суть кода. В классификации вредоносного ПО у Microsoft есть категория «Obfuscator» (обфускация) — код и намерения скрыты, чтобы затруднить обнаружение, — а ПО, которое активно пытается обойти обнаружение защитных продуктов, также относится к потенциально нежелательным приложениям (PUA). Инструменты обфускации, самораспаковывающиеся форматы и упаковка среды выполнения в единый exe-файл структурно трудно отличить от приёмов, широко используемых вредоносным ПО, и это область, где даже легитимное приложение легко вызывает подозрение.8
- Отсутствие подписи и невозможность проследить происхождение. Как будет показано в следующей главе, последовательная подпись — главный ориентир, по которому команда расследования устанавливает происхождение.4
- Установщик содержит стороннее ПО. Установщик, предлагающий поставить ПО от другого издателя или программы, не нужные для работы приложения, классифицируется как PUA по категории «Bundling software».8
Отдельно стоит синее предупреждение «Windows защитил ваш компьютер», появляющееся сразу после загрузки, — это другой механизм (Microsoft Defender SmartScreen), не связанный с обнаружением антивирусом Defender. В официальном FAQ для разработчиков Microsoft прямо указывает, что SmartScreen не имеет отношения к антивирусу Defender.4 Подробный разбор SmartScreen и репутации — в статье «Почему Windows показывает „Windows защитил ваш компьютер“»; прежде всего разберитесь, с каким из двух видов предупреждений вы столкнулись.
3. Что можно сделать заранее до распространения
3.1. Последовательная подпись кода — программы предварительной регистрации не существует
Идея «зарегистрироваться заранее в белом списке Microsoft, чтобы избежать ложных срабатываний» выглядит естественной, но ответ — нет. Microsoft не принимает от разработчиков заявки на регистрацию в списке доверенных или участие в программе предотвращения ложных срабатываний. Вместо этого официальный FAQ рекомендует постоянно подписывать файлы программы сертификатом, выданным доверенным корневым удостоверяющим центром. Последовательная подпись позволяет команде расследования быстро установить происхождение программы и применить накопленный опыт, что может ускорить её добавление в список доверенных, а изредка даже привести к тому, что сам сертификат попадёт в список доверенных издателей.4
Иными словами, эффект подписи — в том, что она объединяет «репутацию отдельного файла» в «репутацию издателя». Исполняемый файл, у которого при каждой сборке меняется хэш, сам по себе каждый раз оказывается «файлом, увиденным впервые», но если он подписан одним и тем же сертификатом, его происхождение остаётся непрерывным. Практические аспекты подписи (типы сертификатов, Azure Artifact Signing, штамп времени) рассмотрены в упомянутой статье про SmartScreen и в «Минимальном чек-листе безопасности при разработке Windows-приложений».
3.2. Сканируйте сборку самостоятельно перед релизом
Проверить собственный результат сборки в рамках релизного гейта гораздо дешевле, чем узнать об обнаружении уже в окружении клиента. У Defender есть инструмент командной строки MpCmdRun.exe, который можно автоматизировать через скрипт или задачу планировщика. По умолчанию его нет в PATH, поэтому перед запуском нужно перейти в %ProgramData%\Microsoft\Windows Defender\Platform\<версия> (либо, если такого пути нет, в %ProgramFiles%\Windows Defender).7
rem Выполнять из командной строки с правами администратора
cd /d "C:\ProgramData\Microsoft\Windows Defender\Platform\<папка с последней версией>"
rem Кастомное сканирование папки релиза (-ScanType 3)
rem -DisableRemediation: не помещать в карантин и не выполнять других действий при обнаружении -- только показать результат в выводе команды
MpCmdRun.exe -Scan -ScanType 3 -File "C:\Release\MyApp" -DisableRemediation
Определены коды возврата 0 и 2, но при использовании этого инструмента как гейта легко упустить, что 0 означает не только «ничего не обнаружено», но и «обнаружено, но успешно устранено». С обычным -Scan можно получить худшее из возможных сочетаний: Defender обнаруживает что-то в результатах сборки, помещает это в карантин, а код возврата всё равно 0 — «чисто» — и релиз спокойно проходит через конвейер. Для кастомного сканирования добавьте -DisableRemediation, чтобы при обнаружении ничего не устранялось (результат обнаружения отображается в выводе команды), и сделайте гейт умнее, чем просто «остановить релиз и расследовать, если пришёл код 2»: также проверяйте вывод команды на предмет обнаружений и убеждайтесь, что ни один из выходных файлов не пропал.7
3.3. Заранее подавайте заявку по неизвестным файлам
Microsoft прямо заявляет, что отправка образца неизвестного или подозрительного ПО «помогает пройти проверку системой и начать формировать репутацию».8 Иными словами, портал отправки образцов — это не только последнее прибежище после обнаружения, но и превентивный инструмент, дающий новому бинарному файлу с нулевой репутацией первую крупицу истории. Для крупных релизов — мажорной версии, изменения способа упаковки, внедрения инструмента обфускации и других моментов, когда внешний вид приложения существенно меняется, — стоит подать образец ещё до начала распространения.
4. Правильный порядок действий при обнаружении
4.1. Сначала подтвердите факты — журнал защиты и журнал событий
Прежде всего проверьте, действительно ли сообщение «пропало» или «перестало запускаться» вызвано обнаружением Defender. В графическом интерфейсе раздел «Защита от вирусов и угроз» → «Журнал защиты» в Windows Security хранит записи об обнаружениях и карантине, там же можно отфильтровать список по помещённым в карантин элементам.5
Если нужен журнал или удалённая проверка, используйте журнал событий. События Defender записываются в «Журналы приложений и служб → Microsoft → Windows → Windows Defender → Operational», их также можно получить через PowerShell-команду Get-WinEvent.12 Само обнаружение фиксируется как событие с ID 1116 (обнаружено вредоносное или нежелательное ПО), а последующее действие, например помещение в карантин, — как ID 1117.13
# Просмотр событий обнаружения (1116) и действий (1117) Defender, от новых к старым
Get-WinEvent -LogName 'Microsoft-Windows-Windows Defender/Operational' |
Where-Object { $_.Id -in 1116, 1117 } |
Select-Object TimeCreated, Id, Message -First 10
На этом этапе зафиксируйте имя угрозы (например, имя обнаружения вроде Trojan:Win32/Wacatac.B!ml) вместе с путём и версией помеченного файла. И заявка в Microsoft, и объяснение клиенту начинаются именно с этих двух сведений. Структура имени обнаружения (тип/платформа/семейство) следует соглашению об именовании вредоносного ПО CARO, и по суффиксу вроде завершающего !ml иногда можно предположить происхождение обнаружения.14
4.2. Сообщите о ложном срабатывании в Microsoft
Это окончательное решение проблемы. Отправьте ошибочно помеченный файл через портал отправки образцов Microsoft Security Intelligence (microsoft.com/wdsi/filesubmission). Для отправки требуется вход в систему, после входа можно отслеживать статус рассмотрения заявки. Приём образцов по электронной почте не ведётся.3
Если вы разработчик, отправляйте файл именно как разработчик ПО (software developer). Дождитесь окончательного вердикта, и если вы с ним не согласны, можно связаться с Microsoft через контактную форму для разработчиков, прилагаемую к результату заявки, и запросить повторное рассмотрение.4 Отправленный файл сначала мгновенно сканируется автоматической системой, и если файл уже обрабатывался ранее, вердикт приходит быстро. Ещё не обработанные заявки анализируются с приоритетом для файлов с широким охватом воздействия и для заявок от корпоративных клиентов с идентификатором Software Assurance.15
Если Microsoft обновит определения по результатам признания файла ложным срабатыванием, он больше не будет обнаруживаться. Иначе говоря, если не сообщить об этом, обнаружение продолжится во всех остальных окружениях клиентов, сколько бы исключений вы ни добавляли. Есть также путь и для поведенческого обнаружения, не оставляющего после себя файла: можно отправить диагностический файл (MpSupportFiles.cab), который генерирует MpCmdRun.exe -GetFiles, и запросить его анализ.157
Если у клиента развёрнут Microsoft Defender for Endpoint (EDR), есть и административный путь: администратор безопасности клиента подаёт заявку через страницу Submissions портала Microsoft Defender и одновременно использует индикатор «Разрешить», чтобы подавить ложное срабатывание в масштабах всей организации.15 В этом случае не пытайтесь решить всё в одиночку — координируйте действия с ИТ-отделом клиента.
4.3. Восстановление файла из карантина
Файл, в котором вы уверены как в ложном срабатывании, можно восстановить из карантина. В графическом интерфейсе выберите элемент в журнале защиты и нажмите «Восстановить». Из командной строки используйте MpCmdRun.exe.5
rem Список элементов в карантине
MpCmdRun.exe -Restore -ListAll
rem Восстановление в исходное место по пути файла на момент карантина
MpCmdRun.exe -Restore -FilePath "C:\Program Files\Contoso\ContosoApp\ContosoApp.exe"
С помощью параметра -Path можно указать другую папку для восстановления (в этом случае элемент также остаётся в карантине).7 Однако восстановление до обновления определений, разумеется, может привести к повторному обнаружению, поэтому на практике безопаснее придерживаться порядка: заявка о ложном срабатывании → при необходимости временное исключение → восстановление.
4.4. Если обнаружение произошло в стороннем антивирусе
Обнаружение не в Defender, а в EDR или стороннем антивирусном продукте не решается обращением в Microsoft. Нужно подать отдельную заявку через собственный канал приёма сообщений о ложных срабатываниях (false positive submission) того производителя, чей продукт выдал обнаружение. У большинства производителей есть специальная форма, поэтому найдите её по запросу «название производителя + false positive submission» и подайте заявку с тем же именем обнаружения, файлом и данными о подписи, что и для Defender. Если обнаружение происходит одновременно в нескольких продуктах, это также повод заподозрить причину на стороне сборки — обфускацию, пакер или сторонние компоненты.
5. Экстренные меры в окружении клиента — исключения и их риски
5.1. Место исключений — не окончательное решение
Если бизнес клиента стоит, пока ожидается вердикт по заявке о ложном срабатывании, экстренной мерой становится исключение (exclusion) в Defender. Но нельзя ошибаться в том, чем оно является. Как неоднократно предупреждает сама Microsoft, исключение технически представляет собой брешь в защите (protection gap), и официальные принципы гласят: (1) использовать умеренно, (2) применять только для конкретной проблемы, например для проблем производительности или совместимости приложения, (3) вести запись о причине исключения и регулярно её пересматривать.6 Отметим, что описанное здесь исключение — это исключение из сканирования антивирусом Defender (по расписанию, по требованию и в реальном времени). В окружении с развёрнутым Microsoft Defender for Endpoint даже для исключённого файла по-прежнему могут срабатывать оповещения EDR и другие обнаружения.16 «Добавили исключение, а оповещения всё равно приходят» — это заложенное поведение, а не сбой.
И даже если исключение добавляется, предложение отключить саму защиту в реальном времени или Defender целиком не рассматривается вовсе. Защита этого устройства падает целиком, в том числе от угроз, никак не связанных с вашим приложением. Однажды попросив клиента отключить функцию безопасности под предлогом борьбы с ложным срабатыванием, вы гарантированно получите проблему при последующем аудите безопасности.
5.2. Как правильно добавить исключение — полный путь, минимальный охват
Исключение можно добавить и через графический интерфейс Windows Security (Параметры защиты от вирусов и угроз → Исключения), но если это оформляется в виде регламента, надёжнее использовать PowerShell. Для управления списком исключений применяются Add-MpPreference (добавить), Remove-MpPreference (удалить) и Set-MpPreference (заменить весь список). Set-MpPreference перезаписывает существующий список исключений, поэтому для добавления всегда используйте Add-MpPreference, чтобы случайно не стереть уже существующие в окружении клиента исключения.16
# Выполнять из PowerShell с правами администратора
# Исключение по файлу (минимальный охват -- полный путь к исполняемому файлу, а не папка)
Add-MpPreference -ExclusionPath "C:\Program Files\Contoso\ContosoApp\ContosoApp.exe"
# Проверка текущих настроек исключений
Get-MpPreference | Select-Object ExclusionPath, ExclusionProcess, ExclusionExtension
# Удаление после устранения ложного срабатывания
Remove-MpPreference -ExclusionPath "C:\Program Files\Contoso\ContosoApp\ContosoApp.exe"
Параметр -ExclusionPath можно указать как для отдельного файла, так и для целой папки, но при указании папки под исключение попадают и все вложенные подпапки, поэтому сначала стоит рассмотреть исключение по отдельному файлу.16 Другой параметр, -ExclusionProcess, легко понять неверно из-за названия: он не исключает сам указанный процесс, а исключает из сканирования файлы, которые этот процесс открывает. Официальная рекомендация такова: если нужно исключить сам исполняемый файл процесса, используйте -ExclusionPath.17 Если обнаружения или проблемы производительности возникают из-за того, что приложение открывает большое количество файлов данных, используйте -ExclusionProcess; если ложно обнаруживается сам исполняемый файл — используйте -ExclusionPath.
Сработало ли исключение так, как задумано, можно проверить командой MpCmdRun.exe -CheckExclusion -Path <путь>.7 Кроме того, в управляемом окружении предполагается централизованное управление через Intune или групповую политику (Конфигурация компьютера → Административные шаблоны → Компоненты Windows → Антивирус Microsoft Defender → Исключения), а не ручная настройка на каждой конечной точке. Microsoft рекомендует использовать для определения и редактирования исключений именно Intune.1615
5.3. Исключения, которые добавлять нельзя
Исключённая папка становится и местом, которое злоумышленники используют как «место, куда не заглядывает Defender». Microsoft прямо перечисляет то, что «не следует исключать, даже если вы уверены в его безобидности».18
- Исключение универсальных папок вроде
C:\,C:\Temp,C:\Users\или%Windir%\Temp. Исключение целой временной папки ради собственного приложения предоставляет безопасную зону для всего вредоносного ПО сразу. - Исключение по расширению, например
.exe,.dll,.tmp,.zip. - Исключение универсальных процессов, таких как
cmd.exe,powershell.exe,msbuild.exe,java.exe. - Исключение только по имени файла без пути (например,
ContosoApp.exe). Вредоносное ПО с таким же именем будет исключено независимо от того, где оно размещено, поэтому всегда указывайте полный путь.
Подытоживая: исключение должно быть по полному пути, минимального объёма, с записью и со сроком действия. Факт добавления исключения и его причину нужно сообщить ИТ-администратору клиента, а после подтверждения вердикта по заявке о ложном срабатывании и прекращения обнаружения — снять его.
6. Как жить с влиянием на производительность — «MsMpEng.exe тормозит»
Помимо ложных срабатываний, ещё одна типичная жалоба связана с производительностью. Симптомы: MsMpEng.exe (Antimalware Service Executable) грузит процессор в диспетчере задач, вывод файлов приложением или сборка идут медленно. MsMpEng.exe — это основная служба антивируса Defender, а поведение защиты в реальном времени по умолчанию — синхронное сканирование в момент открытия файла («open now, scan now»).19 Значит, чем чаще нагрузка открывает и закрывает множество мелких файлов — сборка, частая построчная запись логов, интенсивное использование временных файлов, — тем больше происходит сканирований, и такая структура особенно уязвима к этому влиянию.
6.1. Сначала измерение — Performance analyzer
Прежде чем сразу переходить от «тормозит» к «исключить», измерьте, что именно составляет основную нагрузку на сканирование. У Defender есть специальный Performance analyzer: с помощью PowerShell-команды New-MpPerformanceRecording можно снять запись производительности сканирования (ETL), а Get-MpPerformanceReport — агрегировать её.9
# Выполнять из PowerShell с правами администратора
# Начать запись, воспроизвести тяжёлую операцию (сборку, пакетную обработку и т. п.), затем остановить нажатием Enter
New-MpPerformanceRecording -RecordTo .\Defender-scans.etl
# Показать топ файлов по времени сканирования и разбивку сканирований по каждому из них
Get-MpPerformanceReport -Path .\Defender-scans.etl -TopFiles 3 -TopScansPerFile 10
Помимо -TopFiles / -TopScansPerFile, можно получить агрегацию по процессам и расширениям, что позволяет точно определить, какой доступ к файлам со стороны собственного приложения провоцирует сканирование. Важный момент: сама официальная документация прямо оговаривает, что этот инструмент предназначен для получения информации о проблемных файлах, а не для того, чтобы предлагать исключения.10
6.2. Что можно сделать на стороне приложения до исключения
Если измерение показало, что основную часть сканирования вызывает большое количество временных файлов, которые пишет само приложение, есть возможность пересмотреть паттерн записи приложения ещё до применения исключения. Поскольку защита в реальном времени срабатывает по факту открытия файла19, следующие изменения в проектировании сокращают само число сканирований.
- Объединить обработку, открывающую и закрывающую тысячи мелких промежуточных файлов, в дозапись в небольшое число файлов или в обработку в памяти
- Сократить паттерн «записать временный файл, затем переименовать или удалить его»
- Отказаться от построчного открытия и закрытия лога, вместо этого писать через открытый поток
Для фактического измерения того, какой процесс какие файлы и с какой частотой затрагивает, отлично подходит Process Monitor. Порядок действий описан в статье «Практическое руководство по Process Monitor (ProcMon)».
6.3. Для машины разработчика — режим производительности Dev Drive
В контексте медленной сборки на машине разработчика первым кандидатом становится Dev Drive с режимом производительности в Windows 11. На Dev Drive (томе на базе ReFS для разработки) защита в реальном времени Defender работает в асинхронном «режиме производительности». Вместо синхронного сканирования в момент открытия файла используется подход «open now, scan later» — сканирование с задержкой после завершения открытия, и, по официальной позиции, это позволяет улучшить производительность, сохранив при этом существенно более высокий уровень защиты, чем такие приёмы, как полное исключение папки из сканирования.19 Стандартная практика — перенести на Dev Drive дерево исходного кода, кэш пакетов и результаты сборки.20
Однако режим производительности работает только на Dev Drive и предполагает, что защита в реальном времени включена. Кроме того, режим производительности не предназначен для устранения симптома «высокая нагрузка CPU/памяти у MsMpEng.exe» — в этом случае официальная рекомендация состоит в том, чтобы, как описано выше, определить «горячие» процессы и пути с помощью Performance analyzer.19
Кроме того, если сканирование по требованию (например, регулярное полное сканирование) создаёт нагрузку в рабочие часы, полезно знать про ключ -CpuThrottling у MpCmdRun.exe -Scan. При его включении к загрузке CPU при сканировании применяется ограничение (по умолчанию 50%).7 Однако это не формат, где ключу передаётся число для указания произвольного процента. Само значение ограничения настраивается через параметр политики (ScanAvgCPULoadFactor), и это значение — не жёсткий предел, а ориентир для движка сканирования: «в среднем не превышать этот процент».21
7. Таблица решений — действия по симптомам
| Ситуация | Что делать в первую очередь | Окончательное решение |
|---|---|---|
| Обнаружение сразу после собственной сборки, на машине разработчика или в CI | Проверить имя обнаружения и путь в журнале защиты и журнале событий (1116/1117)13. Проверить изменения в сборке (обфускация, пакер, сторонние компоненты) | Отправить заявку на портал отправки образцов как разработчик3. Пересмотреть схему подписи. Встроить сканирование перед релизом в CI |
| Обнаружение и карантин в окружении клиента | Проверить имя обнаружения, файл, а также Defender это или сторонний продукт. Подать заявку о ложном срабатывании, и если простой бизнеса критичен — по согласованию с ИТ-отделом клиента добавить исключение по полному пути и восстановить файл5 | После подтверждения вердикта и обновления определений снять исключение. У клиентов с EDR дополнительно использовать административный путь (заявка через портал, индикатор «Разрешить»)15 |
| Обнаружение в стороннем антивирусе | Получить у клиента название и версию продукта, имя обнаружения | Подать заявку в канал приёма ложных срабатываний этого производителя. Если обнаружение происходит в нескольких продуктах — заподозрить причину на стороне сборки |
| Появляется «Windows защитил ваш компьютер» (SmartScreen) | Убедиться, что это не обнаружение вируса (отдельный от Defender механизм)4 | Наладить подпись кода и канал распространения (см. статью про SmartScreen) |
| Defender (MsMpEng.exe) тормозит / медленный ввод-вывод | Измерить с помощью Performance analyzer, определить «горячие» файлы/процессы9 | Улучшить паттерн записи приложения. На машинах разработчиков — Dev Drive с режимом производительности19. Исключение — последний по очереди вариант, минимального объёма6 |
Во всех случаях общими остаются три вещи: «сначала установить факты (имя обнаружения, объект, обнаруживший продукт)», «обязательно запустить окончательное решение — сообщение о проблеме» и «исключение и восстановление — временная мера минимального объёма».
8. Итог
- Современный Defender выносит вердикт не по сверке сигнатур, а на основе машинного обучения, облачной защиты и репутации. Подозрение в адрес нового бинарного файла с нулевой репутацией — неизбежное следствие конструкции, а структуры, «скрывающие суть», такие как обфускация и самораспаковка, вызывают подозрение ещё сильнее.
- Основа профилактики — последовательная подпись кода сертификатом доверенного удостоверяющего центра. Программы предотвращения ложных срабатываний через предварительную регистрацию не существует. Эффективны также собственное сканирование через
MpCmdRun.exeперед релизом и заблаговременная подача образца для релизов, существенно меняющих внешний вид приложения. - При обнаружении установите имя обнаружения и объект через журнал защиты и журнал событий (ID 1116/1117), подайте заявку на портал отправки образцов Microsoft Security Intelligence как разработчик. Файл из карантина можно восстановить через журнал защиты или командой
MpCmdRun.exe -Restore. - Исключение — временная мера до получения результата по заявке. Полный путь, минимальный объём, ведите запись и снимайте после устранения. Исключение временных папок, расширений или универсальных процессов строго запрещено, поскольку создаёт укрытие для вредоносного ПО.
- Проблемы производительности сначала измеряйте через Performance analyzer, рассмотрите улучшение паттерна записи приложения и режим производительности Dev Drive, и только если этого недостаточно — точечное исключение. Просьба к клиенту отключить защиту в реальном времени не рассматривается вовсе.
Похожие статьи
- Почему Windows показывает «Windows защитил ваш компьютер»
- Безопасность автоматических обновлений — почему одного HTTPS недостаточно
- Минимальный чек-лист безопасности при разработке Windows-приложений
- Как выбрать способ распространения Windows-приложения — MSI/MSIX/ClickOnce/xcopy/собственный апдейтер
- Практическое руководство по Process Monitor (ProcMon) — как за 10 минут найти причину «настройки не читаются» и «ACCESS DENIED»
Смежные направления консультаций
KomuraSoft LLC занимается выработкой политики реагирования на ложные срабатывания и предупреждения SmartScreen для распространяемых приложений, проектированием схемы распространения и обновления с учётом подписи кода, а также измерением и диагностикой проблем производительности, вызванных антивирусным ПО.
Источники
-
Microsoft Learn, Microsoft Defender Antivirus in Windows Overview. О переходе в 2015 году от движка на основе статических сигнатур к предиктивной модели на базе машинного обучения, прикладной науки и ИИ, а также об обнаружении аномалий и защите на основе поведения. ↩ ↩2
-
Microsoft Learn, Cloud protection and sample submission at Microsoft Defender Antivirus. О моделях машинного обучения на устройстве, анализе поведения и эвристике, отправке метаданных в облачную защиту (вердикт часто приходит за миллисекунды) и многослойной структуре отправки образцов, детонации и анализа больших данных. ↩ ↩2
-
Microsoft Learn, Submit files for analysis. О возможности отправить ошибочно обнаруженный файл через портал отправки образцов (microsoft.com/wdsi/filesubmission), о необходимости входа в систему и отслеживании статуса заявки, а также об отсутствии приёма образцов по электронной почте. ↩ ↩2 ↩3
-
Microsoft Learn, Software developer FAQ. Об отсутствии регистрации в списке доверенных и программы предотвращения ложных срабатываний, о том, что последовательная подпись сертификатом доверенного корневого удостоверяющего центра ускоряет установление происхождения и добавление в список доверенных, об отправке заявки как разработчика и оспаривании вердикта через контактную форму для разработчиков, а также о том, что SmartScreen — механизм, отдельный от антивируса Defender. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Microsoft Learn, Restore quarantined files in Microsoft Defender Antivirus. О проверке и восстановлении элементов карантина через «Журнал защиты» в Windows Security и о процедуре просмотра списка карантина и восстановления через MpCmdRun. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Configure custom exclusions for Microsoft Defender Antivirus. О том, что исключение — это брешь в защите (protection gap), которую следует использовать умеренно, только для конкретной проблемы, а не превентивно, и с фиксацией причины и регулярным пересмотром. ↩ ↩2 ↩3
-
Microsoft Learn, Configure and manage Microsoft Defender Antivirus with the MpCmdRun command-line tool. О расположении MpCmdRun.exe и требовании прав администратора; о параметрах -Scan (кастомное сканирование через -ScanType 3, параметр -File, код возврата 0, включающий как «ничего не обнаружено», так и «обнаружено, но успешно устранено», и код 2, означающий «обнаружено, не устранено / требуется действие пользователя / ошибка сканирования»; -DisableRemediation, пропускающий устранение при обнаружении и показывающий результат в выводе команды; значение по умолчанию 50 для -CpuThrottling); -Restore (-ListAll/-Name/-FilePath/-Path); -CheckExclusion; и -GetFiles. ↩ ↩2 ↩3 ↩4 ↩5 ↩6 ↩7
-
Microsoft Learn, How Microsoft identifies malware and potentially unwanted applications. О том, что предупреждения о категории «Unknown» (нераспознанное ПО) рассматриваются как система раннего предупреждения о необнаруженном вредоносном ПО, что подача образца помогает начать формировать репутацию, и о классификациях Obfuscator, Evasion software и Bundling software. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Performance analyzer for Microsoft Defender Antivirus. О снятии записи через New-MpPerformanceRecording, воспроизведении операции и порядке анализа через -TopFiles/-TopScansPerFile и другие параметры Get-MpPerformanceReport. ↩ ↩2 ↩3
-
Microsoft Learn, Microsoft Defender Antivirus Performance Analyzer reference. О том, что Performance analyzer предназначен для получения информации о проблемных файлах, а не для предложения исключений, что исключения нужно определять осторожно, поскольку они снижают защиту, и о требовании прав администратора. ↩ ↩2
-
Microsoft Learn, Turn on block at first sight. О том, как облачный бэкенд оценивает неизвестные подозрительные файлы с помощью эвристики, машинного обучения и автоматического анализа, блокируя их за секунды, и о том, что открытие файла может задерживаться до получения вердикта. ↩
-
Microsoft Learn, Troubleshoot Microsoft Defender Antivirus scan issues. О расположении журнала событий Defender (Журналы приложений и служб → Microsoft → Windows → Windows Defender → Operational) и способе его получения через Get-WinEvent. ↩
-
Microsoft Learn, Review event logs and error codes to troubleshoot issues with Microsoft Defender Antivirus. О списке идентификаторов событий Defender, включая ID 1116 (обнаружение) и 1117 (действие, например карантин или удаление). ↩ ↩2
-
Microsoft Learn, Malware names. О том, что имена обнаружений следуют соглашению об именовании CARO (тип/платформа/семейство и т. п.). ↩
-
Microsoft Learn, Address false positives/negatives in Microsoft Defender for Endpoint. О том, что отправленный файл сначала мгновенно сканируется автоматической системой, что приоритет при анализе получают файлы с широким охватом воздействия и заявки от держателей идентификатора Software Assurance, об отправке MpSupportFiles.cab для поведенческого обнаружения, об административной подаче заявок и индикаторе «Разрешить», а также о рекомендации использовать Intune для определения исключений. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Configure and validate exclusions based on file extension and folder location. О различии Set-MpPreference (перезапись списка), Add-MpPreference (добавление) и Remove-MpPreference (удаление); о том, что ExclusionPath можно указывать на уровне файла или папки (включая подпапки); о настройке через групповую политику, Intune и подобные средства; о проверке исключения через MpCmdRun; а также о том, что даже для файла с исключением из антивирусного сканирования могут по-прежнему срабатывать оповещения EDR и другие обнаружения. ↩ ↩2 ↩3 ↩4
-
Microsoft Learn, Configure exclusions for files opened by processes. О том, что ExclusionProcess исключает «файлы, которые открывает указанный процесс», а для исключения самого процесса нужно использовать файловое исключение (ExclusionPath). ↩
-
Microsoft Learn, Common mistakes to avoid when defining exclusions. О том, что не следует исключать C:\ и подобные временные папки, расширения вроде .exe/.dll/.tmp, универсальные процессы вроде cmd.exe/powershell.exe/msbuild.exe или имя файла без пути, а также о том, что исключённый элемент может стать укрытием для угрозы. ↩
-
Microsoft Learn, Protect Dev Drive using performance mode. О том, что защита в реальном времени по умолчанию выполняет синхронное сканирование «open now, scan now», что режим производительности обеспечивает существенно более высокую защиту, чем исключение папки, за счёт асинхронного сканирования «open now, scan later», что он работает только на Dev Drive и только при включённой защите в реальном времени, а также о том, что для устранения высокой нагрузки CPU/памяти у MsMpEng.exe (WinDefend, Antimalware Service Executable) следует использовать Performance Analyzer. ↩ ↩2 ↩3 ↩4 ↩5
-
Microsoft Learn, Set up a Dev Drive on Windows 11. О том, что Dev Drive — это том для разработки на базе ReFS, что рекомендуется переносить на него дерево проекта, кэш пакетов и результаты сборки, и что режим производительности становится режимом по умолчанию на доверенном Dev Drive. ↩
-
Microsoft Learn, Microsoft Defender Antivirus full scan considerations and best practices. О том, что ограничение CPU при сканировании (ScanAvgCPULoadFactor) — не жёсткий предел, а ориентир для движка сканирования не превышать это значение в среднем, и что оно применяется по умолчанию к сканированиям по расписанию (и опционально к кастомным сканированиям). ↩
Похожие статьи
Недавние статьи с теми же тегами помогут подробнее изучить близкие темы.
CI/CD для приложений WinForms / WPF на практике — автоматизация от сборки до подписи и распространения через GitHub Actions
Практическое руководство по настройке CI/CD для приложений WinForms / WPF через GitHub Actions. Минимальный YAML для сборки и тестов на w...
Спящий режим, гибернация, Modern Standby и долго работающие приложения — как проектированием предотвратить «остановилось ночью»
Разбираем, почему долго работающее Windows-приложение оказывается «остановленным к утру», начиная с различий между спящим режимом S3, гиб...
Работают ли бизнес-приложения на Windows на Arm — реальность x64-эмуляции (Prism) и нативных DLL/COM
Отвечаем разработчикам и ИТ-специалистам на вопрос «заработает ли наше бизнес-приложение на Windows на Arm». Разбираем принцип работы x64...
MAX_PATH и подводные камни путей/имён файлов в Windows — лимит 260 символов, зарезервированные имена, конечная точка, регистр
Разбираем ограничения путей и имён файлов, которые часто стоят за классической ошибкой «файл не найден». Рассматриваем состав лимита MAX_...
Подводные камни сетевых дисков и UNC-путей ── как бизнес-приложения работают с файловым сервером (общей папкой)
Разбираем типичные проблемы, возникающие при выводе данных и мониторинге общей папки из бизнес-приложения: почему буква диска (Z:) не вид...
Связанные темы
Эти страницы показывают тему статьи в более широком контексте услуг и решений.
Технические темы Windows
Раздел о разработке Windows, расследовании сбоев и использовании существующих активов.
Услуги по этой теме
Статья напрямую связана со следующими услугами.
Разработка приложений для Windows
Бизнес-приложения, интеграция оборудования и средства связи — от требований до разработки.
Частые вопросы
Вопросы, которые часто возникают при консультациях по теме статьи.
- Моё собственное приложение Microsoft Defender определил как вирус. Что делать?
- Прежде всего не паникуйте и не бросайтесь сразу настраивать исключения или отключать Defender. Правильный путь к окончательному решению — подать файл через портал отправки образцов Microsoft Security Intelligence (sample submission) как разработчик ПО (software developer). После входа в систему можно отслеживать статус рассмотрения заявки; если файл признают ложным срабатыванием, после обновления определений он перестанет обнаруживаться. Файл, уже попавший в карантин, можно восстановить через «Журнал защиты» в Windows Security или командой MpCmdRun.exe с ключом -Restore.
- Как сообщить Microsoft о ложном срабатывании?
- Отправьте файл через портал отправки образцов Microsoft Security Intelligence (microsoft.com/wdsi/filesubmission). Для отправки требуется вход в систему, после чего статус рассмотрения можно отслеживать на портале. Отправленный файл сначала мгновенно сканируется автоматической системой, при необходимости его дополнительно анализирует аналитик. Отправляйте заявку как разработчик, и если вы не согласны с вердиктом, можно запросить повторное рассмотрение через контактную форму для разработчиков, прилагаемую к результату проверки.
- Уместно ли попросить клиента настроить исключение в своём окружении?
- Как временную меру до получения результата по заявке о ложном срабатывании — да, это допустимый вариант, но он не должен становиться постоянным решением. Исключение технически создаёт брешь в защите Defender, и сама Microsoft прямо указывает, что использовать его следует умеренно, только для конкретной проблемы и с регулярным пересмотром. Если исключение всё же добавляется, его нужно ограничить минимальным объёмом — полным путём к исполняемому файлу, — вести запись о том, кто, зачем и до какого срока его добавил, и снять исключение сразу после устранения ложного срабатывания. Широкие исключения вроде целой папки, C:\Temp или расширения .exe равносильны созданию укрытия для вредоносного ПО.
- Устраняет ли подпись кода ложные срабатывания?
- Гарантии нет, но эффект значительный. У Microsoft нет программы предварительной регистрации в списке доверенных для предотвращения ложных срабатываний — вместо этого рекомендуется постоянно подписывать файлы сертификатом доверенного корневого удостоверяющего центра. Последовательная подпись позволяет команде расследования быстро установить происхождение программы, что может ускорить её попадание в список доверенных. И наоборот, неподписанный файл — без каких-либо признаков происхождения от сборки к сборке — каждый раз проверяется заново как неизвестный файл без репутации.
Об авторе
Страница с профилем автора статьи.
Го Комура
Представитель KomuraSoft LLC
Специализируется на разработке программного обеспечения для Windows, техническом консалтинге и расследовании сбоев, особенно в проектах с унаследованными системами и трудно воспроизводимыми ошибками.
Публичные ссылки