CISCO
Protovolo ARP – Address Resolution Protocol
Como você pergunta para alguém que acabou de conhecer, o seu nome?
O ARP é um protocolo de pergunta e resposta utilizado para mapear dinamicamente endereços da camada 3 (rede) com a camada 2 (enlace). Tipicamente, ele é utilizado para mapear endereços IPs (Internet Protocol) em endereços MAC (Media Access Control).
Para controlar esse mapeamento, o protocolo ARP mantém uma tabela chamada ARP Table. Sempre que um novo pacote com endereços MAC ou IP aparecem e ainda não estão na tabela ARP ou precisam se atualizar, o protocolo modifica a tabela com os novos dados.
O protocolo ARP foi originalmente definido pela RFC 826. Nesse artigo vamos abordar as características do protocolo, seu funcionamento com alguns exemplos de código escritos na linguagem C.
Tente entender o seu funcionamento
A imagem acima exemplifica o funcionamento básico do protocolo ARP. O computador da esquerda envia um pergunta ARP querendo saber qual o endereço MAC do computador cujo endereço IP é 10.0.0.5. Essa pergunta é enviada para rede na forma de broadcast.
O computador da direita então responde a pergunta ARP dizendo que endereço MAC do computador com ip 10.0.0.5 é 00:00:00:00:00:02. Cada computador armazena em sua tabela ARP os mapeamentos de endereços aprendidos. Essa informação é utilizada como cache em momentos futuros.
Seu cabeçalho
O protocolo ARP trafega em seus pacotes um conjunto pequeno de dados sobre máquinas de origem e destino. A imagem abaixo mostra cada campo dentro do cabeçalho ARP:
Vamos compreender cada campo do cabeçalho
Tipo de hardware
O Protocolo ARP não é exclusivo de um equipamento. Esse campo de 2 bytes permite guardar um número que define qual o tipo do equipamento daquele pacote. No caso mais comum, com equipamentos Ethernet, temos que o valor desse campo seria: 0x0001
Tipo de protocolo
Assim como para o campo tipo de hardware o ARP permite mais de um endereço de protocolo. Para tal, esse campo também tem 2 bytes e armazena o tipo do protocolo ao qual será mapeado o endereço de equipamento (hardware). No caso comum, o protocolo IP é utilizado e seu valor para o campo seria: 0x0800
Tamanho endereço hardware
Como o tipo de hardware varia, o tamanho necessário para armazenar o endereço desse hardware também. No nosso exemplo, para colocar no pacote um endereço Ethernet (MAC address) são necessário 6 bytes, então o valor desse campo é 6.
Tamanho endereço protocolo
Com a variação do tipo de protocolo, variamos também o tamanho do endereço do protocolo. Para nosso exemplo utilizando o IP, temos um valor 4 para o campo.
Opções
Esse campo define o tipo do pacote ARP. Ele pode ser um pacote de requisição (request) ou de resposta (response). Para cada um desses tipos, teríamos os valores 0x0001 e 0x0002, respectivamente.
Endereço de hardware de origem
Esse campo recebe o endereço do equipamento de quem está enviando o pacote. Se o hardware for Ethernet, por exemplo, teríamos o seguinte valor: 00:00:00:00:00:01.
Endereço de protocolo de origem
Esse é o endereço do protocolo de origem. Se considerarmos o protocolo IP como exemplo, o valor poderia ser: 10.0.0.2.
Endereço de hardware de destino
Esse campo é reservado para receber o endereço do equipamento de destino. Se o hardware for Ethernet, por exemplo, teríamos o seguinte valor: 00:00:00:00:00:02.
Endereço de protocolo de destino
Esse é o endereço do protocolo de destino. Se considerarmos o protocolo IP como exemplo, o valor poderia ser: 10.0.0.5
Um exemplo de frame do protocolo ARP para o nosso exemplo de ARP reply mostrado na seção FUNCIONAMENTO seria:
SONDAGEM ARP (ARP PROBE)
A sondagem ARP acontece quando um computador recebe um endereço IP, manualmente ou via DHCP, para verificar se outra máquina na rede já possui esse IP. A RFC 5227 especifica essa sondagem.
Para enviar pacotes de sonda, é necessário montar um pacote ARP onde o IP de destino é o endereço desejado e o IP de origem deve ser composto por zeros. O zeros evitam que outros nós façam cache desse endereço. Quando recebe-se um reply confirmando o endereço, tem um conflito de endereços.
ARP INVERSO (INARP)
O ARP inverso ou Inverse Address Resolution Protocol (RFC 2390), é uma extensão do protocolo ARP que permite fazer o caminho inverso do ARP padrão. Ele descobre o endereço de protocolo (IP por exemplo) a partir do endereço de hardware (Ethernet por exemplo).
Para permitir isso, ele utiliza o mesmo frame ARP mas com novos códigos de operação: 8 e 9, InARP request e InARP response, respectivamente.
O ARP Inverso não utiliza broadcast, pois o endereço de hardware de destino já é conhecido. O campo Endereço de protocolo de destino é preenchido com zeros. Através dos códigos de operação (8 e 9), o pacote é encaminhado pela rede até o computador de destino.
ARP SPOOFING / ARP POISONING
Spoofing ou Poisoning de ARP é uma técnica de ataque utilizando protocolo ARP. O Poisoning (envenenamento) acontece quando um atacante dispara mensagens ARP na rede dizendo que o computador dele responde pelo endereço IP de alguma outra máquina na rede, o default gateway, por exemplo.
Se o ataque funcionar, o computador do atacante passa a receber os pacotes destinados ao computado atacado. Recebendo esses pacotes, ele pode modificá-los, não encaminhá-los, mandar para outros computadores e etc.
ARP GRATUITO (GRATUITOUS ARP)
O ARP gratuito é uma forma de um computador se anunciar na rede. Esse pacote não é uma resposta a nenhuma requisição ARP. O computador envia esse pacote na forma de broadcast de forma voluntária e gratuita.
Para construir um frame ARP gratuito é necessário colocar os Endereços de protocolo da origem e do destino como o endereço (IP por exemplo) do computador que irá enviar o ARP gratuito. Além disso, o Endereço de hardware de destino deve ser um endereço de broadcast, no caso do Ethernet, seria ff:ff:ff:ff:ff:ff. Essa requisição não necessita de nenhuma resposta. Os demais campos continuam normais a uma requisição ARP.
Um pacote de ARP gratuito para o nosso exemplo inicial a esse artigo poderia ser:
PROXY ARP
O proxy ARP, ou aproximação ARP, é uma forma de fazer com que sub-redes diferentes consigam receber pacotes ARP uma da outra. Esse mecanismo é definido na RFC 1027.
Uma forma de implementar o proxy é colocando o default gateway das duas redes apontando para o mesmo computador/gateway . Assim, esse computador sempre que receber pacotes ARP direcionados à uma sub-rede, ele apenas encaminha para essa rede. A mesma coisa é feita para o caminho inverso.
Para possibilitar o encaminhamento, é necessário modificar os pacotes colocando os endereços do computador/gateway para que as redes locais consigam comunicar-se. Todos os pacotes de uma sub-rede externa à atual, contém como endereços de hardware o endereço do computador/gateway.