Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР 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 в виде модуля.

Содержание
загрузка...
Журнал Хакер #151Журнал Хакер #150Журнал Хакер #149Журнал Хакер #148Журнал Хакер #147Журнал Хакер #146Журнал Хакер #145Журнал Хакер #144Журнал Хакер #143Журнал Хакер #142Журнал Хакер #141Журнал Хакер #140Журнал Хакер #139Журнал Хакер #138Журнал Хакер #137Журнал Хакер #136Журнал Хакер #135Журнал Хакер #134Журнал Хакер #133Журнал Хакер #132Журнал Хакер #131Журнал Хакер #130Журнал Хакер #129Журнал Хакер #128Журнал Хакер #127Журнал Хакер #126Журнал Хакер #125Журнал Хакер #124Журнал Хакер #123Журнал Хакер #122Журнал Хакер #121Журнал Хакер #120Журнал Хакер #119Журнал Хакер #118Журнал Хакер #117Журнал Хакер #116Журнал Хакер #115Журнал Хакер #114Журнал Хакер #113Журнал Хакер #112Журнал Хакер #111Журнал Хакер #110Журнал Хакер #109Журнал Хакер #108Журнал Хакер #107Журнал Хакер #106Журнал Хакер #105Журнал Хакер #104Журнал Хакер #103Журнал Хакер #102Журнал Хакер #101Журнал Хакер #100Журнал Хакер #099Журнал Хакер #098Журнал Хакер #097Журнал Хакер #096Журнал Хакер #095Журнал Хакер #094Журнал Хакер #093Журнал Хакер #092Журнал Хакер #091Журнал Хакер #090Журнал Хакер #089Журнал Хакер #088Журнал Хакер #087Журнал Хакер #086Журнал Хакер #085Журнал Хакер #084Журнал Хакер #083Журнал Хакер #082Журнал Хакер #081Журнал Хакер #080Журнал Хакер #079Журнал Хакер #078Журнал Хакер #077Журнал Хакер #076Журнал Хакер #075Журнал Хакер #074Журнал Хакер #073Журнал Хакер #072Журнал Хакер #071Журнал Хакер #070Журнал Хакер #069Журнал Хакер #068Журнал Хакер #067Журнал Хакер #066Журнал Хакер #065Журнал Хакер #064Журнал Хакер #063Журнал Хакер #062Журнал Хакер #061Журнал Хакер #060Журнал Хакер #059Журнал Хакер #058Журнал Хакер #057Журнал Хакер #056Журнал Хакер #055Журнал Хакер #054Журнал Хакер #053Журнал Хакер #052Журнал Хакер #051Журнал Хакер #050Журнал Хакер #049Журнал Хакер #048Журнал Хакер #047Журнал Хакер #046Журнал Хакер #045Журнал Хакер #044Журнал Хакер #043Журнал Хакер #042Журнал Хакер #041Журнал Хакер #040Журнал Хакер #039Журнал Хакер #038Журнал Хакер #037Журнал Хакер #036Журнал Хакер #035Журнал Хакер #034Журнал Хакер #033Журнал Хакер #032Журнал Хакер #031Журнал Хакер #030Журнал Хакер #029Журнал Хакер #028Журнал Хакер #027Журнал Хакер #026Журнал Хакер #025Журнал Хакер #024Журнал Хакер #023Журнал Хакер #022Журнал Хакер #021Журнал Хакер #020Журнал Хакер #019Журнал Хакер #018Журнал Хакер #017Журнал Хакер #016Журнал Хакер #015Журнал Хакер #014Журнал Хакер #013Журнал Хакер #012Журнал Хакер #011Журнал Хакер #010Журнал Хакер #009Журнал Хакер #008Журнал Хакер #007Журнал Хакер #006Журнал Хакер #005Журнал Хакер #004Журнал Хакер #003Журнал Хакер #002Журнал Хакер #001