서론
ARP 스푸핑(ARP Spoofing)은 네트워크 보안 분야에서 오래전부터 연구되고 있는 공격 기법이다. 이 공격은 ARP 프로토콜의 구조적 한계를 악용하여 네트워크 트래픽을 가로채거나 변조하는 것을 목적으로 한다. 본 글에서는 ARP 프로토콜의 기본 개념을 시작으로, ARP 스푸핑의 작동 원리, 실제 공격 실습, 그리고 이를 방어하는 방법에 대해 알아보겠다.
ARP 프로토콜이란?
ARP(Address Resolution Protocol)는 네트워크 계층(IP)과 데이터 링크 계층(MAC) 사이의 주소 변환을 담당하는 프로토콜이다. 쉽게 말해, IP 네트워크 상에서 통신을 하려면 상대방의 IP 주소뿐만 아니라 MAC 주소도 알아야 한다. 이때 ARP가 사용된다.
작동 방식은 단순하다. 어떤 호스트가 목적지 IP 주소를 알고 있지만 MAC 주소를 모를 때, ARP 요청(ARP Request)을 네트워크에 브로드캐스트하여 해당 IP를 가진 호스트에게 자신의 MAC 주소를 알려달라고 요청한다. 이에 해당 호스트는 자신의 MAC 주소를 담아 ARP 응답(ARP Reply)을 보낸다.
ARP는 신뢰 기반의 단순한 프로토콜로, 기본적으로 인증이나 무결성 검증을 수행하지 않는다. 이 점이 바로 ARP 스푸핑이 가능한 이유이다.
자세한 내용은 ARP 프로토콜 동작 방식을 참조하자.
ARP 스푸핑의 원리
ARP 스푸핑은 ARP 프로토콜의 취약성을 악용한다. 공격자는 거짓된 ARP 응답을 네트워크 상에 보내 타겟 호스트의 ARP 테이블을 조작한다. 이로 인해 타겟은 공격자의 MAC 주소를 신뢰하게 되며, 모든 트래픽을 공격자에게 전송하게 된다.
스푸핑 방식별 구체적 설명
타겟을 속이는 단방향 ARP 스푸핑
공격자는 타겟 호스트에게 게이트웨이의 IP 주소를 가진 MAC 주소가 자신이라고 속인다. 이때 타겟은 공격자를 게이트웨이로 착각하고 트래픽을 보내게 된다.1
sudo arpspoof -i <interface> -t <target_ip> -r <gateway_ip>
게이트웨이를 속이는 단방향 ARP 스푸핑
반대로, 공격자가 게이트웨이에 접근하여 타겟 호스트의 IP에 대한 MAC 주소가 자기 것이라고 속인다. 이 경우 게이트웨이는 공격자를 타겟 호스트로 인식하게 된다.1
sudo arpspoof -i <interface> -t <gateway_ip> -r <target_ip>
양방향 ARP 스푸핑
실제 공격에서는 타겟과 게이트웨이 양쪽 모두를 동시에 속여야 완전한 트래픽 탈취가 가능하다. 이를 위해 두 방향 모두 ARP 스푸핑을 수행한다.1 2
sudo arpspoof -i <interface> -t <target_ip> -r <gateway_ip> sudo arpspoof -i <interface> -t <gateway_ip> -r <target_ip>
이렇게 하면 타겟과 게이트웨이 간의 모든 통신이 공격자를 경유하게 된다. 공격자는 이를 이용해 패킷을 가로채고 조작할 수 있다.
실습
실습 환경
- 공격자: Ubuntu 24.04 (IP: 192.168.1.10)
- 타겟: Windows 10 (IP: 192.168.1.11)
- 게이트웨이: 192.168.1.1
- 모두 동일 서브넷에 위치
- 주의: ARP 스푸핑은 반드시 같은 물리 네트워크에 존재해야만 가능하다. 다른 서브넷이나 인터넷 상에서는 불가능하다.
dsniff 설치
ARP 스푸핑 도구로는 dsniff 패키지를 사용한다. 설치 명령어는 다음과 같다.
|
|
dsniff에는 arpspoof, dnsspoof, macof 등 다양한 네트워크 공격 도구들이 포함되어 있다.
ARP 스푸핑 실행
양방향 스푸핑을 통해 완전한 트래픽 중간자 공격(MITM, Man-in-the-Middle)을 구현한다.
|
|
ARP 테이블 조작 여부 확인
타겟 PC에서 다음 명령어로 ARP 테이블을 조회할 수 있다.
|
|
게이트웨이 IP에 연결된 MAC 주소가 공격자의 MAC 주소로 변조되어 있다면 성공적으로 스푸핑이 이루어진 것이다.
IP 포워딩 활성화
ARP 스푸핑이 성공해도, 공격자가 패킷을 제대로 중계해주지 않으면 트래픽이 끊기게 된다. 이를 막기 위해 공격자는 자신에게 들어온 패킷을 다시 정상 목적지로 포워딩해야 한다.
|
|
포워딩을 활성화하지 않으면 의도치 않은 서비스 거부 공격(DoS)이 발생할 수 있다.
패킷 스니핑
패킷을 감청하기 위해 tcpdump를 사용할 수 있다.
|
|
|
|
-n
: IP를 DNS로 변환하지 않음-A
: 패킷 내용을 ASCII로 출력
또는 GUI 환경에서는 Wireshark를 사용하여 더 직관적으로 패킷을 분석할 수 있다.
ARP 스푸핑으로 가능한 공격
ARP 스푸핑을 통해 중간자 공격이 가능해진다. 구체적으로는 다음과 같다.
HTTP 트래픽 조작
웹 페이지를 변조하거나 악성 스크립트를 삽입할 수 있다.DNS 스푸핑
DNS 응답을 위조하여 사용자를 악성 사이트로 유도할 수 있다.비암호화 프로토콜 공격
FTP, SMTP, POP3와 같은 암호화되지 않은 프로토콜의 정보를 탈취하거나 조작할 수 있다.쿠키 탈취 및 세션 하이재킹
웹 애플리케이션 세션 쿠키를 가로채 로그인 세션을 탈취할 수 있다.
ARP 스푸핑 방어 방법
ARP 스푸핑을 방어하는 방법은 여러 가지가 있다. 단순히 ARP 테이블을 보호하는 것 외에도 네트워크 상에서 비정상적인 ARP 변화를 감지하고 차단하는 방법이 필요하다.
정적 ARP 테이블 구성
정적 ARP 엔트리 추가: 특정 장비(예: 게이트웨이)의 ARP 테이블에 정적 엔트리를 추가하여, ARP 응답이 변조되지 않도록 한다. 이를 통해 공격자가 가짜 ARP 응답을 보내더라도 ARP 테이블이 변경되지 않는다.1
sudo arp -s <target_ip> <static_mac_address>
ARP 모니터링 도구 사용
ARP 테이블에 대한 변화를 실시간으로 모니터링하는 도구를 사용하여 ARP 스푸핑을 탐지할 수 있다. 예를 들어, arpwatch는 네트워크 상의 ARP 변화를 추적하고, 비정상적인 변화를 감지할 수 있다. 설치 및 실행:1 2
sudo apt-get install arpwatch sudo arpwatch -i <interface>
네트워크 스위치 보안 기능 활용
- Dynamic ARP Inspection (DAI): 스위치에서 ARP 응답을 검사하여, 정상적인 ARP 응답만을 허용하도록 설정한다. 이 방식은 ARP 스푸핑 공격을 실시간으로 차단할 수 있다.
- DHCP 스누핑: DHCP 서버의 IP와 MAC 정보를 검증하여 ARP 스푸핑을 방지할 수 있다. DHCP 스누핑 기능은 네트워크 내에서 DHCP 요청을 모니터링하고, 잘못된 ARP 응답을 차단한다.
VPN 사용
암호화된 트래픽: VPN을 사용하여 네트워크 상의 트래픽을 암호화하면, ARP 스푸핑 공격이 효과를 보지 못한다. 암호화된 트래픽은 공격자가 패킷의 내용을 읽거나 변조할 수 없게 만든다.
설정 예시: OpenVPN, WireGuard와 같은 VPN 프로토콜을 설정하여, 암호화된 터널을 통해 네트워크를 보호할 수 있다.침입 탐지 시스템(IDS)/침입 방지 시스템(IPS) 도입
IDS/IPS는 네트워크 상의 비정상적인 트래픽을 감지하고, 이를 실시간으로 차단할 수 있다. ARP 스푸핑 공격이 발생하면, IDS는 이를 탐지하고 경고를 보내거나, IPS는 해당 트래픽을 차단한다.
결론
ARP 스푸핑은 네트워크 공격에서 중요한 기법으로, 공격자는 이를 통해 네트워크 트래픽을 도청하거나 변조할 수 있다. 네트워크 관리자는 이러한 위협을 이해하고 적절한 방어 대책을 수립하는 것이 중요하다.