Хочется поприветствовать тех, кто выстоял, ведь этот туториал ,кажется, может утомить ))).
Мы помним, как в прошлом шаге не рекомендовалось запускать программу.
В этом шаге мы устраним это недоразумение.
Дело в том, что программа, которая рассматривалась в прошлом шаге, двумя потоками генерировала неверное соответствие
IPA – MAC(IPAttack) и IPB – MAC(IPAttack) у атакуемых машин.
Так вот, если мы просто остановим эти потоки и не исправим ложное соответствие на истинное
IPA – MAC(IPA) и IPB – MAC(IPB), то атакованным машинам придется ждать обновлений в своих
локальных arp-таблицах какое-то время, или попросту ждать своей перезагрузки.
Но мы хотим все провести программно и грамотно.
Для корректировки данных, испорченных предшествующими потоками, мы запустим те же потоки снова,
но новые потоки будут подавать обеим машинам истинные IP-MAC соответствия.


Вот как раз этим мы и займемся в рамках функции ResetSpoof().
Мы запустили два новых потока с истинными данными.
Причем мы даем 5-10 секунд на то, чтобы потоки поработали и "убедили" атакованные машины сменить данные в локальных arp – таблицах.
Далее просто останавливаем эти потоки и освобождаем память. Все, программу можно спокойно закрывать.
Остается один вопрос – как отловить признак завершения программы пользователем в консольном приложении?
Этот вопрос успешно решается функцией SetConsoleCtrlHandler().
Простой пример использования этой полезной функции вы найдете по пути:
"sources/__sheva740/miracle/03/files/setConHandl/setConHandl.asm"
Поэкспериментируйте с ней, запустите и наберите Ctrl+С. Через несколько секунд процесс завершится и все станет понятней.
Итак, у нас по пути:
"sources/__sheva740/miracle/03/files/arpspoof_sub2/src/arpspoof_sub2.asm"
… программа, которую можно безопасно запустить.
Результатом ее работы будет обрыв сетевого обмена атакованной машины (IPA) с шлюзом (IPB).
Причем программа корректно завершается, восстанавливая после себя все соответствия на атакованных хостах.
Если помните второй шаг, то там мы наметили себе еще задачу перехвата трафика с IPA к IPB. Как реализовать эту задачу?
Сделать это можно средствами WinPcap. В ее недрах есть функция pcap_loop()
Что это за функция?
Открыв интерфейс по pcap_open_live() и получив его хендл, передаем его pcap_loop().
Эта функция будет получать указатель на все заголовки получаемых/передаваемых пакетов с/на этот интерфейс.
Так, уже проще. )))
Посмотрим на ее заголовок:
pcap_loop(adhandle, 0, offset packet_handler, NULL)
где
adhandle – указанный выше хендл открытого интерфейса
offset packet_handler – адрес callback функции, которая должна так же быть организованна правильно.
Приведем выдержку из справки:
void packet_handler (u_char *user, struct pcap_pkthdr *phrd, u_char *pdata)
где
user - Пользовательский параметр, который передается в pcap_dispatch подпрограмму.
phdr - является указателем на pcap_pkthdr структуру, которая предшествует каждому пакету.
pdata - указывает на данные пакета. Это позволяет пользователям определять собственную обработку фильтрованных пакетов.
Так и сделаем.
В рамках функции packet_handler() вызываем функцию ForwardPacket() и уже в рамках которой будем получать тело пакетов
(указатель pktdata) и анализировать его.
Вот наступил долгожданный момент, и мы получили пакет. Пакет прошел длинный путь
pcap_loop() – packet_handler() – ForwardPacket().
В рамках последней функции мы получили указатель на заголовок и тело пакета.
Давайте теперь откроем исходник функции ForwardPacket() и вместе проследим по нему.
Получаем заголовок tcp - пакета, и берем из него IP-отправителя, и IP-назначения.
Начинаем отлавливать и обрабатывать поток IPA-IPB.

Изменив заголовок пакета, отправляем его снова в сеть.
Начинаем отлавливать и обрабатывать поток IPB-IPA.

Изменив заголовок пакета, отправляем его снова в сеть
Кажется понятно?
- если я получил пакет от IPA, я изменяю его так чтобы он пошел к IPB.
- если я получил пакет от IPB, я изменяю его так чтобы он пошел к IPA.
Кстати, в этом месте программы можно дополнить функцию ForwardPacket() более
сложной обработкой или, прости Господи – подменой, данных в пакете, тут очень удобно будет с ним работать.

Подведем итоги. Полностью работающая программа лежит по пути:
"sources/__sheva740/miracle/03/files/arpspoof/src/arpspoof.asm"
Также в папке files вы найдете простую программку по обнаружению атаки этого типа.
Эта консольная программа покажет, какие машины в сети меняли свои MAC адреса. Далее , если вы поняли,
где меняются адреса, нужно сесть за одну из них и позапускать
сниффер для определения хоста который ей шлет ARP-пакеты с ложными MAC-адресами. Вот та, которая шлет, та и есть "преступник". ))
Программу монитора смены MAC – ов можно найти тут:
"sources/__sheva740/miracle/03/files/macmon/macmon.exe"
Просто запускаем и ждем сообщений.
Проект не был сложным.
Нам удалось детально во всем разобраться, порисовать алгоритмы и уловить закономерности.
Так же мы смогли привести промежуточные результаты проектирования.
Были разработаны вспомогательные утилиты.
В общем, было увлекательно.
Но всему под солнцем должен придти конец, для того чтобы уступить место еще более лучшему. )))
Так что – До свиданья друзья!
<<< Часть 2
Исходники: sources/__sheva740/miracle/03/files
______________________________
__sheva740
2012
Inception E-Zine
|