Хакер № 08/08 (116)

Побеждаем вирусы в никсах
Владимир «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 в виде модуля.
Содержание
ВИДЕО К ЭТОМУ НОМЕРУНовый цвет хамелеона Среди большого количества дистрибутивов есть решения, являющиеся своего рода эталонами или китами, на которых стоит GNU/Linux. По ним определяют стандарты и пути дальнейшего развития, а их разработчикам прощают мелкие ошибки и недочеты....
Без окон, без дверей Появление в Win2k8 режима Server Core все изменило. Теперь, если при установке сервера выбрать Server Core Installation, мы получим систему без графического интерфейса и с минимальным набором компонентов. Такой сервер априори будет иметь...
Работа с Intercepter Данный ролик наглядно покажет тебе работу со снифером Intercepter. В видео ты увидишь приемы простого перехвата паролей, возможность ARP-спуфинга и многое другое....
Компактный Windows В ролике описан процесс создания собственного виндового live CD дистрибутива, показаны его преимущества и недостатки в использовании. Материал предоставлен в чисто ознакомительных целях....
В поисках пароля Этот ролик стоит посмотреть хотя бы потому, что после просмотра ты будешь знать, как при помощи отладчика OllyDbg найти в памяти клиента QIP последней доступной на данной момент версии пароль текущей учетной записи. Кроме того, ты узнаеш...
API-патчинг Иногда нужно изменить функциональность API, вызываемой из системной библиотеки. При этом нередко случается так, что модификация DLL "в лоб", то есть с сохранением изменений непосредственно в файле библиотеки, становится невозмо...
NAS для каждого из нас Дистрибутив FreeNAS (Free NAS Server) построен на базе FreeBSD 6.3 и распространяется под лицензией BSD. Цель проекта - создание дистрибутива, позволяющего построить надежное устройство хранения информации для небольших организаций или о...
Там где vip-нога не ступала В этом ролике хакер обращает внимание, насколько халатно порой относятся админы к безопасности на ресурсах, где ей надо уделять первостепенное значение. Хакер после непродолжительных поисков стандартных багов вроде sql-иньекции не отчаив...
|