Дружим свой софт с антивирусами: как избежать ложных срабатываний

в 5:08, , рубрики: Без рубрики

В этой заметке я хочу рассказать о том, как решалась проблема ложного срабатывания антивирусов на наш продукт.

Дружим свой софт с антивирусами: как избежать ложных срабатываний

Если у вас таких проблем нет, но вы планируете защищать свое ПО с помощью протектора — рекомендую ознакомиться с материалом, так как скорее всего вам предстоит пройти то же самое.

Шаг 1. Сode signing

Дружим свой софт с антивирусами: как избежать ложных срабатываний

Самый эффективный способ — это подписать свои исполняемые файлы, если этого не сделать то антивирусы будут сканировать их с особым пристрастием.

Для того, чтобы убедить в важности данного шага, Александр (Rouse_) Багель любезно поделился наглядным примером. В испытуемом приложении не используется протектор, нет обращения в интернет, оно выполняет только одну функцию — считает CRC32 файлов. Сравним отчеты подписанного и неподписанного файлов:

Дружим свой софт с антивирусами: как избежать ложных срабатываний

Думаю это достаточный аргумент в пользу подписи.

Техническую сторону получения сертификата и подписывания файла описывать не буду. Я получал сертификат в startssl (подкупили ценой и русскоязычным саппортом) на физ лицо Class 1 за 100$ на два года без всякой волокиты. Для получения сертификата на ООО (Class 2) были сложности в том, том что бы найти в Москве нотариуса-адвоката который бы отправил свое мнение по электронной почте подписанное цифровой подписью Класса 2…

Одобрение антивирусов является лишь побочным плюсом подписанного ПО, основные же прелести — это повышение доверия клиентов, мол «Есть ЦП — значит не колхоз!». Так же антивирусы, файрволлы и UAC не будут предупреждать о повышенной угрозе.

Шаг 2. Гневные письма

Дружим свой софт с антивирусами: как избежать ложных срабатываний

Подписан файл или нет, но если на вирустотале (далее VT) кто-то ругается — пора писать письма. Узнать куда слать жалобы о ложном срабатывании помогают специальные списки:

Будьте готовы, что реакция вирлабовцев на обращение занимает пару недель.

Шаг 3. Автоматическая проверка VirusTotal'ом на билд сервере

Если не используется навесных защит то все просто, собрал релиз, залил на VT, отписал жалобы и все. Но в случае использования протекторов есть вариант сократить количество ложных срабатываний без отправки абуз.

Немного теории. При повторной компиляции одних и тех же исходников содержимое exe файла не меняется (кроме временных меток в заголовках). Поэтому пересборка и повторная отправка на VT ситуацию с фальшпозитивами не решит: кто ругался тот снова ругнется.

Совсем другое дело при использовании протектора (в моем случае VMProtect), который при каждой обработке файла формирует уникальную виртуальную машину (инструкции, обработчики) и соответствующий ей виртуализированный код. Эти уникальные данные могут как содержать сигнатуры какого-либо вируса, так и нет, отсюда появляется вероятность, что после повторной перезащиты антивирусы пропустят файл.

Перезащита занимает меньше времени чем ожидание ответа от вирлабовцев, но руками приходится проделывать поистине адовую рутину, ведь перезащитить 20 раз в ожидании чуда это вполне рабочий сценарий. Для автоматизации сего процесса была написана утилита VirusTotalScan, о которой пойдет речь дальше.

Используем VirusTotalScan

Скачать можно по ссылке. Программа консольная, результат работы возвращается кодом выхода: 0-вирусов нет, 1-найден вирус, 2-случилось что-то другое. Синтаксис вызова:

  VirusTotalScan.exe api_key имя_файла [/ignore [имя_антивируса][ ...]]
    api_key          Ключ доступа VirusTotal API
    имя_файла        Путь до проверяемого файла
    имя_антивируса   Список антивирусов, мнение которых игнорируется

Для использования требуется ключ доступа к VirusTotal API, который можно получить на сайте virustotal.com после прохождения регистрации:

Дружим свой софт с антивирусами: как избежать ложных срабатываний

Интеграцию в билд сервер приведу на своем примере, для сборки используется .bat скрипт:

:VMPROTECT
  IF EXIST "~program.exe" DEL "~program.exe" 
 
  rem Использование виртуальной машины
  echo Compiling with WMProtect  
  VMProtect_Con.exe "program.exe" "~program.exe" -pf "program.exe.vmp"
  IF ERRORLEVEL 1 GOTO ERROR
    
  rem Установим цифровую подпись
  signtool.exe ...

  :VirusTotalScan
  rem закачка подписанного файла на VirusTotal
  rem пропустим антивирусы Qihoo-360 и CMC
  VirusTotalScan.exe 1fe0ef5feca2f84eb450bc3617f839e317b2a686af4d651a9bada77a522201b0 "~program.exe" /ignore "Qihoo-360" "CMC"
  
  rem при ошибке отправим на повторное сканирование
  IF ERRORLEVEL 2 GOTO VirusTotalScan
 
  rem Нашелся вирус, перезащищаем
  IF ERRORLEVEL 1 ( 
   echo Vireses finded. RECOMPILE.
   GOTO VMPROTECT 
  )
 
  rem вирусов нет, работаем дальше 

  rem заменим итоговый файл
  DEL "program.exe"
  COPY "~program.exe" "program.exe"
  DEL "~program.exe"

Из примера должно быть все понятно. По иронии, на саму программу получил одно ложное срабатывание, отписал жалобу — теперь жду пару недель решения.

Заключение

В заключении хочу поблагодарить Александра, с подачи которого началась статья, и предупредить — не всегда удается решить вопрос с вирлабовцами. Так, например, в одном проекте партнеров, попавшем под вебфильтр нерекомендуемых сайтов известного российского антивируса, даже с привлечением юриста, умеющего составлять грамотные письменные жалобы — так и не удалось получить ответа за что туда попали и как же выбраться.

Автор: vic85

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js