ПАВЕЛ ЗАКЛЯКОВ
Пассивный перехват трафика
Данная статья рассказывает о том, как с помощью компьютера, оборудованного двумя сетевыми картами, организовать полностью пассивный перехват сетевого трафика Fast Ethernet.
Перехват сетевого трафика может использоваться по разным причинам, но цель у него одна – отслеживать всё происходящее на определённом участке в сети. Это может быть как мониторинг сети с целью выявления тех или иных нюансов в штатном режиме работы, так и обнаружение сетевых атак или выявление нежелательного трафика. Я думаю, читатель cталкивался не с одной задачей, где без перехвата трафика не обойтись. Реализация перехвата может быть осуществлена несколькими способами:
- Программная реализация на одном из штатно используемых узлов. Например, можно запустить tcpdump, windump или подобные программы на исследуемых узлах и далее наблюдать за выводимой ими информацией. Этот способ хорош отсутствием дополнительных затрат, но плох тем, что, во-первых, потребляются ресурсы процессора, во-вторых, прослушивание трафика можно отследить и обойти. В-третьих, он платформо-зависимый, т.е. на разных платформах используются разные программы, порой несовместимые между собой даже по формату. По данной схеме, например, может быть организовано прослушивание трафика на базе шлюза.
Рисунок 1. Перехват трафика на базе шлюза под управлением ОС Linux
- Использование отдельного компьютера для перехвата трафика совместно с коммутаторами, имеющими порт для мониторинга или концентраторами. В разрыв исследуемого участка сети ставится коммутатор или концентратор, а уже к нему подключается отдельный компьютер, занимающийся анализом прошедшего трафика. Данный способ не зависит от других компьютеров в сети и используемого ими программного обеспечения.
Рисунок 2. Перехват трафика на базе коммутатора с портом мониторинга
- Использование отдельного компьютера в мостовом включении на исследуемом участке. Этот способ несколько лучше предыдущего тем, что при желании можно организовать не только пассивный просмотр трафика, но и фильтрацию и подмену, т.е. влиять на проходящий трафик. Отличие от первого способа состоит в том, что работа с трафиком ведётся на более низком уровне (на канальном, против сетевого в случае шлюза). Как следствие, стандартными средствами вроде traceroute удалённо обнаружить факт подключения (прослушивания и фильтрации) невозможно.
Рисунок 3. Перехват трафика на базе моста под управлением ОС Linux
- Использование пассивного подключения к кабелю без его разрыва на физическом уровне. Используется совместно с компьютером для обработки перехваченных данных. Так как физический уровень самый низкий из всех, то обнаружить такое подключение на канальном уровне и выше практически невозможно. Правильнее будет сказать, что программно такое подключение обнаружить нельзя.
Рисунок 4. Перехват трафика на базе физического подключения
Оценим эти способы с точки зрения осуществления скрытного перехвата. Первый способ однозначно не подходит, так как программу, осуществляющую просмотр трафика можно обнаружить и отключить. Даже если она хорошо спрятана и обнаружить её не получается, можно использовать «проверенный дедовский способ» – отформатировать винчестер и установить систему заново. Причём не важно, сервер это или клиентский компьютер – в любом случае работает одинаково хорошо.
Второй способ, как и третий, легко обнаружить физически. Лишний бесхозный концентратор и/или компьютер быстро найдутся и привлекут к себе внимание, если их не спрятать в отдельной комнате. Возможно, подозрений не возникло бы, если не «активная составляющая» используемого оборудования. Оборудование «посередине» может зависнуть. В случае использования разных по скорости сетевых карт или разных режимов работы может оказаться, что одна карта работает в режиме 100 Мбит/c в полном дуплексе, а составляющая ей пару на другом конце провода умудряется работать со скоростью 10 Мбит/c без дуплекса. Отключив кабель с одной стороны, можно долго удивляться тому, как на другой стороне индикатор «link» почему-то светится и не гаснет, и наоборот. Подозрение сразу перейдёт на кабель, а простое подёргивание его с любой стороны от загадочного места внутри стены рано или поздно приведёт к «секретной комнате» и перехват будет обнаружен. Если всё же исключить ситуации, описанные выше, а вероятность зависания оборудования «посередине» сделать очень низкой, использовав различные схемы контроля и перезапуска, то от задержек при передаче пакетов избавиться не получится. Любое активное оборудование вносит задержки в распространение пакетов [1, стр. 320], задержки малы, но их можно измерить и также заподозрить неладное.
Четвёртый способ пассивного перехвата при правильной реализации обнаружить довольно сложно, если не сказать что невозможно при здравом уме и ограниченных финансах. Именно подобным образом я и предлагаю физически скрыть подключение.
Рисунок 5. Сокрытие места подключения в стене
Далее предлагаю на этом пункте не останавливаться, а перейти к технической реализации задуманного.
Для наглядности выполним подключение на макете, использовав небольшой кусочек кабеля. Для всей операции нам понадобятся:
- кабель, к которому мы будем подключаться;
- кросскорд (для патчкорда придётся самостоятельно поменять пары местами);
- кусачки;
- паяльник;
- изолирующие материалы.
Вначале аккуратно счищаем изоляцию с подключаемого кабеля.
Рисунок 6. Кусок кабеля со снятой общей изоляцией
Далее зачищаем места для подпайки отводов на бело-зелёной и бело-оранжевой парах и облуживаем их.
Рисунок 7. Зачищенные и облуженные места для подпайки
Далее разрезаем кросскорд. Зачищаем у него соответствующие по цвету провода и подпаиваемся к основному кабелю так, чтобы цвета совпали и оранжевая пара пошла на разводку EIA/TIA T568A, а зелёная – на T568B. В результате подпаиваемые концы в обоих случаях должны приходить на 3-й и 6-й контакты разъёмов.
Рисунок 8. Подпаянные отводы для снятия сигнала
Рисунок 9. Подпаянные отводы(место пайки увеличено)
Далее изолируем место пайки. На стенде это сделано с помощью изоленты, но если есть возможность сделать это более основательно (заранее), то можно использовать термоусаживающиеся кембрики. А вместо отвода использовать одну витую пару, сделав её расчленение на два разъёма уже на конце, затем, чтобы место подключения по возможности сильно не утолщалось.
Рисунок 10.Заизолированное место подключения
Если подключение не надо никуда прятать, то его можно сделать стационарным и обойтись без пайки, использовав для этих целей соответственно разведённую патч-панель с розетками. Схему разводки представить довольно несложно (см. рис. 11).
Но если всё же непонятно, то наглядно и подробно это описано в [2].
Система готова к подключению и испытаниям. Но прежде чем это сделать, давайте рассмотрим, как это должно работать в теории.
Если взять техническую спецификацию организации сети, то можно узнать, что для передачи данных используются только две пары, к которым мы подключились, при этом назначение части контактов на разъёмах сетевых карт следующее.
- 1 – передача +
- 2 – передача -
- 3 – приём +
- 6 – приём -
Рисунок 11. Схема разводки для четырёх розеток и фото одной розетки
То есть по четырём проводам (две пары) идут данные в прямом и обратном направлениях. К этим проводам можно подсоединить отводы. Один отвод будет снимать сигналы, идущие в одном направлении, другой – в обратном. Перевести обратно в «электронную форму» грубо снятый физический сигнал можно с помощью тех же сетевых плат, использовав только схему их приёмной части, подключив к ней отводы. При этом если сетевые карты перевести в режим прослушивания (promiscuous mode), то можно будет перехватывать проходящий сетевой трафик. Так как входы сетевых карт высокоомные, то подключение на передачу данных влиять не должно. Предполагаю, что если подключение сделать аккуратно, то волновых эффектов вроде отражённых и стоячих волн (что частенько встречались в коаксиальном Ethernet без терминаторов) можно избежать. На длинных (около 100 м) кусках кабеля подключаться я не пробовал. Выходы (сетевых карт, осуществляющих прослушивание), работающие на передачу, «висят в воздухе», поэтому влиять на передаваемый сигнал они никак не могут.
Если, например, запустить tcpdump для прослушивания на одном интерфейсе, то он будет перехватывать только данные, передаваемые в одну сторону, если же на другом – в другую. Если запустить две копии tcpdump с разными конфигурациями, то потом создание одного лог-файла из двух потребует усилий. При этом невозможно использовать другие средства, работающие в реальном времени и отслеживающие трафик в обоих направлениях.
Для объединения трафика «из двух в один» я предлагаю использовать технологию Linux bonding, описанную мной в [3]. После чего нет ничего проще запустить tcpdump, snort или любую другую программу стандартным способом: на интерфейсе bond0 и наслаждаться их работой.
Замечание. В принципе, если не прибегать к Linux bonding, можно попытаться объединить снятые данные с помощью всё того же коммутатора с функцией мониторинга портов. Тогда он будет объединять данные с двух портов. Всё бы хорошо, но для данной реализации придётся поменять разводку А и B местами, так как в коммутаторах она обратная (контакты 1 и 2 работают на приём). Надо найти коммутатор с описанной выше функцией. Обычный не факт, что захочет работать. А самое главное, следует понимать, что сплошной поток в 200 Мбит передать в 100 Мбит никак не получится, поэтому при достаточной нагрузке это дело работать не будет, а использование концентраторов вообще невозможно по причине большой вероятности коллизий. Что и греха таить, больше половины хороших программистов вообще далеки от понимания сути происходящих процессов на физическом уровне. А каждая вторая книжка по безопасности, взять ту же [4], предлагает подключать сенсоры систем обнаружения атак, как показано на рис. 2. Естественно, при возрастании загрузки в сети за 50% часть атак уже принципиально не может быть обнаружена, даже если для всех атак будут записи в сигнатурной базе данных. Данные ведь передаются по обоим парам одновременно, а собирать их пытаются каналом вдвое меньшим. Только недавно стали широко доступны коммутаторы с портами на 1 Гбит. Да, по такому порту можно снимать данные со 100-мегабитной сети без потерь, но где гарантия что сеть тоже не будет работать на такой же скорости и тогда ситуация повторится. Половины пропускной способности в нужный момент не хватит. Вот и получается, что с финансовой точки зрения проще установить вторую простенькую сетевую карту и настроить Linux bonding. Дёшево и сердито.
Литература, ссылки:
- Олифер В.Г., Олифер Н.А. Компьютерные сети. Принципы, технологии, протоколы. – СПб: Питер, 2001 г.
- Construction and Use of a Passive Ethernet Tap: http://www.snort.org/docs/tap.
- Закляков П. На пути повышения надёжности и скорости: Linux bonding. – Журнал «Системный администратор», №10, октябрь 2004 г. – 54-58 c.
- Лукацкий А.В. Обнаружение атак. – СПб: БХВ-Петербург, 2001 г., 432-437 c.