1.1 Мета даної статті — допомогти аналітикам IDS і адміністраторів, що займаються настройкою firewall’ів, ідентифікувати nmap і queso сканування. Це не розгорнутий аналіз, а приклад методики орієнтований на адміністраторів систем, яким необхідно більш глибоке розуміння роботи цих сканерів для боротьби з ними. 1.2 Вступ Сканер портів — утиліта використовується як адміністраторами систем, так і атакуючими ці системи з метою ідентифікації вразливостей. Шляхом посилки спеціальним чином згенерованих пакетів і аналізу відповідей досліджуваних систем. 1.3 Nmap і Queso 1.3.1 Nmap Nmap — вільно поширюваний сканер портів, розроблений і підтримуваний Fyodor’ом. Він портований на багато ОС (Linux, FreeBSD, Open BSD, Solaris і навіть NT) і, ймовірно, є найпоширенішим безкоштовним сканером. Внаслідок своєї простоти у використанні він може використовуватися як новачків, так і експертом. Тому виникає справедливе питання, як фахівці з IDS і Firewall’ам можуть ідентифікувати nmap сканування. Це не є простим завданням. Nmap володіє безліччю опциий налаштування сканування (їх повний опис виходить за рамки даної статті). Ми розглянемо тільки деякі з них: sS This switch performs a SYN scan. sX This switch performs XMAS scan. sF This switch performs a Fin scan. O This switch performs Operating System detection.Тут наведено лог сканування з опцією -sS разом з відповідною сигнатурою, яку залишає nmap. 12:19:04.981033 attacker.com > victim.com: icmp: echo request (ttl 40, id 28524) 4500 001c 6f6c 0000 2801 2573 xxxx xxxx xxxx xxxx 0800 e152 16ad 000012:19:04.981207 victim.com > attacker.com: icmp: echo reply (ttl 255, id 0) 4500 001c 0000 0000 ff01 bdde xxxx xxxx xxxx xxxx 0000 e952 16ad 000012:19:04.981574 attacker.com.58397 > victim.com.www: ack 0 win 3072 (ttl 54, id 47895) 4500 0028 bb17 0000 3606 cbb6 xxxx xxxx xxxx xxxx e41d 0050 5720 0003 0000 0000 5010 0c00 6a41 000012:19:04.981687 victim.com.www > attacker.com.58397: R 0:0(0) win 0 (ttl 255, id 1) 4500 0028 0001 0000 ff06 bdcc xxxx xxxx xxxx xxxx 0050 e41d 0000 0000 0000 0000 5004 0000 cd70 000012:19:05.065741 attacker.com.58377 > victim.com.1531: S 1899041970:1899041970(0) win 3072 (ttl 54, id 22525) 4500 0028 57fd 0000 3606 2ed1 xxxx xxxx xxxx xxxx e409 05fb 7131 14b2 0000 0000 5002 0c00 35f8 000012:19:05.065924 victim.com.1531 > attacker.com.58377: R 0:0(0) ack 1899041971 win 0 (ttl 255, id 2) 4500 0028 0002 0000 ff06 bdcb xxxx xxxx xxxx xxxx 05fb e409 0000 0000 7131 14b3 5014 0000 41e5 000012:19:05.066228 attacker.com.58377 > victim.com.522: S 1899041970:1899041970(0) win 3072 (ttl 54, id 45591) 4500 0028 b217 0000 3606 d4b6 xxxx xxxx xxxx xxxx e409 020a 7131 14b2 0000 0000 5002 0c00 39e9 0000Разберем кілька загальних сигнатур. Спочатку nmap пінг жертву echo пакетом (виділено зеленим), щоб переконатися, що хост живий. Наступна синнатура — самотній ACK-пакет, в якому 32-bit значення поля ACK дорівнює 0 (виділено червоним). В той час, як значення поля ACK завжди повинно бути завжди > 1, коли надсилається ACK-пакет. Навіщо це зроблено? Причина для такої установки значення поля ACK проста -«stealth». Чому nmap пошле в будь-якому випадку два ACK пакету? RFC 793 допоможе пролити світло на це питання. RFC 793 pp.64 описує те, як TCP/IP стек реагує на специфічні пакети.Ця реакція заснована на двох станах — Closed і Listen. Коли порт знаходиться в стані Closed, працюють наступні правила: вхідні пакети з встановленим RST прапором відкидаються. відповіддю на пакет з невстановленим RST прапором (тобто SYN,FIN і ACK-пакети) буде RST пакет Коли порт знаходиться в стані Listen, працюють наступні правила: вхідні пакети з встановленим RST прапором відкидаються. відповіддю на пакет з невстановленим RST прапором (тобто SYN,FIN і ACK-пакети) буде RST пакет Якщо встановлений біт SYN, то якщо встановлення з’єднання заборонено, то відсилається RST-пакет. інакше у відповідь надсилається SYN|ACK (друга частина 3-х крокового handshake) Тепер, знаючи це, можна укласти, що два ACK пакету надсилаються для перевірки на те, що сканований хост живий. Інша спільна риса nmap — використання високих значень для порту-джерела.Зазвичай nmap використовує в якості джерела порти вище 20000(це може бути змінено опцією -p).Причина використання таких значень портів в тому, що деякі IDS і firewall не розглядають вхідні пакети з цих портів як спроби сканування.У більшості випадках великі значення портів джерела вказують адміністраторам IDS і firewall на те, що їх сканують. sS — перша опція, яку ми розглянемо. Nmap c виставленої -sS відсилає пакет SYN(и) і чекає відповіді. Відповідь може бути або SYN|ACK, якщо порт відкритий, або RST|ACK в іншому випадку. Цей спосіб сканування називається «half-scan». Таким чином визначається стан порту(закритий або відкритий). Якщо nmap надсилає пакет на відкритий порт, то відповіддю буде SYN|ACK.Як тільки це стає так, nmap відразу відповідає RST пакетом, який обриває з’єднання і в деяких випадках в логи на сканируемом хості нічого не пишеться. Опція -sX включає інший метод сканування — Xmas tree.Наслідком незвичайної встановлення прапорів (FIN,PSH,URG -одночасно) є те, що деякі погано настроєний firewall’и пропускають такі пакети. Що ж відбувається дивного, якщо прапори FIN,PSH і URG встановлені одночасно? Подивимося, що робить кожен прапор. FIN — вказівка на те, що посилає хост пр
ипиняє передачу даних. PHS — хост-одержувач повинен передати дані, що містяться в пакеті, з додатком як можна швидше. URG — включає покажчик на те, що дані — термінові, «вказує сам собі, що термінові дані у вигляді деякої були поміщені в потік даних». 12:07:47.251547 attacker.com > victim.com: icmp: echo request (ttl 52, id 57064) 4500 001c dee8 0000 3401 a9f6 xxxx xxxx xxxx xxxx 0800 98d3 5f2c 000012:07:47.251720 victim.com > attacker.com: icmp: echo reply (ttl 255, id 2136) 4500 001c 0858 0000 ff01 b586 xxxx xxxx xxxx xxxx 0000 a0d3 5f2c 000012:07:47.252111 attacker.com.40335 > attacker.com.www:. ack 0 win 2048 (ttl 53, id 1254) 4500 0028 04e6 0000 3506 82e8 xxxx xxxx xxxx xxxx 9d8f 0050 1b98 0003 0000 0000 5010 0800 f057 000012:07:47.252225 victim.com.www > attacker.com.40335: R 0:0(0) win 0 (ttl 255, id 2137) 4500 0028 0859 0000 ff06 b574 xxxx xxxx 7f00 0001 0050 9d8f 0000 0000 0000 0000 5004 0000 13ff 000012:07:47.336218 attacker.com.40315 > victim.com.824: FP 0:0(0) win 2048 urg 0 (ttl 53, id 43059) 4500 0028 a833 0000 3506 df9a xxxx xxxx xxxx xxxx 9d7b 0338 0000 0000 0000 0000 5029 0800 0906 000012:07:47.336392 victim.com.824 > attacker.com.40315: R 0:0(0) ack 0 win 0 (ttl 255, id 2138) 4500 0028 085a 0000 ff06 b573 xxxx xxxx xxxx xxxx 0338 9d7b 0000 0000 0000 0000 5014 0000 111b 0000Коротко, комбінація FIN,PSH,URG каже, що треба розірвати з’єднання, переслати дані в пакеті як можна швидше і помістити їх в звичайний потік даних. З мого досвіду це, як правило, не має сенсу (поки ви не намагаєтеся сканувати мережі).Таким чином наступна сигнатура nmap (при використанні опції Xmas) — urgent pointer завжди встановлено в 0(виділено синім). Нарешті, подивимося на опцію -sF у парі з -O. Опція -sF сканує хост з пакетами з встановленим прапором FIN.-O — знаменита опція ОС fingerprinting. Перед компіляцією бінарника nmap подивіться на файл figerprinting. Це вражаюча колекція TCP/IP сигнатур ОС, яка дійсно здивувала мене. Наведений нижче лог демонструє -sF сканування додатково з опцією -O: 11:00:09.360631 attacker.com.49044 > victim.com.219: F 0:0(0) win 4096 (ttl 59, id 45102)11:00:09.361056 attacker.com.49044 > victim.com.48: F 0:0(0) win 4096 (ttl 59, id 30876)11:00:12.820777 attacker.com.49051 > victim.com.sunrpc: S 561959278:561959278(0) win 4096 (ttl 59, id 11173)11:00:12.821526 victim.com.sunrpc > attacker.com.49051: S 2988831197:2988831197(0) ack561959279 win 16165 (DF) (ttl 64, id 3059)11:00:12.821923 attacker.com.49052 > victim.com.sunrpc: . win 4096 (ttl 59, id 25812)11:00:12.822090 attacker.com.49053 > victim.com.sunrpc: SFP 561959278:561959278(0)win 4096 urg 0 (ttl 59, id 10538)11:00:12.822519 attacker.com.49054 > victim.com.sunrpc: . ack 0 win 4096 (ttl 59, id 36725)11:00:12.822795 attacker.com.49055 > victim.com.34459: S 561959278:561959278(0) win 4096 (ttl 59, id 36400)11:00:12.823071 attacker.com.49056 > victim.com.34459: . ack 0 win 4096 (ttl 59, id 46890) 4500 003c b72a 0000 3b06 ca8f xxxx xxxx xxxx xxxx bfa0 869b 217e d16e 0000 0000 a010 1000 81fb 0000 0303 0a01 0204 0109 080a 3f3f 3f3f 0000 0000 000011:00:12.823347 attacker.com.49057 > victim.com.34459: FP 561959278:561959278(0) win 4096urg 0 (ttl 59, id 733) 4500 003c 02dd 0000 3b06 7edd xxxx xxxx xxxx xxxx bfa1 869b 217e d16e 0000 0000 a029 1000 81e1 0000 0303 0a01 0204 0109 080a 3f3f 3f3f 0000 0000 000011:00:12.823642 atttacker.com.49044 > victim.com.34459: udp 300 (ttl 57, id 60791) 4500 0148 ed77 0000 3911 952b xxxx xxxx xxxx xxxx bf94 869b 0134 40db 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 6060 606011:00:12.823746 victim.com > attacker.com: icmp: victim.com udp port 34459 unreachable [tos 0xc0](ttl 255, id 3067) 45c0 0164 0bfb 0000 ff01 afdb xxxx xxxx xxxx xxxx 0303 fc44 0000 0000 4500 0148 ed77 0000 3911 952b 7f00 0001 7f00 0001 bf94 869b 0134 40db 6060 6060 6060 6060Теория цього виду сканування досить проста — все крутиться навколо прапорів TCP і відкритих, закритих портів. 1. якщо порт закритий, і надсилається FIN пакет відповіддю буде RST.2. якщо порт відкритий, то FIN буде просто відкинутий і відповіді не буде. Цей метод розрахований на вразливість дуже обмеженого числа IDS і firewall, оскільки тільки деякі стежать виключно за FIN|ACK пакетами, не звертаючи уваги на просто FIN пакети. 1.3.2 Queso (by [email protected]) Хоча queso не настільки популярний і відточений як nmap, він все ще являє певний інтерес, і відповідно існує необхідність в аналізі його роботи. Зазвичай він відсилає 7 пакетів за раз, що вказано в файлі документації. Ці пакети наступні: Queso дозволяє спуфить IP, вибирати порти для сканування а також сам випадково вибирає в якості порту джерела значення від 4000 до 65000.Наступний лог показує як виглядає скан queso: 17:24:43.328743 attacker.com.19909 > victim.com.sunrpc: S 1567977113:1567977113(0) win 4660(ttl 255, id 51246) 4500 0028 c82e 0000 ff06 6095 xxxx xxxx xxxx xxxx 4dc5 006f 5d75 6e99 0000 0000 5002 1234 f05f 000017:24:43.352137 attacker.com.19910 > victim.com.sunrpc: S 1567977113:1567977113(0) ack 0 win4660 (ttl 255, id 51247) 4500 0028 c82f 0000 ff06 6094 xxxx xxxx xxxx xxxx 4dc6 006f 5d75 6e99 0000 0000 5012 1234 f04e 000017:24:43.370082 attacker.com.19911 > victim.com.sunrpc: F 1567977113:1567977113(0) win 4660(ttl 255, id 51248) 4500 0028 c830 0000 ff06 6093 xxxx xxxx xxxx xxxx 4dc7 006f 5d75 6e99 0000 0000 5001 1234 f05e 000017:24:43.390301 attacker.com.19912 > victim.com.sunrpc: F 1567977113:1567977113(0) ack 0 win4660 (ttl 255, id 51249) 4500 0028 c831 0000 ff06 6092 xxxx xxxx xxxx xxxx 4dc8 006f 5d75 6e99 0000 0000 5011 1234 f04d 000017:24:43.410079 attacker.com.19913 > victim.com.sunrpc: SF 1567977113:1567977113(0) win 4660(ttl 255, id 51250) 4500 0028 c832 0000 ff06 6091 xxxx xxxx xxxx xxxx 4dc9 006f 5d75 6e99 0000 0000 5003 1234 f05a 000017:24:43.430076 attacker.com.19914 > victim.com.sunrpc: P win 4660 (ttl 255, id 51251) 4500 0028 c833 0000 ff06 6090 xxxx xxxx xxxx xxxx 4dca 006f 5d75 6e99 0000 0000 5008 1234 f054 000017:24:43.450082 attacker.com.19915 > victim.com.sunrpc: S 1567977113:1567977113(0) win 4660(ttl 255, id 51252)SYN=2SYN|ACK=1PSH=1SYN|FIN=1FIN=1FIN|ACK=1TOTAL=7 4500 0028 c834 0000 ff06 608f xxxx xxxx xxxx xxxx 4dcb 006f 5d75 6e99 0000 0000 50c2 1234 ef99 0000В балці наявні всі 7 пакетів. Перша риса — самотній FIN пакет. Що ж викликає появу цих пакетів, якщо ще не було встановлено з’єднання і FIN не містить ACK. У той час як встановлення з’єднання TCP — 3-x кроковий процес, розрив — є 4-х кроковим і виглядає так:
Тут ми бачимо встановлений PSH прапор, це може викликати подив, так як в TCP PSH прапору повинен супроводжувати ACK прапор (поки з’єднання встановлено). Ми идим, що queso встановлює SYN|FIN прапори, які вказують вузлу-одержувачу, що необхідно відкрити і відразу ж закрити з’єднання. n/a n/a urg ack psh rst svn fin 8 4 2 1 8 4 2 1 найцікавіша риса, яку відсилає queso — один SYN пакет, в якому встановлені зарезервовані біти (виділено рожевим в табл.4).Табл. 5 показує як виглядає 13 байт в TCP-заголовку. Останні 2 біти зліва (позначені n/a -not available)- зарезервированны і відповідно не повинні бути встановлені. Тепер вже просто встановити, що якщо ви бачите значення «c2» в 13 байт заголовка TCP, то хтось має злі наміри щодо вашої мережі. 1.4 Висновок Toby Miller зараз працює в SYTEX Inc., розташованої в Пенсільванії. Він має сертифікат GIAC(Certified Intrusion Analyst) і Microsoft Certified Professional, володіє великим досвідом адміністрування NT, Unix, firewall і мейнфреймів.