DNS 캐시 중독이란 무엇입니까? | DNS 스푸핑

공격자는 DNS 확인자를 속여 잘못된 정보를 캐싱하여 DNS 캐시를 감염시킬 수 있으며, 그 결과 확인자가 클라이언트에게 잘못된 IP 주소를 보내면 웹사이트를 탐색하려는 사용자가 잘못된 장소로 향하게 됩니다.

Share facebook icon linkedin icon twitter icon email icon

DNS 스푸핑

학습 목표

이 글을 읽은 후에 다음을 할 수 있습니다:

  • DNS 캐시 중독 정의
  • DNS 캐싱 작동 방식 이해
  • 공격자가 어떻게 DNS 캐시를 감염시킬 수 있는지 설명
  • DNSSEC가 DNS 중독 공격을 막는 데 어떻게 도움이 되는지 이해

DNS 캐시 중독이란 무엇입니까?

고등학교에서 상급생이 장난으로 캠퍼스의 모든 교실 번호를 변경해서 아직 캠퍼스 레이아웃을 모르는 신입생들이 다음 날 길을 잃고 헤매다가 잘못된 교실에 나타난다고 상상해 보십시오. 이제 일치하지 않는 교실 번호가 캠퍼스 안내 책자에 기록되고 누군가 안내 책자가 잘못된 것을 발견하고 수정할 때까지 계속 잘못된 교실로 향한다고 상상해 보십시오.

DNS 캐시 중독은 DNS 캐시에 잘못된 정보를 입력하여 DNS 쿼리가 잘못된 응답을 반환하고 사용자가 잘못된 웹사이트로 연결되도록 하는 행위입니다. DNS 캐시 중독은 'DNS 스푸핑'으로도 알려져 있습니다. IP 주소는 인터넷의 '방 번호'로, 웹 트래픽이 올바른 장소에 도달할 수 있게 합니다. DNS 확인자 캐시는 '캠퍼스 안내 책자'이며 잘못된 정보를 저장하면 캐시된 정보가 수정될 때까지 트래픽이 잘못된 장소로 이동합니다. (실제 IP 주소에서 실제 웹사이트의 연결을 끊지는 않습니다.)

일반적으로 DNS 확인자가 캐시의 데이터를 확인할 수 있는 방법이 없으므로 TTL(Time To Live)이 만료되거나 수동으로 제거될 때까지 잘못된 DNS 정보가 캐시에 남아 있습니다. 여러 가지 취약점으로 인해 DNS 중독이 발생할 수 있지만 가장 큰 문제는 DNS가 훨씬 더 작은 인터넷용으로 구축되었으며 신뢰 원칙을 기반으로 한다는 것입니다(BGP와 유사). DNSSEC로 불리는 보다 안전한 DNS 프로토콜은 이러한 문제 중 일부를 해결하는 것을 목표로 하지만 아직 널리 채택되지는 않았습니다.

DNS 확인자가 하는 일은 무엇입니까?

DNS 확인자는 클라이언트에게 도메인 이름과 연결된 IP 주소를 제공합니다. 즉, 'cloudflare.com'과 같이 사람이 읽을 수 있는 웹사이트 주소를 가져와서 컴퓨터가 읽을 수 있는 IP 주소로 변환합니다. 사용자가 웹사이트를 탐색하려고 하면 운영 체제가 DNS 확인자에게 요청을 보냅니다. DNS 확인자는 IP 주소로 응답하고 웹 브라우저는 이 주소를 사용하여 웹사이트 로드를 시작합니다.

DNS 캐싱은 어떻게 작동합니까?

DNS 확인자는 일정 시간 동안 IP 주소 쿼리에 대한 응답을 저장합니다. 이와 같은 방법으로 확인자는 일반적인 DNS 확인 프로세스에 포함된 많은 서버와 통신 할 필요없이 향후 쿼리에 훨씬 빠르게 응답할 수 있습니다. DNS 확인자는 해당 IP 주소와 관련된 지정된 TTL(Time to Live)이 허용하는 기간 동안 응답을 캐시에 저장합니다.

DNS 캐시되지 않은 응답:

DNS uncached response

DNS 캐시된 응답:

DNS cached response

공격자는 DNS 캐시를 어떻게 중독시킵니까?

공격자는 DNS 네임서버를 가장하여 DNS 확인자에 요청한 다음 DNS 확인자가 네임서버를 쿼리할 때 응답을 위조하여 DNS 캐시를 감염시킬 수 있습니다. 이는 DNS 서버가 TCP 대신 UDP를 사용하고 현재 DNS 정보에 대한 확인이 없기 때문에 가능합니다.

DNS 캐시 중독 프로세스:

DNS Cache Poisoning Process

중독된 DNS 캐시:

Poisoned DNS Cache

통신을 시작하고 장치의 ID를 확인하기 위해 두 통신 당사자 모두 '핸드셰이크'를 수행하도록 요구하는 TCP를 사용하는 대신, DNS 요청 및 응답은 UDP 또는 User Datagram Protocol을 사용합니다. UDP를 사용하면 연결이 열려있거나 수신자가 수신할 준비가 되었거나 발신자가 자신이 누구인지를 보증하지 않습니다. UDP는 이러한 이유로 위조에 취약합니다. 공격자는 UDP를 통해 메시지를 보내고 헤더 데이터를 위조하여 합법적인 서버의 응답인 것처럼 가장할 수 있습니다.

DNS 확인자가 위조된 응답을 받으면 정보가 정확하고 합법적인 출처에서 온 것인지 확인할 방법이 없기 때문에 무비판적으로 데이터를 받아들이고 캐시합니다. DNS는 인터넷 초창기에 만들어졌는데, 유일한 당사자는 대학과 연구 센터였습니다. 누군가가 가짜 DNS 정보를 유포하려고 시도할 이유가 없었습니다.

DNS 캐싱 프로세스의 이러한 주요 취약점에도 불구하고 DNS 중독 공격은 쉽지 않습니다. DNS 확인자가 실제로 권한있는 네임서버를 쿼리하기 때문에 공격자는 권한있는 네임서버의 실제 응답이 도착하기 전에 몇 밀리초 만에 가짜 응답을 보낼 수 있습니다.

또한 공격자는 DNS 스푸핑 공격을 수행하기 위해 다음과 같은 많은 요소를 알고 있거나 추측해야 합니다.

  • 타겟 DNS 확인자가 어떤 DNS 쿼리를 캐시하지 않아서 확인자가 권한있는 네임서버를 쿼리할 수 있는지
  • DNS 확인자가 어떤 포트*를 사용하고 있는지 – 모든 쿼리에 동일한 포트를 사용했지만 이제는 매번 다른 무작위 포트를 사용합니다
  • 요청 ID 번호
  • 어떤 권한있는 네임서버로 쿼리를 보낼지

공격자가 다른 방법으로 DNS 확인자에 대한 액세스 권한을 획득할 수도 있습니다. 악의적인 당사자가 DNS 확인자를 조작하거나 해킹하거나 실제로 액세스 권한을 획득할 경우, 캐시된 데이터를 보다 쉽게 변경할 수 있습니다.

*네트워킹에서 포트는 가상 통신 수신 지점입니다. 컴퓨터에는 각각 고유 번호를 가진 여러 포트가 있으며 컴퓨터가 서로 통신하려면 특정 종류의 통신을 위해 특정 포트를 지정해야 합니다. 예를 들어, HTTP 통신은 항상 포트 80으로 향하고 HTTPS는 항상 포트 443을 사용합니다.

DNS 스푸핑 및 검열

일부 정부에서는 특정 웹사이트나 웹 리소스에 대한 액세스를 거부하기 위해 자국 내의 DNS 캐시를 의도적으로 감염시킵니다.

DNSSEC는 DNS 중독을 방지하는 데 어떻게 도움이 됩니까?

DNSSEC는 Domain Name System Security Extensions의 약자이며 DNS 데이터 무결성과 출처를 확인하는 수단입니다. DNS는 원래 그러한 확인없이 설계되었으며, 이는 DNS 중독이 가능한 이유입니다.

TLS/SSL과 마찬가지로 DNSSEC는 공개 키 암호화(디지털 서명 방식)를 사용하여 데이터를 확인하고 인증합니다. 2005년에 DNSSEC 확장 버전이 발표되었지만 DNSSEC는 아직 주류가 아니므로 DNS는 여전히 공격에 취약합니다.