Анализ сетевых пакетов
Сниффинг или сниффинг сетевых пакетов - это процесс мониторинга и перехвата всех пакетов, проходящих через данную сеть, с помощью инструментов сниффинга. Это форма, в которой мы можем «прослушивать телефонные провода» и узнавать о разговоре. Его еще называютwiretapping и может применяться в компьютерных сетях.
Существует так много возможностей, что если набор портов коммутатора предприятия открыт, то один из их сотрудников сможет прослушивать весь трафик сети. Любой, кто находится в одном и том же физическом месте, может подключиться к сети с помощью кабеля Ethernet или подключиться к этой сети по беспроводной сети и прослушивать общий трафик.
Другими словами, Sniffing позволяет вам видеть все виды трафика, как защищенного, так и незащищенного. При правильных условиях и при наличии правильных протоколов атакующая сторона может собрать информацию, которая может быть использована для дальнейших атак или вызвать другие проблемы для сети или владельца системы.
Что можно понюхать?
Можно обнюхать следующую конфиденциальную информацию из сети -
- Электронный трафик
- Пароли FTP
- Интернет-трафик
- Пароли Telnet
- Конфигурация роутера
- Сеансы чата
- DNS-трафик
Как работает обнюхивание?
Сниффер обычно переводит сетевой адаптер системы в неразборчивый режим, чтобы он прослушивал все данные, передаваемые в его сегменте.
Беспорядочный режим относится к уникальному способу оборудования Ethernet, в частности сетевых карт (NIC), который позволяет NIC получать весь трафик в сети, даже если он не адресован этой NIC. По умолчанию сетевая карта игнорирует весь трафик, который не адресован ей, что достигается путем сравнения адреса назначения пакета Ethernet с аппаратным адресом (MAC) устройства. Хотя это имеет смысл для работы в сети, режим без неразборчивой связи затрудняет использование программного обеспечения для мониторинга и анализа сети для диагностики проблем с подключением или учета трафика.
Сниффер может непрерывно отслеживать весь трафик, поступающий на компьютер через сетевую карту, декодируя информацию, заключенную в пакеты данных.
Типы обнюхивания
Обнюхивание может быть активным или пассивным. Теперь мы узнаем о различных типах обнюхивания.
Пассивное обнюхивание
При пассивном сниффинге трафик блокируется, но никак не изменяется. Пассивное сниффинг позволяет только слушать. Он работает с устройствами Hub. На устройстве-концентраторе трафик отправляется на все порты. В сети, которая использует концентраторы для соединения систем, все хосты в сети могут видеть трафик. Таким образом, злоумышленник может легко перехватить проходящий трафик.
Хорошая новость заключается в том, что в последнее время хабы практически устарели. В большинстве современных сетей используются коммутаторы. Следовательно, пассивное обнюхивание не более эффективно.
Активное обнюхивание
При активном сниффинге трафик не только блокируется и отслеживается, но также может быть каким-то образом изменен в зависимости от атаки. Активный сниффинг используется для прослушивания сети на основе коммутатора. Он включает в себя внедрение пакетов разрешения адресов (ARP) в целевую сеть для лавинной рассылки в таблице адресуемой памяти (CAM) коммутатора. CAM отслеживает, какой хост к какому порту подключен.
Ниже приведены методы активного обнюхивания.
- MAC-флуд
- DHCP-атаки
- Отравление DNS
- Спуфинговые атаки
- Отравление ARP
Влияние обнюхивания на протоколы
Такие протоколы, как tried and true TCP/IPникогда не создавались с учетом требований безопасности. Такие протоколы не оказывают большого сопротивления потенциальным злоумышленникам. Ниже приведены различные протоколы, которые легко поддаются анализу.
HTTP
Он используется для отправки информации в виде открытого текста без какого-либо шифрования и, следовательно, является реальной целью.
SMTP (простой протокол передачи почты)
SMTP используется при передаче электронной почты. Этот протокол эффективен, но не включает никакой защиты от перехвата.
NNTP (протокол передачи сетевых новостей)
Он используется для всех видов общения. Основным недостатком этого является то, что данные и даже пароли отправляются по сети в виде открытого текста.
POP (протокол почтового отделения)
POP строго используется для получения писем с серверов. Этот протокол не включает защиту от сниффинга, потому что он может быть перехвачен.
FTP (протокол передачи файлов)
FTP используется для отправки и получения файлов, но не предлагает никаких функций безопасности. Все данные отправляются в виде открытого текста, который можно легко проанализировать.
IMAP (протокол доступа к сообщениям в Интернете)
IMAP аналогичен SMTP по своим функциям, но очень уязвим для сниффинга.
Telnet
Telnet отправляет все (имена пользователей, пароли, нажатия клавиш) по сети в виде открытого текста и, следовательно, его можно легко перехватить.
Снифферы - это не тупые утилиты, позволяющие просматривать только живой трафик. Если вы действительно хотите проанализировать каждый пакет, сохраните захват и просматривайте его, когда позволяет время.
Реализация с использованием Python
Перед реализацией сниффера сырых сокетов давайте разберемся с struct метод, как описано ниже -
struct.pack (fmt, a1, a2,…)
Как следует из названия, этот метод используется для возврата строки, которая упакована в соответствии с заданным форматом. Строка содержит значения a1, a2 и так далее.
struct.unpack (fmt, строка)
Как следует из названия, этот метод распаковывает строку в соответствии с заданным форматом.
В следующем примере IP-заголовка необработанного сниффера сокета, который представляет собой следующие 20 байтов в пакете, и среди этих 20 байтов нас интересуют последние 8 байтов. Последние байты показывают, анализируются ли IP-адрес источника и назначения -
Теперь нам нужно импортировать некоторые базовые модули следующим образом:
import socket
import struct
import binascii
Теперь мы создадим сокет, у которого будет три параметра. Первый параметр сообщает нам о пакетном интерфейсе - PF_PACKET для Linux и AF_INET для Windows; второй параметр сообщает нам, что это необработанный сокет, а третий параметр сообщает нам об интересующем нас протоколе —0x0800, используемом для протокола IP.
s = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket. htons(0x0800))
Теперь нам нужно вызвать recvfrom() метод получения пакета.
while True:
packet = s.recvfrom(2048)
В следующей строке кода мы копируем заголовок Ethernet -
ethernet_header = packet[0][0:14]
С помощью следующей строки кода мы разбираем и распаковываем заголовок с struct метод -
eth_header = struct.unpack("!6s6s2s", ethernet_header)
Следующая строка кода вернет кортеж с тремя шестнадцатеричными значениями, преобразованными с помощью hexify в binascii модуль -
print "Destination MAC:" + binascii.hexlify(eth_header[0]) + " Source MAC:" + binascii.hexlify(eth_header[1]) + " Type:" + binascii.hexlify(eth_header[2])
Теперь мы можем получить заголовок IP, выполнив следующую строку кода -
ipheader = pkt[0][14:34]
ip_header = struct.unpack("!12s4s4s", ipheader)
print "Source IP:" + socket.inet_ntoa(ip_header[1]) + " Destination IP:" + socket.inet_ntoa(ip_header[2])
Точно так же мы также можем проанализировать заголовок TCP.