본문 바로가기
network

DNS 중독!!!! 🤢🤢

by j.sanghyuk 2025. 3. 13.

DNS Cache Poisoning

DNS Cache Poisoning이란, DNS 캐시에 잘못된 정보를 입력하여 사용자의 질의에 대해 잘못된 응답을 반환하고, 사용자가 잘못된 웹 사이트로 연결되게 하는 공격 기법이다.

 

https://secu-hyuk.tistory.com/19 <--- DNS에 대한 내용은 여기로..

 

DNS Cache에는 domain name에 대한 IP 주소가 저장되어 있고, 사용자는 이 IP를 통해 웹 페이지에 접속하는데, DNS Cache Poisoning 을 통해 이 IP를 공격자의 IP로 변조하게 된다면, 사용자가 잘못된 IP로 접속하여 정보를 탈취 당하거나 변조될 수 있다.

 

DNS Cache

DNS 캐시란 무엇일까? DNS 캐시에 대해 알아보기 전에, 사용자가 DNS 질의를 하였을 때의 과정을 알아보자. 

아래는 DNS 가 캐싱되지 않았을 때의 질의 과정이다.

 

사용자가 로컬 DNS Server(DNS Resolver)에 Domain Name "sanghyuk.com" 에 대한 IP를 질의하면, 로컬 DNS Server는 Authoritative nameserver (권한 있는 네임서버)에 "sanghyuk.com" 에 대한 IP를 질의하게 된다.

Authoritative nameserver은 정확한 IP 주소를 가지고 있으므로, Domain Name에 대한 IP 주소를 반환하게 되고, User는 Domain name "sanghyuk.com" 으로 IP 192.168.100.1 에 접속할 수 있다. 

 

DNS 캐싱 후 에는 이러한 과정을 생략하고 더 빠르게 질의, 응답이 이루어진다.

로컬 DNS Server에 IP 주소 질의에 대한 쿼리를 일시적으로 저장(캐싱)해 놓음으로써 DNS 프로세스에 있는 많은 서버를 거치지 않아도 되고, 이에 따라 질의에 대한 응답 시간이 빨라지게 된다.

 

어떻게 공격이 일어날까?

Attacker 가 Authoritative nameserver를 가장 하여 로컬 DNS Server에 요청을 보낸 후, DNS Server가 nameserver에 요청을 보낼 때 응답을 위조하여 캐시를 변조할 수 있다.

이렇게 캐시된 IP를 192.168.100.1이 아닌 192.168.100.100(Attacker IP) 으로 위조하게 된다면, 사용자는 sanghyuk.com 에 접속했을 때 192.168.100.1 이 아닌 192.168.100.100 으로 접속되어 공격자에게 정보를 탈취당하게 될 것 입니다.

 

왜 공격이 발생할까?

이러한 공격이 발생하는 이유는 DNS 통신 시 TCP 가 아닌 UDP 를 사용하기 때문이다. (UDP 53)

통신 시작 전 3-way-handshaking 을 수행하는 TCP 와 다르게 UDP 는 통신만을 진행하기 때문에 송신자 또는 수신자가 보내거나 받을 준비가 되었다는 보장이 없다. UDP 는 이러한 이유로 TCP 에 비해 보안에 취약하다. 

공격자가 UDP 를 통해 요청을 보내고, 헤더 데이터를 조작하여 합법적인 척 위장할 수 있다.

또한 이러한 위조된 공격을 UDP 서버는 판별해낼 방법이 없다. 그렇기 때문에 데이터를 받아들이고 캐싱하게 되고, 문제가 발생하게 된다.

 

공격이 이루어질 가능성

이러한 취약점에도 불구하고 실제로 DNS Cache Poisoning이 일어날 가능성은 현저히 낮다.

일단 공격자가 요청을 보내면 로컬 DNS Server는 실제 Authoritative nameserver 에 질의하기 때문에, 그 응답이 도착하기 전까지 매우 짧은 시간 안에 위조된 응답을 보내야 한다.

 

또한 공격자는 공격을 위해 아래와 같은 정보를 알고 있어야 한다.

  • 로컬 DNS Server가 확인하지 않았던 쿼리, 그래야 캐싱되었던 정보를 응답하지 않고 Authoritative nameserver에 질의하게 된다.
  • 로컬 DNS Server의 포트, 현재 DNS 는 Destination Port 는 53, 쿼리 별 포트는 Unknown-Port(1024~65535) 중 무작위로 골라서 사용한다. 이 포트를 알아야 한다.
  • 요청 ID 번호
  • 쿼리를 받을 수 있는 Authoritative nameserver

 

총총

요즘 공부를 하며 DNS 를 많이 접했는데, 이와 관련된 취약점을 공부할 수 있어서 흥미로웠다!