◈ 제목
DNS 의 Cache Poisoning 취약점
◈ 개요
DNS 프로토콜에 Cache Poisoning 취약점이 존재한다. 이 취약점을 이용하여 공격자는 취약한 DNS 를 사용하는 시스템에 조작된 DNS 쿼리를 전송하여 캐쉬의 정보를 변경할 수 있다.
주의: 이번 취약점의 공격코드가 공개된 것과 관련하여, 안전하지 않은 DNS 를 사용하는 경우 빠른시일내에 패치를 적용할 것을 권고한다.
◈ 공격유형
DNS Cache Poisoning
◈ 해당시스템
DNS 프로토콜이 적용된 소프트웨어
◈ 영향
공격자는 조작된 DNS 쿼리를 다량으로 전달하여 DNS 캐쉬서버의 내용을 임의로 변경할 수 있다. 요청한 주소의 원래 주소가 아닌 공격자가 지정한 주소로 변경하여 캐쉬를 변경할 수 있으므로 악성코드가 설치된 임의의 주소 등으로 변경이 가능하다.
◈ 설명
이 취약점은 특정 DNS 소프트웨어에 한정되지 않고 DNS 프로토콜을 따르는 모든 소프트웨어에 영향을 줄 수 있다. DNS(Domain Name System)는 인터넷 인프라의 중요한 요소로 호스트 이름을 IP 주소로 변경해 주거나 또는 반대의 역할을 수행한다. 공격자는 조작된 DNS 정보를 전달하여 조작된 DNS 정보가 캐쉬 네임서버에 기록될 수 있도록 한다. 이 공격기법은 Cache Poisoning 으로 불리며 다음과 같은 경우에 이번 취약점 영향을 받을 수 있다.
- 트랜젝션 ID 예측 및 고정된 소스 포트
DNS 프로토콜은 Transaction ID 라는 16비트의 필드를 가지고 있다. 쿼리 요청시 이 ID 번호가 임의로 선택되어 지는것을 예측하여 캐쉬 조작이 가능해 진다. ID 값은 32,768 개의 값이 존재하여 추측하기 힘들지만 취약점을 내포한 DNS 의 경우는 이보다 더 작은 번호로 예측하여 공격시도가 가능해 진다. 또한, 요청된 쿼리에 대해 응답되는 쿼리는 같은 소스포트 번호를 사용하여 스푸핑이 더욱 쉽게 가능해 진다.
요청한 DNS 쿼리에 대해 응답을 주는경우 출발지와 목적지 포트가 동일하고 트랜젝션 ID 까지 같은 경우는, 올바른 것으로 판단되어 캐쉬에 잘못된 정보를 기록할 수 있게 된다.
현재 이 취약점의 공격코드가 7/24일(한국시간) 공개되어 각별한 주의가 필요하다
◈ 자주묻는 질문(FAQ)
-
도메인 이름 시스템(DNS:Domain Name System)이란 무엇인가?
DNS 시스템은 사용자들이 기억하기 어려운 숫자 체계로 된 네트워트 IP 주소를 인지하기 쉬운 알파벳 체계의 인터넷 도메인 주소로 매핑해주는 시스템이다. DNS는 2개의 컴포넌트인 클라이언트와 서버로 구조로 되어 있으며, 클라이언트가 도메인 주소에 대해 서버에게 쿼리를 보내면 서버가 DSN 시스템의 데이터베이스를 참조하여 이에 해당하는 네트워크 IP주소를 응답해 준다. -
DNS Cache란 무엇인가?
DNS Cache 서비스는 DNS 서버에 대한 반복적인 DNS 쿼리를 수행하지 않도록 쿼리에 대한 응답을 저장하여 네트워크 트래픽과 DNS 오퍼레이션에 대한 성능을 향상시키기 위해
제공되는 서비스이다. 서비스는 다음과 같은 구조로 동작한다.
- 클라이언트가 캐쉬 DNS 서버에게 쿼리를 보낸다.
- 서버에 캐쉬된 정보가 존재하는 경우, 바로 응답하고, 존재하지 않는 경우, 신뢰된 다른 DNS 서버에게 쿼리를 재전송한다.
- 신뢰된 다른 DNS 서버로부터 응답을 전달받는다.
- 전달된 응답을 클라이언트에게 전달하고 캐쉬 데이터베이스에 응답을 저장한다.
- DNS 캐쉬 Poisoning 이란 무엇인가?
이 공격은 DNS 서버의 캐쉬에 잘못된 정보를 기록하는 공격으로, 공격자는 조작된 쿼리 요청을 통하여 수행할 수 있다. 즉, 쉽게 설명하면 DNS 캐쉬 포이즈닝은 DNS 데이터를 위/변조하는 공격형태를 말하며, 파밍(Pharming)공격도 이에 속할수 있다.
일반적인 인터넷 접속을 생각해 보자. 우리가 http://example.com을 접속하기 위해서는 먼저 브라우저를 열고, http://example.com을 연결을 시도 할 것이다. 이때 브라우저는 example.com의 주소를 DNS에 질의하여, example.com의 IP주소를 얻어오게 된다.그리고 나서 IP주소를 이용하여, example.com 서버에 접속하게 되고, 요청/응답을 통해 웹 서핑을 하게 되는것이다. (여기서 중요한 부분은 도메인을 통해 서버로 바로 접속하는게 아니라 DNS를 통해 IP를 얻고 IP주소를 이용하여 접속한다는 것이다.)
이때 만약 DNS서버에 질의할때, DNS가 잘못된 IP주소를 알려준다면 무슨일이 일어날 수 있을까?
일반 사용자가 제품을 다운로드하기 위해 http://example.com으로 접속을 한다고 가정하자. 공격자는 DNS 캐시 포이즈닝을 발생시켜, example.com의 IP주소를 공격자 서버의 IP주소로 바꿔치기 한다. 그리고 공격자는 example.com과 똑같은 사이트를 구성해놓고, 제품을 다운로드 할때 악성 프로그램으로 다운로드 되게 해놨다고 하면,일반 사용자가 example.com을 접속할때 DNS는 잘못된 공격자의 IP를 알려줄 것이고, 사용자는 example.com과 똑같이 생긴 가짜 홈페이지로 접속하게 될것이다. 사용자는 변조된 사이트라고 생각지 못하고 신뢰하게 되어 여러 추가적인 정보를 노출당 할 수도 있다.
이렇듯 위-변조된 DNS 응답메시지를 통해 캐쉬 네임서버의 내용을 변조할 수가 있게 되는 것이다.
-
새로운 형태의 취약점인가?
이번 취약점은 기존에 알려진 DNS Cache Poisoning 의 공격방법의 하나로서 새로운 형태의 공격방법은 아니다. 일반적으로 DNS Cache Poisoning 방법은 많은 양의 데이터를 보내서 공격을 하기 때문에 탐지되기도 쉬워 공격이 쉽지 않은 반면에 이번 취약점은 좀더 쉬운 방법으로 DNS 캐쉬의 내용을 변조할 수가 있다. -
이 취약점은 어떻게 보고되었나?
IOActive 의 Dan Kaminsky 가 발견하여 올해 초 DNS 프로토콜을 사용하는 많은 업체들과 이 문제를 해결하기 위하여 노력하였고, 7월초 이 취약점에 대한 것이 부분적으로 공개되었다. 8월7일 보안 컨퍼런스인 블랙햇(BlackHat)에서 세부적인 내용을 공개하려고 하였으나, 7월24일 취약점을 이용한 공격코드가 공개되면서 이를 악용한 공격이 나오지 않을까 우려되는 상황이다. -
이번 취약점이 어떤 영향을 줄 수 있는가?
DNS 캐쉬의 내용이 변조가 되어 특정 도메인의 주소가 공격자가 지정한 임의의 주소로 변경될 수 있다. 이로인해 공격자가 지정한 주소에 피싱 사이트를 만들거나 또는 악의적인 코드를 넣어 사용자 시스템이 위협에 노출될 수 있다. -
어떤 제품이 영향을 받나?
DNS 프로토콜이 적용된 소프트웨어는 영향을 받을 수 있다. 특정 소프트웨어에 한정한게 아니라 프로토콜 자체에 취약점이 존재하기 때문에 사용하는 DNS 소프트웨어가 문제없는지 확인이 필요하다. -
왜 이번 취약점이 큰 문제를 야기할 수 있나?
DNS 는 인터넷 인프라에서 중요한 서비스중에 하나로 호스트 주소를 IP 로 변경해 주는 역할을 담당하고 있기 때문에 꼭 필요한 서비스이다. 이번 취약점은 도메인의 주소를 임의의 주소로 변경할 수 있기 때문에, 만약 특정 도메인이 조작된 사이트로 연결이 되면 사용자는 아무런 의심없이 해당 사이트가 진짜인것으로 혼돈할 수 있다. 그러므로 도메인의 원래 주소와는 상관없이 조작이 될 수 있다면 큰 위협을 초래할 수 있다. 여러분이 즐겨찾는 유명한 사이트가 조작된 특정 사이트로 연결이 된다고 생각해 보면 쉽게 이해할 수 있다. -
DNS 서버가 이번 취약점에 노출되어 있는지 확인을 어떻게 해 볼 수 있나?
- OARC 에서 제공하는 기능을 통하여 다음과 같이 쿼리를 통해 확인을 해 볼 수 있다.
결과가 GOOD 또는 POOR 로 간단하게 확인이 가능하다.
<취약한 경우>
$ dig @네임서버주소 +short porttest.dns-oarc.net TXT
"네임서버 is POOR: 40 queries in 6.3 seconds from 1 ports with std dev 0.00"
<정상인 경우>
$ dig @네임서버주소 +short porttest.dns-oarc.net TXT
"네임서버 is GOOD: 26 queries in 0.1 seconds from 26 ports with std dev 17815.28"
또는 nslookup 을 이용하여 다음과 같이도 가능하다.
$ nslookup -type=txt -timeout=30 porttest.dns-oarc.net 네임서버주소
- 취약점을 발견한 Dan Kaminsky 의 블로그의 ‘DNS Checker’ 기능 이용
"Your name server, at xxx.xxx.xxx.xxx, appears vulnerable to DNS Cache Poisoning."
- DNS를 사용하는 개인들도 패치가 필요한가?
금번 취약점은 DNS 서버에 해당된다. 그러므로 DNS 서버를 운영하지 않는 개인들은 패치가 필요하지 않다. 다만, 취약한 DNS 서버를 사용하고 해당 DNS 서버의 캐쉬 정보가 변조되는 경우 위험에 노출될 수 있다. 안전하지 않은 DNS 서버를 사용하고 있다면 안전한 DNS 서버를 사용하는 것이 좋으며, DNS 의 위험성 여부는 FAQ 에서 언급한 취약한 시스템 확인 방법을 통하여 알 수 있다. 이렇게 일시적으로 안전하지 않은 DNS 서버의 사용을 피할 수 있으며, 해당 정보를 DNS 담당자에게 통보하여 빠른 업데이트를 요구하는 것이 좋다.
이번 취약점은 DNS 서버 운영에 중요한 문제가 되므로 DNS 를 운영하는 각 기업 및 기관은 이 권고문을 참고하여 문제를 해결하여야 한다.
패치내용
USN-622-1: 바인딩의 취약점
usn
우분투 보안 통지 USN-622-1 2008년 7월 8일
bind9 보안 취약점
CVE-2008-1447
A security issue affects the following Ubuntu releases:
Ubuntu 6.06 LTS
Ubuntu 7.04
Ubuntu 7.10
Ubuntu 8.04 LTS
This advisory also applies to the corresponding versions of
Kubuntu, Edubuntu, and Xubuntu.
The problem can be corrected by upgrading your system to the
following package versions:
Ubuntu 6.06 LTS:
libdns21 1:9.3.2-2ubuntu1.5
Ubuntu 7.04:
libdns22 1:9.3.4-2ubuntu2.3
Ubuntu 7.10:
libdns32 1:9.4.1-P1-3ubuntu2
Ubuntu 8.04 LTS:
libdns35 1:9.4.2-10ubuntu0.1
In general, a standard system upgrade is sufficient to effect the
necessary changes.
Details follow:
Dan Kaminsky discovered weaknesses in the DNS protocol as implemented
by Bind. A remote attacker could exploit this to spoof DNS entries and
poison DNS caches. Among other things, this could lead to misdirected
email and web traffic.