RSS

Компьютерная терминология    1_9  A  B  C  D  E  F  G  H  I  J  K  L  M  N  O  P  Q  R  S  T  U  V  W  X  Y  Z  .....  A  Б  В  Г  Д  Ж  З  И  К  Л  М  Н  О  П  Р  С  Т  У  Ф  Х  Ц  Ч

Алгоритмы анализа удаленной системы

     
  Бесплатная консультация специалиста
Loading…
 

Вступление

Fingerprinting - последние год-полтора этот термин все чаще можно встретить в обильном потоке информации по сетевой безопасности. Однако далеко не все ясно представляют, что же, собственно, под ним понимается. За этим словом скрывается достаточно большое количество существенно разнородных технологий. Данная статья ставит своей целью их более или менее подробный обзор. Изложенные в ней методы не претендуют на полноту, но, несмотря на то, что большая их часть достаточно известна, надеюсь, читатель обнаружит что-нибудь новое для себя.
Общая информация
 Fingerprints, дословно - отпечатки пальцев. В области сетевой безопасности fingerprint применяется, чтобы узнать, какая операционка крутится на удаленной машине. Системные администраторы снимают fingerprint'ы, например, для анализа подопечного сегмента сети: что у кого и как, кому надо бы обновиться, где оборудование явно слабовато для выбранной системы и т.д. Сканирование удаленных хостов также используется при маркетинговых исследованиях сети: какая система наиболее популярна, какие приложения используются. Зная соотношения используемых систем на рынке, легче подготавливать коммерческий софт, который будет пользоваться большим спросом. Часто результаты массовых сканирований выбрасывают в Сеть для бесплатного обзора - netstat.ru, netcraft.com. Если бы хакеры не занимались fingerprinting'ом, не было бы и вопроса в журнале: взломщики сканят сеть, чтобы выловить машины для последующего взлома! Например, есть эксплоит под sendmail, который пашет на HP-UX, но откажется работать с AIX. Самый ходовой способ вычисления ОС на хосте - снятие баннеров на портах различных сервисов. Например, telnet и ftp обычно выдают их в чистом виде или по набивке команды syst в случае с ftp. Профессиональный и популярный инструмент для определения системы - nmap. Навскидку это строка: nmap -sS -O -oN (SYN scan, fingerprint и лог в файл). Подробнее о проблеме определения ОС на удаленной машине читай на сайте nmap'a
Вообще, fingerprinting - это сбор информации об удаленной системе. Используя ряд инструментов и алгоритмов, мы можем определить операционную систему, серверные приложения (и их версии), тип аппаратного обеспечения и другую, зачастую гораздо более важную, информацию. Традиционно системы сбора информации делятся на активные (active fingerprinting) и пассивные (passive fingerprinting). Первые используют различия откликов разных типов систем на определенные ключевые воздействия. Располагая информацией об этих различиях, исследователь может по типу отклика идентифицировать тип системы. Вторые используют информацию, так сказать, "добровольно" рассылаемую исследоваемой системой, хотя и, вполне возможно, предназначенную не исследующей системе.
Active fingerprinting
Как уже было сказано, данный тип сбора информации основан на непосредственном воздействии на исследуемую систему и анализе ее отклика. Алгоритмы этого типа характеризуются высокой скоростью, достаточной точностью и слабой скрытностью. Т.е. попытка сбора информации может быть довольно легко обнаружена и пресечена исследуемой системой (в том числе автоматически, с использованием, например, соответствующим образом настроенной системы обнаружения вторжений). Одной из старейших техник этого рода является "коллекционирование баннеров". Она заключается в анализе приветствий, выдаваемых стандартными сервисами (ftp, pop3, finger, smtp, telnet). Сюда же относится информация из строк параметров, возвращяемых в ответ на любой http запрос. Такие баннеры, зачастую, содержат в себе информацию об используемом демоне, вплоть до номера версии. Поскольку далеко не все демоны являются абсолютно портируемыми, то это, вдобавок, дает нам возможность делать предположения об используемой операционной системе. Есть две опасности, подстерегающие нас на этом пути. Во- первых, многие демоны позволяют администратору произвольным образом редактировать свои приветствия, то есть существует вероятность (хотя и довольно малая), что демон совсем не тот, за которого он себя выдает. Во-вторых, есть риск, что вообще вся операционная система работает под какой-нибудь средой эмуляции (например VMWare). Это может спутать нам карты, например, когда мы собираемся использовать особенности реализации TCP стека, основываясь на сделанных предположениях. Особенности функционирования указанных сервисов также позволяют получить некоторую дополнительную информацию, используя возможности _протоколов_. Типичным примером может служить команда SYST протокола ftp.
Рассмотрим поподробнее указанные сервисы.
FTP
---
Порт командного соединения - 21. Рассмотрим типичный баннер:

220 megillah.demos.su FTP server (Version wu-2.4(37) Mon Feb 15 16:48:38 MSK 1999) ready.
Он предоставляет информацию о ПО FTP сервера вплоть до версии. Теперь, в предположении, что сервис предоставляет услуги анонимному пользователю, произведем авторизацию и воспользуемся командой SYST. (некоторые демоны позволяют использовать команду SYST, не проходя авторизацию)
В зависимости от демона, нам будет предоставлена более или менее подробная информация об операционной системе. Например:
user ftp
331 Guest login ok, send your complete e-mail address as password.
pass [email protected]
230 Guest login ok, access restrictions apply.
syst
215 UNIX Type: L8 Version: BSD-199506

Дополнительный интерес может представлять, такая, скажем, специфическая информация, как дата создания каталога bin или etc. Обычно она совпадает с датой установки ftp сервиса. Получить ее можно, используя команду ls -la.
230 Guest login ok, access restrictions apply.
ftp> quote syst
215 UNIX Type: L8 Version: BSD-199506
ftp> dir .
200 PORT command successful.
150 Opening ASCII mode data connection for /bin/ls.
total 732
...
d--x--x--x  2 root  root    512 Jan 18 17:30 bin
d--x--x--x  2 root  root    512 Jan 18 17:31 etc
...

Стандарт ftp содержит еще одну потенциальную уязвимость (ей подвержены старые реализации ftp-серверов). Это ftp-bouncing. Данная техника позволяет использовать уязвимый сервер в качестве прокси. Само по себе к сбору информации это отношения не имеет, но позволяет, например, исследовать внутренние хосты, непосредственного доступа к которым нет.

Telnet
------
Порт по умолчанию - 23. Несколько типичных примеров:
>telnet *.*.*.33
FreeBSD/i386 (*.*.ru) (ttyp0)

login:


>telnet *.*.*.65
User Access Verification

Password:


>telnet *.*.*.28
Welcome to SuSE Linux 6.4 (i386) - Kernel 2.4.2 (0).

login:


>telnet *.*.*.178
Red Hat Linux release 6.0
Kernel 2.2.5-15 on an i686
login:


>telnet *.*.*.19
Welocome to NOOS IP Server

Processing mail only - disconnect please

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

SMTP/POP3
---------
Порты - 25/110. Примеры:
>telnet *.*.*.2 25
220 *.*.*.ru ESMTP Sendmail 8.11.2/8.11.2; Thu, 21 Jun 2001 18:34:19 +0400
...

>telnet *.*.*.178 25
220 *.*.*.ru ESMTP Sendmail 8.9.3/8.8.7; Thu, 21 Jun 2001 18:44:38 +0400
...

Помимо обычной процедуры анализа баннеров, протокол SMTP содержит команды, позволяющие определить наличие на машине учетной записи пользователя с заданным позывным. Это команды VRFY, EXPN. Заметим, что при настройке безопасности почтового сервера их часто отключают. По спецификации команда VRFY предназначена для проверки существования пользователя. Команда EXPN предназначена для получения расширенной информации о пользователе (в том числе, его реальной фамилии и имени) и почтовых группах. Наконец, команда MAIL TO: служит для указания адресата при отправлении почты и, довольно часто, сама осуществляет проверку существования пользователя (в случае локального адресата). Рассмотрим типичный сценарий:
vrfy alex
550 alex... User unknown
vrfy root
250 root 
expn alex
550 alex... User unknown
expn root
250 root 
rcpt to:alex
503 5.0.0 Need MAIL before RCPT
mail from:[email protected]
250 2.1.0 [email protected]... Sender ok
rcpt to:alex
550 5.1.1 alex... User unknown
rcpt to:root
250 2.1.5 root... Recipient ok

В более безопасных системах подобные проверки существования заменяются на проверки синтаксической корректности или вообще отключаются. Еще более интересной является техника mail-bouncing-а. Она слабо распространена из-за достаточно большой сложности и малой скорости работы. Смысл техники заключается в анализе заголовков электроных писем, специально составленных и посланных в исследуемую сеть. Так, интерес представляют письма для несуществующих пользователей, поскольку они возвращают уведомления о невозможности доставки (не всегда). В этих уведомлениях содержится некоторая информация о почтовых серверах, участвующих в процессе доставки письма. На основе нескольких таких "бумерангов" можно узнать некоторое число хостов внутренней сети (не имея к ней непосредственного доступа) и топологию почтовых пересылок. Кроме того, почтовый протокол позволяет отправлять письма с явным указанием нескольких промежуточных пунктов пересылки. Это дает возможность создать письмо, которое, проделав заданный маршрут внутри исследуемой сети, вернется к отправителю (все это, конечно, существенно зависит от настроек почтовых серверов).
РОР3 позвоволяет определить тип демона (по баннеру), и, следовательно, зачастую и операционную систему. Он также может использоваться для подбора паролей пользователей. Кроме того, некоторые реализации страдают тем, что, в случае неверного имени пользователя они выдают сообщение об ошибке сразу после ввода пароля, тогда как в случае, если пользователь существует, но пароль неверен, система делает ощутимую паузу перед выдачей сообщения об ошибке (это сделано для замедления подбора паролей). В этом случае также появляется возможность определения существующих в системе пользователей.

FINGER
------
Порт по умолчанию - 79.
Это крайне простой сервис, который, тем не менее, очень часто используется для анализа удаленной системы. Он предназначен для получения информации по конкретному пользователю системы. Существует ряд существенно различных реализаций этой службы. Так finger-сервис на различных роутерах показывает список активных терминалов с указанием подключенных пользователей. Пример:
>telnet *.*.*.253 79
                                                                           18:58
    Line     User      Host(s)                  Idle Location
   2 tty 2   SHAYAKH   Async interface      00:00:00 ROTARY
   3 tty 3   Ruslan_GalAsync interface      00:00:00 ROTARY
   4 tty 4   zgk       Async interface      00:00:58 ROTARY
   5 tty 5   dinnre    Async interface      00:07:01 ROTARY
   6 tty 6   UPAP_4    Async interface      00:01:00 ROTARY
   7 tty 7   murguverciAsync interface      00:01:34 ROTARY
   9 tty 9   shinov99  Async interface      00:00:30 ROTARY
  10 tty 10  novose19  Async interface      00:00:00 ROTARY
  12 tty 12  test_k    Async interface      00:00:02 ROTARY instead int 8
  13 tty 13            Async interface      00:00:02 TO MOTOROLA 6520 instead int 11
* 18 vty 0             idle                 00:00:00 *.*.*.*

Connection to host lost.

На обычных системах типа UN*X эта служба ждет ввода идентификатора пользователя и, в случае его существования, выдает о нем подробную информацию. Пример:
>telnet *.*.*.1 79
root
Login: root                             Name: Petr D. Belkin
Directory: /root                        Shell: /bin/bash
Last login Sat Nov 25 22:42 2000 (SAMT) on tty1
New mail received Sun Jun 10 16:20 2001 (SAMST)
     Unread since Wed Feb  7 12:28 2001 (SAMT)
No Plan.

Connection to host lost.

Как видно из рассмотренного примера, предоставляется информация о реальном имени, фамилии, дате последнего подключения, дате последнего чтения почты и так далее. Кроме того, различные реализации поддерживают разные типы wildcard-ов. Т.е. иногда возможно получить информацию на пользователя, не зная точно его идентификатора, и/или получить список пользователей системы.

HTTP
----
Стандартный порт - 80.
Данный сервис обеспечивает функционирование World Wide Web, отвечая за пересылку документов по запросу. Около двух третей всех веб-серверов сегодня функционируют на програмном обеспечении от Apache (причем Unix-версия распространена значительно сильнее). Практически все остальные веб-сервера работают на IIS 4 или IIS 5 (под WinNT и Win2K). Протокол HTTP версии 1.1, описанный в RFC 2068, предусматривает метод OPTIONS, по которому веб-сервер возвращает развернутую информацию о себе. Например:
OPTIONS * HTTP\1.1

HTTP/1.1 200 OK
Date Wed 20 Jun 2001 17:41:42 GMT
Server: Apache/1.3.19 (Unix) PHP/4.0.5 mod_jk rus/PL30.4
Content-Length: 0
Allow: GET, HEAD, OPTIONS, TRACE
Conection: close

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

SMB (NetBIOS)
-------------
Само по себе, наличие данного сервиса говорит о многом, так как в подавляющем большинстве случаев оно свидетельствует о том, что операционная система принадлежит семейству Windows (исключение составляют Unix системы с установленным сервисом SAMBA). Используя уязвимость настроек по умолчанию, исследователь удаленной системы может получить список разделяемых ресурсов, а в случае WinNT/2K и список пользователей с подробной информацией о каждом, и, зачастую, удаленный доступ к реестру. В описание пользователя в том числе входят его login name, полное имя, принадлежность к группам, дата последней смены пароля. Также, может быть получена другая информация, касающаяся настроек домена. Сегодня существует уже много утилит, позволяющих получить такую информацию. Наиболее древняя из них - ntis by David Litchfield нашла свое развитие в программе cis, а самой, на мой взгляд, популярной на сегодняшний день является система winfingerprint (http://www.technotronic.com/winfingerprint/).
Рассмотрим однако, что можно сделать, обходясь лишь стандартным инструментарием WinNT/2K.
E:\>net time \\*.*.*.197
System error 5 has occurred.
Access is denied.

E:\>net use \\*.*.*.197\IPC$ "" /U:""
The command completed successfully.

E:\>net time \\*.*.*.197
Current time at \\*.*.*.197 is 6/21/2001 7:00 PM
The command completed successfully.

E:\>at \\*.*.*.197
Access is denied.

E:\>net view \\*.*.*.197
Shared resources at \\*.*.*.197

Share name   Type         Used as  Comment
-------------------------------------------------------------------------------
Drive C      Disk                  Windows
Drive D      Disk                  FreeBSD
Drive E      Disk                  i2000
The command completed successfully.

E:\>net use \\*.*.*.197\IPC$ /del
\\*.*.*.197\IPC$ was deleted successfully.

Аналогичные операции можно осуществить и из системы Unix, используя утилиту smbclient.
Кроме того утилита nbtstat (или nmblookup под Unix) позволяет получить список зарегистрированных на машине NetBIOS имен (с типами). Среди них содержатся - имя домена, имя машины в домене, имя текущего активного пользователя. Более того, анализ этих имен позволяет определить роль машины в домене (PDC, BDC, Master Browser). Ниже приведена небольшая выдержка из таблицы типов NetBIOS имен.
       0x00    base computernames and workgroups, also in "*" queries
        0x01    master browser, in magic __MSBROWSE__ cookie
        0x03    messaging/alerter service; name of logged-in user
        0x20    resource-sharing "server service" name
        0x1B    domain master-browser name
        0x1C    domain controller name
        0x1E    domain/workgroup master browser election announcement [?]

Другой техникой является исследование особенностей сетевого интерфейса. Начнем с того, что, если мы используем стелс техники сканирования портов, у нас обычно нет никакой возможности "коллекционировать баннеры". Тем не менее, уже список открытых портов может сказать довольно многое.
Рассмотрим типичные паттерны:
Более точное определение операционной системы можно провести с использованием параметров TCP/IP пакетов. Самой лучшей на сегодняшний день утилитой подобного плана является nmap by Feodor (www.insecure.org). Там же можно подробнее почитать об используемых алгоритмах. Мы же остановимся на параметре TTL, поскольку он доступен без дополнительных инструментов (через утилиту ping). TTL (TimeToLive) - это время жизни пакета. При отправке оно устанавливается в некоторое стандартное значение (разное для различных операционных систем), а затем, при прохождении каждого промежуточного пункта уменьшается на 1. Если оно достигает нуля, пакет отбрасывается, как слишком старый. Пакеты, дошедшие до нас, содержат TTL равный начальному минус расстояние до исследоваемого хоста в hop-ах (промежуточных хостах). При необходимости, это расстояние можно узнать, используя стандартную утилиту traceroute (tracert под Windows). Однако оно обычно не превышает 10-20 hop-ов, что позволяет однозначно распознать исходное значение.
Полученная информация, вкупе с информацией об открытых портах дает представление об используемой операционной системе.

TCP-timestamping
----------------
Используя опцию TCP протокола tcp-timestamping и знание операционной системы, часто можно определить uptime системы (время последнего включения). При использовании этой опции мы принуждаем систему оставить свой временной штамп. Штамп, по спецификации, должен со временем увеличиваться, однако не оговаривается как именно. Практически во всех системах (кроме Windows систем) отсчет штампа начинается с нуля в момент загрузки операционной системы. Но скорость наращивания зависит от платформы (от 1 в сек до 1000 в сек). Для решения этой проблемы мы можем воспользоваться знанием об используемой операционной системе или сделать несколько проб через, скажем, 1 секунду, и на основе полученной информации вычислить скорость приращения.

ICMP Time/Mask
--------------
Internet Control Message Protocol описывает ряд контрольных сообщений и способы реагирования на них, оставляя, однако, некотрую свободу в реализации ICMP на различных ОС. В числе прочих существуют сообщения ICMP Time Request (хост может ответить на него сообщением своего локального времени) и ICMP Mask Request (по спецификации ответить на него может только маршрутизатор).
Рассмотрим следующую таблицу:
ОС               Отвечает на ICMP Time           Отввечает на ICMP Mask

Windows                 нет                             да
FreeBSD                 да                              нет
Linux 1.x               да                              да
Linux 2.x               да                              нет
SunOS                   да                              да
Solaris                 да                              да
HPUX                    да                              да
IRIX                    да                              ?
Используя эту информацию вкупе с некотороми другими методами, можно попытаться определить ОС удаленной машины.

DNS
---
Стандартный порт - UDP 53. Изначально служба использовалась для установления соответствия меджу сетевым именем и ip-адресом хоста. Часто таблицы соответствий содержат также дополнительную информацию о хосте. В состав операционных систем UN*X, WinNT, Win2K входит стандартная утилита nslookup, являющаяся клиентом этой службы. Подсоединившись к удаленному ns-серверу, мы можем затребовать у него информацию по хосту, принадлежащему его зоне:
E:\FP-art>nslookup
Default Server:  *.ru
Address:  *.*.*.226

> www.iso.ru
Server:  *.ru
Address:  *.*.*.226

Name:    www.iso.ru
Address:  195.146.82.43

> set querytype=ALL
> www.iso.ru
Server:  *.ru
Address:  *.*.*.226

Non-authoritative answer:
www.iso.ru      internet address = 195.146.82.43

iso.ru  nameserver = exchange.iso.ru
iso.ru  nameserver = home.relline.ru
iso.ru  nameserver = ns.relline.ru
exchange.iso.ru internet address = 195.146.66.195
home.relline.ru internet address = 195.146.64.42
ns.relline.ru   internet address = 195.146.81.130

Более того, если ns-сервер настроен не совсем корректно (на сегодняшний день около 50% серверов являются таковыми), мы можем затребовать у него полный список всех хостов зоны вместе со всей связанной с ними информацией.
> server ns.relline.ru
Default Server:  ns.relline.ru
Address:  195.146.81.130

> ls -d iso.ru
[ns.relline.ru]
 iso.ru.                        SOA    exchange.iso.ru admins.iso.ru. (1999121558 28800 7200 604800 86400)
 iso.ru.                        NS     exchange.iso.ru
 iso.ru.                        NS     home.relline.ru
 iso.ru.                        NS     ns.relline.ru
 iso.ru.                        MX     40   relay1.macomnet.ru
 iso.ru.                        MX     50   relay2.macomnet.ru
 iso.ru.                        MX     10   exchange.iso.ru
 demoserver                     A      195.146.66.200
 admin                          A      195.146.66.198
 www                            A      195.146.82.43
 exchange                       A      195.146.66.195
 ebs                            A      195.146.66.197
 iso.ru.                        SOA    exchange.iso.ru admins.iso.ru. (1999121558 28800 7200 604800 86400)

Если это удалось, то, во-первых, мы получили список хостов сети, во-вторых, на основе MX-записей (почтовых) мы можем определить основной и вторичный почтовые сервера и маршруты хождения почты (частично).
Получив некоторым образом список хостов сети, мы хотели бы вычислить ее физическую топологию. Это не всегда возможно, однако есть несколько довольно широко используемых тактик.

Traceroute
-----------
Утилита (ее версия под Win называется tracert) предназначена для определения маршрута пакета, посланного к заданному хосту. Ее работа основывается все на том же параметре TTL. В начале TTL выставляется в 1. Тогда первый же маршрутизатор, получивший его, обязан по спецификации его уничтожить. При этом он обычно (однако это не является требованием спецификации) посылает обратно уведомление - "у меня умер пакет, идущий от А к Б". Так мы получаем первый пункт маршрута. Затем устанавливаем TTL в 2. И так далее. Если мы теперь построим маршруты к каждому известному нам хосту подсети, а затем объединим их в граф (обычно дерево), то мы будем иметь некоторое представление о топологии подсети. Если, к тому же, подсеть имеет несколько шлюзов со внешней сетью, то построение такого же дерева из другой начальной точки (точнее такой, чтобы вход в подсеть происходил через другой шлюз) может дать нам дополнительную информацию о ее топологии. Помощь в такого рода исследованиях может оказать служба (http://www.tracert.com/cgi-bin/trace.pl)

Louse route
------------
Эта опция IP протокола позволяет при отсылке пакета указать основные вехи его маршрута, никак не оговаривая то, как он будет передаваться между ними. В сочетании с опцией Timestamping, она дает возможность запустить пакет в исследуемую подсеть, заставить его там "поболтаться", а затем вернуться, собирая по пути информацию о всех пройденных пунктах маршрута. (Все это, конечно, может быть блокированно корректно настроенным firewall-ом.) На основе нескольких таких "трасс" возможно опять-таки построить некоторый граф подсети, не говоря уже об обнаружении новых, ранее не замеченых хостов.

SNMP
----
Simple Network Managment Protocol был разработан для предоставления возможности удаленного управления сетевыми устройствами, в том числе маршрутизаторами. SNMP-агенты (то есть серверные приложения) входят сегодня в состав многих маршрутизаторов, свитчей и тому подобных устройств, кроме того, в ОС WinNT и Win2K имеется встроеный SNMP-Agent, реализованный в виде сервиса (по умолчанию он выключен). Вторая версия данного протокола предусматривает достаточно надежную аутентификацию, однако она пока почти нигде не используется. В первой же версии происходит только проверка так называемой community-string (посылаемой в plain-text виде по UDP). Стандартными значениями community-string являются "public" и "private", и они, в большинстве случаев, не меняются администраторами. Наиболее простым клиентом к SNMP службе является пакет утилит snmputils под Unix, в состав которого входит snmpwalk, позволяющий получить большое количество интересной информации. Так, в случае WinNT/Win2K, мы можем получить список запущенных процессов (с приоритетами и информацией о занимаемой памяти и процессорном времени), список установленного софта с указанием версий (тот, что появляется в меню Start->Control Panel->Add/Remove Programs), список установленного оборудования и всю текущую информацию о маршрутизации. Более того, есть возможность таким образом изменить настройки маршрутизации, чтобы пустить весь траффик по маршруту, где исследователь сможет подвергнуть его анализу.

Passive fingerprinting


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

Метод анализа проходящих пакетов
--------------------------------
В сигнатуру пакета, на основе которой предпологается производить определение ОС входят следующие поля:
При применении данного метода следует использовать статистический подход - накапливать информацию, относящуюся к одному соединению, а затем определять по заранее составленным таблицам наиболее вероятную ОС.
Анализ проходящего трафика на менее глубоком уровне также может дать некоторую информацию - например какими сервисами каких удаленных систем пользуется система, относительно которой производится сбор информации. Удобным в установке и настройке сниффером (инструментом для анализа проходящих пакетов) является snort.

Application level passive fingerprinting

Другим подходом к пассивному анализу удаленной системы является анализ информации уровня приложений. Он может осуществляться как на основе анализа проходящего траффика (как в предыдущем методе), так и на основе анализа информации, получаемой серверными приложениями исследующей системы от различных удаленных клиентов. Примером последнего метода могут послужить decoy server-ы - способ определения атак на систему путем подмены обычных серверных приложений (таких, как ftp, http, smtp, pop3 сервера) на приложения, выполняющие их функции и попутно регистрирующие нетипичную деятельность клиента.
Рассмотрим, какую информацию об удаленной системе можно получить, анализируя взаимодействие ее клиентского програмного обеспечения с серверным.

Ping-payload

Принцип работы утилиты ping основан на посылке ICMP пакета ICMP-Echo, содержащего произвольные данные, на который хост-адресат отвечает пакетом ICMP-Echo-Reply, содержащим те же самые данные. Время между отправкой ping-пакета и получением ответа на него и является временем отклика удаленной системы. С точки зрения пассивного анализа, интерес представляет способ генерации, данных заполняющих пакет. Различные операционные системы используют различное наполнение. Так, в случае Win2K, содержимое пакета будут составлять строчные символы латинского алфавита ("abcde...xyzabcd..."), а в случае RedHat 6.1 в содержимом будут и цифры, и специальные символы. Эти отличия позволяют попытаться распознать операционную систему ping-ующего хоста.

HTTP

Данный протокол позволяет серверу получить некоторую информацию о клиентской машине, основываясь, главным образом, на составе и порядке header-ов в запросе (несущих вспомогательную информацию). Так, например, заголовок User-Agent: содержит информацию об используемом браузере, а зачастую, и о клиентской операционной системе.
Более подробную информацию о клиенте (которым, собственно, является браузер) сервер может получить, отослав клиенту html-документ, содержащий специальный javascript-код, определяющий необходимые серверу параметры и возвращающий их серверу, используя, например, механизм CGI. На этом основывается работа многочисленных баннерных сетей и счетчиков. Хорошим примером подобного javascript-кода может служить счетчик spylog-а. Однако подобная техника не может считаться полностью пассивной, так как может быть опознана на клиентской стороне.

FTP

Несмотря на кажущуюся простоту, и этот протокол позволяет серверу достаточно точно определить клиентское программное обеспечение. При успешном соединении клиент в начале ftp-сессии подает некоторые из следующих команд: AUTH, USER, PASS, PWD, PORT, SYST, EPSV, PASV, LIST, CWD. То, какие именно команды и в каком порядке он подает, позволяет уверено различать многих клиентов:

Telnet
------
Протокол telnet предписывает обмен определенными параметрами между серверной и клиентской сторонами при установке соединения. Различные реализации имеют различные наборы параметров и их порядок в наборах, что позволяет определить клиентское програмное обеспечение.

SMTP/POP3/NNTP
--------------
Служебные заголовки сообщений электронной почты дают обильную информацию об источнике и процессе пересылки письма. Анализируя их, исследователь может получить список хостов внутри сети исследуемой системы, участвующих в процессе пересылки почты, и сделать некоторые предположения относительно правил маршрутизации почты в исследуемой подсети. В заголовках всегда фигурирует ip или hostname источника письма. Рассмотрение таких полей, как Message-ID, X-Mailer, User-Agent дает возможность определить клиентское программное обеспечение, использованное при написании и отсылке письма (вплоть до номера версии) и, часто, операционную систему клиента. Например:
 Message-ID:                (это Linux, Pine v4.10)

 X-Mailer: QUALCOMM Windows Eudora Version 4.3.2

 X-Mailer: Microsoft Outlook Express 5.00.3018.1300

Аналогичную информацию можно получить, анализируя заголовки новостных сообщений (NNTP). Здесь наиболее выразительными являются User-Agent, X-Http-User-Agent, X-Mailer, Message-ID, X-Newsreader, X-Operating-System.

Заключение

==========
Кому же и зачем нужны подобные алгоритмы? Сегодня спектр их применения весьма широк:
В любом случае знание и понимание подобных механизмов может пригодиться читателю, как при повседневной деятельности в сети, так и в чрезвычайных ситуациях.
Начиная написание данной статьи, я и не подозревал, что объем разнородной информации на эту тему столь велик (хватило бы на небольшую книгу 8-). Поэтому, к сожалению, многие вещи пришлось выкинуть (было убрано большое число примеров и ссылок, в конце концов, это же не учебник 8-Р ). За бортом остались такие темы, как анализ и спуффинг протоколов маршрутизации (RIP, OSPF), анализ таких Windows-специфичных сервисов, как WINS, и многое другое. Однако, я постарался, чтобы текст был понятен и не-специалисту (кратко объясняя многие базовые понятия). Насколько это удалось - судить Вам. Основная часть статьи написана четыре месяца назад, и неизвестно, когда бы она была закончена, если бы я не повредил ногу во время прыжка с парашютом и не оказался на пару дней прикованным к кровати. Поскольку в общем-то никто не помогал мне в написании данной статьи, я благодарю всех, кто мне не мешал.

10.06.2004  Читаешь вечерком bugtraq и расстраиваешься. SSL timing attack, races in linux kernel. Тьфу, глупо всё это, от лукавого. Негоже сетевику порядочному таким безобразием заниматься. Хотя вам, молодым, оно конечно приятно и весело, качнул эксплойт, вот тебе r00t на халяву. Оно, конечно, эффектно, да только это пропатчат и забудут. 
Но есть вещи, которые будут живы, покуда TCP/IP стоит и ping’и ходят. Какие? А тот же ping. Вот пинганите друг друга. Чего морды скусили? Какой nc?! Отставить nmap! Пингом, пингом! Самым простым. У всех получилось? Ну и что мы можем сказать по этому поводу? Ну? Давай Билли. Правильно, используя пинг мы можем удостовериться, что хост с таким IP с сети есть и, стало быть, с ним можно что-то нехорошее сделать. А что ещё? Ничего? Ну-ка, покажи как пингуешь? А –t тебе зачем? Что бы как в Linux? Ты же кричишь, что пингвины маздай? Эхх, молодежь!
Погоди, ты же даже сниффер не запустил? А чего ж ты хотел тогда от пинга получить, дурка? Ну-ка стартуй netmon. Ну или Iris, кой черт. Это и ко всем остальным бездельникам относится. Snort, так snort, хоть из /dev/eth0 читай, мне все равно, главное что бы пакетики были. А вот теперь и пингуйте друг дружку. Ну и что теперь мы видим? Ответы-то от всех разные пришли! Вон смотри - поле TTL от Торвальдса тебе какое пришло? Правильно, TTL 64. А от Маньки на маздайке какое, 128? Вон Рыжика пингани с его соляркой. Сколько? 255? То–то и оно. А теперь, кто быстрее мне скажет, чем ещё эти пинги отличаются? Что, Маня? Правильно, буквочки внутри разные. Винда всё больше алфавит в запрос вставляет, а Unix цифры-слэши по большей части. Пинганули тебя, а ты по этим буквочкам уже и знаешь, с какой оси тебе пинг сотворили. Подробнее узнать хотите? Дык в гугле passive fingerprint наберите, и читайте на здоровье. Мы с вами всего пингануть успели, а гляди - уже почти выяснили, что за ось на машине удаленной стоит. Тем то и хорош ping, ты просто пакет посылаешь, а тебе машинка далекая сама ответ формирует и отсылает. А уж чего она туда напишет, от неё зависит. 
Думаете это всё, на что ping способен? Далеко не все. Манька, заходи на Апач к Торвальдсу, а ты Билли, его пропингуй. Ну как ты пингуешь, а? Пиши ping -l 1 –t x.x.x.x. Iris свой стартовал? Вот так. И что мы видим? Где-где, в ответах от Торвальдса! Видишь, вон чистый http трафик. Какой, какой! Тот, который Манька сейчас смотрит!!! А оттуда, что у некоторых драйверописателей ручки кривые. Забыли ребята, что у Ethernet минимальные размер данных 46 байт. Вот ты посылаешь пинг, заголовок IP – 20 байт, плюс 8 байт заголовка ICMP, плюс 1 символ данных, который ты указал. Возвращается тебе тоже ICMP пакет с теми же данными, что и ты отослал. Т.е. 29 байт. Понятно, что заголовки твои и байт данных, а остальные 17 от куда брать? Некоторые умные драйверы их нулями или 0x20 забивают, а некоторые, RealTec к примеру, про такое не думают, и спокойно «добивают» пакет своим буфером. И ты спокойно можешь посмотреть, что до тебя эта сетевая передавала. И через коммутатор, и через VLAN. Нет, Билли, через роутер не пройдет, ему заполнитель уже драйвер, который на роутере формировать будет. Всего-то делов, сиди и пингуй.
Хотел вам ещё рассказать о том, как DDoS пингом делать, о том, почему не всегда его на файрволах убивать можно, да не досуг. Расскажу я вам лучше страшную сказку о Ping of Death. Так вот, если в черном-черном шеле настучать на черных-черных клавишах черные-черные буквы ping –l 655…  Что от него только Windows 3.11 валится, а что это такое ты не знаешь?

Какие ключи есть у команды PING?

PING используется для проверки TCP/IP связи с другим хостом и дает информацию о времени, потребовавшемуся тестирующему пакету данных, чтобы достигнуть хоста и вернуться обратно.

Основное применение следующее:

C:\>ping <IP адрес или имя хоста>

Pinging 160.82.52.11 with 32 bytes of data:

Reply from 160.82.52.11: bytes=32 time=10ms TTL=252
Reply from 160.82.52.11: bytes=32 time<10ms TTL=252
Reply from 160.82.52.11: bytes=32 time<10ms TTL=252
Reply from 160.82.52.11: bytes=32 time<10ms TTL=252

Из чего видно, что 32 байта посылалось хосту 160.82.52.11 и полученное время ответа - 10 и менее миллисекунд, что говорит о хорошей связи.

PING имеет несколько опциональных параметров для достижения определенных целей.

ping [-t] [-a] [-n count] [-l size] [-f] [-i TTL] [-v TOS] [-r count] [-s count] [[-j host-list] | [-k host-list]] [-w timeout] destination-list



-t Пинговать указанный хост до прерывания.
-a Разрешать адреса в имена хостов.
-n count Число посылаемых эхо-запросов.
-l size Размер буфера посылки.
-f Установит в пакете флаг "Не Фрагментировать".
-i TTL Время жизни.
-v TOS Тип Сервиса.
-r count Подсчитывать шлюзы для контроля числа переходов.
-s count Метка времени для счета переходов.
-j host-list Loose source route along host-list.
-k host-list Strict source route along host-list.
-w timeout Таймаут ожидания каждого ответа (в миллисекундах).

В Windows 2000 Вы можете нажать Ctrl-Break при запуске с -t ключом для получения листа статистики. Нажмите Ctrl-C для немедленного прекращения ping.
Полезно иметь небольшой batch-файл, пингующий различные хосты и терминальные серверы через регулярные промежутки времени, чтобы убедиться, что все они по прежнему доступны (хотя многие коммерческие продукты делают это). Простая команда типа:
C:\>ping -f -n 1 -l 1 148.32.43.23
Pinging 148.32.43.23 with 1 bytes of data:
Reply from 148.32.43.23: bytes=1 time<10ms TTL=128
пингует хост один раз одним байтом данных.
Нужно заметить, что PING работает, посылая ICMP эхо-пакеты. Некоторые маршрутизаторы могут отфильтровывать их, что означает, что PING работать не будет.

seo & website usability   inet   html   os faq   hardware faq   memory   video   cpu   hdd   mainboard faq   printer & scaner   modem   mobiles

po gonn © 2005 "JULI'S BEEHIVE"