Проверка архива на вирусы: ClamAV, полнота анализа и ограничения
Исправный ZIP ещё не означает проверку на вирусы. В DOKIVO появился отдельный инструмент с ClamAV, официальными базами и отчётом по реально прочитанным записям. Показываем три результата, изоляцию, пределы и проверки.
Архив открывается — но проверен ли он на угрозы?
Архив успешно распаковывается, CRC совпадает, список файлов виден. Эти результаты полезны, но отвечают на вопрос о целостности данных. Они не означают, что вложения проверены антивирусом. Поэтому в DOKIVO появился отдельный инструмент «Проверить архив на вирусы»: собственный сценарий, антивирусный движок и отдельный понятный отчёт.
Такое разделение важно при получении материалов от подрядчика, переносе старых копий или подготовке комплекта для коллег. Сначала нужно понять, что именно удалось проверить и какие записи остались за пределами анализа. Зеленоватый цвет интерфейса и слово «готово» не должны скрывать неверный пароль, вложенный контейнер или ограничение объёма.
Инструмент использует ClamAV 1.5.4 с официальными базами. Файлы и их хеши не отправляются во внешние сервисы проверки. Это антивирусный контроль в заданных условиях, а не обещание абсолютной безопасности и не замена внимательному отношению к происхождению полученного документа.
Три результата вместо одного уверенного «всё хорошо»
В отчёте есть общий итог и подробные записи. Обнаруженная угроза имеет приоритет даже при неполном охвате. Если доступна только часть данных, итог остаётся неполным, а причины перечислены. Формулировка «угроз не обнаружено» означает результат выполненной проверки при известных базах и охвате, а не доказательство отсутствия любых угроз.
| Итог | Что произошло | Что делать дальше |
|---|---|---|
| Обнаружено | Движок обнаружил совпадение с угрозой | Не открывать вложение; изучить источник и отчёт |
| Проверка неполная | Часть содержимого или возможностей анализа недоступна | Прочитать конкретные ограничения, не считать записи безопасными |
| Угроз не обнаружено | В выполненном полном охвате совпадений не найдено | Сохранить отчёт и учитывать происхождение файла |
В техническом JSON эти итоги названы detected, incomplete и no_threats_detected. Отдельный coverageComplete описывает полноту. Программа, которая позже читает отчёт, может проверить оба свойства. Нельзя считать произвольное поле со словом «OK» достаточным основанием для дальнейшего открытия всех вложений.
Что делает libarchive, а что делает ClamAV
Архив разбирается libarchive по записям. Имена вложений служат подписями отчёта, а не путями извлечения на сервере. Символические и жёсткие ссылки не извлекаются. Порядковый идентификатор и родительская запись позволяют различать одинаковые имена во вложенных каталогах и контейнерах.
ClamAV получает исходный контейнер и фактически прочитанные файлы. Автоматическая распаковка архивов самим антивирусом отключена: один успешный ответ на внешний ZIP не должен превращаться в неподтверждённое утверждение о каждом внутреннем файле. Отчёт строится по реально пройденным записям, с отдельными причинами ограничений.
Для PDF, OLE, исполняемых файлов и неразобранных контейнеров остаются границы проверки встроенного содержимого. Известный пароль пользователь вводит сам; подбора паролей нет. Если закрытую часть прочитать нельзя, она не становится чистой по предположению. Это правило одинаково важно и для человека, и для интеграции, принимающей решение по JSON.
Сам сканер работает в отдельном контейнере без сети, с ограничениями памяти и процессора, без доступного для записи корня файловой системы. Обновление баз выполняет отдельный FreshClam: ему нужна сеть, но пользовательские архивы недоступны. Разделение даёт конкретную проверяемую границу между получением официальных сигнатур и анализом входного содержимого.
Почему размер загрузки и полнота анализа — разные ограничения
Для российского dokivo.ru предел полного разбора исходного архива в этом инструменте — 128 МиБ; отдельной записи — 64 МиБ, суммарного чтения распакованных данных — 128 МиБ. Предусмотрены до тысячи записей с исходным контейнером и четыре уровня вложенности. Действуют ограничения времени и доступности ресурсов. Они нужны, чтобы распаковка не превращалась в неограниченное потребление сервера.
У международных сайтов есть отдельный принятый вариант до 1 ГиБ на исходник и запись, с иными пределами суммарного чтения. Это не переносит лимит 1 ГиБ на российские тарифы или на каждую операцию сервиса. Перед запуском ориентируйтесь на ограничения выбранного сайта и конкретного инструмента.
Базы считаются свежими по данным их официального заголовка, а не по случайной дате изменения файла. Предельный возраст — 72 часа. Отсутствующая, устаревшая или сменившаяся в ходе проверки база исключает полный результат. Для больших файлов отдельные внутренние ограничения движка также сохраняются, даже если один из его ответов выглядит успешным.
Как проверяли новый инструмент и его неполные результаты
При выпуске отдельной услуги проверили вход в инструмент, работу API и JSON-отчёта, пароль, отмену и сброс старого скачивания после смены исходника. На российском сайте приняли сценарий с двумя проверенными записями из четырёх и явным неполным охватом. Такой результат нельзя было улучшить косметически до «четыре безопасных»: два ограничения оставались видимыми.
В серверных проверках использовались стандартные тестовые файлы EICAR, вложенные архивы, одинаковые имена, пустые файлы, RAR и 7Z, повреждения и ограничения глубины. EICAR — контролируемый тест реакции движка. Он не измеряет вероятность обнаружения всех настоящих вредоносных файлов и не превращает набор синтетических проверок в независимую сертификацию.
Международный вариант дополнительно проверили на реальном скачанном отчёте для входа ровно 1 073 741 824 байта. В отчёте было 66 записей; 65 конечных файлов проверены, общий контейнер остался частичным. Интерфейс показал именно этот охват. Контроль отмены не оставил готовый отчёт для другого входа. Эти данные относятся к отдельному международному сценарию, а не к обещанию размера на dokivo.ru.
Интерфейс российского и международных вариантов осматривали на широком и узком окнах. Скачанные JSON сравнивали с полученными ответами; проверяли, что пароль отсутствует в отчёте. Совпадение байтов отчёта подтверждает доставку результата, но содержание каждого статуса всё равно нужно читать по его смыслу.
Рассмотреть схему крупнее
Прокручивайте схему по горизонтали.
Как выполнить проверку и сохранить полезный отчёт
- Откройте антивирусную проверку архива. Убедитесь, что выбран именно этот инструмент, а не обычная проверка целостности.
- Выберите поддерживаемый архив и при необходимости введите известный пароль. Сверьте ограничения текущего сайта до запуска.
- Дождитесь результата. Смотрите общий итог, дату баз, число проверенных записей и причины исключений.
- Откройте записи с обнаружениями и неполным охватом. Не выводите безопасность вложения из отсутствия отдельной строки об угрозе.
- Скачайте JSON и храните его вместе с точной версией архива. Если файл или параметры изменились, нужна новая проверка этого входа.
Для исправления повреждённого ZIP есть отдельное восстановление архива; оно не является обезвреживанием. Для проверки структуры и выбора исходников используйте проверку целостности. Разные инструменты дополняют друг друга именно потому, что не обещают один и тот же результат.

Частые вопросы
CRC и SHA-256 уже показывают, что файл безопасен?
Нет. Они помогают проверить целостность и идентичность байтов. Антивирусная проверка — отдельное действие с другим движком, базами и ограничениями.
Архивы отправляются стороннему онлайн-антивирусу?
В описанном сценарии анализ выполняет ClamAV в собственном изолированном контейнере. Клиентские файлы и хеши во внешние сервисы проверки не отправляются.
Что означает «проверено 2 из 4»?
Часть записей не получила полный анализ. Прочитайте причины по каждой из них: это может быть пароль, предел или неподдерживаемое вложенное содержимое. Непроверенные файлы не считаются безопасными.
Можно проверить архив до 1 ГиБ на dokivo.ru?
Приёмка 1 ГиБ относится к отдельному международному варианту. Для российского сайта сохраняются его тарифы и предел полного антивирусного разбора 128 МиБ; проверяйте текущую подсказку инструмента.