Опубликован: 20.02.2007 | Доступ: свободный | Студентов: 3482 / 786 | Оценка: 4.42 / 4.03 | Длительность: 40:03:00
Лекция 6:

Сканеры портов

Сканирование UDP-портов

Естественно, nmap это тоже делает. Используя флаг -sU, можно посылать пустые UDP-пакеты и ожидать в ответ ICMP-сообщения "port unreachable". Если не получено никаких сообщений в ответ, порт считается открытым, как это показано в следующей таблице. Здесь вы можете видеть несколько возможных ошибок. Если возвращаемые ICMP-сообщения блокируются брандмауэром, это может означать, что все UDP-порты хоста открыты. Также, если UDP-трафик непосредственно блокируется брандмауэром, это по-прежнему означает, что все UDP-порты открыты. Эта та же ловушка, в которую мы попадали, используя Netcat в процессе сканирования UDP-портов. Вдобавок, многие хосты могут посылать наружу только ограниченное число ICMP-сообщений об ошибках в секунду для предотвращения перегрузки сети. Nmap может автоматически корректировать эту ситуацию, если она определяется, но это может очень сильно замедлить сканирование. Поскольку UDP-протокол работает без установления соединения и не ограничен необходимостью подтверждения получения входящих пакетов, нет полного решения этой проблемы.

Nmap посылает на порт хоста Nmap получает от порта хоста Nmap принимает решение
Пустой UDP пакет Nothing Возможно, порт открыт, если хост отвечает на Ping (хост работает); возможно, порт закрыт, если брандмауэр блокирует ICMP.
Пустой UDP пакет ICMP порт недоступен Порт закрыт.
Примечание. Nmap по умолчанию пытается послать Ping хосту перед тем, как начать его сканировать. Это особенно важно для правильной интерпретации результатов UDP-сканирования. Если nmap не может послать Ping хосту (или потому, что хост блокирован брандмауэром, или вы отключили такую возможность, вручную используя флаг -P0 ), он не сможет получить правильные результаты.
Сканирование протоколов

Если вы предприняли неудачную попытку соединения с UDP-портом, хост вернет ICMP-сообщение "port unreachable". То же самое можно сказать и про IP-протоколы. Каждый IP-протокол транспортного уровня имеет соответствующий номер. Наиболее распространены ICMP (1), TCP (6) и UDP (17). У всех IP-пакетов есть поле "protocol", которое показывает тип заголовков пакетов и номер протокола транспортного уровня. Если мы посылаем серию пакетов без заголовка протокола транспортного уровня и с номером протокола 130, который означает протокол семейства IPSEC, называемый SPS (Secure Packet Shield), мы можем определить, какой из протоколов реализован на данном хосте. Если мы получаем ICMP-сообщение "protocol unreachable", то этот протокол недоступен. В противном случае - доступен. Этот метод сканирования, называемый сканированием протоколов ( -sO ), страдает теми же самыми проблемами, что и UDP-сканирование в том случае, если брандмауэр блокирует ICMP-сообщения или непосредственно сам протокол дает ложные ответы.

Маскировка сканирования

У nmap есть несколько опций сканирования. Некоторые из них могут помочь скрыть сканирование портов от определения по системным журналам с помощью брандмауэров и IDSs-систем. Вдобавок, nmap предоставляет вам некоторые возможности рандомизации и маскировки, которые предоставляются такими программами, как Netcat и hping.

FTP Bounce. У FTP есть ошибка, которая может дать преимущество при использовании nmap. Когда вы соединяетесь с FTP-сервером при помощи FTP-клиента, ваш клиент взаимодействует с FTP-сервером по 21 порту. Это TCP-соединение называется контрольным соединением ( control ). FTP-сервер требует установления отдельного соединения с клиентом, называемого соединением по данным ( data ), через которое будут передаваться данные. Клиент ожидает от сервера установления соединения по данным на отдельном TCP-порте. Он передает серверу команду PORT, чтобы сообщить ему о необходимости инициировать соединение с клиентским IP-адресом и вновь открытым портом. Этот метод взаимодействия называется активной передачей. Поскольку многие клиентские машины используют трансляцию адресов (NAT) или находятся за брандмауэром во внутренней сети, активное FTP-соединение обычно не работает, поскольку инициированное сервером соединение с клиентом не может проникнуть внутрь защищенной зоны.

Примечание. Большинством FTP-клиентов и серверов используется пассивная передача, поскольку в этом случае клиент инициирует оба соединения - и контрольное, и соединение по данным - передавая информацию через брандмауэр или систему NAT.

Сосредоточимся на команде PORT. Ее законное использование сообщает FTP-серверу о необходимости установить обратное соединение по данным с только что открытым портом. Но поскольку мы определили для использования не только порт, но и IP-адрес, наш клиент, передавший команду PORT на сервер, может попытаться установить соединение с кем-то, находящимся где-либо. Nmap может использовать такое поведение для сканирования порта с целью определения уязвимого FTP-сервера и интерпретации полученных результатов. Такой прием называется FTP-сканированием. nmap создает активное FTP-соединение с сервером и передает команды PORT, содержащие IP-адрес и порт сканируемого хоста. Затем Nmap может интерпретировать полученные результаты и выводить их в том же самом формате, что и нормальные результаты сканирования порта.

Как найти FTP-сервер, который можно так использовать? Это самая интересная часть. Это ошибка проектирования, а не только недостатки реализации. FTP-серверы, разработанные в соответствии с документом RFC 959 для протокола FTP, должны реализовывать эту возможность. Многие пакеты FTP-серверов, такие как wu-ftpd, модифицированы для передачи команды PORT только оригинальному хосту, и многие поставщики операционных систем со встроенными FTP-серверами скорректированы в соответствии с этим. Но некоторые по-прежнему запускают устаревшие или не скорректированные FTP-серверы. Не следует запускать анонимный FTP-сервер, если в этом нет очень серьезной необходимости.

Пойдем дальше. Выберем анонимный FTP-сервер и попытаемся выполнить:

nmap -b anonymous@ftp.lame_host.com -p 6000 192.168.1.200

Предыдущая команда пытается использовать ftp.lame_host.com для сканирования порта с номером 6000 на машине 192.168.1.200, чтобы сообщить, используется ли там X Window-сервер. А вот пример взаимодействия nmap с этим сервером.

Server: 220 LAME_HOST FTP server version 4 ready
Client: USER anonymous
Server: 331 Guest login OK, send e-mail as password
Client: PASS -wwwuser@
Server: 230 Login successful
Client: PORT 192,168,1,200,23,112
Server: 200 PORT command successful
Client: LIST
Server: 150 Opening ASCII connection for "/bin/ls"
Server: 226 Transfer complete

Nmap сообщает о необходимости открыть соединение по порту 6000 на машине 192.168.1.200, используя команду PORT. Последние две цифры в конце команды PORT, 23 и 112, представляют собой порт с номером 6000. ( FTP определяет это, умножая первое число на 256 и складывая со вторым числом 23*256+112=6000). Если команда успешно выполнена, появляется возможность выполнить команду LIST. Поскольку это позволяет открыть соединение, порт 6000 открыт на машине 192.168.1.200. Если сервер вместо этого сообщает "425 Can't build data connection", мы можем определить, что порт 6000 закрыт.

Если команда PORT работает, вы можете не только сканировать кого-либо еще, но и порты любой машины, к которой имеет доступ FTP-сервер. Это великолепный способ обойти фильтры портов и брандмауэры, которые обычно не пропускают ваши попытки сканирования. Однако всегда будьте осмотрительны, используя маскировку, подобную этой. Помните, что FTP-серверы могут зафиксировать ваши соединения в журнале. Если кто-либо заподозрит LameHost в сканировании его сети в 13:45 6 января, и у него есть анонимное FTP-соединение с вашей домашней машиной в это же самое время, вы попались.

Даже если вы нашли сервер, уязвимый с точки зрения FTP, это не дает вам возможности сканировать привилегированные порты (с номером ниже 1024), поскольку FTP-клиент обычно не должен прослушивать привилегированные порты в ожидании соединения по данным.

Фрагментация. Опция -f nmap, указывает на необходимость выполнения скрытого сканирования ( -sS, -sF, -sX или -sN ) с использованием фрагментированных IP-пакетов, у которых разорваны TCP-заголовки. Идея состоит в предохранении таких "искаженных" TCP-пакетов с необычными флагами от блокировки брандмауэрами. Эта опция может привести к нарушению в работе некоторых систем и не может корректно работать на всех разновидностях Unix, поэтому применяйте ее осторожно.

Заманивание. Мы беседовали о том, как можно замаскировать сканирование портов, сохранив при этом возможность получения результатов сканирования (вместо того чтобы передавать их на наш неизвестный адрес). Мы также обсуждали, как это сложно сделать (в лекциях "NETCAT и CRYPTCAT" и "Системные средства с открытым программным кодом: основы" и на протяжении всей этой лекции). Nmap дает возможность определить хост "ловушку", используя опцию -D. Идея состоит в определении нескольких "мистических жертв" - хостов в интернете - и задания их в разделенном запятыми списке после флага -D. Nmap будет, как обычно, выполнять роль сканера порта, но при этом определяться среди замаскированных сканеров портов с IP-адресами - ловушками. Системный администратор увидит несколько различных сканеров портов, но только один из них будет настоящим.

Примечание. Опция -S nmap позволяет вам задать исходящий IP-адрес для ваших пакетов. Вы можете использовать это для создания впечатления, что сканирование производится с заданного вами адреса. Эта функция имеет смысл для хоста с несколькими адресами, но может быть использована для маскировки и создания общего беспорядка. Вы не сможете получить обратно результаты сканирования, но вы можете выставить кого-то, как вредителя. Но будьте осторожны, маскируясь под других людей. В случае если системы обнаружения вторжений или брандмауэры оснащены функциями против приманки, вы можете объявить о себе во всеуслышанье, вместо того чтобы остаться незамеченным.

Рандомизация портов и хостов. Nmap по умолчанию перебирает заданные вами порты случайным образом. Вы можете выключить эту возможность, воспользовавшись флагом -r. Если вы задали список хостов для сканирования, то можете задать случайный порядок сканирования, используя флаг -randomize_hosts.

Расписание сканирования

Nmap использует опции планирования по времени, чтобы попытаться скрыть сканирование портов от брандмауэров и систем IDSs, которые используют основанные на временных параметрах алгоритмы обнаружения сканирования. Вдобавок, вы можете определить свою собственную политику планирования по времени, используя специальные флаги командной строки. В таблице 6.2 подробно описаны встроенные расписания и показано, как можно определить собственную политику сканирования. Вы можете использовать именованные политики маскировки с использованием флага -T. Команда nmap -T Sneaky -sS 192.168.1.100 -p 1-100 позволяет сделать попытку избежать определения сканирования с использованием именованной политики Sneaky и метода сканирования SYN при сканировании первых ста портов на компьютере 192.168.1.100.

Для полной ясности, флаг -scan_delay определяет минимальный временной промежуток в миллисекундах, который следует выдерживать между попытками сканирования. Параметр -host_timeout определяет максимальную задержку по времени в миллисекундах при сканировании одного хоста таким образом, что вы можете прерваться через 5 минут, если сканирование порта занимает слишком много времени. Параметр rtt_timeout определяет, время ожидания ответа в миллисекундах.

Таблица 6.2. Опции расписания и политик сканирования Nmap
Наименование Время между зондированиями Время, потраченное на один хост Тайм-аут на ответ о зондировании Использование параллельных зондирований
Paranoid 5 минут Без ограничений 5 минут нет
Sneaky 15 секунд Без ограничений 15 секунд нет
Polite 0.4 секунд Без ограничений 6 секунд (10 макс) нет
Normal нет Без ограничений 6 секунд (10 макс) нет
Aggressive нет 5 минут 1 секунда (1.5 макс) да
Insane нет 75 секунд 0.3 секунд макс да
scan_delay host_timeout initial_rtt_timeout min_rtt_timeout max_rtt_timeout max_parallelism

Nmap по умолчанию всегда ожидает ответа около 0.3 секунды (300 миллисекунд). Он запускается с начальным значением rtt_timeout (по умолчанию 6 секунд) и затем последовательно уменьшает или увеличивает значение в зависимости от предыдущих значений. Это позволяет оптимизировать производительность сканирования. Если хост отзывается быстро, то параметр rtt_timeout уменьшается. Если задержка слишком велика, nmap увеличивает параметр rtt_timeout. Но величина задержки по времени всегда остается в пределах между максимальным и минимальным значением. Малое значение параметра rtt_timeout увеличивает шансы ошибочного диагноза о состоянии порта для системы, которая реагирует не слишком быстро.

Параметр -max_parallelism определяет количество одновременно производимых попыток сканирования. Задание в качестве значения параметра 1 отключает параллельное выполнение сканирования. По умолчанию, nmap параллельно выполняет 36 попыток сканирования, если не задано иное значение. Вы можете задать для nmap существенно большее количество соединений для сканирования, используя параметр -M. В исходных кодах программы nmap задано предельное значение числа соединений 1025.

TCP Reverse Ident Scanning

Если на удаленном хосте, который вы сканируете, выполняется программа identd, которая по умолчанию прослушивает 113 порт, nmap попытается найти информацию о пользователях, выполняющих определенные процессы. Identd может сообщить вам такую информацию, позволив тем самым найти серверы, запущенные с полномочиями пользователя root. Переполнение буфера на уязвимой службе - достойная плата за запуск программы с такими полномочиями. Воспользуйтесь флагом -I, чтобы задействовать такой тип сканирования.

bash-2.04$ nmap -I 192.168.1.210

Starting nmap V. 2.54BETA30 ( www.insecure.org/nmap/ )
Interesting ports on (192.168.1.210):
(The 1535 ports scanned but not shown below are in state: closed)

Port    State   Service Owner
21/tcp  open    ftp root
22/tcp  open    ssh root
23/tcp  open    telnet  root
80/tcp  open    http    nobody
111/tcp open    sunrpc  bin
113/tcp open    auth    nobody
512/tcp open    exec    root
513/tcp open    login   root
514/tcp open    shell   root
884/tcp open    unknown root
889/tcp open    unknown root
1024/tcp    open    kdm bjohnson
1032/tcp    open    iad3    bjohnson
6000/tcp    open    X11 root

Nmap run completed - 1 IP address (1 host up) scanned in 3 seconds

Мы обнаружили несколько сервисов, выполняющихся с полномочиями пользователя root, включая ftp и telnet. Далее мы можем соединиться напрямую с этими портами, чтобы определить версии соответствующего программного обеспечения и вновь проверить их с точки зрения известных прорех в безопасности. Уязвимые службы FTP и Telnet на этой машине дают взломщику возможность получить доступ к системе с полномочиями суперпользователя.

Примечание. Поскольку Nmap должен установить соединение со службой identd, чтобы получить эту информацию, флаг -I невозможно использовать в режиме скрытого сканирования.