Найти тему
ИнфоКомм

Пассивный и активный перехват сетевого трафика

Автор: Александр Коленко

Присоединяйтесь к клубу IT ИнфоКомм!

Презентация клуба и первого курса "Сети и безопасность Linux":

Сети, Linux, Python

В одной из своих статей я рассказывал о таком инструменте как Wireshark и tcpdump. В данном материале я не буду восхвалять эти бесконечно необходимые в арсенале IT специалиста инструменты и рассказывать как с ними работать. Если вам интересно какого рода кейсы можно с их помощью решать, то вот вам моя статья. На самом деле именно эти инструменты позволяют решать самые интересные и комплексные проблемы связанные с работой сети и использованием сетевых ресурсов прикладным уровнем.

Итак, при чем здесь пассивный и активный перехват?

Если мы говорим про такие инструменты как Wireshark и tcpdump, то это инструменты пассивного перехвата и анализа трафика. Пассивный перехват- это такой перехват, при котором не нарушается обмен данными между клиентскими и серверными приложениями.

Словами инфобеза: - НЕТ наличия MITM атаки.

Что такое MITM атака?

Т.е. такой перехват не изменяет адрес отправителя или получателя трафика и не требует каких-либо изменений либо повторной конфигурации приложений.

Пример пассивного перехвата:

Пассивный перехват
Пассивный перехват

Пассивный перехват - относительно прост (относительно активного =)):обычно он не требует специального оборудования, и вам не нужно писать собственный код. При пассивном перехвате происходит захват трафика по мере его прохождения в сети ( с использованием span портов или встроенными средствами L3 устройств в части Packet capture) либо с помощью анализа трафика непосредственно на хосте клиента или сервера.

Существуют альтернативные методы пассивного перехвата

В ряде случаев, анализ трафика на L2-L4 уровнях не дает ощутимый результат. Ну либо дает какие-то зацепки по времени и участникам обмена. Дело в том, что цели и сценарии их преследующие могут требовать перехвата потока данных от прикладного уровня к транспортному до применения шифрования и последующей инкапсуляции. Иногда может случиться так, что разработанное приложение не запускается в новом окружении и мы хотим проанализировать взаимодействие процесса в user space с ядром - по факту заглянуть в исполняемый код этого приложения и его системные вызовы. В современном мире, где используется контейнеризация, это становится довольно редким явлением, но в качестве примера сойдет)

Что же из себя представляют эти самые альтернативы?

Перечислю для начала:

1. Утилита strace для Linux;

2.Process Monitor в Windows.

1. Утилита strace для Linux

В Linux можно напрямую отслеживать системные вызовы из пользовательской программы без специальных полномочий. Многие дистрибутивы Linux содержат удобную утилиту strace. К примеру мы хотим перехватить системные вызовы от ssh клиента к модулю TCP ядра системы и считать все что отправляет и принимает клиент подключаясь к удаленному серверу.

Пример команды позволяющей отследить взаимодействие ssh клиента и ядра системы:

strace -o strace_out -e trace=network,read,write -r -f ssh root@172.17.74.45

strace_out - файл в который записывается вывод strace;

network,read,write - какие конкретно системные вызовы нас интересуют;

ssh root@172.17.74.45 - подключение к удаленному серверу под root пользователем.

Результат выполнение команды :

--обрезано--

//ssh просит модуль ядра создать сокет (cat strace_out | grep socket)

socket(AF_INET, SOCK_STREAM, IPPROTO_TCP) = 3

//ssh просит модуль ядра подключить созданный сокет к прослушивающему 22-й порт ssh серверу (cat strace_out | grep connect)

connect(3, {sa_family=AF_INET, sin_port=htons(22), sin_addr=inet_addr("172.17.74.45")}, 16) = 0

//Далее происходит диалог в котором мы принимаем публичный ключ и вводим пароль

write - это то, что модуль отдает нам из указанного соединения на чтение

read - это то, что мы передаем модулю для передачи в указанное соединение

cat strace_out | grep write

write(3, "SSH-2.0-OpenSSH_7.4\r\n", 21) = 21#Версия openssh

write(5, "Last failed login: Thu May 26 20"..., 220) = 220

write(5, "\33]0;root@iem-ansible:~\7\33[?1034h["..., 53) = 53#удачный вход 

cat strace_out | grep read

-3
-4
-5

На примере работы ssh я показал как можно пассивно перехватить взаимодействие между прикладным и транспортным уровнем.
Для наглядности место перехвата указанно на рисунке:

-6

2.Process Monitor в Windows

В отличии от Unix-подобных систем, Windows реализует свои сетевые функции пользовательского режима без прямых системных вызовов. Доступ к сетевому стеку предоставляется через драйвер, и при установлении соединения используются системные вызовы open, read и write, чтобы настроить сетевой сокет для использования. Для Windows отсутствуют инструменты подобные strace. Однако есть очень полезный и бесплатный инструмент - Process Monitor от Microsoft. Вот как выглядит его внешний интерфейс:

-7

Process Monitor – позволяет в режиме реального времени отследить активность любой программы или приложения, установленного на исследуемом хосте. Process Monitor может ответить на вопросы: как узнать, что делает та или иная программа при установке, запуске, работе, удалении, какие записи вносит в системный реестр Windows, как используется сетевая подсистема хоста, и многие другое. При первом знакомстве с этой утилитой многие пользователи не сразу поймут, как же работать с программой Process Monitor, поэтому вот вам ссылка для более детального знакомства с утилитой.

Вот к примеру я отфильтровал процесс chrome.exe, указал, что меня интересует только сетевая активность:

-8

Коррелируя по времени перехваченный сетевой трафик и события регистрируемые утилитами типа Strace и Process Monitor можно получить очень детальную картину способную дать ответы на многие вопросы касательно работы клиент-серверной архитектуры исследуемого приложения.

При активном же перехвате происходит вмешательство в трафик между клиентским приложением и сервером.

Преимущества и недостатки пассивного перехвата

Самым главным преимуществом пассивного перехвата является то, что он не нарушает обмен данными между клиентскими и серверными приложениями. Пассивный метод так же может быть единственным вариантом, который возможно использовать в условиях отсутствия прямого контроля над хостами клиента и сервера. Обычно можно найти способ слушать сетевой трафик и перехватывать его с ограниченными полномочиями. Однако если вам требуется заглянуть в сам трафик, то обычно методов пассивного перехвата будет не достаточно и потребуются методы активного перехвата. Забегая вперед скажу, что методы активного перехвата базируются на таком понятии как proxy.

Словами инфобеза: - Используется MITM атака.

Пример активного перехвата:

Активный перехват
Активный перехват

О их разновидностях и принципах работы расскажу в следующей статье.

Спасибо за внимание!

Перечень использованной литературы:
1. Сети TCP/IP (Дуглас, Камер);

2.Анализ пакетов. Практическое руководство по использованию Wireshark (Крис Сандерс);

3.Атака сетей на уровне протоколов (Джеймс Форшоу).