Вопрос: Отправить пакет (фрейм) с другим «MAC-адресом отправителя»?


Я просто изучал книгу «Сеть +», где объясняет содержимое фрейма с использованием блоков для представления набора бит. Двигаясь вперед, он утверждает, что первым «блоком» является MAC-адрес получателя. После этого блок будет MAC-адресом отправителя.

Мне было интересно, можно ли перехватить кадр перед его отправкой, обнулить MAC-адрес отправителя (или написать случайный вариант вместо вашего фактического MAC), прежде чем отправлять кадр через?


2
2018-03-03 04:44


Источник


Конечно, это возможно, но это действительно полезно для UDP. Чтобы подделать сеансы TCP, вам необходимо выполнить рукопожатие, что практически невозможно, если вы не получили ответ на отправленный вами пакет. - tripleee
@ tripleee. Вопрос этого вопроса полностью ограничен уровнем 2. Если говорить, что если вы сказали, что это правда, вы не сможете запускать виртуальные машины с мостовыми сетями, но вы можете. Конечно, вы сможете получать пакеты, направленные на любой MAC-адрес. - Daniel B


Ответы:


Ethernet

Над Ethernet - да, весь кадр, включая его Ethernet-заголовок, отправляется вашей операционной системой, и ОС решает, какой исходный MAC-адрес использовать.

  • Фактически, системы виртуальных машин (например, VMware или Hyper-V) уже используют это для подключения виртуальных машин к вашей реальной локальной сети - у вас может быть несколько виртуальных машин, подключенных к одной карте Ethernet, и каждая виртуальная машина будет иметь свой собственный MAC-адрес, независимо от хоста ,

  • Linux, FreeBSD, Windows даже имеют возможность создавать «мосты», связывающие несколько физических Ethernet-интерфейсов вместе, работая точно так же, как настоящий коммутатор Ethernet (даже с VLAN и RSTP).

методы

Вы можете либо изменить MAC-адрес сетевого интерфейса (указывая ОС на использование нового адреса для все он передает), или использовать «сырые сокеты» из отдельной программы для создания и отправки любых понравившихся вам файлов в обход стека TCP / IP. Для последних используйте существующие инструменты, такие как libpcap, Scapy, или Немезида.

  • В Linux, ip link изменит MAC-адрес до следующей перезагрузки:

    # ip link set eth0 down
    # ip link set eth0 addr ab:cd:ef:ab:cd:ef
    # ip link set eth0 up
    
  • Или отправьте отдельные пакеты с scapy:

    >>> send(Ether(src="ab:cd:ef:ab:cd:ef", dst="ff:ff:ff:ff:ff:ff")/IP(src="1.2.3.4", dst="3.4.5.6")/UDP(dport=9)/b"hello")
    Sent 1 packets.
    
  • Linux даже имеет функцию «macvlan» для создания виртуальных интерфейсов с разными MAC-адресами на одной физической карте Ethernet:

    # ip link add fred0 link eth0 type macvlan mode private
    

Вай-фай

Вай-фай является немного более ограничительным - вы не могу отправлять отдельные пакеты с поддельным источником, поскольку AP отслеживают все связанные с ним станции и будут (AFAIK) отбрасывать пакеты, исходящие от любого MAC-адреса, который не находится в списке «связанных станций».

(Это с точки зрения станции. AP могут делать все, что захотят - это часть их работы, в конце концов, отправлять пакеты от имени проводных устройств.)

Однако вы все еще может установить другой MAC-адрес на беспроводном интерфейсе и использовать этот новый адрес для все, начиная с ассоциации / аутентификации в AP.

Однако, в отличие от Ethernet, способность делать это зависит от конкретного беспроводного оборудования и драйверов (например, Atheros обычно поддерживает это, в то время как некоторые карты Realtek не могут). В Linux же ip link … команды должны работать.

L2-мост

Тем не менее, есть способы реализовать перекрестку уровня 2 с помощью Wi-Fi (например, если вам нужно подключить все здание по направленной радиосвязи).

(Ладно, сейчас это немного не по теме, но включено для полноты.)

Это немного сложнее, чем Ethernet, поскольку существуют отдельные концепции исходного источника (хост, который сгенерировал пакет) и передатчик (Wi-Fi-радио, которое передало пакет); аналогичным образом, приемник (Wi-Fi-радио, получивший пакет) и конечный пункт назначения (хост, который будет читать / потреблять пакет).

  • Например, если компьютер A (например, ноутбук) отправляет пакет на компьютер B через WiFi, он будет иметь такие заголовки:

    • из (исходного источника): <адрес компьютера A>
    • (получение Wi-Fi-радио): <адрес маршрутизатора Wi-Fi>
    • к (конечный пункт назначения): <адрес компьютера B>

    Обратите внимание, что есть только один адрес «от», при условии, что обычные Wi-Fi-станции никогда не будут отправлять пакеты от имени какого-либо другого устройства. Это экономит 6 байтов на пакет.

  • Это наоборот от AP к станции - есть два адреса «от», «исходный отправитель» и «передача AP», но только один адрес «to».

Поэтому, когда вам нужно соединить два Ethernet сети через Wi-Fi, вам нужен «WDS», также известный как «4addr», который заставляет все четыре адреса - два источника и два адресата - отправляться вместе с каждым фреймом Wi-Fi. Поддержка этого варьируется. В Linux вы можете сделать это через iw,

Обратите внимание, что режим WDS / 4addr должен быть включен и то и другое заканчивается.

L2 NAT

Некоторые системы, такие как VirtualBox или Ubiquiti airMAX-радиоприемники (при настройке в качестве станции без WDS) или OpenWRT в одной конфигурации - поддерживают преобразование MAC-адресов: маскирование нескольких клиентов между собственным MAC-адресом станции, подобно IPv4 NAT, но при Нижний уровень. Это работает без какой-либо конфигурации и может быть более эффективным; однако он создает проблемы, если что-то вроде DHCP-сервера зависит от MAC-адресов клиентов, отличающихся друг от друга.

(Это фактически противоположно тому, с чего мы начали: несколько устройств за одним MAC, а не одно устройство с несколькими MAC-адресами, поэтому давайте остановимся здесь.)

блютуз

Я не уверен в Bluetooth. AFAIK, большинство адаптеров не позволят вам изменять или иным образом обманывать свой MAC-адрес, поскольку это единственный метод адресации, используемый всеми коммуникационными устройствами - устройства распознают друг друга по их MAC-адресам и хранят ссылки на основе MAC-адреса ... В любом случае , Не моя область.


6
2018-03-03 06:21



Это отвечает на мой вопрос, но вы исключили свой ответ только на Ethernet-соединения. Не возможно ли использовать Wi-Fi? - codefl0w
@Excaliber Вы ничего не говорили о WiFi. ;) Нет, он не работает должным образом с WiFi, если ваше соединение не «подделано». Это связано с тем, что точка доступа будет передавать трафик только известным (связанным) клиентам. Обычно эта ассоциация выполняется с реальным MAC-адресом вашего WiFi PHY. - Daniel B
@Excaliber: Обновлено. - grawity
@grawity Существует также перевод MAC-адресов, это то, что некоторые устройства Broadcom делают для поддержки мостового клиентского режима, - Daniel B
@DanielB: Спасибо, обновлено. Я думаю, что я видел это на станциях Ubiquiti, и, по моему опыту, он создает некоторые странный и трудно найти проблемы. - grawity