1. 개요
DNS Spoofing해킹의 하위 분류 중 하나. DNS 서버로 보내는 질문을 가로채서 변조된 결과를 보내주는 것으로 중간자 공격의 일종이다.
2. 방법
2.1. DNS 요청에 위조된 패킷을 보내주는 기법
- 공격자는 네트워크에 공격용 웹서버를 열어두고 대기한다.
- 네트워크에 DNS 서버로 보내지는 패킷이 있는지 확인한다.
- 목적지가 자신이 아닌 패킷은 읽지 않고 버려야 하지만 설정을 변경해서 모든 패킷을 읽어오게 한다.
- DNS 서버로 보내지는 패킷이 있다면, 그것을 보낸 PC에게 자신이 원하는 변조된 IP를 전송한다.
- 보통은 공격자가 DNS 서버보다 물리적으로 가까이 있으므로 공격자가 보낸 패킷이 DNS 서버가 보낸 정상적인 패킷보다 먼저 도착한다.
- PC는 먼저 받은 답변이 DNS의 것이라고 믿고 있기 때문에 나중에 온 정상적인 패킷은 버려진다.[1]
- PC는 변조된 IP로 접속을 하게 된다.
네이버에 접속한다고 가정한다면 피해자는 정상적으로 www.naver.com을 입력했는데 공격자의 웹서버로 접속이 되는 것이다. 만약 이 사이트가 겉보기로는 네이버와 유사한 사이트이고 사용자가 여기에서 로그인을 시도한다면 개인정보 탈취가 성공한다.[2]
2.2. DHCP 서버를 위조하는 기법
대부분의 PC나 스마트폰 등은 DHCP를 이용하여 자동으로 IP를 할당받는다. 그리고 IP를 할당 받을 때 자동으로 DNS 서버의 IP도 할당 받게 되어 있다. 이를 이용해 해커가 사설 DHCP 서버를 열어 두고 위조된 DNS 서버 정보를 주는 방법이다. 그 이후는 위와 동일하다.사실 DHCP 서버를 위조할 수 있을 경우, 게이트웨이 IP를 해커의 컴퓨터로 지정하게 만드는 것도 가능하며, 이게 가짜 서버나 중간자 서버를 따로 두는 것 보다 더 간단하고 위력적인 방법이다. 이 경우, 피해자의 모든 트래픽은 해커의 컴퓨터를 거쳐서 지나가게 되므로, 지나가는 패킷을 확인해서 암호를 비롯한 개인정보를 훔쳐볼 수 있게 된다. 다만 경우에 따라선 이쪽이 감지가 더 쉽기에 아주 쓸데없는 짓은 아니다.[3]
3. 현황
SSL/TLS 등의 인증-암호화 통신이 널리 보급되며 효용성이 떨어지기는 했지만, 현대(2020년대)에도 유효한 공격 기법이다.DNS 스푸핑이 사실상 무력화 된 방식이라는 주장의 주요 논거는 '과거 1계층 물리 허브를 통해 네트워크가 구성되던 환경에선 손쉽게 DNS 요청을 가로챌 수 있었지만 지금은 그렇지 않다'는 것이다. 스위치 환경(가정용 공유기 포함)에서는 패킷이 브로드캐스트 되지 않기에 피해자가 어느 주소로 조회를 요청했는지 알 수 없으며, 응답할 타이밍도 맞출 수 없다는 것.
어느정도는 맞는 말이지만, 스위치 환경이라고 해서 스니핑에 절대적으로 안전한 것이 아니란 점을 간과한 주장이다. ARP니 ICMP니 할 것도 없이, 클라이언트 기기에서 DNS 서버에 이르기까지 거치는 수많은 네트워크 장비 중에 공격자가 통제하는 장비가 단 하나라도 있으면 간단하게 DNS 스푸핑이 이루어진다.[4]
공격자가 통제하는 장비가 없다고 하더라도, 사회공학적 기법을 이용하면 DNS 서버 주소를 알 수 있으며[5], 타이밍 문제의 경우 들어맞을 때 까지 꾸준히 보내는 것이 기본적인 접근법이다.[6]
근본적인 방어법은 DNS over TLS처럼 DNS 서버를 인증하고 요청 자체를 암호화하는 것이지만, 2024년 기준으로 아직 널리 보급되지 못한 상황이다.
4. 기타
- 2017년에 실시된 고3 2018학년도 6월 평가원 모의고사에 비문학으로 스푸핑 개념이 출제되었는데#, 기술 지문에 약한 수험생들이 생각보다 매우 많이 어려워하였다. 확정 1등급 컷이(상위 4% 커트라인) 89점으로 DNS 스푸핑 지문 문제가 학생들의 점수 하락에 큰 영향을 준 듯하다. 이 지문이 까다롭기는 하지만 나름대로 실생활에 유용한 지문이라서 좋은 평가를 받기도 한다.
- 정부의 유해 사이트 차단은 https에는 적용되지 않았지만, 언젠가부터 DNS 스푸핑을 이용한 차단을 적용하고 있다는 의혹이 나오기도 했다. 이 사건에 대한 결론을 말하자면, 확실한 증거는 없어 사실관계 파악은 힘들다. 다만, 만일 이게 사실이라면 국가가 합법적으로 하는 사실상 해킹이라는 소리다(...) DNS 질의에 사용되는 특정 포트를 감시하고 있는 것으로 판단하는 의견도 있지만, 며칠 안 돼서 다시 정상화된 것을 보아 단순 오류라는 의견도 나오고 있다. 이에 대한 확실한 증거는 없어 확답은 불가능한 상황. 클라우드플레어 DNS로도 우회가 불가능하여, DNS over HTTPS 로 성공한 사례 및 깔끔하게 우회할 방법이 있다.
- 유해 사이트를 차단하여 warning.or.kr 으로 보내기 위해서 사용하는 기본 동작과 사실상 같다. 다만 이는 DNS 서버만 구글 서버(8.8.8.8) 등으로 바꿔주기만 해도 무력화되기 때문에, 실제로는 훨씬 다양한 방법이 사용된다.
- 2019년 인터넷 검열 사건에서 등장한 SNI를 이용한 차단방법도, 본질적으로 비슷한 방법이다. 다만, 이는 Encrypted SNI가 정식으로 사용되면 무력화된다.
[1] 일반적으로 UDP라는 프로토콜을 사용하는데, 이 UDP는 패킷이 전송되는 속도를 가속화하기 위해 일방적 통신, 즉 보내기는 하지만 수신에 대한 피드백은 하지 않는 통신을 한다. (이를 TCP와 비교해 비연결형 프로토콜이라고도 한다.) 또, 특정 패킷에 대해서는 처음 도착한 패킷만을 신뢰하고 그 이후에 도착하는 패킷이 있을 경우 그냥 버리기 때문에, 이러한 허점들이 공격에 이용된다.[2] 이러한 이유 때문에 네이버에서는 사용자가 로그인을 시도할 때, 로그인 페이지의 주소 창에서 꼭 자물쇠 표시(SSL)를 확인할 것을 당부한다.[3] 네트워크 상태나 공격자의 장비가 열악한 경우엔 피해자가 회선 품질 저하를 통해 공격 사실을 알아챌 수 있다.[4] ISP/정부 차원의 음모론이나 서플라이체인 백도어같은 살벌한 수준까지 가지 않더라도, 외부인이 가정집 통신 단자함에 접근가능한 정도만 돼도 매우 간단하게 장비를 심을 수 있다.[5] 대부분의 인터넷 이용자는 ISP가 기본적으로 제공하는 DNS 서버를 그대로 사용한다. 이외에 많이 사용하는 주소라고 해봐야 1.1.1.1이나 8.8.8.8 같은 유명 주소일 것이다.[6] 운영체제 단에서의 보안 기능이 강화되었고, 가정용 공유기에도 기본적인 수준의 IDS/IPS가 적용된 경우가 흔하기 때문에 좀 더 고도화된 접근이 필요하긴 하다.