Целью этого проекта является создание простого в использовании инструмента, который будет анализировать файл pcap
и возвращать любую двусмысленность, обнаруженную в TCP-пакетах. В настоящее время мы также работаем над реализацией анализа UDP и ARP.
Контур:
Вклад: любые комментарии/идеи/вклад приветствуются.
make
./p2a -v ./pcap_files/some_pcap_file.pcap -s results.json
$ ./p2a -h
Usage: ./p2a [OPTIONS] FILE
-h,--help: display this help message
-v,--verbose: verbose option
-d,--debug: debug option
-x,--exclude OPTIONS: exclude some possible ambiguities from analysis
--exclude ret,mac,ttl
ret: exclude retransmission analysis
mac: exclude MAC addresses analysis
ttl: exclude TTL analysis
-s,--save FILENAME: saves results to file FILENAME
JSON format - FILENAME should contain the JSON extension
Examples:
./p2a -v ./pcap_files/some_pcap_file.pcapng
./p2a --exclude mac,ttl --verbose my-pcap-file.pcap -s results.json
Я только что добавил возможность сохранять все результаты в файл JSON. Для этого можно использовать опцию --save file.json
. В этом файле он сохраняет все сеансы, независимо от того, были ли в них неясности или нет. В настоящее время я работаю над тем, как красиво отобразить файл JSON в файле HTML (с использованием некоторого JavaScript).
SHA(IP, Port)
Мы сделали сценарий sha
доступным для целей отладки. Он принимает в качестве аргумента IP-адрес и номер порта и возвращает хэш SHA1 (IP|Порт). Это значение используется в качестве идентификатора сеанса в сценарии p2a
.
make sha
./sha -h
Usage:
./sha IP PORT
./sha 127.0.0.1 12345
IP: 127.0.0.1
Port: 12345
SHA1: 21bf549a8095063f49cff573e689b6b10365f4c8
IP-адреса и whois
Если один из сеансов вызывает подозрения, полезно знать, к чему он относится. Для этого можно использовать Wireshark и применить фильтр отображения, чтобы отображать только данный сеанс.
Более простой подход может заключаться в использовании whois
, чтобы узнать, кому принадлежит IP-адрес.
Чтобы использовать whois
со всеми IP-адресами из файла захвата:
for ip in $( tshark -r file.pcapng -T fields -e ip.dst -e ip.src | egrep -o " [0-9]+.[0-9]+.[0-9]+.[0-9]+ " | sort | uniq ) ; do whois $ip | egrep " ^[Oo]rgani[sz]ation " ; done
Если
tshark
не работает, вот сценарий C, который сделает то же самое.
Поле «Время жизни » (TTL) для IP-пакета соответствует тому, как долго этому пакету «разрешено» путешествовать по сети, прежде чем он будет отброшен маршрутизаторами. Это 8-битное значение, которое обычно уменьшается на единицу при каждом прыжке.
Согласно странице Cisco об атаке с истечением срока действия TTL:
«Когда устройство IOS получает пакет со значением TTL меньше или равным единице, устройство IOS отправляет сообщение ICMPv4 типа 11, код 0 , что приводит к соответствующему воздействию на ЦП . Это влияние происходит потому, что больше ЦП обработка требуется для ответа (с использованием пакетов с превышением TTL) на пакеты со значениями TTL меньше единицы, чем для простой пересылки пакета со значением TTL больше единицы».
«Поведение истечения срока действия TTL создает вектор атаки типа «отказ в обслуживании» (DoS) против сетевого оборудования. Сетевые устройства специально созданы для максимально быстрой пересылки обычных пакетов. Когда встречаются пакеты-исключения, например пакеты с истекающими значениями TTL, различные суммы маршрутизатор затрачивает усилия на соответствующий ответ».
Анализ/Код:
В utils.c
мы определили TTL_THRESHOLD
(на данный момент = 10). Если TTL для пакета ниже этого значения, поднимается флаг, указывающий, что TTL низкий. Если таких флагов поднято слишком много, это может быть атакой истечения срока действия TTL.
Пример файла pcap (содержащий пакет с низким TTL) был записан с помощью сценариев, расположенных в каталоге ./attack_scripts/low_ttl
.
Отравление ARP заключается в том, чтобы обмануть хост, заставив его поверить в то, что мы являемся шлюзом по умолчанию . Жертва регулярно запрашивает у шлюза по умолчанию его MAC-адрес (протокол ARP). Но злоумышленник может отправить жертве пакеты, сообщающие, что шлюз по умолчанию находится по другому MAC-адресу (например, MAC-адресу атаки). Злоумышленнику просто нужно отправлять эти пакеты «достаточно регулярно», чтобы жертва «отбрасывала» настоящие сообщения от шлюза по умолчанию .
Это может позволить злоумышленнику действовать и атаковать жертву разными способами: «человек посередине», DoS, «черная дыра» и т. д.
Пример:
IP-адрес жертвы — 192.168.10.2
, а шлюз по умолчанию — 192.168.1.1
:
sudo arpspoofing -i wlan0 -t 192.168.10.2 192.169.1.1
Злоумышленник будет продолжать отправлять жертве ARP-пакеты, сообщающие, что 192.168.1.1
находится на MAC-адресе злоумышленника. Таким образом, жертва отправит свои пакеты (направляясь в Интернет) злоумышленнику, который не перенаправит их (опция -r
для их перенаправления).
Анализ/Код:
Для анализа, поскольку мы рассматриваем только IP-пакеты (пока), p2a
сохраняет в связанном списке все пары (MAC address, IP address)
с которыми он сталкивается. При проверке новой заданной пары он проходит по связанному списку и возвращает ошибку, если IP-адрес уже связан с другим MAC-адресом.
В приведенном выше примере наш сценарий обнаружит, что 192.168.1.1
( шлюз по умолчанию ) связан с двумя разными MAC-адресами: реальным, пока злоумышленник не придет и не сообщит жертве, что это шлюз по умолчанию и что его MAC-адрес получает связанный со шлюзом по умолчанию (с точки зрения жертвы).
Каждый байт данных, отправленный по TCP-соединению, имеет связанный с ним порядковый номер . Это указывается в поле порядкового номера заголовка TCP .
Когда принимающий сокет обнаруживает входящий сегмент данных, он использует номер подтверждения в заголовке TCP для обозначения получения. После отправки пакета данных отправитель запустит таймер повторной передачи переменной длины. Если он не получит подтверждение до истечения таймера, отправитель предположит, что сегмент потерян, и передаст его повторно.
Мы можем увидеть повторную передачу TCP , когда другой пакет имеет те же номера подтверждения и порядковые номера, что и текущий пакет.
Повторные передачи TCP довольно распространены и могут быть совершенно нормальными (если один пакет передается повторно из-за его законной потери), но также могут быть признаком проблемы в сети или при обмене данными.
Эксплойт перекрытия IP-фрагментов возникает, когда два фрагмента, содержащиеся в одном IP-пакете, имеют смещения, указывающие на то, что они перекрывают друг друга в позиционировании внутри пакета. Это может означать, что либо фрагмент A полностью перезаписывается фрагментом B, либо фрагмент A частично перезаписывается фрагментом B. Некоторые операционные системы неправильно обрабатывают фрагменты, которые перекрываются таким образом, и могут вызывать исключения или вести себя другим нежелательным образом. при получении перекрывающихся фрагментов. Это основа атаки слезой . ( из Википедии )
Перекрывающиеся фрагменты также могут использоваться в попытке обойти системы обнаружения вторжений . В этом эксплойте часть атаки отправляется фрагментами вместе с дополнительными случайными данными; будущие фрагменты могут перезаписать случайные данные остатком атаки. Если готовый пакет не будет правильно собран в IDS, атака останется незамеченной.
Атака Teardrop: включает отправку искаженных IP-фрагментов с перекрывающимися, слишком большими полезными данными на целевой компьютер.
ЕЩЕ НЕ РЕАЛИЗОВАНО
Если мы наблюдаем несколько значений TTL для данного сеанса, это может означать, что маршрут изменился, а это означает, что пакеты не следуют по тому же пути в конце соединения, что и в начале. Это может быть связано с внешними подлинными изменениями, но также может означать, что злоумышленник меняет маршрут прохождения пакетов (например, для проведения атаки MiTM).
Однако в большинстве случаев один сеанс имеет два или три разных значения TTL на протяжении всего соединения: в большинстве случаев клиент и сервер не используют одни и те же начальные значения TTL.
Скрипт возвращает ошибку, если для данного сеанса имеется более двух разных значений TTL.
Каталог | Описание/содержание |
---|---|
./attack_scripts | Простые сценарии для проверки и записи некоторых неоднозначностей TCP (подмена, низкий TTL). |
./pcap_files | Файлы PCAP для проверки p2a |
./tests_libpcap | Два скрипта для тестирования и начала использования libpcap |
libpcap
pcap
pcap
в конце веб-страницыtcpdump
фильтрыlibpcap
libpcap
в Cpcap.h