Сервер в кармане, или просто о сложном!

главная - Статьи - Разное

Nessus

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

- Общие сведения
- Установка
- Использование
- Анализ отчетов

Общие сведения

Nessus - это сканер безопасности, состоящий из серверной и клиентской частей. Клиентская программа существует как для Unix систем, так и для win32, в то время как сервер может быть запущен только в системе Unix. Общение между клиентом и сервером происходит по собственному протоколу Nessus - NTP, который работает поверх TCP.

Установка

Итак, перед установкой nessus нам понадобятся следующие дополнительные
компоненты:

- bison [ /usr/ports/devel/bison ]
- nmap [ /usr/ports/security/nmap ]
- openssl [ /usr/ports/security/openssl ]

По желанию также можно установить gtk, который нужен для сборки и работы графического клиента nessus. Однако здесь я рассмотрю процесс установки и работы в клиентcкой программе из командной строки, так как в установке GUI-клиента особого смысла не вижу.

Также, подразумевается, что и сервер и клиент будут установлены на одной машине, поэтому мы будем собирать nessus без поддержки шифрованного канала связи между клиентской и серверной программами.

Установка

Ставить сканер будем под FreeBSD, хотя в linux этот процесс выглядит в принципе аналогично. Во-первых, нам необходимо получить последнюю версию сканера (на момент написания статьи это была 2.0.5). Сделать это можно несколькими способами. Рассмотрю два.

- Зайти на nessus.org и загрузить файл nessus-2.0.5.tar.gz
- В оболочке набрать команду

# lynx -source http://install.nessus.org | sh

Не смотря на всю дружелюбность по отношению к начинающему или ленивому пользователю, второй способ лишает нас возможности выбора нескольких важных опций установки, поэтому остановимся на первом способе.

Итак вы загрузили файл nessus-2.0.5.tar.gz в директорию /tmp. Его необходимо развернуть командой:

# tar -zxvf nessus-2.0.5.tar.gz

Теперь переходим в созданную при распаковке директорию:

# cd nessus-2.0.5

В ней расположены следующие файлы:

# ls

MD5 nessus-libraries-2.0.5.tar.gz
libnasl-2.0.5.tar.gz nessus-plugins-2.0.5.tar.gz
nessus-core-2.0.5.tar.gz

Для начала развернем и установим библиотеки Nessus, выполнив следующюю серию
команд:

# tar -zxvf nessus-libraries-2.0.5.tar.gz
# cd nessus-libraries
# ./configure --enable-bpf-sharing --disable-cipher
# make && make install && make clean

Итак, более подробно расскажу про опции сценария configure. Первая, enable-bpf-sharing актуальна только для BSD дистрибутивов. Объясню, что это. BPF означает Berkeley Packet Filter, псевдоустройство, которое используется библиотекой pcap, которая, в свою очередь используется некоторыми плагинами nessus. В принципе, если вы не собираетесь сканировать одновременно более одного хоста, то вам можно вообще об этом не беспокоиться. Для расширения познаний можно смотреть man bpf.
Однако, если вы планируете осуществлять массированные сканы параллельно множества хостов, то у вас есть два варианта:

1) перекомпилировать ядро с опцией

pseudo-device bpfilter NUM

где NUM - это число, которое должно быть эквивалентным произведению значений опций 'max hosts number' и 'max plugins'. То есть, если вы планируете сканировать одновременно 10 хостов [ то есть исполнять одновременно 10 экземпляров nessusd ], на каждом из которых одновременно тестируется 5 плагинов, то рекомендуемым значением числа NUM будет 50 [ 10 x 5 ]. Для масштабных сканов рекомендуется увеличить это число до 100. То есть вы перекомпилируете ядро с добавлением следующей опции:

pseudo-device bpfilter 100

После перекомпиляции и загрузки с новым ядром, вы заходите в систему и
выполняете команды:

# cd /dev
# ./MAKEDEV bpf+100

и только после этого можно собирать и компилировать библиотеки nessus.

2) собрать библиотеки с опцией enable-bpf-sharing

Разработчики предупреждают о том, что эта опция носит статус "экспериментальной", однако на моей системе она не вызывала нареканий. Эта опция "эмулирует" достаточное количество bpf в вашей системе, разделяя текущее значение между всеми процессами. Безусловно, наилучшим вариантом будет использование первого метода, то есть перекомпиляции ядра.

Опция disable-cipher отключает шифрование при взаимодействии клиента и сервера, однако при этом все тесты, вовлекающие использование протокола SSL, все еще будут прекрасно работать. Сделано это, как я уже говорил, из-за ненадобности создания шифрованного канала на локальной машине.

Окей, теперь установим libnasl - библиотеку языка NASL. Синтаксис языка сильно напоминает C и предназначен специально для написания новых модулей для базы уязвимостей Nessus.

В следующем номере я объясню основные функции языка и покажу как написать сценарий для обнаруженной вами уязвимости.

# tar -zxvf libnasl-2.0.5.tar.gz
# cd libnasl
# ./configure
# make && make install && make clean

Теперь пришла очередь самого сканера:

# tar -zxvf nessus-core-2.0.5.tar.gz
# cd nessus-core
# ./configure --disable-cipher
# make && make install && make clean

При сборке и компиляции gcc может ругаться на недостающие файлы или ошибки в синтаксисе самого nessus. Однако это не должно вас беспокоить, так как даже не смотря на это, работать все будет нормально.

И теперь самое интересное - установим базу уязвимостей:

# tar -zxvf nessus-plugins-2.0.5.tar.gz
# cd nessus-plugins
# ./configure
# make && make install && make clean


Все, сканер установлен. Но прежде чем им можно будет пользоваться, необходимы
еще некоторые манипуляции:

1. Подправим конфигурационный файл:

# ee /usr/local/etc/nessus.conf

В нем необходимо изменить значения хотя бы для указанных мной переменных. В частности, найдите опцию port_range. До версии 2.0.5 ее значением по умолчанию было "1-15000", то есть nessus сканировал этот диапазон портов на наличие слушающих служб. В версии 2.0.5 это значение изменилось на "default", что означает, что nessus будет сканировать порты известных ему служб. Почему я рекомендую использовать именно диапазон портов?? Да потому что администраторы часто вешают службы на нестандартных портах. Например, мне часто доводилось встречать, скажем, sshd на порту 1972 [ кстати, номер соответствует году рождения администратора ] или сервер ftp на порту 666 [ обычно это какая-нибудь 0day warez ftp ].

Однако при этом вы должны учесть, что скорость сканирования скажем 15000 портов займет определенное время, а также то, что если вы на выделенном канале и платите за трафик, то это сильно ударит по вашему бюджету, ну и самое неприятное заключается в том, что этот способ очень шумный, и если вы не принимаете дополнительных мер предосторожности по скрытию своего происхождения [ адреса IP ], то вполне вероятно, что у вас возникнут проблемы.

Рядом расположена опция cgi_path. Она определяет имена директорий на атакуемом веб-сервере, в которых могут содержаться уязвимые сценарии cgi. Я настоятельно рекомендую, перед началом скана убедиться в том, что на выбранной вами машине работает веб-сервер. Если он там присутствует, то вы можете вручную исследовать сайт на предмет того, откуда выполняются те или иные сценарии. Например, Если весь интерфейс сайта написан на php то вам, вероятно, нужно будет добавить к к значению этого параметра директорию `/', что соответствует корневой директории с документами. Вот так выглядит значение этой переменной в моем файле конфигурации:

cgi_path = /cgi-bin:/scripts:/:/cgi:/php

Дальше найдите переменную safe_checks. По умолчанию она установлена в значение
"yes". В этом случае сканер будет доверять банеру службы, а не ее сигнатуре. Поскольку банер любой службы довольно просто изменить, измените значение этой
переменной на "no".

Переменной dumpfile укажите значение "/dev/zero", это для того, чтобы лишний мусор, создаваемый выводом от модулей nessus не сохранялся у вас на диске. Мусором я это называю в основном потому, что 99% этих сообщений говорят о том, что такой-то сценарий не был найден на сканируемой машине. Пользы от его сохранения я не вижу.


2. Создадим пользователя nessus:

Для подключения к серверу nessusd вы должны иметь учетную запись. Для ее создания воспользуйтесь сценарием nessus-adduser, расположенным в директории /usr/local/sbin:

# ./nessus-adduser

При запуске вам будет задано несколько вопросов ( предпочитаемый вами способ аутентификации [пароль или сертификат], а также логин и пароль). Ответьте на пару вопросов, укажите логин и пароль После этого пользователь будет создан.


3. Добавим шифрование связи между клиентом и сервером

Если вы все же хотите чтобы взаимодействие сервера и клиента происходило по шифрованному туннелю [ например, если вы устанавливаете сервер на удаленной машине ] и при этом вы собирали nessus с опцией enable-cipher [ устанавливается по умолчанию ] , то для работы вам необходимо создать сертификаты SSL. Для этого идем в /usr/local/sbin и выполняем команду:

# ./nessus-mkcert -q

Все, сертификат будет создан и скопирован в нужную директорию.


Использование

Для начала необходимо запустить сервер Nessus:

# cd /usr/local/sbin
# ./nessusd -D -a 127.0.0.1

Опции к nessusd означают:
-D - запуск сервера в фоновом режиме
-a - разрешает подключаться только с указанного адреса

Теперь создадим файл, содержащий имена хостов или их адреса IP, которые мы
будем сканировать:

# echo "www.hostname.com" > /tmp/targets
# echo "www.hostname1.com" >> /tmp/targets
# echo "www.hostname2.com" >> /tmp/targets

etc.

Теперь запускаем клиентскую программу:

# cd /usr/local/bin
# ./nessus -xq -T text 127.0.0.1 1241 login passwd /tmp/targets /tmp/results

Объясню приведенные опции:
-x не проверять сертификат SSL сервера nessus [ не используйте если в этом нет
необходимости]
-q запуск CLI версии клиента [ если просто написать ./nessus, то будет запущен
GUI клиент]
-T - задает формат файла с результатами сканирования. Здесь может быть text,
html и другие. Смотрите man nessus.
Дальше идут адрес и порт сервера, затем пара логин/пароль, затем пути к файлу,
содержащему адреса хостов для сканирования [ targets ] и файл для сохранения
результатов сканирования [ results ].

Когда nessus закончит сканировать, просмотрим файл отчета:

# more /tmp/targets


Анализ отчетов

Итак, теперь переходим к наиболее важной части - анализу результатов
сканирования nessus. Для того, чтобы на практике вам было проще ориентироваться,
я приведу содержимое реального файла отчета некоторого хоста с моими
комментариями. По понятным причинам, его имя было изменено на www.hostname.com.
Поскольку я всего лишь хотел продемонстрировать вам пример возможностей nessus,
я удалил некоторые не очень важные пункты отчета, иначе этот файл получился бы
чрезмерно большим.

Nessus Scan Report

SUMMARY

- Number of hosts which were alive during the test : 1
- Number of security holes found : 6
- Number of security warnings found : 14
- Number of security notes found : 30

TESTED HOSTS

www.hostname.com (Security holes found)

DETAILS

+ www.hostname.com :
. List of open ports :
o smtp (25/tcp) (Security notes found)
o ssh (22/tcp) (Security warnings found)
o ftp (21/tcp) (Security notes found)
o domain (53/tcp) (Security hole found)
o http (80/tcp) (Security hole found)
o hosts2-ns (81/tcp) (Security hole found)
o pop3 (110/tcp) (Security notes found)
o https (443/tcp) (Security hole found)
o mysql (3306/tcp) (Security hole found)
o general/tcp (Security notes found)
o general/icmp (Security warnings found)
o general/udp (Security notes found)
o domain (53/udp) (Security notes found)

. Information found on port smtp (25/tcp)

Remote SMTP server banner :
220 www.hostname.com ESMTP

This is probably: Qmail

. Information found on port smtp (25/tcp)

This server could be fingerprinted as being Qmail 1.0.3

Здесь мы видим, что банер демона smtp был изменен администратором, и
не содержит названия и версии демона. Поэтому nessus пустил в ход свою
базу сигнатур различных служб и определил, что вероятно это Qmail версии
1.0.3
Ну, тут можно сказать, что эта информация не дает нам ничего важного,
ибо бесполезно искать эксплоит к Qmail - сервер практически не пробиваем
в этом плане. Единственно, что можно попробовать, это поискать ошибки в
конфигурации сервера.


. Warning found on port ssh (22/tcp)

The remote SSH daemon supports connections made
using the version 1.33 and/or 1.5 of the SSH protocol.

These protocols are not completely cryptographically
safe so they should not be used.

Solution :
If you use OpenSSH, set the option 'Protocol' to '2'
If you use SSH.com's set the option 'Ssh1Compatibility' to 'no'

Risk factor : Low

. Information found on port ssh (22/tcp)

The remote SSH daemon supports the following versions of the
SSH protocol :

. 1.33
. 1.5
. 1.99
. 2.0

. Information found on port ssh (22/tcp)

Remote SSH version : SSH-1.99-OpenSSH_3.4p1 FreeBSD-20020702

Сервер SSH поддерживает протокол версии 1, что означает, что вы
можете перехватить сессии пользователей, чьи клиенты могут работать
только по версии 1 протокола. Мы видим версии доступных протоколов и версию
самого демона.


. Information found on port domain (53/tcp)

The remote bind version is : 8.3.3-REL

А это версия named.


. Vulnerability found on port http (80/tcp) :

The remote host is running PHP 4.3.0

There is a flaw in this version which may allow
an attacker to execute arbitrary PHP code on this
host.

Solution : Upgrade to PHP 4.3.1
Risk factor : High
CVE : CAN-2003-0097

В этом сообщении говорится о возможности выполнения произвольного кода без
имения непосредственного доступа к хосту в данной версии PHP К сожалению, я
что-то не встречал эксплоита к этой уязвимости, да и само описание выглядит
высьма расплывчато.


. Warning found on port http (80/tcp)

Your webserver supports the TRACE and/or TRACK methods. It has been
shown that servers supporting this method are subject
to cross-site-scripting attacks, dubbed XST for
'Cross-Site-Tracing', when used in conjunction with
various weaknesses in browsers.

An attacker may use this flaw to trick your
legitimate web users to give him their
credentials.

Solution: Disable these methods.

If you are using Apache add the following lines for each virtual
host in your configuration file :

RewriteEngine on
RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK)
RewriteRule .* - [F]

If you are using Microsoft IIS, use the URLScan tool to deny HTTP TRACE
requests or to permit only the methods needed to meet site requirements
and policy.

See
http://www.whitehatsec.com/press_releases/WH-PR-20030120.pdf
http://archives.neohapsis.com/archives/vulnwatch/2003-q1/0035.html

Risk factor : Medium

В вышеуказанном сообщении говорится о возможности перехвата сеансов
пользователей при помощи новомодной методики XST [ Cross-Site Tracing ], равно
как и о способах его предотвращения.

. Warning found on port http (80/tcp)

robots.txt contains the following:
User-Agent: *
Disallow: www.hostname.com/cgi-bin/
Disallow: hostname.com/cgi-bin/
Disallow: /cgi-bin/
Disallow: www.hostname2.com
Disallow: .ico
Disallow: .gif
Disallow: .jpg
Disallow: .jpe

А здесь приведено содержание файла robots.txt


. Information found on port http (80/tcp)

The following CGI have been discovered :

Syntax : cginame (arguments [default value])

/cgi-bin/kontakt.cgi (email [] theme [] mode [mail] )
/cgi-bin/search.cgi (filter [] submit [ ] )

Nessus обнаружил несколько сценариев cgi на сервере, а также передаваемые им
параметры. Однако это далеко не все доступные на сервере сценарии, поэтому
никто не отменяет исследование машины вручную.


. Information found on port http (80/tcp)

The remote web server type is :

Apache/1.3.27 (Unix) PHP/4.3.0 mod_ssl/2.8.11 OpenSSL/0.9.6

Solution : You can set the directive 'ServerTokens Prod' to limit
the information emanating from the server in its response headers.

А из этого сообщения мы узнаем версию удаленного веб-сервера. Тут же дается
и решение, как сделать свой сервер менее болтливым.


. Information found on port https (443/tcp)

Here is the SSLv2 server certificate:
Certificate:
Data:
Version: 3 (0x2)
Serial Number: 547033 (0x858d9)
Signature Algorithm: md5WithRSAEncryption
Issuer: C=ZA, ST=Western Cape, L=Cape Town, O=Thawte Consulting cc,
OU=Certification Services Division, CN=Thawte Server
CA/Email=server-certs@thawte.com
Validity
Not Before: Oct 23 16:39:49 2001 GMT
Not After : Oct 23 16:39:49 2002 GMT
Subject: C=GB, ST=Lancs, L=Radcliffe, O=Radcliffenet, OU=Kevin
Marsden t/a, CN=www.radcliffenet.com
Subject Public Key Info:
Public Key Algorithm: rsaEncryption
RSA Public Key: (1024 bit)
Modulus (1024 bit):
00:cf:09:d6:36:3c:f3:51:77:64:db:ad:8f:7e:03:
12:fc:2c:4c:b1:56:50:e0:65:43:7c:39:6c:f7:85:
57:85:58:18:02:f9:22:23:ef:38:96:a9:e0:93:cd:
1c:92:dd:3b:ee:ca:0e:ae:d1:f1:ee:a9:af:08:46:
2c:2d:37:c6:cb:96:04:b0:11:f2:d2:14:67:f7:dd:
71:c9:45:0f:e1:13:ba:5d:95:61:40:53:6e:c0:9d:
21:2e:ed:b6:9b:97:93:40:75:13:c8:63:c7:6d:b8:
e8:e5:f3:8a:52:14:e8:b2:0c:52:4f:0f:8a:c1:79:
46:b4:d1:38:80:3d:0d:d2:b1
Exponent: 65537 (0x10001)
X509v3 extensions:
X509v3 Extended Key Usage:
TLS Web Server Authentication
X509v3 Basic Constraints: critical
CA:FALSE
Signature Algorithm: md5WithRSAEncryption
4d:22:5b:27:45:e9:de:b2:a8:0c:64:77:90:1d:ae:ad:a1:11:
b3:b0:83:1b:87:88:0d:23:ba:3c:4d:f3:19:c9:20:c3:36:20:
40:ba:e7:ee:7d:cb:a4:94:55:fb:61:f7:a2:16:0b:94:49:28:
b6:d0:57:4d:1a:d3:c1:73:e7:93:21:3c:6e:0b:8b:1d:64:45:
39:cf:33:25:0f:29:5f:90:cf:d8:6d:6f:7b:ed:9f:5c:66:e7:
eb:9f:a4:24:7c:46:b4:f5:1f:70:74:a8:a6:c9:dc:a7:34:09:
3e:ae:3e:36:c0:d5:10:fc:f6:3e:6c:d1:0a:b4:da:98:0f:83:
8e:2a

Здесь мы можем видеть SSL сертификат удаленного сервера.


. Information found on port https (443/tcp)

Here is the list of available SSLv2 ciphers:
RC4-MD5
EXP-RC4-MD5
RC2-CBC-MD5
EXP-RC2-CBC-MD5
DES-CBC-MD5
DES-CBC3-MD5
RC4-64-MD5

Отсюда узнаем типы доступных алгоритмов шифрования.


. Information found on port https (443/tcp)

This TLSv1 server also accepts SSLv2 connections.
This TLSv1 server also accepts SSLv3 connections.

Это говорит нам о том, что сервер поддерживает соединения по версии 2 и 3
протокола SSL.


. Vulnerability found on port mysql (3306/tcp) :

You are running a version of MySQL which is older than version 3.23.55.
It is vulnerable to a vulnerability that may allow the mysqld service
to start with elevated privileges.

An attacker can exploit this vulnerability by creating a DATADIR/my.cnf
that includes the line 'user=root' under the '[mysqld]' option section.

When the mysqld service is executed, it will run as the root
user instead of the default user.

Risk factor : High
Solution : Upgrade to at least version 3.23.56
CVE : CAN-2003-0150
BID : 7052

Имея локальный доступ, пользователь может создать конфигурационный файл mysqld, в котором имя пользователя, под которым в дальнейшем будет запускаться сервер mysql будет равным root.


. Information found on port mysql (3306/tcp)

Remote MySQL version : 3.23.54

Ну а здесь, собственно, версия mysqld.


. Information found on port general/tcp

Remote OS guess : FreeBSD 4.6 through 4.6.2 (July 2002) (X86)

CVE : CAN-1999-0454

------------------------------------------------------
This file was generated by the Nessus Security Scanner


Кстати система идентифицирована верно. Набрав в консоли:

# uname -v

Я получил следующее:

FreeBSD 4.6-RELEASE #0 Mon Jan 28 14:31:56 GMT 2003 murray@builder.freebsdm
all.com:/usr/src/sys/compile/KERN4


На этом, пожалуй, я остановлю свое повествование. Расскажу лишь немного о методике получения дополнительной информации об обнаруженной уязвимости. Итак, если ей был присвоен CAN или BID, то вы можете найти описания на www.securityfocus.com/bid/bugtraqid/ и www.securityfocus.com/bid/cveid/ соответственно. Ниже привожу небольшой список архивов с эксплоитами и описаниями уязвимостей:

- http://hack.co.za
- http://packetstormsecurity.org
- http://securityfocus.com
- http://google.com ))

Удачных исследований!!

ЗЫ. Спустя некоторое время после написания статьи, в рассылке bugtraq были обнародованы некоторые уязвимости сканера nessus. На данный момент доступна версия 2.0.6. Процесс ее установки и использования аналогичен 2.0.5. На сайте kodsweb была опубликована аналогичная статья про использование nessus. Однако я написал данную статью за неделю до kodsweb, поэтому между ними нет ничего общего.

Источник: http://inattack.ru/article/44

Авторизуйтесь для добавления комментариев!


    забыли пароль?    новый пользователь?