1. 네트워크 주소 식별 체계에 관해
네트워킹을 하는 장치들은 제각기 2종류의 고유 주소를 갖고 있습니다. 바로 MAC 주소와 IP 주소입니다. 대게 IP 주소만을 이용하여 패킷이 목적지에 해당하는 호스트를 찾아간다고 생각할 수 있으나, 이는 잘못된 생각입니다.
통신 단말들은 LAN이라는 그룹 환경을 이루고, 패킷이 최종 목적지까지 도달하는 과정에서 스위치나 브릿지와 같은 중계 장비를 통과해야만 하는데, 이 때 목적지의 MAC 주소가 있어야 하기 때문이죠. 직전에 라우팅 과정에서 IP 주소가 쓰이므로, 결국 데이터 송신자는 목적지의 MAC 주소와 IP 주소를 모두 알고있는 상태에서 통신을 수행하는 셈입니다.
다만, 한 가지 의아한 부분이 있습니다. 한 번도 통신해본 적이 없는 상대방의 MAC 주소를 어떻게 알아낼 수 있을까요? 서버의 주소지를 publish하거나 심지어 간단한 ping 메시지를 보낼 때에도 IP 주소를 이용하지, MAC 주소를 입력하지는 않습니다.
IP 주소는 OSI 모델의 3번째 계층인 Network Layer에, 그리고 MAC 주소는 이보다 한 단계 아래 계층인 Data Link Layer에 기록됩니다. 목적지의 IP 주소가 제공된다면, 두 OSI 계층 사이 어딘가에서 IP 주소에 대응하는 MAC 주소를 찾아내는 매커니즘이 동작하고 있음을 의미합니다.
2. ARP (Address Resolution Protocol)
ARP
(Address Resolution Protocol)은 IP 주소와 MAC 주소를 매핑하는 프로토콜입니다. DNS가 도메인에 매칭되는 IP를 찾아주듯이, ARP 역시 주소를 조회하는 request
와 reply
메시지를 통해 목적지 IP에 해당하는 호스트의 MAC 주소를 확인합니다.
ARP request/reply 메시지
각 통신 단말들은 ARP 캐시
(ARP cache)로 IP와 MAC 주소 간의 매핑을 기억하는데요. 만약 송신자가 특정 IP 주소에 대한 MAC 주소를 모르는 경우, ARP 패킷이 네트워크 상에 뿌려지게 됩니다.
위 도식과 같이 컴퓨터 3대 (A
, B
, C
)가 같은 네트워크 스위치를 통해 연결되어 있다고 합시다. 컴퓨터 A
가 컴퓨터 B
와 통신을 하고는 싶으나, 컴퓨터 B
가 네트워크 상 어딘가에 있을거라는 정도만 알지, 정확한 위치를 모르는 상태입니다.
따라서, 컴퓨터 A는 동일한 네트워크에 존재하는 모든 호스트가 볼 수 있도록 ARP Request
메시지를 퍼트립니다. 이 때 목적지의 MAC 주소를 FF:FF:FF:FF:FF:FF
로 표기한 채로 말이죠. 이렇게 하면 임의의 호스트에게 ARP Request
가 골고루 전송될 수 있으니까요.
ARP Request
메시지에는 송신자가 찾고자하는 대상의 IP 주소가 기재되어 있습니다. 해당 메시지를 받은 호스트 중에서 제시된 IP가 자신의 것과 일치하는 대상만이 ARP Reply
를 송신자에게 전송하며, 전송하는 Reply 메시지의 MAC 주소 필드에 자신의 MAC 주소를 채워넣습니다.
ARP Reply를 받은 컴퓨터 A
는 컴퓨터 B
의 MAC 주소를 확인했으므로 이제부터 둘 간의 정상적인 일대일 통신이 이뤄질 수 있습니다.
Wireshark로 본 ARP 메시지 교환 과정은 아래와 같습니다.
ARP request
의 Destination
열이 ‘Broadcast’로 표기되었고 Target MAC address
부분이 공란인 점이 눈에 띄죠.
그에 반해, ARP reply
메시지에는 찾고자 하는 대상의 MAC 주소 파악이 완료되어, 송신부(Sender)와 수신부(Target)의 MAC 주소 정보가 모두 채워졌음을 확인할 수 있습니다.
ARP의 보안 상의 허점
ARP의 단순한 동작 메커니즘은 reply
메시지를 보낸 상대에 대해 실질적인 인증을 요구하지 않습니다. 다른 의미로는, 전혀 상관없는 호스트가 브로드캐스팅된 ARP request
에 반응하여 자신의 MAC 주소를 보내더라도 걸리지 않는다는 겁니다. ARP reply
의 발신자가 찾고자 하는 IP 주소의 실제 소유자인지를 바로 알아챌 방법이 없습니다.
또한 ARP request
를 보낸 적이 없는데도 신원 파악이 안된 다른 호스트로부터 ARP reply
를 받을 수 있습니다. 이렇게되면 비정상적인 MAC 주소가 호스트의 ARP cache에 고스란히 담겨지겠죠.
3. ARP spoofing
ARP spoofing, 또는 ARP cache Poisioning 이라고 불리는 공격은 앞에서 설명한 ARP 프로토콜의 보안 취약점을 응용하여 만들어진 기법입니다. ARP spoofing은 중간자 공격(Man in the Middle, MitM)의 속성을 지녀 두 호스트간의 통신을 가로채는 것에 목적을 두고 있습니다.
위와 같이 임의의 호스트와 라우터가 연결된 상황을 가정해 봅니다. ARP spoofing이 일어나는 과정을 나열해본다면,
- 먼저 공격자는 타겟 호스트가 속한 네트워크에 접근할 수 있어야 합니다. 통신을 엿듣고자 하는 두 장치의 IP 주소를 스캔할 수 있어야 하죠.
- 공격자는 위조된
ARP reply
메시지를 호스트와 라우터에 각각 하나씩 보냅니다. 호스트에게 보내는 reply 메시지는 발신자를 라우터(192.168.1.1
)로, 라우터에게 보내는 reply는 발신자를 호스트(192.168.1.100
)으로 표시하는데요. 이 때, 두 메시지 모두 발신자 MAC 주소를 공격자의 MAC 주소로 일치시킵니다. - 공격에 노출된 두 장치는 각자 ARP cache를 업데이트하게 됩니다.
- 각 노드들을 물리적으로 연결하는 스위치와 같은 장비들은 목적지 MAC 주소를 토대로 패킷을 포워딩합니다. 호스트 → 라우터로 향하는 패킷은 곧바로 공격자의 단말로 전달될 것이며, 마찬가지로 외부 네트워크를 거쳐 라우터 → 호스트로 향하는 패킷 역시 공격자를 거치게 됩니다.
ARP spoofing이 성공하면 다음과 같은 추가 피해를 야기할 수 있습니다.
- 개인 정보 탈취: 공격자는 패킷 내에 있는 중요한 정보들을 확인하고 몰래 빼돌릴 수 있습니다.
- Session Hijacking: 호스트의 세션을 가로채서 별도의 인증 없이 사용자 계정 및 시스템에 접근하여 데이터나 여러 시스템 자원을 마음대로 활용할 수 있습니다.
- Malware/Mal-script 감염: 공격자는 패킷에 악성 파일이나 스크립트를 심어 타겟 호스트에게 전달하기도 합니다.
ARP 프로토콜의 취약점 때문에 IPv4 사용 환경에서만 ARP가 채택되고 있고, IPv6 프로토콜은 기존 ARP를 좀 더 보완한 버전인 NDP (Neighbor Discovery Protocol)를 활용하고 있습니다. 다만, IPv4 체계는 지금 현재도 계속 쓰이고 있기 때문에 ARP 패킷 역시 네트워크 곳곳에서 여전히 쉽게 발견할 수 있습니다.
4. ARP Spoofing을 탐지/예방하는 방법
ARP spoofing 탐지는 아주 쉽게 이뤄질 수 있습니다. Windows에서는 arp -a
, Linux 계열에서는 arp -n
명령어를 터미널에 입력하면 PC의 ARP table을 조회 가능합니다.
ARP table에는 IP 주소와 그에 대응하는 MAC 주소(OS에 따라 ‘물리적 주소' 또는 ‘HWaddress’ 등으로 표기)가 기록되어 있습니다. 만약, IP는 다른데 동일한 MAC 주소를 공유하고 있다면 ARP Spoofing 공격을 의심해봐야 합니다.
ARP spoofing 공격이 들어오기 전에 사전에 미리 예방하는 방법도 있습니다.
정적인 ARP 테이블 활용
ARP 테이블의 entry가 변동되는 일이 없도록, 내부망에 존재하는 네트워크 기기마다 고정 IP와 MAC 주소를 할당하고 기기에 들어온 다른 ARP reply 메시지를 차단하는 방법입니다.
패킷 모니터링
당연한 이야기이겠지만, IDS/IPS 또는 방화벽 등의 장비·소프트웨어를 배치하여 의심되는 트래픽을 차단하는 것이 중요합니다. ARP reply를 통해 MAC 주소 정보가 자주 뒤바뀐다면 ARP spoofing이 이뤄지고 있을 가능성이 높다고 봐야겠죠.
암호화 및 VLAN 사용
대게 ARP spoofing과 연계된 중간자 공격은 서버와 클라이언트 간의 통신을 타겟으로 삼을텐데요. HTTPS나 SSH와 같은 보안 채널을 이용하면 공격이 진행 중이더라도 당장은 전송되는 데이터를 Sniffing으로부터 보호할 수 있습니다.
또한, VLAN을 이용하여 작업 그룹을 분리하는 것도 도움됩니다. 네트워크 기기들이 서로 다른 브로드캐스트 도메인으로 나눠지기 때문에, ARP 공격 피해를 입는 네트워크 범위를 좁힐 수 있으며 네트워크 관리 단순화 및 네트워크 보안 향상에 크게 기여할 수 있습니다.