■ DNS 의 Cache Poisoning 취약점
DNS 프로토콜에 Cache Poisoning 취약점으로 공격자는 취약한 DNS 를 사용하는 시스템에 조작된 DNS 쿼리를 전송하여 캐쉬의 정보를 변경, 정상적인 사이트에 접속 시 다른 사이트의 ip로 변조시키는 방법입니다.
■ 대상
DNS 프로토콜이 적용된 소프트웨어
■ 취약점 내용
공격자는 조작된 DNS 쿼리를 다량으로 전달하여 DNS 캐쉬서버의 내용을 임의로 변경할 수 있습니다. 요청한 주소의 원래 주소가 아닌 공격자가 지정한 주소로 변경하여 캐쉬를 변경할 수 있으므로 악성코드가 설치된 임의의 주소 등으로 변경이 가능합니다.
이 취약점은 특정 DNS 소프트웨어에 한정되지 않고 DNS 프로토콜을 따르는 모든 소프트웨어에 영향을 줍니다. DNS(Domain Name System)는 인터넷 인프라의 중요한 요소로 호스트 이름을 IP 주소로 변경해 주거나 또는 반대의 역할을 수행합니다. 공격자는 조작된 DNS 정보를 전달하여 조작된 DNS 정보가 캐쉬 네임서버에 기록될 수 있도록 합니다. 이 공격기법은 Cache Poisoning 으로 불리며 다음과 같은 경우에 이번 취약점 영향을 받을 수 있습니다.
DNS 프로토콜은 Transaction ID 라는 16비트의 필드를 가지고 있습니다. 쿼리 요청시 이 ID 번호가 임의로 선택되어지는 것을 예측하여 캐쉬 조작이 가능하고, ID 값은 32,768 개의 값이 존재하여 추측하기 힘들지만 취약점을 내포한 DNS 의 경우는 이보다 더 작은 번호로 예측하여 공격시도 가 가능해 집니다.
또한, 요청된 쿼리에 대해 응답되는 쿼리는 같은 소스포트 번호를 사용하여 스푸핑이 더욱 쉽게 가능해 집니다. 요청한 DNS 쿼리에 대해 응답을 주는경우 출발지와 목적지 포트가 동일하고 트랜젝션 ID 까지 같은 경우는, 올바른 것으로 판단되어 캐쉬에 잘못된 정보를 기록할 수 있게 됩니다.
■ 취약점 확인방법
1. 질의를 이용한 확인
- 다음 명령 실행
$dig @localhost +short porttest.dns-oarc.net TXT 또는 아래와 같이 IP로 조회
$dig @해당서버IP +short porttest.dns-oarc.net TXT
- 취약한 경우 응답 내용
porttest.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"해당서버IP is POOR: 26 queries in 3.6 seconds from 1 ports with std dev0"
- 취약하지 않은경우 DNS 확인결과
porttest.z.y.x.w.v.u.t.s.r.q.p.o.n.m.l.k.j.i.h.g.f.e.d.c.b.a.pt.dns-oarc.net.
"해당서버 IP is GOOD: 26 queries in 2.0 seconds from 26 ports with std dev 17685.51"