В этой заметке я хочу рассказать о том, как решалась проблема ложного срабатывания антивирусов на наш продукт.
Если у вас таких проблем нет, но вы планируете защищать свое ПО с помощью протектора — рекомендую ознакомиться с материалом, так как скорее всего вам предстоит пройти то же самое.
Шаг 1. Сode signing
Самый эффективный способ — это подписать свои исполняемые файлы, если этого не сделать то антивирусы будут сканировать их с особым пристрастием.
Для того, чтобы убедить в важности данного шага, Александр (Rouse_) Багель любезно поделился наглядным примером. В испытуемом приложении не используется протектор, нет обращения в интернет, оно выполняет только одну функцию — считает CRC32 файлов. Сравним отчеты подписанного и неподписанного файлов:
Думаю это достаточный аргумент в пользу подписи.
Техническую сторону получения сертификата и подписывания файла описывать не буду. Я получал сертификат в startssl (подкупили ценой и русскоязычным саппортом) на физ лицо Class 1 за 100$ на два года без всякой волокиты. Для получения сертификата на ООО (Class 2) были сложности в том, том что бы найти в Москве нотариуса-адвоката который бы отправил свое мнение по электронной почте подписанное цифровой подписью Класса 2…
Одобрение антивирусов является лишь побочным плюсом подписанного ПО, основные же прелести — это повышение доверия клиентов, мол «Есть ЦП — значит не колхоз!». Так же антивирусы, файрволлы и UAC не будут предупреждать о повышенной угрозе.
Шаг 2. Гневные письма
Подписан файл или нет, но если на вирустотале (далее VT) кто-то ругается — пора писать письма. Узнать куда слать жалобы о ложном срабатывании помогают специальные списки:
- www.geekstogo.com/forum/topic/273320-where-to-submit-false-positives-to-antivirus-and-security-vendors/
- forum.sysinternals.com/malware-policy-please-read_topic11134.html
- www.segura.ca/files.html
- www.techsupportalert.com/content/how-report-malware-or-false-positives-multiple-antivirus-vendors.htm
Будьте готовы, что реакция вирлабовцев на обращение занимает пару недель.
Шаг 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