나무모에 미러 (일반/어두운 화면)
최근 수정 시각 : 2025-02-28 17:03:59

DNS 스푸핑

1. 개요2. 방법
2.1. DNS 요청에 위조된 패킷을 보내주는 기법2.2. DHCP 서버를 위조하는 기법
3. 현황4. 기타

1. 개요

DNS Spoofing

해킹의 하위 분류 중 하나. DNS 서버로 보내는 질문을 가로채서 변조된 결과를 보내주는 것으로 중간자 공격의 일종이다.

2. 방법

2.1. DNS 요청에 위조된 패킷을 보내주는 기법

  1. 공격자는 네트워크에 공격용 웹서버를 열어두고 대기한다.
  2. 네트워크에 DNS 서버로 보내지는 패킷이 있는지 확인한다.
    • 목적지가 자신이 아닌 패킷은 읽지 않고 버려야 하지만 설정을 변경해서 모든 패킷을 읽어오게 한다.
  3. DNS 서버로 보내지는 패킷이 있다면, 그것을 보낸 PC에게 자신이 원하는 변조된 IP를 전송한다.
    • 보통은 공격자가 DNS 서버보다 물리적으로 가까이 있으므로 공격자가 보낸 패킷이 DNS 서버가 보낸 정상적인 패킷보다 먼저 도착한다.
    • PC는 먼저 받은 답변이 DNS의 것이라고 믿고 있기 때문에 나중에 온 정상적인 패킷은 버려진다.[1]
  4. PC는 변조된 IP로 접속을 하게 된다.

네이버에 접속한다고 가정한다면 피해자는 정상적으로 www.naver.com을 입력했는데 공격자의 웹서버로 접속이 되는 것이다. 만약 이 사이트가 겉보기로는 네이버와 유사한 사이트이고 사용자가 여기에서 로그인을 시도한다면 개인정보 탈취가 성공한다.[2]

2.2. DHCP 서버를 위조하는 기법

대부분의 PC나 스마트폰 등은 DHCP를 이용하여 자동으로 IP를 할당받는다. 그리고 IP를 할당 받을 때 자동으로 DNS 서버의 IP도 할당 받게 되어 있다. 이를 이용해 해커가 사설 DHCP 서버를 열어 두고 위조된 DNS 서버 정보를 주는 방법이다. 그 이후는 위와 동일하다.

DHCP 서버를 대체하는 행위 자체는 중간자 역할을 할 장비가 필요하다. 이는 근본적으로 DHCP 서버가 IP 주소가 아직 할당되지 않은 컴퓨터와 통신해야 하므로 로컬 네트워크를 벗어나는 것이 불가능하기 때문이다. 때문에 원격으로는 DHCP 스푸핑을 시도 할 수 없으며, 일반적으로는 DHCP 스푸핑에 대한 우려를 가질 필요는 없다. 그러나 비슷한 방법으로 우리가 흔히 사용하는 공용 WIFI를 통해 DNS 스푸핑을 당할 위험은 있다. 일반적으로 WIFI 라우터가 DHCP 서버의 기능을 하고 그 과정에서 DNS 서버를 전달해주는데 WIFI 라우터가 해킹당하게 되면 해커가 WIFI 라우터의 DHCP 설정을 조작할 수 있고, 이 과정에서 DNS 서버 주소를 자신의 주소로 변경하게 되면 DNS 스푸핑이 성립된다. 때문에 외부에서 공용 WIFI를 사용한다면 https 연결을 주의 깊게 살피는 것이 좋다.

DHCP 서버를 제어할 수 있으면 아예 게이트웨이 IP를 해커의 컴퓨터로 지정할 수 있지 않느냐고 생각할 수 있는데 이는 게이트웨이에 대한 몰이해에서 오는 큰 오해다. 게이트웨이 IP는 흔히 쓰는 IP 주소와는 목적이 다르며, 사실 애초에 게이트웨이는 IP 주소를 가질 필요도 없고 거의 사용하지도 않는다. 실제로도 이더넷 프레임을 까보면 IP 헤더에는 게이트웨이에 대한 정보가 전혀 없고 해당 프레임을 게이트웨이로 전달할지 다른 컴퓨터로 전달할지는 MAC 주소를 통해 결정한다. 때문에 네트워크 계층 통신이 불가능한 외부 시스템의 IP 주소는 의미가 없으며, 게이트웨이로 지정 될 수 없다. 게이트웨이 IP는 LAN 내에서 원격 관리의 편의성과 더불어 ARP를 이용하기 위한 것으로, DHCP 서버와 게이트웨이 라우터가 분리 될 수 있음을 알고 있다면 좀 더 이해가 쉽다. 즉, DHCP 서버를 통해 게이트웨이 IP 주소를 얻어오면 ARP를 통해 게이트웨이의 MAC 주소를 알아내고, 그래야지 게이트웨이를 통해 외부 네트워크로 패킷이 나갈 수 있는 것이다. 그러므로 "게이트웨이 IP를 내 컴퓨터의 IP 주소로 지정해서 내가 모든 통신을 다 스니핑 하겠다"는 것은 무지에서 비롯된 헛소리에 불과하다.

3. 현황

SSL/TLS 등의 인증-암호화 통신이 널리 보급되며 효용성이 떨어지기는 했지만 2020년 현재도 UDP 기반의 암호화 되지 않은 DNS 프로토콜은 여전히 널리 사용되기 때문에 기술적으로는 유효한 공격 기법이다. 다만 과거와는 달리 앉아서 아무데나 원격으로 DNS 스푸핑을 시도하긴 어려워졌는데 패킷을 망 전체에 무분별하게 뿌려버리는 허브와는 달리 스위치 환경에서는 다른 노드의 트래픽을 스니핑하기가 쉽지 않기 때문이다. 가정용 공유기조차도 허브가 아닌 스위치로 작동하므로 현 시점에는 망 전체를 손쉽게 장악하는 능력은 사실상 상실했다.

이것은 DNS 스푸핑이 완전히 무력화 되었다는 의미가 아니다. 앞서 말했다시피 프로토콜 자체가 변경된 것은 아니므로 클라이언트와 DNS 서버 사이에 있는 네트워크 장비 중 공격자가 장악한 장비가 있다면 DNS 쿼리를 스니핑해서 여전히 손쉽게 가능하기 때문이다.[3] 다만 이렇게 중간 장비를 장악하거나 확보하는 것은 아무래도 공격 난이도가 수직으로 상승하고 불특정 다수에게 시도하기가 곤란할 뿐더러 탐지도 비교적 쉽게 되므로 이런 식으로 DNS 스푸핑을 시도하는 것은 정말 가치가 큰 대상이던지 쉽게 확보할만한 취약한 장비가 있으면 모를까 보통은 해커 입장에서도 그다지 노력 대비 가성비가 좋지 않은 것도 사실이다. 애당초 이처럼 직접적으로 공격자가 장비를 장악하거나 설치해서 안정적으로 굴릴 수 있으면 이 시점부터는 더 이상 DNS 스푸핑만의 문제가 아니게 되므로 본문의 범주를 벗어나버린다.

이런 중간자 역할을 해줄 장비조차도 없는 경우엔 다른 취약점이 있는게 아니고서야 사실상 불가능하다. 피해자가 사용하는 DNS 서버까지는 특정할 수 있다 해도[4] 유효한 DNS 쿼리를 적중시키려면 상대가 마침 원하는 도메인 주소로 접근을 시도하면서 매번 무작위로 바뀌는 UDP 헤더의 16비트 Source Port와 DNS 헤더의 16비트 Transaction ID까지 우연히 때려맞추고 상대가 보낸 Query문의 내용도 맞추면서 DNS 서버보다 빠르게 응답해야 한다. 그나마도 만약 상대 컴퓨터쪽에 NAT 스위치가 있을 경우엔 그 밑의 어떤 컴퓨터가 Spoofing을 당했는지조차 특정할 수 없다. 이 확률을 뚫겠다는 것은 TCP 연결을 하이재킹 하는 것과 동급의 난이도이므로 대단히 무모한 짓이고 실제로도 인터넷 역사를 통틀어 이런 식의 DNS 스푸핑은 성공 사례가 아예 없다.

근본적인 방어법은 DNS over TLS처럼 DNS 서버를 인증하고 요청 자체를 암호화하는 것이지만, 2024년 기준으로 아직 널리 보급되지 못한 상황이다.

4. 기타



[1] 일반적으로 UDP라는 프로토콜을 사용하는데, 이 UDP는 패킷이 전송되는 속도를 가속화하기 위해 일방적 통신, 즉 보내기는 하지만 수신에 대한 피드백은 하지 않는 통신을 한다. (이를 TCP와 비교해 비연결형 프로토콜이라고도 한다.) 또, 특정 패킷에 대해서는 처음 도착한 패킷만을 신뢰하고 그 이후에 도착하는 패킷이 있을 경우 그냥 버리기 때문에, 이러한 허점들이 공격에 이용된다.[2] 이러한 이유 때문에 네이버에서는 사용자가 로그인을 시도할 때, 로그인 페이지의 주소 창에서 꼭 자물쇠 표시(SSL)를 확인할 것을 당부한다.[3] ISP/정부 차원의 음모론이나 서플라이체인 백도어같은 살벌한 수준까지 가지 않더라도, 외부인이 가정집 통신 단자함에 접근가능한 정도만 돼도 매우 간단하게 장비를 심을 수 있다.[4] 대부분의 인터넷 이용자는 ISP가 기본적으로 제공하는 DNS 서버를 그대로 사용한다. 이외에 많이 사용하는 주소라고 해봐야 1.1.1.1이나 8.8.8.8 같이 유명한 DNS 서버를 많이 쓴다.

분류