У меня вопрос к гуру низкоуровневых сетей / Linux:
Мне нужно создать два инструмента для проекта безопасности в моем университете.Первым инструментом является злоумышленник ARP Poisonning, который отравляет кэш ARP с удаленного хоста, чтобы извлечь данные, которые он отправляет на другой хост.Я написал этот инструмент на C, используя RAW-сокеты, и он отлично работает, я могу перехватывать данные, передаваемые с хоста A на хост B и с хоста B обратно на хост A.
Проблема возникаетпри написании второго инструмента, который является анализатором, целью которого является чтение / редактирование / удаление пакетов, поступающих с хоста A или хоста B. Я представил систему, в которой, когда я обнаруживаю пакет, поступающий с одного из этих хостов, моя программа спросит меня,Я хочу, чтобы этот пакет прошел, если я хочу изменить его или просто хочу отбросить его.Я активировал IP-пересылку в Linux, используя
sysctl -w net.ipv4.ip_forward=1
, и я могу читать все данные, передаваемые между двумя хостами.Но я не знаю, как редактировать / отбрасывать эти пакеты, так как сетевой стек Linux играет роль для управления вводом и выводом пакетов, поступающих из моего сетевого интерфейса.Я действую как пассивный злоумышленник, если хотите.
Моей первой идеей было отключить пересылку ip и самостоятельно управлять маршрутизацией пакетов.Но когда я отключаю переадресацию ip, я просто не могу получить данные, поступающие из A или B, потому что сетевой стек linux автоматически отбрасывает пакеты в режиме ядра, IP-адрес которых не предназначен для моего компьютера.
Затем я попытался активировать случайный режим, но это было излишним, поскольку этот режим работает только на физическом уровне (проверяет, соответствует ли целевой MAC-адрес в полученном пакете Ethernet MAC-адресу на локальном интерфейсе).Таким образом, случайный режим помогает нам избежать физического фильтра стека linux, но не логического (целевого IP-адреса в пакете, который я получаю).Это IP-адрес B, а не мой, поэтому сетевой стек linux просто отбрасывает пакет)хочу.Я знаю, что это сложный вопрос, я провел некоторое исследование, чтобы найти решение самостоятельно, но я не нашел удовлетворительного ответа.
Я знаю, что есть решение с iptables Мы можем попросить его пропустить некоторые пакеты с определенного IP-адреса, но я не хочу, чтобы решение включало сторонний инструмент, я хочу инкапсулировать все в моей программе.
Для информации,Средой разработки является Linux / Ubuntu Kernel 3.0.0-16, и все сделано с использованием языка C.