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를 해커의 컴퓨터로 지정하게 만드는 방법이 더 널리 사용된다. 그럴 경우, 피해자의 모든 트래픽은 해커의 컴퓨터를 거쳐서 지나가게 되므로, 지나가는 패킷을 확인해서 암호를 비롯한 개인정보를 훔쳐볼 수 있게 된다.
2.3. 여담
2017년에 실시된 고3 2018학년도 6월 평가원 모의고사에 비문학으로 스푸핑 개념이 출제되었는데 #, 기술 지문에 약한 수험생들이 생각보다 매우 많이 어려워하였다. 확정 1등급 컷이(상위 4% 커트라인) 89점으로 DNS 스푸핑 지문 문제가 학생들의 점수 하락에 큰 영향을 준 듯하다. 이 지문이 까다롭기는 하지만 나름대로 실생활에 유용한 지문이라서 좋은 평가를 받기도 한다.정부의 유해 사이트 차단은 https에는 적용되지 않았지만, 언젠가부터 DNS 스푸핑을 이용한 차단을 적용하고 있다는 의혹이 나오기도 했다. 이 사건에 대한 결론을 말하자면, 확실한 증거는 없어 사실관계 파악은 힘들다. 다만, 만일 이게 사실이라면 국가가 합법적으로 하는 사실상 해킹이라는 소리다(...) DNS 질의에 사용되는 특정 포트를 감시하고 있는 것으로 판단하는 의견도 있지만, 며칠 안 돼서 다시 정상화된 것을 보아 단순 오류라는 의견도 나오고 있다. 이에 대한 확실한 증거는 없어 확답은 불가능한 상황. 클라우드플레어 DNS로도 우회가 불가능하여, DNS over HTTPS 로 성공한 사례 및 깔끔하게 우회할 방법이 있다.
DNS 스푸핑은 보통 로컬망 내에서만, 그것도 허브로 연결된 경우에만 유효하다. DNS 스푸핑을 하기 위해서는 다른 PC의 통신을 감청할 수 있어야 하는데 ISP 종단 라우터는 물론이고 가정집 공유기조차도 스위치로 동작하기 때문에 각 PC들의 회선이 아예 물리적으로 분리 되어 관여할 방법이 없다. DNS 서버보다 빠르게 응답하는 방식도 목표가 DNS 서버에게 보내는 UDP 패킷의 Source Port를 알아야지 DNS 서버의 응답을 흉내낼 수 있는데 이 값을 특정할 수 없으므로 원격으로는 스푸핑을 할 방법이 없다. 때문에 DNS 스푸핑은 현 시점에선 사실상 무력화 된 방식이며 정말 한정된 조건의 작은 네트워크만을 공격할 수 있다.
3. 기타
- 유해 사이트를 차단하여 warning.or.kr 으로 보내기 위해서 사용하는 기본 동작과 사실상 같다. 다만 이는 DNS 서버만 구글 서버(8.8.8.8) 등으로 바꿔주기만 해도 무력화되기 때문에, 실제로는 훨씬 다양한 방법이 사용된다.
- 2019년 인터넷 검열 사건에서 등장한 SNI를 이용한 차단방법도, 본질적으로 비슷한 방법이다. 다만, 이는 Encrypted SNI가 정식으로 사용되면 무력화된다.
[1]
일반적으로
UDP라는 프로토콜을 사용하는데, 이 UDP는 패킷이 전송되는 속도를 가속화하기 위해 일방적 통신, 즉 보내기는 하지만 수신에 대한 피드백은 하지 않는 통신을 한다. (이를
TCP와 비교해 비연결형 프로토콜이라고도 한다.) 또, 특정 패킷에 대해서는 처음 도착한 패킷만을 신뢰하고 그 이후에 도착하는 패킷이 있을 경우 그냥 버리기 때문에, 이러한 허점들이 공격에 이용된다.
[2]
이러한 이유 때문에 네이버에서는 사용자가 로그인을 시도할 때, 로그인 페이지의 주소 창에서 꼭 자물쇠 표시(
SSL)를 확인할 것을 당부한다.