Questão Enviar pacote (frame) com diferente 'Sender's MAC'?


Eu estava apenas estudando o livro Network + onde explica o conteúdo de um Frame usando blocos para representar um conjunto de bits. Seguindo em frente, afirma que o primeiro 'bloco' é o endereço MAC do destinatário. O bloco depois disso é o endereço MAC do remetente.

Eu queria saber se é possível interceptar um quadro antes de ser enviado, zerar o MAC do remetente (ou escrever um aleatório em vez de seu MAC real) antes de enviar o quadro?


2


origem


Claro que é possível, mas é apenas remotamente útil com o UDP. Para falsificar sessões TCP, você precisa fazer um handshake, o que é praticamente impossível se você não receber a resposta para o pacote que você enviou. - tripleee
@tripleee A preocupação dessa pergunta é limitada inteiramente à Camada 2. Dito isso, se o que você disse é verdade, você não conseguirá executar máquinas virtuais com a criação de uma rede em ponte, mas você pode. É claro que você poderá receber pacotes direcionados a qualquer endereço MAC. - Daniel B


Respostas:


Ethernet

Sobre Ethernet - sim, o quadro inteiro, incluindo o cabeçalho Ethernet, é enviado pelo sistema operacional e o sistema operacional decide qual endereço MAC de origem usar.

  • Na verdade, sistemas de máquinas virtuais (como VMware ou Hyper-V) já usam isso para conectar VMs à sua LAN real - você pode ter várias VMs conectadas a uma única placa Ethernet e cada VM terá seu próprio endereço MAC independente do host .

  • Linux, FreeBSD, Windows tem até uma opção para criar 'pontes' ligando múltiplas interfaces Ethernet físicas, trabalhando exatamente como um switch Ethernet real (mesmo com VLANs e RSTP).

Métodos

Você pode alterar o endereço MAC da interface de rede (informando ao SO para usar o novo endereço para tudo ele transmite) ou usa "soquetes brutos" de um programa individual para criar e enviar o que quiser, ignorando a pilha TCP / IP. Para este último, use ferramentas existentes como libpcap, Scapyou Nemesis.

  • No Linux, ip link mudaria o endereço MAC até a próxima reinicialização:

    # ip link set eth0 down
    # ip link set eth0 addr ab:cd:ef:ab:cd:ef
    # ip link set eth0 up
    
  • Ou envie pacotes individuais com 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.
    
  • O Linux até tem um recurso "macvlan" para criar interfaces virtuais com diferentes MACs no mesmo cartão Ethernet físico:

    # ip link add fred0 link eth0 type macvlan mode private
    

Wi-fi

Wi-fi é um pouco mais restritivo - você não podes enviar pacotes individuais com fonte falsificada, pois os APs rastreiam todas as estações associadas a ele e descartam (AFAIK) os pacotes provenientes de qualquer endereço MAC que não esteja na lista "estações associadas".

(Isso é da perspectiva de uma estação. Os APs podem fazer o que quiserem - afinal de contas, é parte do trabalho deles enviar pacotes em nome dos dispositivos com fio.)

No entanto, você ainda pode definir um endereço MAC diferente na interface sem fio e use esse novo endereço para tudo, começando com associação / autenticação para o AP.

Ao contrário da Ethernet, a capacidade de fazer isso depende do hardware e dos drivers sem fio específicos (por exemplo, Atheros normalmente suporta isso, enquanto alguns cartões da Realtek podem não funcionar). No Linux o mesmo ip link … comandos devem funcionar.

Ponte L2

Dito isso, há maneiras de implementar a ponte de camada 2 com Wi-Fi (por exemplo, se você precisar conectar um prédio inteiro a um link de rádio direcional).

(Ok, isso é um pouco fora do tópico agora, mas incluído para ser completo.)

É um pouco mais complicado do que Ethernet, pois existem conceitos separados de fonte original (host que gerou o pacote) e transmissor (rádio Wi-Fi que transmitiu o pacote); da mesma forma, receptor (rádio Wi-Fi que recebeu o pacote) e destino final (host que irá ler / consumir o pacote).

  • Por exemplo, se o computador A (por exemplo, um laptop) enviar um pacote para o computador B por WiFi, ele terá esses cabeçalhos:

    • de (fonte original): <endereço do computador A>
    • para (receber rádio Wi-Fi): <endereço do roteador Wi-Fi>
    • para (destino final): <endereço do computador B>

    Observe como há apenas um endereço 'de', supondo-se que estações Wi-Fi regulares nunca enviarão pacotes em nome de algum outro dispositivo. Isso economiza 6 bytes por pacote.

  • É o inverso do AP para a estação - há dois endereços 'de', 'remetente original' e 'AP de transmissão', mas somente um 'para' endereço.

Então, quando você precisa unir duas Ethernet redes por Wi-Fi, você precisa do modo "WDS" aka "4addr", o que faz com que todos os quatro endereços - duas fontes e dois destinos - sejam enviados junto com cada quadro Wi-Fi. O suporte para isso varia. No Linux você pode fazer isso através iw.

Observe que o modo WDS / 4addr deve estar ativado ambos termina.

L2 NAT

Alguns sistemas - como VirtualBox ou Ubiquiti airMAX (quando configurado como uma estação sem WDS), ou OpenWRT na mesma configuração - suportam tradução de endereços MAC: mascarando vários clientes entre o próprio endereço MAC da estação, muito parecido com NAT IPv4 mas em um nível mais baixo. Isso funciona sem qualquer configuração e pode ser mais eficiente; no entanto, cria problemas se algo como um servidor DHCP depender de os endereços MAC dos clientes serem diferentes.

(Isso é realmente o oposto do que começamos com - vários dispositivos por trás de um MAC, em vez de um dispositivo com vários MACs - então vamos parar por aqui.)

Bluetooth

Não tenho certeza sobre o Bluetooth. AFAIK, a maioria dos adaptadores não permite alterar nem falsificar seu endereço MAC, pois é o único método de endereçamento usado por todas as comunicações - os dispositivos reconhecem uns aos outros por seus endereços MAC e armazenam chaves de link com base no endereço MAC ... . Não é minha área.


6



Isso responde à minha pergunta, mas você excluiu sua resposta apenas para conexões Ethernet. Isso não é possível usando WiFi? - codefl0w
@Excaliber Você nunca disse nada sobre WiFi. ;) Não, ele não funciona corretamente com o Wi-Fi, a menos que toda a sua conexão seja "falsificada". Isso ocorre porque um ponto de acesso encaminhará o tráfego somente para clientes conhecidos (associados). Normalmente, essa associação é feita com o endereço MAC real do seu PHY WiFi. - Daniel B
@Excaliber: Atualizado. - grawity
@grawity Há também tradução de endereços MAC, é o que alguns dispositivos da Broadcom fazem para suportar o modo de cliente em ponte. - Daniel B
@DanielB: Obrigado Atualizada. Acho que já vi isso nas estações da Ubiquiti também, e na minha experiência cria algumas estranho e problemas difíceis de encontrar. - grawity