IP-hijacking - "уведение" или "воровство" соединения жертвы, данная атака основана на комбинации двух техник: sniffing`а (прослушивания сети) и IP-spoofing`а. Об этой атаке часто говорят: "вломиться в чужое TCP-соединение". Звучит элитарно… но так ли это сложно?
Стоит начать с того, что данный тип атаки наиболее актуален для локальной сети (где вероятность успешной атаки ~1), единственным препятствием могут быть применение жертвой шифрования (либо на уровне сервиса (к примеру - SSH), либо на уровне протокола (к примеру - IPSEC)). Если шифрование не применяется можно переходить непосредственно к реализации атаки:
Фаза первая
Предполагает, что читатель знаком с понятиями: "switch", "hub", "sniffer" и хотя бы самыми основами построения и функционирования локальных сетей.
На первом этапе необходимо прослушивать траффик "жертвы" и "сервера". В сети где не используются свитчи это не вызовет особых затруднений… А вот что если наоборот? Тогда атакующему придется познакомится с замечательнейшим протоколом ARP (протокол разрешения адресов) и способами надувательства "жертвы" посредством ложный ARP-ответов. Х писал об этом пару раз, но по-моему, как-то поверхностно - попытаемся заполнить этот пробел:
Протокол разрешения адресов (ARP) используется для определения MAC-адреса по IP-адресу и наоборот. В результате формируется так называемая "ARP-таблица", вот небольшой пример для нашего случая:
C:\>arp -a
Interface: 169.254.0.2 on Interface 0x2000002
Internet-address | MAC address | Type |
169.254.0.1 | 00-10-4b-01-88-f3 | dynamic |
169.254.0.2 IP-адрес "жертвы" (машины, где просматривается данная таблица)
169.254.0.1 IP-адрес устройства, к которому мы подключены
00-10-4b-01-88-f3 MAC-адрес устройства, к которому мы подключены
Эта таблица будет обновляться каждые 30 секунд,
следовательно если мы имеем возможность послать фальшивый ARP-ответ, который указывает на 169.254.0.1 и несуществующий MAC-адрес, то "жертва" будет неспособна общаться с 169.254.0.1 в течение в течение некоторого промежутка времени.
Надеюсь это понятно… тогда подойдем с другой стороны - пусть имеет место схема:
A------->|
D------->|B--------------->C
E------->|
Пусть A, D, E подключены к B, а C подключен только к B. B находится "посредине", поэтому он может сниффать абсолютно все, в то время как
C, A, D и E могут лишь сниффать лишь свой траффик с B.
Предположим, что C - это "атакующий", который очень хочет быть на месте B и "слышать все"… Проделаем такой фокус: Пошлем фальшивые ARP-ответы, указывающие на нужный хост и содержащие несуществующий MAC-адрес. Данный MAC-адрес не будет найден, а весь траффик жертв перейдет атакующему. Теперь C все видит и все слышит ;-).
Фаза вторая
Предполагает, что читатель знаком с основами протокола
TCP, понятиями SYN и ACK.
После успешного выполнения первой фазы мы установили имеет ли место интересующее нас соединение (которое мы собираемся "стащить") и если это так, то каковы SYN и ACK номера. Т.к. отказоустойчивость протокола TCP основывается на синхронизации SYN/ACK, то самое время эту синхронизацию разрушить, т.е. пришло время для IP-spoofing`а… Для этого маскируясь под "жертву"/"сервер" нужно послать "левые" пакеты, в результате произойдет так называемая десинхронизация -> самое время "забрать" соединение "жертвы" и продолжать общение от ее имени…
Стоп!
Некоторые читатели не хотят знать как это происходит, не хотят знать как решаются возникающие проблемы - они хотят решений типа "нажми на пимпу". ОК!
Представляю утилиту для проведения атак IP-Hijacking -
HUNT. Хотя, я бы даже не назвал это утилитой - это просто комбайн "все в одном" от Pavel Krauz. Вот только некоторые дополнительные возможности:
- Сниффер с возможностью поиска
- Средство для ARP-спуффа + определение был ли ARP-спуфф успешным
- Средство для определения хостов, находящихся в твоем сегменте сегменте
Таким образом, HUNT позволит тебе:
- определить какие хосты находятся с тобой в одном сегменте
- провести атаку ARP-spoofing и "слушать" соединения, которые тебе интересны
- "умыкнуть" выбранное соединение
- синхронизировать "жертву" и "сервер" после того, как ты "попользовался" соединением
Ну а тот, кому интересна вторая фаза в деталях, отсылаю к статье
"Протокол TCP
№3", где детально описан процесс IP-spoofing`а и проблемы с ним связанные. Повторяться бы не хотелось, а хотелось бы поговорить
о следующем.
Т.к. эта статья завершает цикл статей "Протокол TCP", считаю, что нужно уделить пару слов тем "критическим" статьям, которые сопровождали мои публикации. И в частотности статье
"TCP-спуфинг: пошлая сказка". Хотелось бы отметить, что автор указанной статьи путает атаку IP-spoofing (подделка IP-адреса) с вопросом предсказания значения ISN (первоначальный номер очереди отправления или ISS в соответствии с
RFC793). Автор приводит схемы генерации ISN и из этого приходит к выводу, что "спуффинга нет"… Но IP-spoofing - это не вопрос предсказания ISN, это атака, имеющая своей целью убедить удаленную систему, что она получает пакеты от некого источника, IP-адрес которого отличается от IP-адреса атакующего. Реализация механизма IP-spoofing`а может быть рассмотрена на примере атаки IP-hijacking, который был описан выше. Думаю, что нельзя утверждать, что IP-hijacking - "атака, которой не существует". А меж тем она - не что иное как sniffing + IP-spoofing, которого согласно автору статьи "TCP-спуфинг: пошлая сказка" - не бывает ;-).
Да, было бы ошибкой утверждать, что "хакеры смогут влезть везде", но Инет потому и огромен, что в нем стоят разные системы. Я, к примеру, могу показать сервер, где на
протяжении всего этого времени работает Unicode-баг и много других прелестей. Последний сервис-пак, который он видел был по-моему SP3… и стоит он в большой сетке с выходом в Инет. Чем
не отличная жертва для спуффинга?
Но автор не замечает подобных систем, не замечает собственной локальной сети, он хочет видеть лишь "Большой Интернет" и сложные алгоритмы генерации ISN. Однако почему он делает вывод, что "сложно - значит невозможно"?
Хотелось бы публично обратиться к автору рассматриваемой статьи: "каждый волен делать те выводы, которые он считает правильными - в этом и есть смысл одного великого слова - Свобода. Только некоторые выводы нужно делать исключительно про себя, потому как если мыслишь узко, то хотя бы не называй тормозами тех, кто мыслит чуть шире, чем ты сам".
Спасибо всем, кто был со мой все это время.