
- •Лабораторна робота №5. Сканування tcp/ip мереж за допомогою програми nmap Мета роботи
- •Теоретичні відомості
- •Правові аспекти сканування
- •Методи сканування
- •Tcp connect() (tcp з’єднання)
- •Stealth fin (Приховане fin), Xmas Tree (Різдвяне дерево), Null scan (нульове сканування)
- •Ping-сканування
- •Сканування ip-протоколів
- •Віконне сканування
- •Атака “ftp bounce”
- •Програмне забезпечення для сканування
- •Хід роботи
- •Варіанти завдань
- •Контрольні запитання
Ping-сканування
Іноді ви бажаєте лише дізнатись, які хости в мережі включені. Це можна зробити, відсилаючи ICMP-пакети echo (запит відгуку) до кожної IP-адреси в мережах, які вас цікавлять. Хости, які відповідають, включені. Деякі сайти, як, наприклад, microsoft.com, блокують пакети запиту відгуку. Тоді можна (NMap робить це автоматично) відсилати TCP ACK-пакети на такий порт, який зазвичай відкритий (типово – 80-й, HTTP). Якщо ми отримуємо у відповідь RST, машина включена. Третя методика передбачає відсилання SYN-пакета й очікування 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), то протокол не використовується. Інакше залишається припустити, що він відкритий. На жаль, деякі хости (під керуванням 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-повідомлення “недосяжний”), порт класифікується як "фільтрований", тобто закритий фільтром або міжмережевим екраном. Це сканування очевидно ніколи не буде показувати відкриті порти.