DNS 포이즈닝(DNS 스푸핑): 정의, 기법 및 예방

DNS 포이즈닝(DNS 스푸핑): 정의, 기법 및 예방

DNS 포이즈닝(DNS 스푸핑): 정의, 기법 및 예방

해커는 DNS 포이즈닝 공격에서 유효한 웹사이트 주소를 사칭합니다. 공격에 성공하면 비밀번호, 계정 번호 등 소중한 정보를 탈취할 수 있습니다. 혹은 단순히 스푸핑된 사이트를 로드하지 못하도록 거부할 수도 있습니다.

웹을 탐색하는 사용자는 DNS 스푸핑을 전혀 알아차리지 못할 수도 있습니다. 사이트를 방문하더라도 아무런 이상이 없어 보이고 기능도 다소 정상적으로 실행되기 때문에 모든 것이 안전하다고 생각할 수 있습니다.

혹은 즐겨 찾는 사이트가 단순히 로드되지 않는다고 생각할 수도 있습니다. 한두 차례 더 시도하다 사이트가 응답하지 않는다고 해당 회사에게 비난의 화살을 돌릴 수도 있습니다. 

DNS 포이즈닝에 대한 예방은 DNS 스푸핑을 차단하는 것에서 시작됩니다. 지금부터 DNS 스푸핑을 차단하는 방법을 알려드리겠습니다.

 

DNS 포이즈닝

 

DNS 포이즈닝에 대한 정의

DNS 포이즈닝이란 해커가 DNS에서 알려진 취약점을 조작하는 공격 기법을 말합니다. 공격이 성공하면 트래픽을 해당 사이트에서 사칭 사이트로 유도할 수 있습니다. 또한 DNS의 원리에 따라 감염이 확산될 수도 있습니다. 

중국 정부는 DNS 포이즈닝을 이용해 유해하다고 판단되는 콘텐츠가 포함된 사이트에 액세스하지 못하도록 차단하고 있습니다. 따라서 중국 사용자들은 자신이 주소(https://www.facebook.com 등)를 올바르게 입력했다고 생각할 수 있습니다. 하지만 주소를 정확히 입력하더라도 스푸핑으로 인해 완전히 다른 서버로 이동하게 됩니다. 결과적으로 서버가 전혀 다른 콘텐츠를 로드합니다.

2014년에 중국의 스푸핑 공격은 더욱 광범위하게 확산되었습니다. 보도에 따르면 한때 전 세계 인터넷 사용자의 1/7 정도가 이 문제로 인해 어려움을 겪었다고 합니다. 이로 Facebook과 Twitter 등 인터넷 사이트가 마비되었습니다.

DNS의 원리

웹 개발자들은 사이트를 개발하면서 짧고 사용자 친화적인 웹 주소를 사용해달라는 요청을 많이 받습니다. 웹 주소가 짧고 사용자 친화적이면 검색 쿼리가 간편해지며 소비자들이 클릭하기 전에 어떤 페이지가 포함되어 있는지 알 수 있기 때문입니다. 하지만 다른 컴퓨터는 인간이 사용하는 주소를 이해하지 못합니다. 이때 DNS가 도움이 될 수 있습니다. 

브라우저에 주소를 입력할 때마다 DNS가 다음과 같이 작동합니다.

  • DNS 서버에 연결됩니다. 컴퓨터가 자세한 정보를 얻으려면 DNS 서버와 통신해야 합니다.
     
  • DNS가 숫자 주소를 조회합니다. 컴퓨터는 숫자와 점으로 구성된 서버 주소만 이해합니다. 이전에 해당 사이트를 검색한 적이 없다면 컴퓨터가 다른 서버에게 도움을 요청하게 됩니다.
     
  • DNS 리졸버가 쿼리를 완료합니다. 인간에게 최적화된 주소가 숫자 버전으로 전환됩니다.
     
  • 사이트로 이동합니다. 숫자 주소가 정확하면 웹사이트를 호스팅하는 해당 서버로 이동하게 됩니다. 
     
  • 데이터가 저장됩니다. 사용하는 인터넷 서버에 DNS 서버가 생성되고, 사람이 사용하는 주소를 숫자 형태로 전환한 데이터와 함께 검색 결과가 여기에 저장됩니다. 

이러한 작업은 몇 초 동안 일어나기 때문에 사용자는 지연 시간을 알아차리지 못합니다. 하지만 컴퓨터는 백그라운드에서 다음에 어디로 가서 무엇을 해야 하는지 알아내기 위해 다른 서버와 계속 통신합니다. 

DNS 시스템은 1983년에 개발되었습니다. 당시 인터넷에는 웹사이트와 서버 수가 지금보다 훨씬 적었습니다. 개발자들은 누군가가 시스템을 조작하거나 사용자들에게 사기를 칠 것이라고는 상상도 하지 못했기 때문에 보안 기능이 구축되지 않았습니다.

DNS 캐시 포이즈닝 기법

사용자가 사이트 방문을 요청하면 서버가 해커의 응답을 선택합니다. 결과적으로 변조된 데이터가 저장되면서 DNS 캐시 포이즈닝이 성공적으로 완료됩니다. 

해커가 이러한 공격을 시도할 수 있는 방법은 다음과 같습니다.
 

  • 서버 위장. DNS 서버가 변환을 위한 쿼리를 제출하면 해당 서버가 응답하기 훨씬 전에 해커가 잘못된 정보로 빠르게 응답합니다.
     
  • 서버 마비. 2008년 조사 결과, 해커들은 수천 개의 쿼리를 캐싱 서버에 전송할 수 있는 것으로 나타났습니다. 그런 다음 수천 개의 거짓 응답을 전송하고, 얼마 지나지 않아 루트 도메인을 비롯한 전체 사이트를 장악합니다.
     
  • 열린 포트의 취약점 이용. 2020년 조사 결과, 해커들은 DNS 리졸버 포트로 수천 개의 쿼리를 전송할 수 있는 것으로 나타났습니다. 이러한 공격으로 얼마 지나지 않아 어떤 포트가 열려 있는지 알아냅니다. 이후 공격은 열린 포트로 집중됩니다. 

DNS 포이즈닝 공격은 시스템이 불안정하기 때문에 일어납니다. 컴퓨터에는 UDP(User Datagram Protocol)를 통해 서버와 주고받은 통신 내용이 저장됩니다. 덕분에 빠르고 효율적인 통신이 가능합니다. 하지만 보안 기능이 없습니다. 컴퓨터가 통신하는 서버의 아이덴티티를 확인하지 않기 때문에 수신되는 데이터의 유효성을 검증하지 못합니다. 

이러한 환경에서는 위장하기가 비교적 쉽습니다. 아이덴티티를 입증할 필요가 없어서 통신하는 서버를 아무나 소유할 수 있다면 변조된 정보가 수신되더라도 이를 알 길이 없습니다.

DNS 스푸핑 예방 계획 

만일 여러분이 네트워크 관리자인데 담당 사이트가 다운되었습니다. 이렇게 되면 방문자들은 중단 문제를 해커의 탓으로 돌리지 않습니다. 여러분과 여러분의 회사를 탓할 것입니다. 따라서 캐시 포이즈닝은 예방이 중요하지만, 이는 그리 쉬운 일이 아닙니다.

예방할 수 있는 방법은 다음과 같습니다.

  • 자체 DNS 서버를 제어하십시오. 각 쿼리에 대한 응답으로 저장되는 정보를 직접 소유한다면 설정된 일정에 따라 정보의 품질과 진위 여부를 확인할 수 있습니다.
     
  • 쿼리를 제한하십시오. 열린 포트를 통해 수신되는 DNS 요청은 거부해야 합니다. 그러면 대규모 쿼리 전송으로 데이터가 감염되는 일을 막아 데이터 탈취 위험을 감수할 필요가 거의 없습니다.
     
  • 소프트웨어를 신중하게 선택하십시오. 일부 DNS 소프트웨어에는 보안 기능이 내장되어 있습니다. 개발자와 얘기하여 지불하는 비용에 해당하는 기능이 모두 제공되는지 확인해야 합니다. 

공직 실무자들도 솔루션을 마련하기 위해 노력하고 있습니다. 국제인터넷주소관리기구(ICANN)의 경우 DNSSEC(Domain Name System Security Extensions)를 개발했으며, 구현되면 DNSSEC 검증을 이용할 예정입니다. 그러면 협력 관계에 있는 사업체의 진위 여부를 비롯해 수신되는 데이터의 신뢰성 알 수 있습니다.

DNSSEC가 완전한 보안 기능을 제공하려면 널리 배포되어야 합니다. 인증이 필요한데 아무도 이를 처리하지 않다면 사용자가 필요할 때 사이트를 이용할 수 없게 됩니다. 실무자들은 앞으로 이러한 기술을 사용하는 기업이 늘어나기를 기대하고 있습니다.

Okta가 도와드리겠습니다 

DNS 서버를 제대로 구성하고 보호하려면 시간과 전문 인력, 그리고 지속성이 필요합니다. 하지만 시간이 충분하지 않거나 이를 처리할 전문가가 없더라도 걱정하지 마십시오. Okta가 도와드리겠습니다.

Okta의 검증된 기술이 정상적인 사이트 운영과 데이터 보안을 보장합니다. Okta에게 문의하여 DNS 포이즈닝을 차단하는 방법을 알아보세요. 

참고 자료

DNS Poisoning Suspected Cause of Huge Internet Outage in China. (2014년 1월). eWeek. 

URLs. MOZ. 

Brief History of the Domain Name. Harvard. 

How DNS Cache Poisoning Works. (2008년 10월). Networkworld. 

DNS Cache Poisoning, the Internet Attack From 2008, Is Back From the Dead. (2020년 11월). ARS Technica. 

DNSSEC: What Is It and Why Is It Important? ICANN.