공격자는 DNS 확인자를 속여 잘못된 정보를 캐싱하여 DNS 캐시를 감염시킬 수 있으며, 그 결과 확인자가 클라이언트에게 잘못된 IP 주소를 보내면 웹사이트를 탐색하려는 사용자가 잘못된 장소로 향하게 됩니다.
이 글을 읽은 후에 다음을 할 수 있습니다:
관련 콘텐츠
인터넷에서 가장 인기 있는 인사이트를 한 달에 한 번 정리하는 Cloudflare의 월간 요약본 theNET를 구독하세요!
글 링크 복사
DNS 캐시 포이즈닝은 DNS 캐시에 잘못된 정보를 입력하여 DNS 쿼리가 잘못된 응답을 반환하고, 사용자가 잘못된 웹 사이트로 연결되도록 하는 행위입니다. DNS 캐시 포이즈닝은 'DNS 스푸핑'이라고도 합니다. IP 주소는 인터넷의 '전화 번호'로, 웹 트래픽은 이를 이용해 올바른 장소에 도달할 수 있습니다. DNS 확인자 캐시는 이 전화 번호가 실린 전화 번호부와 같으며, 이 번호부에 잘못된 정보가 저장되면, 캐시된 정보가 수정되기 전까지는 트래픽이 잘못된 장소로 이동하게 됩니다. (실제 웹 사이트가 실제 IP 주소에서 분리되는 것은 아닙니다.)
DNS 확인자가 캐시의 데이터를 확인할 수 있는 방법이 없는 경우가 많으므로, TTL(Time To Live)이 만료되거나, 잘못된 정보가 수동으로 제거되기 전까지는, 잘못된 DNS 정보가 캐시에 남아 있게 됩니다. 여러 가지 취약점으로 인해 DNS 악성 침입이 발생할 수 있지만, 가장 큰 문제는 DNS가 훨씬 작은 인터넷용으로 구축되었으며 신뢰 원칙을 기반으로 한다는 점입니다(BGP와 유사). DNSSEC로 불리는 보다 안전한 DNS 프로토콜은 이러한 문제 중 일부를 해결하는 것을 목표로 하지만, 아직 널리 채택되지는 않았습니다.
DNS 확인자는 도메인 이름에 연결된 IP 주소를 클라이언트에 제공합니다. 즉, 'cloudflare.com'과 같이 사람이 읽을 수 있는 웹사이트 주소를 가져와서 컴퓨터가 읽을 수 있는 IP 주소로 변환하는 것입니다. 사용자가 웹사이트를 탐색하려고 하면, 운영 체제가 DNS 확인자에게 요청을 보냅니다. DNS 확인자는 IP 주소를 응답하고, 웹 브라우저는 이 주소를 사용하여 웹사이트를 로드하기 시작합니다.
DNS 확인자는 IP 주소 쿼리에 대한 응답을 일정 시간 동안 저장합니다. 이렇게 함으로써, 향후 쿼리가 있을 때, 일반적인 DNS 확인 프로세스에 포함된 많은 서버와 통신할 필요없이 훨씬 빠르게 응답할 수 있습니다. DNS 확인자는 해당 IP 주소와 관련된 지정 TTL(Time to Live)이 허용하는 기간 동안 응답을 캐시에 저장합니다.
DNS 캐시되지 않은 응답:
DNS 캐시된 응답:
공격자는 DNS 이름 서버를 가장하여 DNS 확인자에 요청을 보낸 후, DNS 확인자가 이름 서버를 쿼리할 때 응답을 위조하여 DNS 캐시를 감염시킬 수 있습니다. 이는 DNS 서버가 TCP 대신 UDP를 사용하고, 현재 DNS 정보에 대한 확인이 없기 때문에 가능합니다.
DNS 캐시 악성 침입 프로세스:
악성 침입된 DNS 캐시:
통신 당사자들이 통신을 시작하기 위해 '핸드셰이크'를 수행해야 하는 TCP를 사용하는 대신, DNS 요청 및 응답에는 UDP, 즉 사용자 데이터그램 프로토콜이 사용됩니다. UDP를 사용할 경우 연결이 열려 있거나 받는 사람이 받을 준비가 되었다는 보장이 없습니다. UDP는 이러한 이유로 위조에 취약합니다. 공격자는 UDP를 통해 메시지를 보내고 헤더 데이터를 위조하여 합법적인 서버의 응답인 것처럼 가장할 수 있습니다.
DNS 확인자가 위조된 응답을 받으면, 정보가 정확하고 합법적인 출처에서 온 것인지 확인할 방법이 없기 때문에, 무비판적으로 데이터를 받아들이고 캐시합니다. DNS는 인터넷 초창기에 만들어졌는데, 당시에는 유일한 이용자들이 대학과 연구소였으며, 누군가가 가짜 DNS 정보를 유포하려고 시도할 이유가 없었습니다.
DNS 캐싱 프로세스의 이러한 주요 취약점에도 불구하고 DNS 악성 침입은 쉽지 않습니다. DNS 확인자가 실제로 권한 있는 이름 서버를 쿼리하기 때문에 ,공격자가 권한 있는 이름 서버의 실제 응답이 도착하기 전의 몇 밀리초 만에 가짜 응답을 보내야 하기 때문입니다.
또한 공격자는 DNS 스푸핑 공격을 수행하기 위해 다음과 같은 요소를 알고 있거나 추측해야 합니다.
공격자는 다른 방법으로 DNS 확인자에 대한 액세스 권한을 획득할 수도 있습니다. 악의적인 당사자가 DNS 확인자를 조작하거나, 해킹하거나, 실제로 액세스 권한을 획득할 경우, 캐시된 데이터를 보다 쉽게 변경할 수 있습니다.
*네트워킹에서 포트는 가상의 통신 수신 지점을 말합니다. 컴퓨터에는 고유 번호를 가진 여러 포트가 있으며 컴퓨터가 서로 통신하려면 특정 종류의 통신을 위해 특정 포트를 지정해야 합니다. 예를 들어, HTTP 통신은 항상 포트 80으로 향하고 HTTPS는 항상 포트 443을 사용합니다.
특정 웹사이트나 웹 자원에 대한 액세스를 거부하기 위해 정부가 자국 내의 DNS 캐시에 의도적으로 악성 침입하는 국가도 있습니다.
DNSSEC는 Domain Name System Security Extensions의 약자이며 DNS 데이터 무결성과 출처를 확인하는 수단입니다. 원래 DNS는 그러한 확인 없이 설계되었으며, 이는 DNS 악성 침입이 가능한 이유입니다.
DNSSEC는 TLS/SSL과 흡사하게 공개 키 암호화(정보 디지털 서명 방식)를 사용하여 데이터를 확인하고 인증합니다. 2005년에 DNSSEC 확장 버전이 발표되었지만, DNSSEC는 아직 주류가 아니므로 DNS는 여전히 공격에 취약합니다.