Методов для проведения fingerprinting’а довольно много: FIN-сканирование,
ICMP-пакетная генерация, исследования полей ICMP и TCP-пакетов. Но большинство
из них сводятся к анализу стека TCP/IP на удаленной системе. Попробую объяснить
на примере. Допустим, мы наснифали пакет с данными. В его заголовке находится
множество полей вроде размера окна, TTL (время жизни пакета данных), DF (бит
фрагментации), флага TOS (Type-Of-Service) и т.д. Именно эти данные и используют
fingerprinting-утилиты в своей работе. Например, если бит DF не установлен
(присуще ОС OpenBSD), то в базе сигнатур отбрасываются все оси, для которых DF
указан (обычный метод исключения). Далее под прицел попадает параметр TTL: для
FreeBSD и Linux этот параметр равен 64. Опять же, круг потенциальных OS сужается
- и так до тех пор, пока не останется минимум претендентов.
Впрочем, в этом деле есть уйма тонкостей и процесс опознания версии
операционки может не дать ожидаемых результатов. В случае с анализом
существующего дампа трафика fingerprinting называется пассивным. Для получения
материала для анализа, на удаленный хост могут посылаться специально
составленные пакеты - в этом случае мы имеем дело с активным fingerprinting.
Nmap
Сайт: nmap.org
Платформа: Unix, MacOS, Win32
Пожалуй, наиболее известным инструментом для активного fingerprinting’а
является известнейший сканнер безопасности Nmap. Мы столько раз упоминали
эту тулзу и демонстрировали ее в действии, что во всех подробностях рассказывать
об ее функционале было, по меньшей мере, неприлично. К счастью, разработчики
сделали офигенный подгон и выпустили в июле новую ветку программы c массой
полезных нововведений. Тут надо сразу сказать, что Nmap очень
многогранный продукт, но нас в данном случае интересуют прежде всего возможности
по OS Fingerprinting’у (ключ для запуска -O). Несколько простых экспериментов
показали, что алгоритмы и сигнатурные базы у новой версии Nmap’а стали
давать более правдивые результаты.
Результат сканирования microsoft.com старой версией сканнера давал едва ли
правдивые результаты :).
nmap -O -PN microsoft.com
Starting Nmap 4.76 ...
Running (JUST GUESSING): OpenBSD 4.X (86%)
Aggressive OS guesses: OpenBSD 4.3 (86%)
А вот что говорит обновленный Nmap:
nmap -O -PN microsoft.com
Starting Nmap 5.00 ...
Running (JUST GUESSING): Microsoft Windows 2003 (91%)
Aggressive OS guesses: Microsoft Windows Server 2003 SP2 (91%)
Когда-то для запуска утилиты приходилось вручную компилировать код и работать
со сканнером исключительно из командной строки. Сейчас на выбор есть сразу
несколько фронтендов, причем один из них - zenmap - входит в состав дистрибутива
по умолчанию.
Тем, кто пока мало знаком с ключами для запуска сканнера, он поможет выбрать
нужное сканирование, а advanced пользователям позволит сохранить тонкие
параметры для сканирования в виде разных профилей. И тех, и других определенно
порадует возможность интерпретировать результаты и даже строить графическую
топологию сети. Выбрав профиль для сканирования "Intense scan" и натравив сканер
на свою точку доступа, я вновь был приятно удивлен. Во-первых, Nmap
быстро определил версию ядра на установленном в девайсе линуксе и правильно
предположил, что имеет дело с embedded- устройством. По MAC’у был опознан
производитель - Asustek. А анализ 80 порта и ответа встроенного HTTP-сервера, на
котором крутится админка, позволил определить еще и точную модель устройства -
WL500gP!
Продолжаю радоваться :). В версии 5.00 появилось то, о чем мы давно мечтали -
скриптовый движок, позволяющий с помощью самописных сценариев автоматизировать
самые разнообразные задачи. С помощью таких скриптов можно проводить MSRPC/NetBIOS
атаки, осуществлять поиск уязвимых демонов или банально открытых проксей, и даже
реализовывать брутфорс для распространенных протоколов. В этом всячески поможет
другая новинка - сетевая утилита Ncat, предназначенная для передачи данных,
редиректа и отладки сетевых пакетов. А сравнить результаты сканирования разных
хостов или одной и той же машины, но в разное время или с разными параметрами,
поможет тулза Ndiff. Словом, это не просто новая версия программы. Это
по-настоящему значимый
релиз одного из лучших инструментов хакера, к которому мы обязательно
вернемся, когда будем говорить о сканнерах безопасности и скане портов.
p0f v2
Сайт: camtuf.coredump.cx
Платформа: Unix, MacOS, Win32
В отличие от Nmap, который использу ет алгоритмы для реализации активного
fingerprinting’а, p0f работает исключительно пассивно. Т.е. в результате
работы не генерирует какого-либо трафика, который может тебя выдать. Это
особенно важно, если на удаленной машине установлено более-менее толковое
средство IDS (средство определения атак).
Основная задача p0f - определить версию ОС на удаленном хосте, в том
числе на:
- машинах, которые присоединяются к тебе (так называемый SYN режим);
- машинах, к которым коннетишься ты (режим SYN+ACK);
- машине, с которой ты не можешь соединиться (режим RST+), из-за того, что
файрвол реджектит подключения;
- машинах, за взаимодействием которых ты можешь наблюдать (исследования
существующей сессии без необходимости какого-либо вмешательства с твоей
стороны).
Помимо этого утилита владеет несколькими другими полезными фокусами и в
разной степени может дать ответ, используется ли в локалке NAT, активен ли
файрвол или шейпер, а также рассчитать примерное "расстояние" до удаленного
хоста и его аптайм. В результате p0f может рассказать об ОС на удаленном
хосте, даже если она находится за файрволом, в то время как любимый Nmap
остается не у дел. При этом, еще раз повторяю, утилита не генерирует какого-либо
трафика. Никаких lookup’ов, загадочных пакетов, ARIN-запросов - ничего!
Изначально p0f написана для никсов, поэтому под виндой придется либо
довольствоваться прекомпилированной версией с офсайта (а она не самая свежая),
либо брать в руки исходники и колдовать над своей собственной сборкой. Кстати
говоря, разработчики очень просят всячески пополнять базу отпечатков. Для этого
достаточно перейти на страницу
lcamtuf.coredump.cx/p0f-help и, заполнив несколько полей о своей системе,
добавить новую запись.
THC-Amap
Сайт: thc.org/thc-amap
Платформа: Unix, MacOS, Win32
Если хочешь выяснить, какие сервисы установлены на удаленной машине, -
просканируй ее порты. В большинстве случаев можно обойтись одним лишь сканнером
безопасности (банально Nmap’ом), однако здесь, как и везде, не обошлось без
исключений. Каждый знает, что любой стандартный сервис обычно работает на
определенном порте: например, FTP на 21, SSH на 22 и т.д. Тем не менее,
администраторы частенько прибегают к одной очень простой, но полезной уловке.
Чтобы скрыть потенциально уязвимые сервисы, они устанавливают их на
нестандартные порты. В этом случае даже добротные сканнеры зачастую
обламываются, т.к. не могут определить FTP-сервер, работающий на 31337 порту,
даже если он там действительно есть.
Не беда! С задачей на ура справляется сканнер Amap от известной
хакерской группы THС. Он с большой вероятностью определит даже те сервисы,
которые работают не на своих стандартных портах. Успех достигается за счет того,
что программа посылает сервису специальные идентификационные пакеты, после чего
анализирует ответ и ищет соответствие в специально составленной базе сигнатур.
Таким образом, идентификация осуществляется не по номеру порта, а по "отпечаткам
пальцев" сервисов. До неприличия простой механизм позволяет определить
SSH-сервер, запущенный на 988 порту, или веб-сервер, установленный на 29-м.
Сканнер Amap легко сканирует как один конкретный порт, так и заданный
диапазон. Однако для большей эффективности рекомендую использовать его совместно
с Nmap’ом.
Алгоритм следующий: сначала Nmap, используя все свои возможности, определяет
на удаленной машине открытые порты и записывает результат в файл, далее за
работу берется THC-Amap, которому остается проанализировать открытые
порты и вывести результат. На практике это можно сделать примерно так:
#nmap -sS -oM results.nmap -p 1-65535 IP-адрес
#amap -i results.nmap -o results.amap -m
Несмотря на то, что релизов не было долгое время, базы программы по-прежнему
обновляются и доступны на офсайте.
Httprint
Сайт:
www.net-square.com/httprint
Платформа: Linux, MacOS, FreeBSD, Win32
Если привычными средствами распознать ОС на удаленном хосте не получается,
можно попробовать заюзать узкоспециализированные утилиты. Например,
идентифицировать установленный на другой стороне HTTP-сервер и, таким образом,
сделать предположение уже об операционной системе. С такой задачей справится
тулза Httprint.
Немного теории. Когда ты коннектишься к любому сервису, то в ответ получаешь
баннер, по которому теоретически можно определить используемое ПО. Многие
администраторы, однако, намеренно подделывают баннеры с помощью специальных
патчей, модулей (например, mod_security.c) и даже специализированного софта
вроде ServerMask (www.port80software.com),
чтобы сбить с толку хакера.
Однако Httprint этим не проведешь. В своих исследованиях тулза
Httprint опирается на уникальные сигнатуры, которые присущи каждой
конкретной программе-серверу. Причем база программы не ограничивается
сигнатурами для Apache, ISS и прочих известных веб-серверов. В нее также
включены и "отпечатки" демонов, на которых запущены админки роутеров,
ADSL-модемов, точек доступа и других устройств. Если на сервере используется
SSL-соединение, то утилита сама распознает факт использования шифрованного
соединения и продолжит сканирование. А заодно - соберет всевозможную инфу, в том
числе данные по сертификатам и используемым шифрам.
Списки исследуемых серверов можно импортировать из текстового файла или
отчета сканера Nmap. А для увеличения скорости сканирования рекомендуется
работать в несколько потоков. Правда, функция multi-threading реализована пока
только для линуксовой и виндовых версий программы, а во фряхе работать не будет.
Увы, программа давно не обновляется: последний релиз вышел еще в далеком 2005
году. Это влияет не только на актуальность сигнатур в базе, но и на
работоспособность под той же Vista.
NetworkMiner
Сайт:
sourceforge.net/projects/networkminer
Платформа: Windows
Эта утилита уже входила в нашу подборку "Сниферы
и манипуляция пакетами". Еще бы - ведь NetworkMiner является одним из
лучших инструментов для анализа перехваченных данных, сохраненных в формате PCAP.
Программа пассивно анализирует дамп с трафиком, четко определяет участников
обмена сетевыми данными и распознает операционные системы на каждом из хостов. В
качестве данных для анализа выступает размер окна, время жизни пакета, а также
уникальный набор флагов. Помимо операционок, NetworkMiner распознает и
структурировано выдает инфу об открытых сессиях, активных портах, баннерах
различных демонов и вообще об инфраструктуре локальной сети. Не так давно передо
мной стояла задача по анализу дампа с данными, перехваченными в беспроводной
сети (возможность обработки WLAN-трафика появилась в утилите относительно
недавно), и с помощью NetworkMiner я достаточно быстро разобрался, какие
машины работают в локалке, на каких ОС крутятся хосты и даже, какое оборудование
используется в качестве активных свитчей и точек доступа.
Определение ОС основывается на TCP SYN и SYN+ACK пакетах с использованием
базы данных p0f’а и Ettercap. Помимо этого утилита умеет выполнять
fingerprinting на основе DHCP-пакетов, используя базу данных программы Satori.
Само собой, выполняется и идентификация устройств и по MAC-адресу:
соответствующая база позаимствована у Nmap.
ike-scan
Сайт:
www.nta-monitor.com/tools/ikescan
Платформа: Unix, MacOS, Win32
Все, чем занимается эта уникальная в своем роде утилита, - это распознает
факт использования VPN-соединения. Один из самых простых способов распознавания
виртуальных частных сетей основывается на посылке специального IKE-пакета на
каждую машину в сети. Большинство хостов, использующих VPN, отконфигурировано
таким образом, что в ответ на такой пакет отошлют ответ и, тем самым, выдадут
свое присутствие. Подобных методов определения VPN-сети ike-scan -
несколько. Ты скажешь: "При чем тут fingerprinting?". Причина есть. Определив
VPN-серверы, мы можем собрать массу информацию о них. А используя приемы
fingerprinting’а, реализованные в ike-scan, можно определить операционные
системы на машинах, объединенных в виртуальную частную сеть, а в случае
аппаратного решения - производителя девайса.
Xprobe2
Сайт:
xprobe.sourceforge.net
Платформа: Unix
После долгого затишья разработчики взялись за свое детище и выпустили
совершенно новую версию программы. Xprobe2 - это утилита для активного
fingerprinting’а, в арсенале которой как несколько знакомых по Nmap’у алгоритмов
идентификации удаленной ОС, так и ряд уникальных методик, в основе которых лежат
результаты научных исследований Офира Аркина.
Важным нововведением в последних версиях является модуль для обнаружения
honeypot и систем с намеренно модифицированными параметрами стека TCP/IP. Для
обхода ограничений используются алгоритмы нечеткой логики и собственные методики
разработчиков. Помимо этого, в расчет берутся различные параметры поведения
сетевых устройств. Например, pf, входящий в состав OpenBSD известен тем, что
возвращает разные значения в поле TTL, когда за ним находится другая система. В
режиме сканирования TCP-портов (указывается флагом -T) Xprobe пытается
найти и зафильтрованные брандмауэром сервисы. Аналогичным образом производится
проверка UDP-портов, которая активируется флагом -U.
Примечательно, что Xprobe2 изначально реализовывала лишь один метод
fingerprinting’а с помощью ICMP-запросов. Поддержка других механизмов, а также
специальный fuzzing механизм, помогающий идентифицировать неизвестные системы
или хосты с измененными параметрами стека TCP/IP, появились позже. Надо сказать,
что операционную систему, используемую на сервере, Xprobe определяет
довольно-таки точно, а если в процессе появились спорные моменты, то в отчет
войдет также список наиболее вероятных ОС с процентным соотношением вероятности.
Satori
Сайт:
myweb.cableone.net/xnih
Платформа: Windows, Linux
Автор Satori потратил немало времени, разрабатывая приемы для активого
OC fingerprinting’а, пока не осознал, насколько много информации можно получить,
основываясь лишь на пассивном исследовании. В результате на свет появилась тулза,
которая использует драйвер WinPCap, прослушивает сетевой интерфейс и определяет
версии ОС на машинах в локалке, основываясь на обработке перехваченных пакетов.
Satori очень четко определяет версию Windows, устройства производства HP
(использующие HP Swith Protocol), девайсы Cisco (за счет пакетов CDP-протокола).
Немалый вклад в результат, полученный с помощью Satori, дают методы,
основанные на исследовании DHCP. Кстати говоря, на официальном сайте программы
выложены классные статьи, в которых детально раскрываются методы для определения
ОС. Теория подкрепляется практикой. Помимо Satori, на странице
разработчика ты найдешь утилиту SAM, которая использует активное сканирование
для определения удаленной ОС путем отправки ARP-пакетов в сеть.
SinFP
Сайт:
www.gomor.org/bin/view/Sinfp/WebHome
Платформа: Unix, Windows
SinFP представляет собой новый подход к идентификации ОС, когда вместо
исследования системы в целом, прощупываются отдельные сервисы. Тулза
последовательно опрашивает указанные порты и только на основе опроса выдвигает
предположение об установленной на удаленной машине системе. В то время, как Nmap
осуществляет идентификацию всего хоста и может легко быть обведен вокруг пальца
за счет измененных параметров TCP/IP-стека, SinFP использует сигнатурный
анализ по конкретным портам. Прога написана на Perl, причем в случае
необходимости ее можно использовать и в своих проектах, подключив модуль с
одноименным названием. Его легко найти в CPAN:
search.cpan.org/~gomor/Net-SinFP. Приятно, что с недавнего времени SinFP
работает не только под никсами, но еще и под виндой.
WWW
Описание алгоритмов для реализации пассивного fingerprint’а, используемых
утитой p0f -
project.honeynet.org/papers/finger.
Документ по активному ICMP fingerprint -
www.sys-security.com/html/papers.html.
|