Перехват и подмена пакетов — две развивающиеся угрозы сетевой безопасности. Существует множество инструментов для перехвата и подмены пакетов, таких как Wireshark, tcpdump, netwox и т. д. Некоторые из этих инструментов широко используются экспертами по безопасности, а также злоумышленниками. Умение использовать эти инструменты важно, но что более важно в сетевой безопасности, так это понимание того, как эти инструменты работают, т. е. как перехват и подмена пакетов реализованы в программном обеспечении.
Ниже приведена простая программа-сниффер, использующая Scapy:
from scapy . all import *
print ( "SNIFFING PACKETS" )
def print_pkt ( pkt ):
print ( "Source IP:" , pkt [ IP ]. src )
print ( "Destination IP:" , pkt [ IP ]. dst )
print ( "Protocol:" , pkt [ IP ]. proto )
print ( " n " )
pkt = sniff ( filter = 'icmp' , prn = print_pkt )
В приведенном выше коде для каждого захваченного пакета будет вызываться функция обратного вызова print_pkt()
; эта функция распечатает часть информации о пакете.
При перехвате пакетов некоторые типы пакетов могут представлять повышенный интерес. Можно выбрать только определенные пакеты, установив фильтры при разработке сниффера. Фильтрация Scapy использует синтаксис BPF (фильтр пакетов Беркли).
Примеры фильтрации, возможной с помощью Scapy, включают:
128.200.0.0/16
В качестве инструмента подмены пакетов Scapy позволяет устанавливать произвольные значения в полях различных заголовков пакетов. Например, злоумышленник может использовать подмену IP-адреса для проведения DDoS-атаки на цель. Подмена IP — это создание IP-пакетов с измененным адресом источника либо для сокрытия личности отправителя, либо для выдачи себя за другой сетевой объект (компьютерную систему, центр обработки данных и т. д.), либо для того и другого.
Подделать ICMP-пакет
from scapy . all import *
print ( "SENDING SPOOFED ICMP PACKET" )
ip = IP ( src = "1.2.3.4" , dst = "93.184.216.34" ) # IP Layer
icmp = ICMP () # ICMP Layer
pkt = ip / icmp # Construct the complete packet
pkt . show ()
send ( pkt , verbose = 0 )
Подделка UDP-пакетов
from scapy . all import *
print ( "SENDING SPOOFED UDP PACKET" )
ip = IP ( src = "1.2.3.4" , dst = "10.0.2.69" ) # IP Layer
udp = UDP ( sport = 8888 , dport = 9090 ) # UDP Layer
data = "Hello UDP! n " # Payload
pkt = ip / udp / data # Construct the complete packet
pkt . show ()
send ( pkt , verbose = 0 )
Объедините методы прослушивания и подмены, чтобы реализовать программу «обнюхивания и подмены». Нужны две виртуальные машины в одной локальной сети. С виртуальной машины A выполните проверку связи с IP X. Это действие создает пакет эхо-запроса ICMP. Если X жив, программа ping получит эхо-ответ и распечатает ответ. Программа «обнюхать, а затем подделать» работает на виртуальной машине B, которая контролирует локальную сеть посредством перехвата пакетов. Всякий раз, когда программа видит эхо-запрос ICMP, независимо от целевого IP-адреса, она немедленно отправляет эхо-ответ, используя технику подмены пакетов. Следовательно, независимо от того, жива машина X или нет, программа ping всегда получит ответ, указывающий, что X жив.
IP ()
IP (). show ()
IP () / ICMP ()
p = IP () / ICMP ()
p . show ()
p = IP () / UDP ()
p . show ()
p = IP () / UDP () / "This is my UDP packet"
p . show ()
send ( IP () / UDP () / "This is my UDP packet" )
send ( IP ( dst = '10.0.2.7' ) / UDP () / "This is my UDP packet" )
Спасибо за ваш интерес, этот проект был веселым и познавательным!