실습 환경
IP Address | MAC Address | |
192.168.100.1 | 호스트 PC | |
192.168.100.2 | 00:50:56:f1:51:86 | 게이트웨이 |
192.168.100.30 | 00:0c:29:f0:7e:2c | 피해자 (Xubuntu) |
192.168.100.128 | 00:0c:29:ce:c0:c2 | 공격자 (Kali) |
ARP Request and Reply
먼저 ARP 프로토콜을 사용하여 특정 IP에 대한 MAC 주소를 찾는 과정을 가볍게 짚고 넘어가보겠습니다.
공격자 PC인 Kali의 Ettercap에서 Scan for Hosts 메뉴 실행한 상태입니다. Kali(192.168.100.128)에서 ARP Request 패킷을 브로드캐스트 하고 있습니다.
아래는 현재 PC인 Xubuntu에서, IP가 192.168.100.30인 컴퓨터의 주소를 찾는 요청에 따라 응답 패킷을 보낸 모습입니다.
비정상적인 양의 ARP Request 패킷이 감지될 경우, ARP 스푸핑 공격의 가능성을 생각해볼 수 있습니다.
패킷의 경로
ARP 포이즈닝 공격이 발생하는 상황에서, 피해자 PC와 외부 웹서버 간의 패킷의 경로를 생각해보면 다음과 같습니다.
현재 PC와 통신하는 호스트는 반드시 외부 네트워크에 있다고 가정했으며, LAN 내부에서 통신하는 경우는 고려하지 않았습니다.
피해자 PC → 외부 웹서버
- 피해자 PC는 자신의 라우팅 테이블을 확인하여 목적지인 외부 웹서버의 IP 주소가 로컬 네트워크 외부에 있음을 인지합니다.
- 피해자 PC는 ARP(Address Resolution Protocol)를 사용하여 외부 웹서버의 MAC 주소를 알아내기 위해 ARP 요청 패킷을 로컬 네트워크에 브로드캐스트합니다.
- ARP 포이즈닝 공격자는 피해자 PC에게 응답하여 자신의 MAC 주소를 외부 웹서버의 MAC 주소인 척합니다.
- 피해자 PC는 받은 ARP 응답을 믿고 해당 MAC 주소로 패킷을 전송합니다.
- 그러나 실제로 패킷은 공격자의 MAC 주소를 가진 ARP 포이즈닝 공격자에게 전달됩니다.
외부 웹서버 → 피해자 PC
- 외부 웹서버는 피해자 PC로의 응답 패킷을 전송해야 합니다.
- 외부 웹서버는 자신의 라우팅 테이블을 확인하여 피해자 PC의 IP 주소가 로컬 네트워크 외부에 있음을 인지합니다.
- 외부 웹서버는 ARP를 사용하여 피해자 PC의 MAC 주소를 알아내기 위해 ARP 요청 패킷을 로컬 네트워크에 브로드캐스트합니다.
- ARP 포이즈닝 공격자는 외부 웹서버에게 응답하여 자신의 MAC 주소를 피해자 PC의 MAC 주소인 척합니다.
- 외부 웹서버는 받은 ARP 응답을 믿고 해당 MAC 주소로 패킷을 전송합니다.
- 그러나 실제로 패킷은 공격자의 MAC 주소를 가진 ARP 포이즈닝 공격자에게 전달됩니다.
게이트웨이
침입 탐지 시스템을 설계하기 위해 제가 알고싶은건, 외부 네트워크로 나가는 패킷의 destination 혹은 외부 네트워크에서 들어오는 패킷의 source의 MAC 주소가 "게이트웨이"인지 입니다.
구체적으로 내 PC가 외부 네트워크에 존재하는 호스트로 패킷을 내보낼 때, 패킷의 destination MAC 주소(상태 호스트의 MAC주소)는 무엇일지 생각해보겠습니다. (내 PC → 외부 호스트)
일반적인 상황
일반적으로 외부 네트워크에 있는 호스트로 패킷을 내보낼 때, 패킷의 destination MAC 주소는 gateway의 MAC 주소입니다.
외부 네트워크에 있는 호스트와 통신할 때, 패킷은 gateway를 거쳐서 외부로 전송됩니다. 패킷은 목적지 호스트의 IP 주소를 가지고 있지만, 이 IP 주소를 MAC 주소로 변환하기 위해서는 ARP(Address Resolution Protocol)를 사용해야 합니다. 하지만 외부 네트워크에 있는 호스트의 MAC 주소를 직접 알아낼 수 없으므로, 패킷은 gateway의 MAC 주소를 사용하여 gateway로 전송됩니다.
내 프로젝트
저는 VMWare 위에서 실습하고 있고, VMWare의 네트워크를 NAT로 설정한 상태입니다.
VMware의 NAT(Network Address Translation) 모드에서 작동하는 경우, VMware가 호스트 컴퓨터와 gateway 사이에서 패킷을 변환하고 라우팅하는 역할을 수행합니다. 이 모드에서는 패킷의 destination IP 주소는 외부 호스트의 IP 주소이지만, 패킷의 destination MAC 주소는 gateway의 MAC 주소가 될 수 있습니다.
NAT는 VMware의 가상 네트워크 인터페이스가 호스트 컴퓨터의 실제 네트워크 인터페이스와 다른 가상 MAC 주소를 가지고 있습니다. 따라서 내 PC에서 외부 호스트로 패킷을 보낼 때, 패킷의 destination MAC 주소는 gateway의 MAC 주소가 될 수 있습니다. VMware는 패킷을 수신하고 gateway로 전달하기 전에 NAT 변환을 수행하여 패킷의 송신자 및 수신자 주소를 조정합니다.
패킷 분석
실제 Xubuntu에서 외부 웹사이트(44.228.249.3)와 통신하는 패킷을 한번 살펴보겠습니다.
정상적인 상황
ARP 스푸핑 공격이 발생하지 않은 정상적인 상황에서, 외부 네트워크(44.228.249.3)로 나가는 패킷을 살펴보겠습니다.
destination의 MAC 주소는 gateway의 MAC 주소인 00:50:56:f1:51:86
임을 확인할 수 있습니다.
공격을 당하고 있는 상황
같은 사이트를 다시 한번 방문해 보았습니다.
ARP Spoofing 공격을 당하고 있는 중에, destination의 MAC주소는 공격자인 Kali의 MAC주소인 00:0c:29:ce:c0:c2
임을 알 수 있습니다.
IDS 설계
위의 과정을 통해 외부 네트워크에 있는 상대 호스트의 MAC 주소가 gateway의 MAC주소임을 확인했습니다. 동시에 ARP Spoofing 공격을 받으면 상대 호스트의 MAC주소가 가해자 PC의 MAC주소로 설정됨을 확인했습니다.
이를 통해 다음과 같이 IDS를 설계하였습니다.
💡 외부 네트워크와 통신하는 패킷의 경우, MAC 주소가 gateway의 MAC 주소인 00:50:56:f1:51:86 가 아니라면 로그를 띄운다
하지만 IDPS만으로 ARP Spoofing 공격을 시도하는 공격자를 문제없이 차단하는 것은 굉장히 어렵습니다. ARP Spoofing을 막기 위해서는 IDPS 뿐만 아니라 다양한 방법을 사용하여 문제를 해결해야 합니다.