ARP spoofing 실습 (와이어샤크 패킷 확인)

Simcurity·2023년 4월 5일
0
post-thumbnail

1. ARP란?

ARP(address resolution protocol)는 3계층 프로토콜로 네트워크 계층의 주소체계인 IP로 2계층(Data Link 계층)의 주소체계인 MAC 주소를 찾아주는 프로토콜입니다.
만약 A라는 사용자가 논리적인 3계층 주소 체계인 IP를 가지고 arp request 패킷을 브로드캐스팅 합니다.
그러면 해당 IP를 가진 사용자 B가 자신의 MAC 주소 값 즉, 하나의 NIC마다 가지고 있는 고유한 물리 주소를 ARP reply로 알려줍니다.
그러면 A사용자는 B의 MAC 주소로 패킷을 보내는 것입니다.

즉, IP는 논리적인 주소로 일시적이지만 MAC 주소 값은 물리적인 고유한 주소로 항상 똑같습니다.
또한, 사용자는 IP를 통해 MAC주소를 알아내 사실 상 MAC 주소로 패킷을 전송합니다.

예를들어, Kali에서 서버로 ping 명령을 수행해보겠습니다.

Kali : IP = 192.168.6.129   MAC = 00:0c:29:c7:12:b4
서버 : IP = 192.168.6.136    MAC = 00:0c:29:47:92:15

ping -c 3 192.168.6.136 <- 명령 수행


wireshark에서 패킷을 살펴보면 ping 명령을 수행하기전에 가장 처음 kali에서 브로드캐스트로

"Who has [서버 IP]? Tell [kali IP]" 라는 ARP request 메세지를 보냅니다.

그리고, 서버에서 kali에게

"192.168.6.136 is at 00:0c:29:47:92:15"

라고 자신의 MAC 주소를 알려줍니다.

그림으로 그려보면 다음과 같은 형식이다 (그림판 어렵다...)


2. ARP spoofing이란?

1) SPOOFING이란?

spoofing이란 영어 뜻으로는 속이다 등의 뜻을 가지고 있습니다.
즉, arp를 속이는 행위를 뜻합니다.
만약 A와 B가 정상적으로 통신을 하고 있습니다. 서로의 ARP 캐시에 MAC주소가 저장되어 있을 것입니다.
그런데 갑자기 C라는 악의적인 사용자가 A에게 ARP reply 패킷을 내용을 변조하여 지속적으로 전송을 합니다.

[B의 IP] is at [C의 MAC]

그러면 A의 입장에서는 B의 IP에 MAC 주소를 C로 자신의 ARP캐시를 수정합니다.
B의 MAC주소가 C의 MAC 주소이므로 이제 A가 B에게 보내는 패킷은 모두 B가 아닌 C에게로 전송됩니다.
이것이 정보보안의 3대 원칙 중 기밀성을 침해하는 스니핑을 하기위한 ARP spoofing 공격입니다.


3. 실습

ARP spoofing 공격으로 서버 A,B사이의 통신을 스니핑(도청) 해보겠습니다.

Kali : IP = 192.168.6.129   MAC = 00:0c:29:c7:12:b4
서버 A : IP = 192.168.6.136    MAC = 00:0c:29:47:92:15
서버 B : IP = 192.168.6.137   MAC = 00:0c:29:1d:98:cd

공격자는 Kali로 진행할 것이고 편의상 root 권한으로 진행하겠습니다.


1) ARP 캐시 확인

공격 후의 ARP 캐시를 비교하기 위해 다음 명령어로 공격 전의 ARP 캐시를 확인해보겠습니다.

arp -a


각각 정상적인 A와 B의 ARP 캐시 정보입니다.

 

2) 공격 실시

이제 kali에서 arp spoofing 공격코드를 입력하겠습니다.

arpspoof -i [네트워크 인터페이스 명]  -t  [변조할 타겟 IP] [위장할 IP]

그런데, 만약 A가 B에게 보내는 정보만 가져온다면 B에게는 가지 못하므로 A와 B의 입장에서는 통신이 제대로 이루어지지 않습니다.
그러므로, A뿐만 아니라 B에게도 ARP spoofing를 해주어야 합니다.

또한, 패킷을 받기만 한다면 안되고 A에게 받은 것을 B에게, B에게 받은 것을 A에게 전송해주어야 합니다.
즉, 포트 포워딩도 해주어야 합니다.

다시 kali 터미널에서 Ctrl+Shift+t를 눌러서 터미널 탭을 하나더 만듭니다.
그리고 이번엔

arpspoof -i [네트워크 인터페이스 명]  -t  [변조할 타겟 IP] [위장할 IP]

A와 B의 순서를 바꾸어 입력해줍니다.

그리고, 또 다른 터미널 창을 띄우고 포트 포워딩 기능을 켜줍니다.

fragrouter -B1

이제, kali는 A와 B의 통신을 스니핑에 포트 포워딩까지 할 수 있게 되었습니다.


3) 변조된 ARP 캐시 확인

각각 변조된 A와 B의 ARP 캐시 정보입니다.
A의 캐시 정보를 보면 .129의 MAC주소와 .137의 MAC 주소가 동일합니다. 이는 현재 ARP spoofing 공격을 당하고 있다는 것을 의미합니다.
마찬가지로, B의 캐시 정보를 보면 .129와 .136의 MAC 주소가 동일합니다.
즉, B의 IP 주소로 데이터를 보내면 kali의 MAC 주소로 데이터가 전송된다는 것입니다.


4) 스니핑

A와 B사이의 통신을 스니핑 해보기 위해 평문 통신을 하는 취약한 telnet으로 실습해보겠습니다.

apt-get install xinetd telnetd  <- A,B서버 둘다 설치
vim /etc/xinetd/telnet

service telnet
{
	disable = no
    socket_type = stream
    flags = REUSE
    wait = no
    user = root
    server = /usr/sbin/in.telnetd
    log_on_failure+=USERID
}

A,B 둘다 작성한다. 그리고

service xinetd restart   <- xinetd 슈퍼 데몬 재시작

A에서 B로 텔넷을 연결하고 kali에서 wireshark로 패킷을 캡쳐해보았습니다.
cat /etc/passwd 를 입력하고 패킷 우클릭 후 follow -> tcp stream을 누르면 해당 패킷을 모두 이어서 보여줍니다.

데이터 확인

평문 통신이므로 데이터들이 그대로 보여집니다.
제가 적은 문자들이 2개 씩 출력되는 이유는 포트 포워딩을 사용하기 때문에 A에게서 받은 패킷, B에게로 전송하는 패킷 총 2가지가 있기 때문에 글자가 2글자씩 적힌것처럼 보입니다.


4. ARP spoofing 대응 방안

ARP 스푸핑의 대응방안은 애초에 ARP 캐시 정보를 정적으로 설정하는 방법이 있습니다.
그러면 공격자의 변조된 ARP reply 패킷이 들어와도 변조되지 않습니다.

linux
arp -v -i [네트워크 인터페이스 명] -s  [IP 주소] [MAC 주소]  <- MAC주소 적을 때 구분자 : 사용

windows
arp -s [IP 주소] [MAC 주소]  <- MAC주소 적을 때 구분자 - 사용

0개의 댓글