Tcp reset attacks

Введення (моя улюблена частина)

Хакер не раз розповідав про протокол ТСР,
так що повторяться і розтікатися по древу я
особливо не буду. Нагадаю основні
положення: Transmission Control Protocol описується в RFC
№793 і перевагою його є
надійність передачі даних від одного хоста
до іншого по мережі. Це означає, що ТСР
гарантує надійність передачі даних і
автоматично визначить пропущені або
пошкоджені пакети. Що для нас важливо з
його конструкції?

У загальному вигляді заголовок ТСР пакета
виглядає так:

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

Дані розбиваються на сегменти, які
окремими пакетами направляються по мережі
одержувачу. Можлива ситуація, коли пакети
прибудуть в точку призначення не по порядку.
Це поле - 32-бітний номер, який визначає
номер сегмента в послідовності, він з
кожним пакетом збільшується і дозволяє
зібрати дані в правильному порядку. В
Загалом сенсі значення визначає належить
Чи пакет активної сесії чи ні.

TCP так само надає хостам механізм
сказати один одному скільки даних вони хочуть
отримати. Це і є поле Window, 16 бітове число
в ТСР заголовку. Будучи одного разу заданим,
воно говорить хосту, що прийматися буде
строго обмежений обсяг даних, а
інші підуть лісом. Якщо чергу прийому
буде сповнена, хост може виставити значення
в 0 і таким чином сказати партнерові
типу мовляв хороший.

SYN, ACK, PSH, URG, RST і FIN, про них вже не раз
говорили, так що повторюватися не буду.

Атака TCP reset

У такій ситуації звичайно найбільш уразливі
додатки та протоколи підтримують
тривалі з'єднання. наприклад BGP
(Border Gateway Protocol) від Cisco (див. RFC
1 771), так як він грунтується на постійній
ТСР сесії між комп'ютерами. збій в
роботі протоколу може привести до
"Коливання маршруту" (route flapping),
досить неприємного події для
маршрутизатора.

Paul Watson, який знайшов уразливість,
пояснює, що насправді таку атаку НЕ
так важко організувати як здавалося раніше.
За попередніми підрахунками з'ясували, що
брутфорс атака на sequence number зажадає
перебору всіх чисел від 1 до 4.294.967.295. Однак
це зовсім не так. Наприклад, якщо ТСР стек на
хості А обмежений window в 16К, стек повинен
отримувати всі пакети в межах цього «вікна»
і атакуючому не обов'язково посилати
пакети з встановленим RTS у всій
послідовності SN, а обмежиться тільки
кожним можливим вікном, так як ТСР прийме
будь-Sequence number в межах деякого
діапазону, заданого величиною вікна. Таким чином
нападаючому треба перебрати 4.294.967.295 / 16.384 = 262.143
що б потрапити в усі доступні вікна.

Ймовірно і 262 тисячі може здатися
великим числом, проте це не так. По перше,
при хорошому коннекте атакуючий здатний
генерувати десятки тисяч пакетів в секунду.
По-друге, атаку можна розподілити по
кільком хостів. Наприклад на стандартній
DSL лінії можна виробляти 250 пакетів в
секунду, що вичерпає всі варіанти за 17
хвилин, на Т1 це вже 4.730 пакетів і всього лише
60 секунд.

У прикладі розглянуто приклад вікна в 16К,
однак по RFC це поле 16 бітове, що дає до 64К.
Ееслі використовується повний його розмір, то
атакуючому дістається всього 65.537 пакетів, 4 і
15 секунд відповідно. причому майте
з огляду на, що це максимальний час, в середньому
воно буде наполовину меншим (на практиці
це 3 хвилини і 8 секунд). Що стосується
описаних в уразливості 4 пакетів, то вона
виникає тільки при використанні window scaling,
ТСР розширенні (див. RFC
1323) де розмір «вікна» збільшено з 16 до
30 біт (реалізовано, наприклад, і в описаному
вище BGP). У разі максимального розміру
атакуючому дійсно доведеться послати
тільки 4 пакети що б реалізувати TCP Reset.

Reset атака може бути виконана і без RST
біта. Замість нього можна встановити SYN біт
виконавши точно таку ж атаку що була
описана вище. На більшості реалізацій TCP
стека в разі отримання повторного SYN
буде висланий RST з sequence number. Якщо SYN входить в
«Вікно» поточної сесії, то замість з RST
відповіддю сесія буде припинена, а система
ймовірно навіть перезавантажена.

Blind data injection

Ну і третій варіант розвитку подій.
Робиться все так само як і в попередніх
випадках - брутфорсом підбираємо sequence number,
тільки замість посилки порожніх SYN або RST
пакетів ліпимо нормальний пакет з даними.
З'єднання в такому разі не перерветься, а
ось що у користувача збереться на
комп'ютері - абсолютно незрозумілий питання.
Передані дані будуть катастрофічно
пошкоджені.

Покажи цю статтю друзям:

Схожі статті