Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 116, АВГУСТ 2008 г.

Побеждаем вирусы в никсах

Владимир «turbina» Ляшко (v.turbina@gmail.com)

Хакер, номер #116, стр. 116-080-1

ClamAV: изучаем возможности свободного антивируса

Появление в начале века нового проекта, предлагающего антивирус с открытыми исходными текстами под лицензией GNU GPL, вызвало единодушное одобрение со стороны пользователей и администраторов. А сегодня, судя по многочисленным рейтингам и обзорам, ClamAV является самым популярным OpenSource решением.

Что умеет лечебный моллюск

Разработчики ClamAV поставили себе целью разработать программу, проверяющую вложения на наличие вирусов, – такую, чтобы можно было бы легко интегрировать с максимально большим количеством почтовых серверов, работающих под *nix. С ростом популярности антивирус оброс новыми возможностями, а за счет использования общедоступных библиотек появились сторонние решения, позволяющие сканировать контент на файловых серверах, трафик, проходящий через прокси, данные, передаваемые по определенному протоколу (snort_inline), а также совместно работать со всеми популярными почтовыми клиентами.

Большая часть пакета антивирусного ПО написана на Си. Изначально выбран курс на совместимость со спецификацией POSIX, что позволяет скомпилировать и использовать ClamAV на разных операционных системах: Linux, Solaris, *BSD, OpenBSD, NetBSD, Mac OS X, BeOS, Windows/Cygwin и других.

Постепенно антивирус научился проверять почтовые ящики (mbox и Maildir), архивы и исполняемые файлы, упакованные специальными программами. Сегодня поддерживаются основные типы архивов (RAR, Zip, Gzip, Bzip2, Cabinet) и такие форматы сжатия Portable Executable, как UPX, FSG и Petite. Последние версии ClamAV умеют определять и блокировать фишинг-сообщения, полученные по электронной почте, сложные malware и эксплоиты в некоторых типах файлов. В базу занесено почти 300 тысяч сигнатур. Много это или мало – сказать трудно, ведь сигнатуры можно считать по-разному.

Изначально ClamAV – именно сканер. В нем отсутствует функция монитора, то есть возможность проверки файлов по запросу (on-demand). При проверке почты или web-трафика такой подход неприемлем. Поэтому для выполнения проверки «на лету» в Linux и FreeBSD следует использовать драйвер Dazuko (dazuko.dnsalias.org/wiki/index.php/Main_Page), который первоначально был разработан Avira GmbH для своего антивируса, а сейчас используется, чтобы предоставить сторонним программам возможность доступа к файловой системе. Другой вариант – организовать подобное сканирование при помощи ClamFS (clamfs.sf.net).

Перед тем, как перейти к более близкому знакомству, следует отметить, что с ClamAV не все бывает гладко. Так, поиск по сайту www.securitylab.ru показывает, что в разное время было найдено 35 уязвимостей, часть из которых относится к весьма серьезным. К чести разработчиков, найденные ошибки быстро устраняются. Просто не забывай обновлять ClamAV, и он не станет источником проблем.

Утилиты ClamAV

В состав антивируса входит несколько утилит, включая гибкий и масштабируемый многопоточный демон, сканер командной строки и продвинутый инструмент для автоматических обновлений баз данных. Для установки и обновления утилит антивируса разработчики рекомендуют использовать репозитарии пакетов. В Debian/Ubuntu для поиска нужных приложений используем команду:

$ sudo apt-cache search clamav

И ставим основной набор:

$ sudo apt-get install clamav

В процессе инсталляции будет создан системный пользователь и группа clamav. Теперь стало возможным проверять файлы. ClamAV предлагает несколько вариантов. Самый простой – использование утилиты clamscan. В архиве антивируса, в подкаталоге test, есть несколько тестовых вирусов, при помощи которых можно проверить работу ClamAV. Если вызвать clamscan без параметров, будет проверен текущий каталог. Такой режим позволяет оценить работу утилиты с различными типами файлов, чтобы определиться с ее возможностями на начальном этапе. Затем лучше добавить параметр '-i' для вывода только зараженных файлов:

$ clamscan -i

/home/zbober/virus/KIT.EXE: Kit.1 FOUND

/home/zbober/virus/J!CT-C.COM: CaptainTrips FOUND

----------- SCAN SUMMARY -----------

Known viruses: 295018

Engine version: 0.92.1

Scanned directories: 1

Scanned files: 3732

Infected files: 3691

Data scanned: 3.22 MB

Time: 40.905 sec (0 m 40 s)

Для звукового оповещения о найденном вирусе воспользуйся опцией «--bell».

Кстати, никто не мешает поступить и так:

$ cat CK.COM | clamscan -

stdin: Ck FOUND

Проверить любой другой каталог (при наличии прав) можно, просто указав путь к нему в строке запуска. По умолчанию подкаталоги не проверяются, но этого легко добиться за счет параметра '-r', разрешающего рекурсивный обход:

$ clamscan -r -i ~/soft

Также полезными могут оказаться опции «–exclude=путь» и «–include=путь». Первая позволяет указать шаблоны файлов, которые нужно исключить из поиска, а вторая, наоборот, только те, которые нужно сканировать при поиске вирусов.

По умолчанию глубина рекурсии для каталога составляет 15, для файлов архива – 8. Такое ограничение установлено для того, чтобы избежать DoS-атак. Но его можно изменить при помощи параметров «--max-recursion» (для архивов), «--max-dir-recursion» (каталоги) и «--max-mail-recursion» (e-mail).

В обычном режиме программа просто сообщает о найденном вирусе. Используя дополнительные ключи, можно выполнить следующие действия: удалить вирус (--remove), переместить (--move=путь) или скопировать (--copy=путь) файлы в другой каталог.

При работе утилита «молчалива». Это очень неудобно при запуске через cron. Но ничего страшного: опция «--log=куда» заведет журнал событий.

Если ты создал свою антивирусную базу (об этом чуть ниже), указать на нее можно с помощью «--database». Параметров у clamscan много; за подробностями обращайся к clamscan(1). Добавляя ключи, можно помечать вирусы и блокировать битые исполняемые файлы (--detect-broken), обычные (--block-max), зашифрованные архивы (--block-encrypted) и многое другое.

Обновление баз

Для обновления антивирусных баз разработчиками предлагается утилита freshclam. Она идет в отдельном пакете clamav-freshclam, но обычно указана в зависимостях основных пакетов clamav. Обновление можно производить в двух режимах: интерактивном, запуская ее в строке терминала, – и как демон.

Утилита для автоматического выбора зеркала использует базу database.clamav.net. Затем производится попытка соединиться с первым зеркалом в списке (в случае неудачи – со следующим). Вначале необходимо запустить утилиту без параметров:

$ sudo freshclam

Если все нормально, в дальнейшем для запуска freshclam и ежедневного обновления можно использовать cron:

$ sudo crontab -e

0 0 0 * * * /usr/local/bin/freshclam --quiet

-l /var/log/clam-update.log

Как вариант: запускать ее в режиме демона. Для этого лишь следует добавить параметр '–d':

$ sudo freshclam -d -c 2 -l /var/log/clam-update.log

Параметр '-с' указывает на количество обновлений в день (число от 1 до 50). При необходимости в строке запуска можно указать прокси и другие параметры. Как правило, в пакеты майнтайнеры добавляют свои скрипты для запуска freshclam. В Ubuntu для запуска демона достаточно выполнить команду:

$ sudo /etc/init.d/clamav-freshclam start

При загрузке freshclam считывает параметры из файла /etc/clamav/freshclam.conf, которые можно переопределить в строке запуска. За количество обновлений в день отвечает параметр Checks. Например, чтобы обновлять базу каждый час, пишем:

Checks 24

Моллюсковый демон

Вводить каждый раз параметры неудобно, да и не нужно. При больших объемах проверяемых данных разработчики предлагают использовать многопоточный демон clamd. В отличие от сканера, демон загружает все необходимые базы и настройки один раз при старте, а затем постоянно находится в полной боевой готовности. В Ubuntu он входит в отдельный пакет:

$ sudo apt-get install clamav-daemon

Демон загрузится и будет ожидать запросы. Если установка производилась из сырцов, то clamd при первом запуске работать откажется:

$ sudo /usr/local/sbin/clamd

ERROR: Please edit the example config file /etc/clamav/clamd.conf

ERROR: Can't parse the config file /etc/clamav/clamd.conf

Поэтому сразу после установки пакета нужно убрать или закомментировать строку Example в самом начале /etc/clamav/clamd.conf.

Анализ конфига не всегда дает представление обо всех настройках. Например, установки по умолчанию в файле могут быть опущены. Чтобы узнать действующие настройки, необходимо заюзать утилиту clamconf. При запуске без параметров она выведет все настройки из файлов clamd.conf, freshclam.conf, в том числе и установки по умолчанию (если не применять «--non-default»), а также используемую версию антивирусных баз.

Не всегда установки в clamd.conf оптимальны! В зависимости от назначения компьютера их следует пересмотреть и скорректировать, чтобы не удивляться потом, что зашифрованные архивы не получается скачать с файлового сервера или получить по почте. Обо всех параметрах рассказывать не буду, – их слишком много, к тому же, назначение части из них очевидно и так. Остановлюсь только на самых важных. Демон может работать в сетевом или локальном режиме. В целях безопасности для проверки рекомендуется использовать локальный сокет:

LocalSocket /var/run/clamav/clamd.ctl

FixStaleSocket true

Хотя для некоторых программ clamd придется подвешивать на сетевой интерфейс (в данном случае – интерфейс обратной петли):

TCPSocket 3310

TCPAddr 127.0.0.1

MaxConnectionQueueLength 30

Месторасположение антивирусных баз указывается при помощи DatabaseDirectory:

DatabaseDirectory /var/lib/clamav

Чтобы подключить clamd к Clamuko (интерфейс к Dazuko) для on-demand сканирования, добавляем следующие строки:

$ sudo vim /etc/clamav/clamd.conf

ClamukoScanOnAccess yes

# Выбираем, в каких случаях проверять файл

ClamukoScanOnOpen yes

ClamukoScanOnClose yes

ClamukoScanOnExec yes

# Данные каталоги будут проходить проверку

ClamukoIncludePath /home

ClamukoIncludePath /var/ftp/upload

# Данные каталоги будут исключены из проверки

ClamukoExcludePath /home/zbober/.ssh

# Максимальный размер проверяемого файла (0 – без лимита, 5 Мб – по умолчанию)

ClamukoMaxFileSize 50M

Чтобы заставить демона работать, пошли ему сигнал или используй утилиту clamdscan. Достаточно указать на каталог или файл, который нужно проверить:

$ clamdscan ~/soft

При необходимости можно переопределить режим работы демона для конкретной задачи, указав требуемые параметры в строке запуска clamdscan.

Правим базы

В ClamAV есть возможности, отсутствующие в других антивирусах: добавление собственной сигнатуры и правка CVD (ClamAV Virus Database) баз. Для этого в комплекте поставляется специальная утилита sigtool. Конечно, обычному юзеру не дело заниматься созданием сигнатур, но зато ты не останешься один на один с вирусами во время очередной эпидемии. И получишь неплохую практику. В архиве исходных текстов находится документ «Creating signatures for ClamAV», в котором описано, как получить сигнатуру из тестовых «вирусов», поставляемых вместе с ClamAV.

Мне повезло: в коллекции нашелся вирус, который не распознавался ClamAV. Анализ файла при помощи онлайн-сервиса Virustotal www.virustotal.com/ru показал, что о нем «знают» 17 из 32 антивирусов. Что интересно, первый анализ этого файла на ресурсе датирован еще 2006 годом. Антивирус Avast назвал его «Win32:Trojan-gen», AVG – «IRC/BackDoor.SdBot3.DDW». Кстати, Касперский и Dr.Web молчат, как рыбы; интересно узнать, почему.

Самый простой способ создать сигнатуру – записать его MD5 сумму:

$ sigtool --md5 test.exe > test.hdb

Смотрим, что внутри:

$ cat test.hdb

adcbe9468bba150083d53f4294e15ffa:64000:test.exe

Теперь проверяем, подключив новую базу:

$ clamscan -d test.hdb test.exe

test.exe: test.exe FOUND

Вирус определился, но стоит ему только заразить другой файл, как схема будет неэффективна. В этом случае необходимо сохранить в базу специфическую часть. Чтобы получить дамп, нужно добавить параметр «--hex-dump».

$ cat test.exe | sigtool --hex-dump > virus.sig

Либо воспользоваться любым другим редактором или приложением. Например, подойдет и файловый менеджер Midnight Commaner. Авторы некоторых вирусов оставляют комментарии, которые можно найти при помощи штатной утилиты string, а потом перевести в hex. Запись в базе вирусов ClamAV в самом простом случае выглядит так:

Имя вируса=Hex-сигнатура

Этот метод работает на ура. Можно создать свою базу или занести новые сигнатуры в базу данных daily.

В ClamAV используются две базы: постоянная (main) и для ежедневных обновлений (daily). Их расположение можно узнать из переменной DatabaseDirectory. В пакетах из репозитария эти базы, как правило, находятся в распакованном виде (в Ubuntu – /var/lib/clamav). В архиве исходных текстов они поставляются в упакованном виде (файлы с расширением cvd). После установки их можно найти в каталоге /usr/share/clamav. Для распаковки баз используется sigtool с ключом «—unpack»:

$ sigtool -–unpack=daily.cvd

После чего в текущем каталоге появится несколько файлов. Если открыть любой в текстовом редакторе, то можно увидеть, что он состоит из строк «имя:хэш». Добавляем в одну из них сигнатуру и просчитываем новую контрольную сумму измененного файла:

$ cat virus.sig >> daily.db

$ md5sum daily.db >> daily.info

После чего правим daily.info, чтобы запись выглядела так:

daily.db:e82aa698a151e242aaee0edd3c36fe85

Не забудь удалить предыдущую запись. Теперь можно пользоваться обновленной базой.

Заключение

Для удобства пользователей разработано несколько неплохих фронт-эндов. Самый известный из них – KlamAV (klamav.sf.net), построенный на QT-библиотеках и предназначенный для работы в среде KDE. Поддерживается «on access» и ручной режим сканирования, обновление антивирусных баз, карантин, просмотр почты для KMail и Ximian Evolution. Clamaktion (web.tiscali.it/rospolosco/clamaktion) позволяет пользователям KDE 3.1 и старше проверять файлы и каталоги при помощи контекстного меню.

Надеюсь, теперь проблем с проверкой файлов на вирусы в *nix не у тебя будет.

Установка Dazuko в Ubuntu

Чтобы ClamAV сканировал файл при доступе, необходим модуль Dazuko. В портах ранних версий Ubuntu (от Dapper до Gutsy) присутствовал пакет с исходными текстами dazuko-source, а вот в Hardy он пропал. Чтобы его установить, придется пересобрать ядро (так как Security Capabilities должен быть собран в виде модуля). В /usr/src/linux/.config это должно выглядеть так: «CONFIG_SECURITY_CAPABILITIES=m».

Далее скачиваем и распаковываем в /usr/src архив с исходными текстами Dazuko:

$ mv dazuko-2.3.4.tar.gz /usr/src/

$ tar xvf dazuko-2.3.4.tar.gz

$ cd /usr/src/dazuko-2.3.4

Конфигурируем, компилируем:

$ sudo ./configure

$ sudo make

$ sudo make test

Если нет ошибок, ставим:

$ sudo make install

Загружаем модуль, перед этим выгрузив capability.

$ sudo rmmod capability

$ sudo modprobe dazuko

$ sudo modprobe capability

В некоторых случаях работе может мешать AppArmor:

$ sudo rmmod apparmor

После загрузки модуля должен появиться файл /dev/dazuko.

Сборка пакета в Debian/Ubuntu

Иногда приходится прибегать к установке из исходных текстов. Например, когда в репозитарии находится старая версия, не имеющая некоторого функционала или содержащая уязвимости. Также при запуске некоторые утилиты могут жаловаться на то, что «Your ClamAV installation is OUTDATES». Лучшим выходом из такой ситуации будет самостоятельная сборка пакета. В Debian/Ubuntu сделать это довольно просто. Сначала скачиваем библиотеки и утилиты для компиляции ClamAV:

$ sudo apt-get build-dep clamav

И программы для сборки пакета:

$ sudo apt-get install fakeroot dh-make

Получаем с сайта проекта последнюю версию ClamAV, распаковываем, заходим внутрь каталога и даем команду:

$ dh_make –createorig

На запрос о типе пакета нажимаем <s> (single), затем подтверждаем параметры, нажав <Enter>. Теперь собираем пакет:

$ dpkg-buildpackage –rfakeroot –d

После сборки устанавливаем пакет при помощи dpkg.

INFO

В своей работе демон использует конфигурационный файл /etc/clamav/clamd.conf. Конфиг хорошо прокомментирован, все параметры подробно расписаны в clamd.conf(5).

При помощи утилиты sigtool можно самостоятельно добавить информацию о неизвестном вирусе в базу ClamAV.

В архиве с исходными текстами есть init-скрипты для *BSD, Solaris, RedHat и SuSE. При желании их легко адаптировать под свой дистрибутив.

Что интересно, в одних тестах ClamAV выступает, как минимум, на «хорошо», показывая приличную скорость сканирования и впечатляющие результаты определения, а в других – явно проигрывает.

Помочь проекту в дальнейшем развитии можно по-разному. Например, если тебе попался вирус, не обнаруживаемый ClamAV, или, наоборот, файл, ошибочно принимаемый за вирус, то имеет смысл отправить его разработчикам, заполнив форму по адресу www.clamav.net/sendvirus.

WWW

Об установке ClamAV на OpenBSD можно прочитать в пошаговом руководстве: www.openbsd.ru/docs/steps/clamav.html.

Полный список интересных проектов, связанных с ClamAV, насчитывает десятки приложений, его можно найти на странице Download -> Third party tools официального сайта проекта www.clamav.net.

WARNING

Чтобы установить модуль Dazuko в Ubuntu 8.04, придется пересобрать ядро, включив Capabilities в виде модуля.

Содержание
ttfb: 6.4740180969238 ms