Сразу отмечу, что всё нижеизложенное просто до безумия и доступно любому человеку хотя бы раз работавшему на ЭВМ.
Суть сценария заключается в том, чтобы пустить весь трафик, проходящий между двумя хостами через себя. Какую пользу из этого можно извлечь, думаю, понятно каждому (от перехвата незашифрованных паролей до зашифрованных паролей :=)). Пустить таффик через себя можно разными способами (DNS-спуффинг, ARP-спуффинг и т.д.). В этой статье я покажу, как провести MAN-IN-MIDDLE, используя ARP-спуффинг.
Люди придумали протоколы. Протокол ARP не исключение - его тоже придумали. В ARP протоколе предусмотрена возможноть посылки ARP-ответа без ARP-запроса (это называется ARP-оповещение). То есть можно любым хостам сказать, что “у машины с таким-то IP-адесом теперь такой-то MAC-адрес”. И они поверят. Эту возможность, конечно, можно отключить, однако, это принесёт некоторые неудобства.
Для реализации атаки нам нужно будет организовывать форвардинг пакетов по IP-адресу и формирование ARP-оповещений. Это, конечно, можно побыстрому реализовать, например, на С, но ещё быстрее будет установить себе dsniff. В пакете dsniff есть две утилиты, которые будут нам нужны – это arpspoof и fragrouter.
Рассмотрим ситуацию, в которой хост А(192.168.2.35) хочет получить доступ к HTTP-серверу через хост Б (прокси-сервер 192.168.2.1). Мы поставим себя между хостми А и Б. В ARP-таблице хоста А есть информация о том, что хост с IP-адресом 192.168.2.1 имеет MAC-адрес 00:03:ba:06:27:57. Исправляем это недоразумение:
#arpspoof -i msk0 -t 192.168.2.35 192.168.2.1
00:1a:80:a3:4d:dd – это наш MAC-адрес. msk0 – это наш сетевой интерфейс.
Отныне запросы будут идти к нам. Теперь нам нужно перенаправлять эти запросы прокси-серверу:
#fragrouter -B1
Теперь берём любой сниффер, и просматриваем полезную информацию в пакетах, проходящих в рамках этой сессии. Таким образом мы можем смотреть пакеты, направленные только от хоста А к хосту Б, а пакеты от Б к А идут не через нас, а по нормальному маршруту. Эта ситуация неприятна ещё и потому, что хост Б может заподозрить неладное, так как пакеты приходят с одного MAC'a, а уходят на другой. Поэтому лучше хост Б тоже ввести в заблуждение:
#arpspoof -i msk0 -t 192.168.2.1 192.168.2.35
Теперь трафик в обоих направлениях ходит через нас.
Как же предотвратить реализацию сценария MAN-IN-MIDDLE сиспользование ARP-спуффинга? Решений, как минимум 2:
Использовать статические записи в ARP-таблицах. Это плохое решение, т. к. оно исключает возможность использования DHCP и добавляет проблем в администрировании, поскольку при смене сетевой карты придётся на всех хостах менять ARP-таблицу.
Регистрировать ситуации, при которых ARP-ответы приходят с определённым интервалом времени (порядка одной секунды). Атакующая сторона специально задаёт такой интервал, чтобы он был не больше интервала времени обновления ARP-кэша атакуемой стороны. Я не знаю реализовал ли это кто-нибудь, однако слышал, что система обнаружения вторжений snort умеет отлавливать ARP-спуффинг каким-то образом.
Ну вот и всё.