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

0
11
Обложка статьи: 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 с учётом ограничения частоты обновлений (не чаще раза в час, согласно документации) и заранее проверьте, что обновление реально проходит, не дожидаясь первого реального инцидента.

Порядок внедрения

  1. Определите точки входа файлов в компанию: почтовый шлюз, формы на сайте, файловые хранилища с внешним доступом.
  2. Встройте проверку по коду возврата в обработку каждой точки — карантин для заражённых файлов, не блокировка всего потока.
  3. Настройте регулярное обновление сигнатур и проверьте, что оно реально выполняется, а не падает молча из-за ограничений CDN.
  4. Логируйте находки отдельно от обычных журналов приложения — находка антивируса значима сама по себе и не должна затеряться в потоке обычных событий.
  5. Не считайте антивирус единственной защитой: сигнатурный подход не находит новые, ранее не встречавшиеся образцы — это один слой защиты, не последняя линия.

Диагностика

Симптом Причина и что делать
LibClamAV Error: cli_loaddbdir: No supported database files found Базы сигнатур не загружены. Выполните freshclam перед первым запуском или используйте образ с предустановленными базами
Forbidden; Blocked by CDN при обновлении Сервис обновлений ограничивает частоту запросов с одного адреса. Не запускайте freshclam чаще раза в час и дайте время на снятие ограничения, если оно уже сработало
Проверка каждого вложения заметно замедляет почту Сканирование крупных файлов ресурсоёмко. Проверяйте асинхронно (поставить в карантин до завершения проверки), а не синхронно в процессе доставки
Нужно проверять архивы и упаковки ClamAV умеет распаковывать распространённые форматы (zip, частично офисные документы), но не все. Для специфичных форматов проверьте список поддерживаемых в документации

Где это в модели зрелости

Материал относится к направлению «Безопасность конечных устройств» (материалы направления, карта зрелости). Начальный уровень требует хотя бы базовой защиты точек, через которые в компанию попадают внешние файлы: сигнатурная проверка на входе — минимальный и проверяемый шаг для этого требования.

Как проверить

  1. Каждая точка приёма внешних файлов (почта, загрузка, формы) проходит через проверку антивирусным движком.
  2. Тестовый файл EICAR корректно обнаруживается, обычный файл проходит без задержки.
  3. Обновление сигнатур выполняется по расписанию, и это подтверждено фактическим прогоном, не только на наличие задачи в cron.
  4. Находки логируются и доходят до ответственного, а не теряются в общем потоке событий.

Источники

  • Методика оценки уровня зрелости кибербезопасности компании, Группа Сбер: sberbank.ru.
  • Документация ClamAV: docs.clamav.net; тестовый файл EICAR: eicar.org.

Комментарии закрыты.