В ходе реализации проекта Nessus, начатой в 1998 г. несколькими энтузиастами с целью создания практичного и бесплатного инструмента анализа сетевой защищенности, появился одноименный сканер, не уступающий коммерческим аналогам, а по ряду характеристик и превосходящий их. Благодаря надежности работы, бесплатному распространению (GNU General Public License), открытости кода, модульной архитектуре сканер Nessus стал сегодня одним из самых распространенных инструментов анализа сетевой защиты.
Проверить надежность сервисов с его помощью можно как стандартными методами, так и имитацией сетевых атак с использованием базы данных, содержащей перечень уязвимых мест. Эта БД построена на модульном принципе, что обеспечивает необходимую гибкость в процессе работы. Для описания обнаруженной уязвимости и включения ее в базу данных в виде отдельного модуля применяется язык программирования Си или специально разработанный язык сценариев NASL — Nessus Attack Scripting Language. База данных обновляется практически ежедневно.
Сканер разработан с применением архитектуры клиент—сервер. Серверная часть сканера (пока только для POSIX-систем — Solaris, FreeBSD, GNU/Linux и т. д.) выполняет следующие функции: исследование сетевых систем, интерпретация полученных результатов, выдача рекомендаций, обновление базы данных по уязвимым местам. Клиентская часть сканера (под Unix- или Windows-системы) используется для задания параметров исследования систем и просмотра полученных результатов. Параметры исследования можно задать, используя как командную строку, так и графический интерфейс.
Сканер безопасности Nessus (версия 1.0.5) был сертифицирован Гостехкомиссией России при Президенте РФ (сертификат № 361 от 18 сентября 2000 г.). Получить сертифицированную версию сканера можно с ftp-сервера ftp://ftp.rbc.ru/pub/jet/nessus-saint. Разработчики сканера рекомендуют использовать последнюю его версию Nessus 1.2.7.
Механизм работы
Для начала работы администратору необходимо зарегистрировать будущих пользователей сканера на сервере Nessus. При этом администратор определяет регистрационное имя пользователя — логин, пароль, ограничения по сканированию хостов. Необходимо обратить внимание, чтобы порт, используемый для коммуникации между клиентской частью сканера и сервером (по умолчанию 1241), был открыт для доступа в правилах брандмауэра.
После запуска сервера зарегистрированный пользователь может подключиться к серверу Nessus, используя клиентскую часть сканера. Для связи между клиентом и сервером, в зависимости от настроек, рекомендуется использовать шифрование (SSL). Перед началом исследования пользователь задает список тестируемых хостов, методы исследования, диапазон портов, список применяемых модулей (на данный момент их около 1140) и их конфигурацию. Некоторые виды атак, описанных в модулях, иногда приводят к сбою в работе или зависанию исследуемой системы.
Сканер в состоянии одновременно исследовать множество систем, фактически их число ограничено только вычислительной мощностью сервера и пропускной способностью канала. Исследуя систему, сканер опрашивает все порты заданного диапазона на наличие сетевых сервисов. Определив доступный сервис, сканер начинает анализировать его устойчивость к взлому, имитируя заданные в модулях типы атак.
После завершения сканирования Nessus представит отчет о полученных результатах с указанием списка уязвимых мест, рекомендациями по их устранению и уровнем риска для каждого из них. Можно сконфигурировать сканер таким образом, что после первоначального исследования системы в дальнейшем он будет опираться на полученные данные, отмечая только изменения в результатах исследования.
Системные требования
Работа Nessus зависит от следующих программ:
GTK — The Gimp Toolkit — набор программных инструментов для создания графического интерфейса. Используется версия 1.2. Загрузить дистрибутив можно с ftp://ftp.gimp.org/pub/gtk/v1.2/.
Замечание 1. Если в вашей системе уже есть GTK, убедитесь, что программа gtk-config тоже установлена. Если нет, установите пакет gtk-devel из вашего дистрибутива.
Замечание 2. Если не хотите устанавливать GTK и/или у вас не установлен X11, скомпилируйте консольный клиент сканера, указав при конфигурировании nessus-core
$./configure —disable-gtk
Nmap — превосходный сканер портов. Дистрибутив доступен по адресу http://www.nmap.org/. Рекомендуется версия 3.00 или 2.54.
OpenSSL — используется при связи между серверной и клиентской частями Nessus, а также при тестировании SSL-сервисов. Дистрибутив доступен по адресу http://www.openssl.org. Устанавливать его необязательно, но желательно.
Установка
Есть несколько способов установки Nessus:
1. С помощью браузера lynx при подключении к Интернету можно набрать в командной строке
$lynx -source http://install.nessus.org | sh
Этот способ опасен тем, что на вашем компьютере выполняются команды, поступающие из Интернета. Если кто-либо изменил DNS-запись для install.nessus. org, он сможет выполнять на вашем ПК произвольные команды.
2. С помощью сценария установки nessus-installer.sh, который доступен на ftp://ftp.nessus.org/pub/nessus/nessus-1.2.7/nessus-installer/nessus-installer.sh. Для запуска сценария достаточно набрать в командной строке
#sh nessus-installer.sh
3. Установка Nessus для Unix-систем из tar-архива (дистрибутив последней версии Nessus доступен на сайте http://www.nessus.org)
$tar xvfz nessus-libraries-x.x.tar.gz $tar xvfz libnasl-x.x.tar.gz $tar xvfz nessus-core.x.x.tar.gz $tar xvfz nessus-plugins.x.x.tar.gz $cd nessus-libraries $./configure && make $/bin/su root #make install #cd ../libnasl #./configure && make && make install #cd ../nessus-core #./configure (или без графической оболочки ./configure -disable-gtk) #make && make install #cd ../nessus-plugins #./configure && make && make install
Для Linux-систем:
#echo ?/usr/local/lib? >> /etc/ld.so.conf #ldconfig
Пользователи Solaris в .profile должны добавить строку
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/ usr/local/lib
Убедитесь, что в переменной окружения системы указаны пути /usr/local/bin и /usr/local/sbin. Проверить это можно так:
$echo $PATH
Программы, входящие в состав Nessus
После завершения инсталляции сканера на вашей системе будут установлены следующие программы:
nasl — интерпретатор NASL-скриптов;
nasl-config — скрипт, показывающий ключи и флаги для компилятора, которые позволяют использовать библиотеку Nessus Attack Scripting Language в других программах;
nessus — клиент Nessus;
nessus-adduser — добавляет пользователя в базу сервера nessusd;
nessus-build — скрипт для создания модуля Nessus (.nes) из файла на языке Си (.с);
nessus-config — этот скрипт показывает ключи и флаги для компилятора, позволяющие использовать библиотеки Nessus в других программах;
nessus-mkcert — создает SSL-сертификат для сервера Nessus;
nessus-mkcert-client — создает SSL-сертификат для клиента Nessus;
nessus-mkrand — создает файл с произвольным содержимым, используется в дальнейшем для создания SSL-сертификатов;
nessus-rmuser — удаляет пользователя из базы сервера nessusd;
nessus-update-plugins — автоматически обновляет модульную базу данных уязвимых мест;
nessusd — сервер Nessus;
uninstall-nessus — скрипт деинсталляции Nessus.
Unix-клиент — выбор используемых модулей для сканирования |
Подготовка к первому запуску сервера nessusd
Если вы успешно справились с установкой сканера, приступаем к запуску сервера Nessus — nessusd. Необходимо создать регистрационные записи пользователей для сервера Nessus:
#nessus-adduser ,
затем создать SSL-сертификат для сервера:
#nessus-mkcert
и обновить базу данных уязвимостей:
#nessus-update-plugi
Запустите сервер:
#nessus -D
Проверьте, удачно ли он загрузился:
$lsof -ni|grep nessusd
В случае успешного запуска появится строка вида:
nessusd 10182 root4u IPv4 41346 TCP *:1241 (LISTEN)
После этого сервер готов к подключению пользователей.
Unix-клиент — установка параметров сканирования |
Запуск сервера
Синтаксис команды запуска сервера:
#nessusd [-v] [-h][-c config-file] [-a address ] [-p port-number] [-D] [-d]
Описание ключей:
-c , —config-file= — считать конфигурацию сервера из файла .
По умолчанию конфигурация сервера считывается из файла /usr/local/etc/nessus/nessusd.conf.
-a , —listen= — дает серверу указание прослушивать соединения только для этого
IP-адреса. Например, «nessusd -a 192.168.1.1» приведет к тому, что nessusd установит прослушивающее соединение только для 192.168.1.1. Эта опция удобна для запуска nessusd на шлюзе, если вы не хотите кому-нибудь из внешней сети разрешить подключение к nessusd.-p , —port= — дает серверу указание прослушивать порт для установления подключений с клиентом. По умолчанию прослушивается порт 1241.
-D, — запустить сервер nessud в фоновом режиме.
-d, —dump-cfg — показать параметры компиляции Nessus.
-v, — поcмотреть версию сервера и закончить работу.
-h, — распечатать краткую справку.
Для выполнения операций запуска, остановки, обновления базы данных сервера соответственно:
#service scaner start #service scaner stop #service scaner update
Unix-клиент — просмотр отчета |
Создание регистрационной записи пользователя
#nessus-adduser
В процессе создания регистрационной записи необходимо указать регистрационное имя пользователя, пароль, тип идентификации. Затем указать правила, ограничивающие возможность пользователя сканировать системы. Ограничения устанавливаются на основе списка диапазонов IP-адресов с указанием типа доступа (accept/deny — разрешить/запретить). Каждая запись, описывающая отдельный диапазон IP-адресов, вводится на отдельной строке. Завершается ввод правила символом конца файла — комбинацией клавиш +D. Синтаксис правила:
accept|deny ip/mask default accept|deny
Запись default обязательно должна быть последней в правиле. Она определяет политику доступа пользователя. Например, правило, разрешающее исследование пользователем подсетей 192.168.10.0/24, 192.168.11.0/24 и сервера 217.107.209.2 и запрещающее доступ ко всему остальному, выглядит так:
accept 192.168.10.0/24 accept 192.168.11.0/24 accept 217.107.209.2/32 default deny
Правило, разрешающее пользователю сканировать все возможные IP-адреса, кроме подсети 192.168.1.0/24, выглядит так:
deny 192.168.1.0/24 default accept
Если необходимо разрешить пользователю исследовать только ту систему, с которой он подключился к серверу Nessus, надо использовать переменную client_ip:
accept client_ip default deny
После подтверждения введенных данных создание регистрационной записи для сервера Nessus закончено.
В переменной конфигурации сервера per_user_base устанавливается путь к пользовательским каталогам (по умолчанию /usr/local/var/nessus/users). В дальнейшем для изменения ограничений для пользователя user_name по доступным диапазонам сканирования необходимо редактировать файл /usr/local/var/nessus/ users/user_name/auth/rules.
NessusWX — настройка параметров модулей |
Удаление регистрационной записи пользователя
#nessus-rmuser user_name
NessusWX — основное окно программы |
Обновление модульной базы данных уязвимых мест
#nessus-update-plugins
Программа устанавливает связь с сервером www.nessus.org. Затем получает список модулей и сверяет с уже установленными; если есть изменения, загружает и устанавливает новые модули. После обновления программа перегружает сервер nessusd для вступления изменений в силу. Рекомендуется проводить обновления ежедневно, например, поместив задачу в cron. Программа использует в своей работе lynx, gzip и tar.
Дополнительные ключи запуска:
-v — показать список недавно установленных модулей;
-l — показать список модулей, доступных на сервере www.nessus.org, с кратким описанием;
-r — просмотреть исходный код модуля pluginname;
-i — установить модуль ;
-h — вывод краткой справки.
NessusWX — выполнение сканирования |
Клиенты Nessus
Синтаксис запуска консольного сканера из командной строки Unix-системы:
#nessus -q
host — IP- или доменное имя системы, где запущен сервер nessusd;
port — порт для подсоединения к серверу nessusd (по умолчанию 1241, раньше использовался порт 3001);
user — имя зарегистрированного в сервисе nessus пользователя;
pass — пароль пользователя;
targets-file — файл, содержащий список исследуемых систем;
result-file — файл отчета о проведенном исследовании.
Дополнительные параметры:
-T , —output-type=, где — формат представления данных в отчете: nbe, html, html_graph, text, xml, old-xml, tex, nsr (используется по умолчанию);
-V, —verbose — вывод промежуточных результатов сканирования на экран;
-x, —dont-check-ssl-cert — не проверять SSL-сертификат;
-v, —version — показать версию сервера nessusd;
-h, —help — краткая справка.
Пример:
$cat>list_ip <192.168.10.11
192.168.10.12
EOF
$nessus -V -T text -q localhost 1241 user password list_ip report_file
NessusWX — просмотр отчета |
Работать с графическими клиентами для Nessus несколько проще. Используя графическую оболочку, можно быстро настроить параметры сканирования. Поддерживается экспорт отчетов в документы формата ASCII text, LaTeX, NSR, HTML, HTML с диаграммами.
Для Windows-систем в качестве клиента Nessus можно использовать программу NessusWX (последняя версия 1.4.2), которая распространяется по лицензии GNU General Public License. Получить дистрибутив и документацию по NessusWX можно на сайте http://nessuswx.nessus.org/. Поддерживается экспорт отчетов в форматы HTML, PDF, text.
NessusWX — настройка параметров сканирования |
Язык сценариев NASL
Сканер безопасности включает специально разработанный для выполнения сетевых операций язык сценариев NASL (Nessus Attack Scripting Language), позволяющий быстро написать переносимый тест для проверки определенной уязвимости и гарантировать, что NASL-сценарий не сможет выполнить ничего, кроме своей задачи — проверки описанной уязвимости у выбранной цели.
С помощью языка NASL легко конструировать и отправлять TCP/UDP/ICMP/IGMP-пакеты с произвольным содержимым, устанавливать сетевые соединения. Он обеспечивает удобный высокоуровневый набор функций для проверки Web- и ftp-сервисов (ftp_log_i n(), ftp_get_pasv_port(), http_get(), is_cgi_installed() и т. д.). Встроенные ограничения сводят возможность создания модуля с двойным назначением («троянского») к минимуму. Разработчики гарантируют, что NASL-сценарий не пошлет ни одного сетевого пакета ни на какой хост, кроме выбранной цели; не будет выполнять на вашей локальной системе никаких команд; не сможет читать локальные файлы.
Необходимо отметить, что NASL в общем смысле не является мощным языком сценариев, подобным Perl или Python. У него только одна цель: тестирование безопасности сетевых сервисов — и в этом он превосходит любой другой язык. Писать модули для сканера Nessus на NASL гораздо удобнее благодаря оптимизации для Nessus, переносимому и легко читаемому коду, а также общим чертам с языком Cи — синтаксис и идеология у них отчасти схожи.
Созданные сценарии можно использовать, подключив модуль к серверу nessusd через nessus-update-plugins или пользуясь интерпретатором nasl, входящим в состав Nessus.
Вот чего нет в NASL, так это структур и отладчика (пока).
NessusWX — список используемых модулей |
Поддержка
Nessus имеет хорошее информационное сопровождение. Проследить развитие проекта можно на сайте http://cvs.nessus.org/. Все сообщения об обнаруженных ошибках публикуются по адресу http://www.nessus.org/bugs/.
В проекте есть несколько дискуссионных групп:
nessus — общая дискуссионная группа;
nessus-devel — новости и обмен мнениями разработчиков;
nessus-announce — сообщения о возможностях новых версий сканера;
plugins-writers — для разработчиков новых модулей. Если вы собираетесь разрабатывать модули, вам необходимо на нее подписаться.
Узнать подробности подписки на дискуссионные группы можно по адресу http://list.nessus.org.
Пожелания, замечания и советы
Не сканируйте чужие машины без разрешения их администратора. Ваши действия вполне обоснованно могут быть расценены как попытка взлома и нарушение работы сети.
При сканировании всего диапазона tcp-портов (1—65535) для одного хоста объем трафика составляет около 5 Мбайт. Суммарный объем трафика: количество проверок Ё число машин Ё 5Mбайт. Посчитайте сами до того, как провайдер выставит вам счет за трафик.
Оно также может существенно замедлить работу сети, если ее пропускная способность невелика.
Сканирование способно вызвать сбой в работе или зависание исследуемой системы.
Осуществляя проверку безопасности сети, необходимо делать ее с разных точек, как изнутри локальной сети (зона DMZ), так и снаружи (из Интернета).
Сканер безопасности Nessus поставляется as is» без каких бы то ни было обязательств. Авторы Nessus снимают с себя всякую ответственность за последствия, вызванные применением сканера. Ответственность за все риски, связанные с применением и действиями сканера Nessus, несет пользователь.
* * *
Аудит надежности сетевой защиты и устойчивости к взлому сетевых сервисов — обязательная задача при администрировании сети, серверов или даже одного домашнего компьютера. Использование сканера безопасности Nessus, аккумулирующего опыт сотен профессионалов, позволяет облегчить эту задачу, сэкономив немало времени и усилий и повысив надежность проверки.
Не стоит пренебрегать данными исследований сканера, откладывая обновление или замену уязвимых сетевых сервисов. Результатом такого пренебрежения может стать взлом и уничтожение вашей системы.