Скачиваний:
116
Добавлен:
23.10.2019
Размер:
300.18 Кб
Скачать

1

Лабораторна робота № 3.

Сканування TCP/IP мереж за допомогою програми NMAP

Мета: вивчення методів сканування TCP/IP мереж на прикладі використання утиліти

NMap.

Теоретичні відомості

Атака на комп’ютерну систему здійснюється здебільшого за таким сценарієм. На першому етапі зловмисник здійснює збирання інформації про мережу, яка є ціллю атаки, як технічними, так і нетехнічними методами. В загальному випадку метою збирання інформації є отримання відомостей про конфігурацію мережі, системне й прикладне програмне забезпечення, що в ній використовується, сервіси, що запущені. Переважна більшість таких відомостей може бути отримана шляхом сканування мережі. Тривалість цього етапу не визначена. В результаті обробки отриманих даних зловмисник або шукає відомі вразливості,

притаманні ПЗ, що використовується, або здійснює самостійні дослідження ПЗ, в залежності від його кваліфікації.

На другому етапі запускається програмний код, що використовує ту або іншу вразливість, так званий «exploit». Цей етап і становить власне сутність атаки. В результаті виконання коду зловмисник або отримує несанкціонований доступ до комп’ютерної системи,

або спричиняє в ній порушення функціонування (аж до краху системи) у випадку атаки на відмову в обслуговуванні. Тривалість цього етапу, як правило, дуже мала, хоча можуть бути й виключення (наприклад, підбір паролів). Джерелом коду, що реалізує атаку, може бути як власна творчість досвідченого хакера, так і величезна кількість сайтів в Інтернет, тобто зловмисник, що реалізує (навіть успішно) атаку, не обов’язково має високу кваліфікацію.

На третьому етапі зловмисник здійснює дії, заради яких він здійснював атаку: читання конфіденційних захищених даних, несанкціонована модифікація, блокування або знищення інформації, тобто реалізуються загрози конфіденційності, цілісності й доступності інформації.

На четвертому (необов’язковому) етапі зловмисник здійснює дії, спрямовані на приховування слідів його перебування в системі. Як правило, вони полягають в редагуванні файлів аудиту операційної системи.

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

Безпосередньо сканування дає інформацію про активні IP-адреси і пов’язані з ними сервіси, а

також про деякі подробиці, які система явно чи неявно повідомляє про себе через мережу

(тобто, або система явно дає відповідь на стандартні чи спеціально сформовані запити визначених протоколів, або її поведінка може бути визначеним чином проінтерпретована).

2

Одним з найпоширеніших і найдоступніших сканерів є NMap (Network Mapping) –

безкоштовне ПЗ для ОС Unix і Linux.

Правові аспекти сканування

Перш, ніж детальніше познайомитись з методами сканування й утилітою NMap,

необхідно з’ясувати правові аспекти здійснення сканування, яке, як ми зазначили вище,

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

автори книги “Атака на Інтернет” – яскраві тому приклади. Однак слід розібратись, що саме може бути метою сканування.

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

друге, сканування може бути актом розвідки, за яким з великою ймовірністю буде здійснено спробу атаки. По-третє, сканування може бути частиною дослідження комп’ютерів і мереж,

яке виконують адміністратори і експерти для перевірки на наявність недокументованих інтерфейсів, так званих люків (“backdoor”), які відкриваються деякими “троянськими конями”, вірусами або мережевими “хробаками” для несанкціонованого віддаленого доступу, в тому числі для надання зловмиснику можливості повного контролю над комп’ютером через мережу. Фактично, третій випадок від другого відрізняється лише тим, як будуть застосовані результати розвідки: для компрометації системи чи для захисту від компрометації.

Таким чином, мережеві сканери дійсно можна вважати не просто інструментом, а

зброєю, наслідки застосування якої залежать від того, в чиїх вона руках і наскільки ці руки вправні. А сканування є ні чим іншим, як застосуванням цієї зброї. Крім того, за несприятливого збігу обставин (мала потужність сервера-цілі, вразливе або неправильно налаштоване ПЗ) саме сканування без цілеспрямованих спроб атаки може стати причиною відмови в обслуговуванні. Тому цілком природно, що реакція системного адміністратора на сканування його машини або мережі, напевно, буде дуже різкою, аж до звернення до правоохоронних органів. Сканування в Інтернет, скоріше за все, закінчиться тим, що провайдер відключить комп’ютер, з якого проводилось сканування, без відшкодування грошей, що залишались на рахунку. Малоймовірно, щоби за одним лише фактом сканування наступила кримінальна відповідальність, однак, якщо слідство буде розпочато за іншим фактом (компрометація системи, викрадення конфіденційної інформації, створення та впровадження шкідливого ПЗ), то наявність в арсеналі підозрюваного мережевого сканера однозначно буде розцінено як доказ (прецеденти вже мали місце в Російській Федерації і обговорювались в російській пресі).

3

Тому суворе застереження, яке слід пам’ятати – якщо ви плануєте здійснити сканування, обов’язково попередьте (або дістаньте згоду, в залежності від наявних у вас повноважень) усіх зацікавлених осіб. В деяких випадках згоду слід отримати у письмовому вигляді.

Методи сканування

Перш, ніж знайомитись з використанням програми NMap, ознайомимось з різними методами сканування, які вона дозволяє здійснювати.

TCP connect() (TCP з’єднання)

Це основний вид TCP сканування. Системний виклик connect(), що забезпечується операційною системою машини, з якої здійснюється сканування, використовується для відкриття з’єднання з кожним з цікавлячих портів на машині, яка є ціллю сканування. Якщо порт слухає, виклик connect() буде успішним, в іншому разі порт недоступний. Велика перевага цього методу для того, хто сканує, полягає в тому, що для цього не потрібні жодні спеціальні привілеї. Будь-який користувач на більшості UNIX-машин вільний використовувати цей системний виклик.

З іншого боку, цей вид сканування легко зафіксувати, оскільки протоколи подій на хості-цілі будуть показувати низку повідомлень про з’єднання і помилки від служб, які здійснюють з’єднання (accept()), що після цього негайно закриваються.

TCP SYN

Цей метод часто називають скануванням “напіввідкривання” ("half-open"), оскільки той, хто сканує, не відкриває повне TCP-з’єднання. Він (вона?) відсилає SYN-пакет (TCP-

пакет з встановленою ознакою SYN), якби він дійсно збирався відкрити з’єднання, і чекає на відповідь. Важливий момент: в першому методі сканування використовувався системний виклик, і ядро системи само брало на себе турботу по формуванню пакетів, що відповідають за встановлення TCP-з’єднання. В цьому методі підхід інший: програма, що використовується для сканування (ми зараз концентруємось на NMap), формує окремий пакет, відсилає його і чекає на відповідь. Відповідь SYN|ACK (TCP-пакет з встановленими ознаками SYN і ACK) вказує, що порт слухає. Відповідь RST – ознака, що порт не слухає.

Якщо надходить SYN|ACK, негайно відправляється RST для знищення з’єднання. Фактично,

це для нас робить ядро нашої ОС, бо для нього цей пакет “несподіваний” – це ж не воно розпочинало з’єднання.

Головна перевага цього методу сканування полягає в тому, що менша кількість вузлів зареєструє його. Але для побудови цих окремих SYN-пакетів необхідні привілеї суперкористувача.

Тут і далі автор програми NMap однозначно на боці тих, хто сканує: переваги методу – це додаткові можливості здійснити сканування, з приводу можливості зафіксувати факт

4

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

Stealth FIN (Приховане FIN), Xmas Tree (Різдвяне дерево), Null scan (нульове

сканування)

Іноді навіть TCP SYN сканування недостатньо приховане. Деякі міжмережеві екрани

(брандмауери) і пакетні фільтри пильнують пакети SYN до портів, що охороняються.

Доступні також програми подібні до Synlogger і Courtney, здатні виявляти такі сканування.

Удосконалені сканування, що розглядаються тут, можуть пройти через згадані перешкоди непоміченими. ().

Спільна ідея цих методів полягає в тому, що закриті порти повинні відповідати на

“незрозумілі” пакети (пакети з несподіваними, неправильними, неприпустимими комбінаціями ознак) RST, в той час коли відкриті порти такі пакети повинні просто ігнорувати (див. RFC 793 pp 64). FIN-сканування використовує в якості зонда “несподівані”

FIN-пакети, сканування “Xmas tree” використовує пакети з ознаками FIN, URG і PUSH,

нульове сканування використовує пакети взагалі без прапорців.

Деякі ОС ігнорують стандарт і відсилають RST від відкритих портів, коли вони мали б просто пропустити (відкинути) пакет. Тому ці типи сканування не будуть працювати проти таких систем. Втішним є те, що це – добрий спосіб розрізнити платформи. Автор NMap в

якості таких ОС називає Windows95/NT, і витрачає немало слів на адресу Microsoft. Однак,

потім сам додає, що є також кілька інших систем, які поводять себе також “неправильно”, як і Windows. До їх числа належать Cisco IOS, BSDI, HP/UX, MVS і IRIX. Тобто, якщо таке сканування знаходить відкриті порти, ви знаєте, що ваша ціль працює не під Windows, а

також не під жодною із щойно згаданих ОС. Якщо ж згадані тут сканування показують, що всі порти закриті, а сканування SYN показує відкриті порти, то ви, ймовірно, скануєте машину або під Windows, або... Однак таке визначення ОС не так вже й корисно, оскільки

Nmap має вбудовані можливості детектування ОС.

Ping-сканування

Іноді ви бажаєте лише дізнатись, які хости в мережі включені. Це можна зробити,

відсилаючи ICMP-пакети echo (запит відгуку) до кожної IP-адреси в мережах, які вас цікавлять. Хости, які відповідають, включені. Деякі сайти, як, наприклад, microsoft.com,

блокують пакети запиту відгуку. Тоді можна (NMap робить це автоматично) відсилати TCP

ACK-пакети на такий порт, який зазвичай відкритий (типово – 80-й, HTTP). Якщо ми отримуємо у відповідь RST, машина включена. Третя методика передбачає відсилання SYN-

5

пакета й очікування RST або SYN/ACK. Для non-root користувачів залишається використовувати метод connect().

UDP-сканування

Цей метод використовується, щоби визначити, які UDP-порти (User Datagram Protocol,

Протокол користувацьких дейтаграмм, RFC 768) відкриті на хості. Методика полягає в тому,

що 0-байтні UDP-пакети відсилають на кожний порт на машині-цілі. Якщо ми у відповідь отримуємо ICMP-повідомлення “порт недосяжний”, то порт закритий. Інакше ми припускаємо, що він відкритий.

Дехто вважає, що UDP-сканування безцільно. Слід нагадати, що UDP в якості транспортного протокола використовується великою кількістю служб, керуючих протоколів,

а також “троянців”. Варто навести низку прикладів. Наприклад, вразливість Solaris Rpcbind.

Можна знайти Rpcbind, який приховується на недокументованому UDP-порту з номером десь більше за 32770. Таким чином те, що порт 111 блокований міжмережевим екраном, не має значення. Але можете ви знайти, на якому з більше ніж 30000 верхніх портів він

(Rpcbind) слухає? З UDP-сканером ви можете! Інший приклад – дуже відома програма-люк

Back Orifice (авторам важко відмовити в дотепності назви!), що ховається на конфігурованому UDP-порту на машинах під Windows. Це типовий “троянець”, і, до речі,

свого часу він був дуже небезпечним. А що вже й казати про безліч зазвичай вразливих сервісів, що використовують UDP, на кшталт SNMP, TFTP, NFS і т.д.

На жаль, UDP-сканування іноді іде дуже повільно, оскільки більшість хостів здійснюють пропозицію RFC 1812 (розділ 4.3.2.8) щодо обмеження швидкості ICMP-

повідомлень про помилки. Наприклад, ядро Linux (в net/ipv4/icmp.h) обмежує генерацію повідомлень “адресат недосяжний” (destination unreachable) до 80 за 4 секунди, із штрафом у

1/4 секунди при перевищенні цієї границі. Solaris має значно більш суворі обмеження

(приблизно 2 повідомлення в секунду), і таким чином вимагає ще більшого часу для сканування (65536 портів / 2 = 32768 сек = 9 годин 6 хвилин). При такій швидкості сканування здається доцільним здійснювати UDP-сканування хостів під керуванням Solaris

безперервно, щоби не занадто пізно помітити впровадженого “троянця”. Microsoft типово проігнорувала пропозицію RFC і, здається, взагалі не робить будь-яких обмежень швидкості на Windows-95 и NT-машинах. Таким чином, можна сканувати всі 64k портів Windows-хоста

дуже швидко. Оце так так!

Сканування IP-протоколів

Цей метод використовується, щоби визначити, які IP-протоколи підтримуються на хості. Методика полягає в тому, що відсилають необроблені (raw) IP-пакети без будь-якого подальшого заголовка протоколу до кожного вказаного протоколу на машині-цілі. Якщо у відповідь надходить ICMP-повідомлення “протокол недосяжний” (protocol unreachable), то

6

протокол не використовується. Інакше залишається припустити, що він відкритий. На жаль,

деякі хости (під керуванням AIX, HP-UX, Digital UNIX) і міжмережеві екрани можуть не відсилати повідомлення “протокол недосяжний”. Це веде до того, що всі протоколи здаються відкритими.

Оскільки задіяна методика дуже подібна до UDP-сканування, границя швидкості ICMP

також могла би діяти. Але поле “IP-протокол” має лише 8 біт, так що треба досліджувати максимум 256 протоколів, а це в будь-якому разі буде можливим за прийнятний час.

Idlescan

Цей удосконалений метод сканування дозволяє дійсно сліпе сканування TCP-портів цілі (це означає, що жодних пакетів не відсилається до цілі з вашої реальної IP-адреси).

Замість того, унікальна атака типу “бічний канал” експлуатує передбачувану генерацію послідовності "ідентифікатор IP-фрагментації" на хості-“зомбі”, щоби зібрати інформацію щодо відкритих портів на цілі. Системи IDS відобразять сканування як таке, що іде з хоста-

зомбі, який ви вкажете (такий хост має бути включеним і задовольняти певним критеріям).

Більш детальне пояснення можна знайти за адресою http://www.insecure.org/nmap/nmap_documentation.html.

Крім надзвичайної прихованості (завдяки його “сліпій” природі), цей тип сканування дозволяє визначити основані на IP відношення довіри між машинами. Список портів показує відкриті порти з точки зору хоста-зомбі. Так що ви можете спробувати сканувати ціль,

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

ACK-сканування

Цей удосконалений метод зазвичай використовується для розкриття набору правил міжмережевого екрана. Зокрема, він може допомогти визначити, чи є міжмережевий екран брандмауером типу “stateful firewall”, чи простим пакетним фільтром, який блокує SYN-

пакети, що надходять.

Цей тип сканування відсилає ACK-пакет (з номерами підтвердження/послідовності, що виглядають випадковими) на вказані порти. Якщо повертається RST, порти класифікуються як закриті безпосередньо на хості ("нефільтровані"). Якщо нічого не повертається (або якщо повертається ICMP-повідомлення “недосяжний”), порт класифікується як "фільтрований",

тобто закритий фільтром або міжмережевим екраном. Це сканування очевидно ніколи не буде показувати відкриті порти.

Віконне сканування

7

Це удосконалене сканування дуже подібне до ACK-сканування, за виключенням того,

що воно може іноді визначати відкриті порти, як і фільтровані/нефільтровані, завдяки аномалії в повідомленні про розміри TCP-вікна деякими операційними системами. Системи,

вразливі до цього, включають щонайменше деякі версії AIX, Amiga, BeOS, BSDI, Cray, Tru64

UNIX, DG/UX, OpenVMS, Digital UNIX, FreeBSD, HP-UX, OS/2, IRIX, MacOS, NetBSD,

OpenBSD, OpenStep, QNX, Rhapsody, SunOS 4.X, Ultrix, VAX і VxWorks. Повний список можна знайти в архіві списку розсилки Nmap-хакерів.

RPC-сканування

Цей метод працює в комбінації з іншими методами сканування портів. Всі знайдені відкриті TCP/UDP порти заповнюються командами NULL SunRPC у намаганні визначити, чи є ці порти RPC-портами, і, якщо це так, яку програму і який номер версії вони обслуговують.

Атака “FTP bounce”

Цікава особливість (“feature”) протоколу FTP (RFC 959) – це підтримка “proxy” FTP-

з’єднань. Іншими словами, користувач повинен мати можливість підключитись з хоста evil.com до FTP-сервера target.com і дати команду, щоби сервер відправив файл будь-куди в

Internet! Можливо, це добре працювало в 1985 р., коли був написаний RFC. Але в теперішньому Internet ми не можемо дозволити наявність людей, що беруть контроль над

FTP серверами і вимагають, щоби дані розповсюджувались у довільні вузли в Internet. Як написав *Hobbit* в 1995 р., ця вада протоколу “може використовуватись, щоби відправляти фактично невідслідковувану пошту й новини, розміщати її на серверах в різних сайтах,

заповнювати диски, намагатись проникати скрізь міжмережеві екрани і взагалі бути дратуючим і важковідслідковуваним одночасно.”

Для чого це можна використати – це (ось несподіванка!) для сканування TCP-портів з

“proxy” FTP-сервера. Таким чином можна підключитись до FTP-сервера за міжмережевим екраном, а потім сканувати порти, які, ймовірно, блоковані екраном (наприклад, 139). Якщо

FTP-сервер дозволяє читання і запис у деякому каталозі (як, наприклад, /incoming), можна відправити довільні дані на порти, яки знайдено відкритими.

Програмне забезпечення для сканування

Найпоширенішим засобом сканування ТСР/ІР мереж (у Unix-подібних системах є програма Nmap, що вільно і безкоштовно розповсюджується. Утиліта використовує інтерфейс командного рядка. Опис синтаксису команди і опцій nmap дивись в довідковій літературі. Детальний опис версії, що встановлена у вашій системі, можна знайти в довідковій системі man (man nmap).

Хід роботи

1.Докладно ознайомтесь з ПЗ Nmap (команда man nmap, команда nmap –h – для *nix,

або Windows).

8

2.Оберіть ціль в межах лабораторії, спочатку в тому ж сегменті, а потім в іншому.

Здійсніть сканування TCP-портів цілі “повним перебором” з використанням connect().

3.Для вказаної викладачем цілі1 здійсніть ідентифікацію її ОС.

4.Налаштуйте і запустіть утиліту TCPdump для фіксації своїх дій.

5.Здійсніть “приховане” (з використанням списку сервісів) сканування методом згідно вказаного викладачем варіанта.

6.Порівняйте результати.

7.Оформіть звіт.

Варіанти завдань

1)Сканування TCP SYN

2)Сканування Stealth FIN

3)Сканування Xmas tree

4)Null-сканування

5)Сканування з використанням FTP

6)Сканування UDP-портів

Контрольні запитання

1)Перелічіть функції (призначення) рівнів стеку протоколів TCP/IP.

2)Призначення протоколів: HTTP(S), DNS, FTP, SMTP, IMAP, POP3, Telnet, LDAP, NetBIOS, SSL, TLS, ASP, SOCKS, TCP, UDP, ICMP, IPv4\v6, IPSec, IPX, PPP, Ethernet.

3)За якими ознаками (якщо аналізувати трафік мережі в реальному часі) можна виявити сканування?

4)Які заходи під час сканування забезпечують непомітність?

5)Які чинники впливають на можливість відмови цілі внаслідок сканування? Як цьому запобігти?

6)За якими ознаками за результатами сканування портів можна визначити операційну систему цілі?

1

При виконанні цієї лабораторної роботи в жодному разі не обирайте для сканування довільну ціль