MITM(Man In The Midle-attack)은 ARP Spoofing 기법을 사용해 Client와 Server를 속여 중간에서 데이터를 가로채는 공격 방법이다.

Client와 Server가 통신을 하고 있을 때,

Hacker가 Server로 위장해 Client를 속여 Client에게서 데이터를 받아온다. 그리고 Hacker는 Client로 위장해 받은 데이터를 Server로 전송한다.

그러면 서버는 Hacker를 Client로 착각해 응답 패킷을 Hacker에게 전송하고, Hacker는 이 응답패킷을 Client에게로 전송한다.
Client와 Server는 정상적으로 데이터를 전송받았기 때문에 통신에 문제가 없다고 생각하지만, 사실은 Client와 Server 사이에 오고가는 데이터 전부를 Hacker한테 탈취당하는 중인 것이다.
1) fragrouter 명령어로 들어온 패킷을 Server로 보낼 준비를 한다.
2) 동시에 disniff 명령어로 들어온 패킷의 내용을 확인하려고 준비한다.
3) Hacker는 arpspoof 명령어를 사용해 서버의 MAC 주소로
위장한다.
4) Client와 Server는 통신을 한다.
5) Hacker는 disniff를 통해 둘 사이에 오고가는 데이터를 확인한다.
ARP 프로토콜은 브로드캐스팅을 통해 통신을 주고 받을 때 IP 주소를 MAC 주소로 변환하는 역할을 한다.
각 PC는 통신을 수행할 때 ARP를 사용해 목적지 IP 주소를 가진 PC가 누구인지 질의를 수행하고 해당 IP와 그 IP를 가진 PC의 MAC주소를 Mapping시키는데 여기서 KALI가 자신이 그 IP 주소의 주인이라고 말하면 KALI의 MAC 주소를 그 IP주소와 Mapping 시켜버려 이후 해당 IP로 전송되는 모든 패킷이 KALI에게로 전달된다.
추가로 ARP Spoofing은 ARP가 브로드캐스팅을 사용해 주소 변환을 수행하기 때문에 공격을 하려면 기본적으로 같은 네트워크에 존재해야한다.
각 PC의 정보는 다음과 같다.
| Role | OS | IP | MAC |
|---|---|---|---|
| Client | Rocky9 | 192.168.5.40 | 00:0c:29:b2:33:f3 |
| Server | CentOS7 | 192.168.5.130 | 00:0c:29:5d:93:fa |
| Hacker | KALI | 192.168.5.220 | 00:0c:29:c6:4e:5d |
명령어 :
arpspoof -i [랜카드] -t [Client_IP][서버_IP]-i : 랜카드 지정
-t : 타겟 IP

Client에서 MAC주소 확인.
arp -a 명령어로 MAC 주소 테이블을 확인가능하다.
arp spoofing 전

arp spoofing 후

KALI의 MAC주소와 Server의 MAC 주소가 동일해졌다.
이 상태에서 클라이언트가 Server로 접속을 시도하면 접속이 되지 않는다.

이 말은 서버로 가는 패킷을 KALI가 가로채고 있는 상태라는 것.
이제 받은 패킷을 서버로 전송해 응답패킷을 받고 클라이언트에게 다시 보내주어야 한다.
Fragrouter는 받은 패킷을 그대로 원래 목적지로 전달해주는 역할을 한다.
fragrouter는 KALI에 내장되어있지 않기 떄문에 직접 설치해준다.
apt install -y fragrouter
명령어 :
fragrouter -B1-B1 : 일반적인 IP 패킷을 재전송하는 옵션

터미널을 보면 Client에서 Server로 가는 패킷을 확인 가능하다.
Client에서 다시 Server로 Telnet 접속을 해보면 정상적으로 접속 가능하다. 단, 접속 속도가 정상일 때보다 현저히 느리다.

랜카드는 기본적으로 목적지가 자신이 아니면 해당 패킷을 폐기한다. 그런데 Promiscuous Mode를 설정하면 목적지가 자신이 아니더라도 모든 패킷을 수집한다.
Promiscuous Mode는 유니캐스트 패킷을 캡처하기 위한 모드로 허브로 구축된 네트워크에서나 사용가능하다. 스위치는 목적지가 존재하는 포트로만 패킷을 뿌리기 때문에(Fowording) Promiscuous 모드를 하든 안하든 차이가 없다.
KALI에서 랜카드에서 들어오는 모든 패킷을 받아들일 수 있게 Promiscuous Mode를 설정한다.
우선 KALI에서 사용중인 LAN카드를 확인한다.

현재 eth0 사용중.
ifconfig [사용할 랜카드] promisc 명령어를 입력하면 랜카드가 Promiscuouss Mode로 변경된다.

다시 ifconfig 명령어를 입력했을 때 랜카드 flags 부분을 확인해보면 PROMISC가 추가된 것을 볼 수 있다.
ifconfig [사용할 랜카드] -promisc를 입력하면 해제된다.
dsniff는 스니핑을 위한 도구로 특정 프로토콜에서 전송되는 민감한 정보를 자동으로 추출하여 보여준다.
dsniff가 캡처할 수 있는 프로토콜로는 ftp,telnet,http,snmp,pop,imap,nfs,rip 등이 있다.
dsniff도 내장되어있지 않기 때문에 패키지를 설치해준다.
apt install -y dsniff
명령어 :
dsniff -i [랜카드]

명령어를 입력하면 eth0으로 오는 패킷을 기다린다.
이 상태에서 Client가 Server로 telnet 접속을 하고 exit 명령어로 접속을 종료하면

dsniff에 Client가 입력한 정보가 그대로 출력된다.
📌 참고
dsniff는 TCP 기반 프로토콜(Telnet, HTTP 등)의 경우 세션이 종료되어야 데이터가 출력된다.
Wireshark에서도 dsniff에서처럼 패킷을 찾아 직접 확인 가능하다.
wireshark 필터 검색에 ip.src==192.168.5.40을 입력하면 해당 IP 주소가 출발지인 패킷만 검색한다.

검색된 패킷들 중 Protocol이 Telnet인 패킷들이 존재하는데

이를 우클릭 > Follow > TCP Stream을 클릭하면 해당 세션이 시작해서 끝날때까지 주고받은 모든 패킷을 하나로 모아서 보여wnsek.

현재 Stream에서는 Client가 Telnet 접속 후 접속 종료할 때까지 입력한 모든 데이터를 정리해서 한 번에 볼 수 있다.
패킷 수집은 같은 네트워크라면 ARP Spoofing을 하지 않아도 수집이 가능하다. 하지만 스위치를 통해 세그먼트가 분리되어 있으면 같은 네트워크라고 하더라도 패킷 수집이 불가능하다.
그래서 이를 우회하기 위해 ARP Spoofing을 사용한다.
처음부터 목적지 MAC 주소를 Static 방식으로 등록해놓으면 ARP Spoofing으로 MAC 주소를 속이더라도 기존의 설정된 MAC 주소에 데이터를 전송한다.
스위치는 기본적으로 모든 포트가 활성화 되어있기 때문에 랜선만 꽂으면 바로 사용이 가능하다. 때문에 해커가 잠입해 스위치에 랜선만 꽂으면 해당 스위치와 연결된 모든 PC가 취약해질 수 있다.
와이파이 또한 외부인이 함부로 접근하도록 허용하면 같은 와이파이를 사용하는 모든 PC가 취약해질 수 있다.