ClamAV: сканирование файлов на вредоносный код

Сервис с загрузкой файлов от пользователей — почтовый шлюз, файловое хранилище, форма обратной связи с вложениями — должен проверять, что приходит, прежде чем это откроет сотрудник или попадёт в общее хранилище. ClamAV — открытый антивирусный движок, который можно встроить в такую проверку без привязки к конкретному коммерческому продукту.
Статья опирается на логику направления «Безопасность конечных устройств» из методики зрелости Группы Сбер (источник); это методика для крупных компаний, мы используем её как ориентир и пересказываем своими словами. Проверка выполнена ClamAV 1.5.4 с актуальными на момент теста сигнатурами, после неё всё удалено.
Что должно получиться
| Уровень | Что это значит на практике |
|---|---|
| 1. Начальный | Файлы, поступающие от внешних источников (почта, загрузка, формы), проходят проверку антивирусным движком, а не попадают в систему без проверки |
Критерии сформулированы нами по мотивам методики, это ориентир, а не оценка соответствия.
Безопасный тест: файл EICAR
Проверять реальным вредоносным кодом свою систему не нужно и небезопасно. Для этого существует стандартный тестовый файл EICAR — безвредная строка символов, которую все антивирусные движки по соглашению распознают как тестовую угрозу:
printf 'X5O!P%%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > eicar.com.txt
Запуск проверки каталога с тестовым файлом и обычным текстовым файлом рядом:
clamscan /путь/к/каталогу/
Результат проверки
| Файл | Результат | Код возврата |
|---|---|---|
| eicar.com.txt (тестовый) | Eicar-Test-Signature FOUND |
1 |
| clean.txt (обычный текст) | OK |
0 |
База на момент проверки содержала более 3,6 миллиона известных сигнатур. Код возврата 1 при обнаружении и 0 на чистом файле — именно то, что нужно для автоматической обработки: сервис может просто проверить код завершения и решить, пропускать файл дальше или нет, без разбора текстового вывода.
if ! clamscan --infected --no-summary "$FILE" >/dev/null; then
echo "файл заблокирован: найдена сигнатура"
# переместить в карантин, не доставлять получателю
fi
Обновление сигнатур
freshclam
Без регулярного обновления база быстро устаревает — новые образцы появляются постоянно. В тесте штатная утилита обновления (freshclam) с установленного через пакетный менеджер движка вернула ошибку блокировки сетевым CDN проекта с суточным периодом ожидания — это известное поведение сервиса обновлений ClamAV при частых или похожих на автоматизированные запросах с одного адреса, не признак неисправности самого антивируса. Официальный образ Docker (clamav/clamav) поставляется с уже собранными базами и обходит эту проблему для разовой проверки; для постоянно работающей службы настройте freshclam с учётом ограничения частоты обновлений (не чаще раза в час, согласно документации) и заранее проверьте, что обновление реально проходит, не дожидаясь первого реального инцидента.
Порядок внедрения
- Определите точки входа файлов в компанию: почтовый шлюз, формы на сайте, файловые хранилища с внешним доступом.
- Встройте проверку по коду возврата в обработку каждой точки — карантин для заражённых файлов, не блокировка всего потока.
- Настройте регулярное обновление сигнатур и проверьте, что оно реально выполняется, а не падает молча из-за ограничений CDN.
- Логируйте находки отдельно от обычных журналов приложения — находка антивируса значима сама по себе и не должна затеряться в потоке обычных событий.
- Не считайте антивирус единственной защитой: сигнатурный подход не находит новые, ранее не встречавшиеся образцы — это один слой защиты, не последняя линия.
Диагностика
| Симптом | Причина и что делать |
|---|---|
LibClamAV Error: cli_loaddbdir: No supported database files found |
Базы сигнатур не загружены. Выполните freshclam перед первым запуском или используйте образ с предустановленными базами |
Forbidden; Blocked by CDN при обновлении |
Сервис обновлений ограничивает частоту запросов с одного адреса. Не запускайте freshclam чаще раза в час и дайте время на снятие ограничения, если оно уже сработало |
| Проверка каждого вложения заметно замедляет почту | Сканирование крупных файлов ресурсоёмко. Проверяйте асинхронно (поставить в карантин до завершения проверки), а не синхронно в процессе доставки |
| Нужно проверять архивы и упаковки | ClamAV умеет распаковывать распространённые форматы (zip, частично офисные документы), но не все. Для специфичных форматов проверьте список поддерживаемых в документации |
Где это в модели зрелости
Материал относится к направлению «Безопасность конечных устройств» (материалы направления, карта зрелости). Начальный уровень требует хотя бы базовой защиты точек, через которые в компанию попадают внешние файлы: сигнатурная проверка на входе — минимальный и проверяемый шаг для этого требования.
Как проверить
- Каждая точка приёма внешних файлов (почта, загрузка, формы) проходит через проверку антивирусным движком.
- Тестовый файл EICAR корректно обнаруживается, обычный файл проходит без задержки.
- Обновление сигнатур выполняется по расписанию, и это подтверждено фактическим прогоном, не только на наличие задачи в cron.
- Находки логируются и доходят до ответственного, а не теряются в общем потоке событий.
Источники
- Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
- Документация ClamAV: docs.clamav.net; тестовый файл EICAR: eicar.org.


















