Алгоритми аналізу віддаленої системи, Інтернет і інші мережі, Security & Hack, статті

altsoph

Вступ

Fingerprinting – останні рік-півтора цей термін все частіше можна зустріти
в рясному потоці інформації з мережевої безпеки. Однак далеко
не всі чітко уявляють, що ж, власне, під ним розуміється. За цим
словом ховається досить велика кількість суттєво різнорідних
технологій. Дана стаття ставить своєю метою їх більш-менш докладний
огляд. Викладені в ній методи не претендують на повноту, але, незважаючи на
те, що більша їх частина досить відома, сподіваюся, читач знайде
що-небудь нове для себе.

Загальна інформація

Взагалі, 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 aaa@usa.net
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:dull@turn.ru
250 2.1.0 dull@turn.ru... 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 (www.snort.org).

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, і багато іншого.
Однак, я постарався, щоб текст був зрозумілий і не-спеціалісту (коротко
пояснюючи багато базові поняття). Наскільки це вдалося – судити Вам.

Основна частина статті написана чотири місяці тому, і не відомо, коли б
вона була закінчена, якби я не пошкодив ногу під час стрибка з парашутом і
не опинився на пару днів прикутим до ліжка. Оскільки в загальному-то ніхто
не допомагав мені в написанні цієї статті, я дякую всім, хто мені не заважав.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*