###########################################
#!/usr/share/doc/defaced/1/tandp/nessus.txt
###########################################


Nessus: Руководство пользователя [ by euronymous]
--------------------------------

В   данном  документе  я  расскажу  о  самом  лучшем,  на  мой  взгляд,  сканере
безопасности 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 protected]
            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	[email protected]
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, поэтому между ними нет
ничего общего.

... np: 01-Burzum-Dunkelheit.mp3