Security

About ARP Spoofing

oxdjww 2023. 9. 24. 02:13
728x90
반응형

Previous Posts

About IP Address
About MAC Address
About ARP

ARP Spoofing Attack이란?

ARP reply packet의 target MAC address를 attacker MAC address로 변조하여 victim의 arp table을 감염시키는 공격이다.

공격 시 infected vitci이 LAN 외부의 host와 통신을 시도하는 경우, 패킷이 gateway가 아닌 attacker에게 전송되게 된다.

이를 통해 host가 정상적인 네트워크 통신을 할 수 없는 효과를 기대할 수 있는 공격이다.

Terms


sender(victim) : 공격의 대상이 될 host
attacker : 공격자
target(gateway) : 위장할 대상

Infection Scenario


  1. Get sender, target IP address from command line argument
  2. insert pairs of sender-target IP address to 'Flow' structure
  3. Get host IP/MAC address, sender, target MAC address
  4. Infect victim (Attacker sends ARP reply packet to victim)
  5. Reinfect victim when victim's ARP table refreshed (Attacker sends ARP reply packet to victim)
  6. Send malicious ARP reply packet continuously to victim

Test in Private Domain


Configuration


hypervisor : VMWare Pro 17

sender(victim) : Mac OS (Host OS)
attacker : kali linux 64bit(Guest OS) on Window 64bit (Host OS)
target(gateway) : Wifi Router (LAN)

LAN : same domain

Attack Flow


sudo ./arp-spoof {sender IP addr} {target IP addr} {target IP addr} {sender IP addr}

실제로 arp spoof 실습시에, sender IP 에는 Mac OS의 IP address, target IP에는 공유기의 IP address를 argument로 넣었다.

이런 공격으로 기대할 수 있는 효과는 다음과 같다.

  1. 첫 번째 쌍({sender IP addr} {target IP addr})의 Flow에서, Mac OS(sender)의 arp table에서, 공유기(target)의 mac addr가 attacker의 mac addr로 변조된다.
  2. 두 번째 쌍({target IP addr} {sender IP addr})의 Flow에서, 공유기(target)의 arp table의 Mac OS(sender)의 mac addr가 attacker의 mac addr로 변조된다.
  3. 1., 2.를 간단하게 요약하자면, 같은 LAN에 있는 두 node(router, Mac OS)가 서로의 MAC address를 attacker의 MAC address로 인식하게 된다.
  4. 추가적으로, 다양한 이유들로 인해 sender의 arp table이 refresh될 수 있다. refresh 될 수 있는 case들을 탐지하여, infect packet(ARP reply packet)을 다시 보내어 감염된 상태를 유지시킬 수 있도록 한다.
bool isRefreshed(pcap_t *handle, const u_char *receivedPkt, Flow flow)
{
    EthArpPacket *pkt = (EthArpPacket *)receivedPkt;
    // case : broadcast (ARP)
    if (pkt->eth_.type_ == ntohs(EthHdr::Arp) && pkt->eth_.dmac_ == Mac::broadcastMac())
    {
        // sender arp table의 임의의 node cache가 만료되어 broadcast를 할 때
        if (ntohl(pkt->arp_.sip_) == flow.senderIp && pkt->eth_.smac_ == flow.senderMac)
        {
            printf("[*] sender refreshed by sender broadcast..\n");
            return true;
        }
        // target arp table의 임의의 node cache가 만료되어 broadcast를 할 때
        if (ntohl(pkt->arp_.sip_) == flow.targetIp && pkt->eth_.smac_ == flow.targetMac)
        {
            printf("[*] sender refreshed by target broadcast..\n");
            return true;
        }
    }
    else // case : unicast
    {
        // sender -> target 으로 unicast packet(IP packet)이 전송될 때
        if (ntohl(pkt->arp_.sip_) == flow.senderIp && pkt->eth_.smac_ == flow.senderMac)
        {
            if (ntohl(pkt->arp_.tip_) == flow.targetIp && pkt->arp_.tmac_ == flow.attackerMac)
            {
                printf("[*] sender refreshed by sender->target unicast..\n");
                return true;
            }
        }
    }
    return false;
}

이 외에도 다양한 이유로 arp table이 refresh 되는 경우가 있다. 이를 위해 daemon thread로 10초간격으로 지속적으로 infect packet을 전송하도록 한다.

  1. 이렇게 sender를 지속적으로 감염시켜 공격자가 활용할 수 있는 예시를 설명하자면 다음과 같다.

Mac OS(sender)에서 외부로 패킷을 보낼 때 (ex. ping 8.8.8.8 //구글로 핑을 보냄, 혹은 외부로 http request packet을 보냄) 라우터를 거쳐서 보내야 하는데 이 ICMP request packet은 attacker에게 가게 된다.

그래서 외부로 패킷이 전송될 때, attacker는 수신한 IP(ICMP) request packet을 변조하여 router에게 전달한다.
router에서는 그대로 이 변조된 ICMP request packet을 8.8.8.8에 전송하게 된다.

request에 대한 reply응답이 오면, 이 응답도 마찬가지로 router(wifi, 즉 gateway) -> attacker -> sender 이 흐름으로 전달되게 된다.

2.에서 설정한 두 번째 flow로 진행된 감염이 target의 arp table도 변조시켰기에 reply packet이 성공적으로 relay되어 sender에게 전달되는 것을 돕는다.

결론적으로, sender와 target은 본인이 감염된 상태인지도 모른 상태에서 packet을 주고 받으며 attacker는 그 사이에서 plain text인 packet은 모두 볼 수 있다.

Wireshark


  • attacker
    • getting Info
    • SpoofThread #1, #2
    • reinfect when sender is refreshed
  • sender
    • arp table의 MAC addr이 바뀌었지만, IP packet이 relay되는 모습

Ref


arp-spoofing.io

728x90
반응형

'Security' 카테고리의 다른 글

대칭키 암호 시스템  (0) 2023.10.02
메시지 변조 감지 코드(MDC)  (0) 2023.09.29
암호학적 해시 함수  (0) 2023.09.28
보안 기본 개념 및 공격모델  (0) 2023.09.26
정보보안의 이해  (0) 2023.09.26