- PVSM.RU - https://www.pvsm.ru -
В этой заметке я хочу рассказать о том, как решалась проблема ложного срабатывания антивирусов на наш продукт.
Если у вас таких проблем нет, но вы планируете защищать свое ПО с помощью протектора — рекомендую ознакомиться с материалом, так как скорее всего вам предстоит пройти то же самое.
Самый эффективный способ — это подписать свои исполняемые файлы, если этого не сделать то антивирусы будут сканировать их с особым пристрастием.
Для того, чтобы убедить в важности данного шага, Александр (Rouse_) Багель [1] любезно поделился наглядным примером [2]. В испытуемом приложении не используется протектор, нет обращения в интернет, оно выполняет только одну функцию — считает CRC32 файлов. Сравним отчеты подписанного [3] и неподписанного [4] файлов:
Думаю это достаточный аргумент в пользу подписи.
Техническую сторону получения сертификата и подписывания файла описывать не буду. Я получал сертификат в startssl [5] (подкупили ценой и русскоязычным саппортом) на физ лицо Class 1 за 100$ на два года без всякой волокиты. Для получения сертификата на ООО (Class 2) были сложности в том, том что бы найти в Москве нотариуса-адвоката который бы отправил свое мнение по электронной почте подписанное цифровой подписью Класса 2…
Одобрение антивирусов является лишь побочным плюсом подписанного ПО, основные же прелести — это повышение доверия клиентов, мол «Есть ЦП — значит не колхоз!». Так же антивирусы, файрволлы и UAC не будут предупреждать о повышенной угрозе.
Подписан файл или нет, но если на вирустотале (далее VT) кто-то ругается — пора писать письма. Узнать куда слать жалобы о ложном срабатывании помогают специальные списки:
Будьте готовы, что реакция вирлабовцев на обращение занимает пару недель.
Если не используется навесных защит то все просто, собрал релиз, залил на VT, отписал жалобы и все. Но в случае использования протекторов есть вариант сократить количество ложных срабатываний без отправки абуз.
Немного теории. При повторной компиляции одних и тех же исходников содержимое exe файла не меняется (кроме временных меток в заголовках). Поэтому пересборка и повторная отправка на VT ситуацию с фальшпозитивами не решит: кто ругался тот снова ругнется.
Совсем другое дело при использовании протектора (в моем случае VMProtect), который при каждой обработке файла формирует уникальную виртуальную машину (инструкции, обработчики) и соответствующий ей виртуализированный код. Эти уникальные данные могут как содержать сигнатуры какого-либо вируса, так и нет, отсюда появляется вероятность, что после повторной перезащиты антивирусы пропустят файл.
Перезащита занимает меньше времени чем ожидание ответа от вирлабовцев, но руками приходится проделывать поистине адовую рутину, ведь перезащитить 20 раз в ожидании чуда это вполне рабочий сценарий. Для автоматизации сего процесса была написана утилита VirusTotalScan, о которой пойдет речь дальше.
Скачать можно по ссылке [10]. Программа консольная, результат работы возвращается кодом выхода: 0-вирусов нет, 1-найден вирус, 2-случилось что-то другое. Синтаксис вызова:
VirusTotalScan.exe api_key имя_файла [/ignore [имя_антивируса][ ...]]
api_key Ключ доступа VirusTotal API
имя_файла Путь до проверяемого файла
имя_антивируса Список антивирусов, мнение которых игнорируется
Для использования требуется ключ доступа к VirusTotal API, который можно получить на сайте virustotal.com [11] после прохождения регистрации:
Интеграцию в билд сервер приведу на своем примере, для сборки используется .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"
Из примера должно быть все понятно. По иронии, на саму программу получил одно ложное срабатывание, отписал жалобу — теперь жду пару недель решения.
В заключении хочу поблагодарить Александра [1], с подачи которого началась статья, и предупредить — не всегда удается решить вопрос с вирлабовцами. Так, например, в одном проекте партнеров, попавшем под вебфильтр нерекомендуемых сайтов известного российского антивируса, даже с привлечением юриста, умеющего составлять грамотные письменные жалобы — так и не удалось получить ответа за что туда попали и как же выбраться.
Автор: vic85
Источник [12]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/news/63702
Ссылки в тексте:
[1] Александр (Rouse_) Багель: http://alexander-bagel.blogspot.ru/
[2] примером: http://rouse.drkb.ru/other.php#crc32
[3] подписанного: https://www.virustotal.com/ru/file/a681be72921d760abc06f2d76287f4409b2711817f3d159e71f3e3a332fe15c6/analysis/1403193892/
[4] неподписанного: https://www.virustotal.com/ru/file/8c12490e1902b894dcf9d8e7fa983cabbf907812c37f46e857bbae289cf82e38/analysis/1403193095/
[5] startssl: https://startssl.com/
[6] www.geekstogo.com/forum/topic/273320-where-to-submit-false-positives-to-antivirus-and-security-vendors/: http://www.geekstogo.com/forum/topic/273320-where-to-submit-false-positives-to-antivirus-and-security-vendors/
[7] forum.sysinternals.com/malware-policy-please-read_topic11134.html: http://forum.sysinternals.com/malware-policy-please-read_topic11134.html
[8] www.segura.ca/files.html: http://www.segura.ca/files.html
[9] www.techsupportalert.com/content/how-report-malware-or-false-positives-multiple-antivirus-vendors.htm: http://www.techsupportalert.com/content/how-report-malware-or-false-positives-multiple-antivirus-vendors.htm
[10] по ссылке: https://sites.google.com/site/victorfedorenkov/VirusTotalScan.zip?attredirects=0&d=1
[11] virustotal.com: https://virustotal.com
[12] Источник: http://habrahabr.ru/post/228059/
Нажмите здесь для печати.