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 캐시되지 않은 응답

DNS 캐시된 응답:

DNS 캐시된 응답

공격자는 DNS 캐시에 어떻게 악성 침입합니까?

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

DNS 캐시 악성 침입 프로세스:

DNS 캐시 악성 침입 프로세스

악성 침입된 DNS 캐시:

악성 침입된 DNS 캐시

통신을 시작하고 장치의 신원을 확인하기 위해 두 통신 당사자 모두 '핸드셰이크'를 수행하도록 요구하는 TCP를 사용하는 대신, DNS 요청 및 응답은 UDP(User Datagram Protocol)을 사용합니다. 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 악성 침입이 가능한 이유입니다.

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