ip주소보다는 이름을 사용하고자 하는 경향으로 탄생함
도메인을 트리구조로 나타낼 수 있다. 도메인은 또다시 서브 도메인으로 나뉜다.
ex> 최상위 도메인은 .com, .edu, .gov 등이 있다.
전체 도메인 네임 계층을 하나의 서버에 저장하기에는 너무 큼
-> 여러서버에 나누어서 저장해야함. 즉 서버가 책임을 지거나 권한을 가지는 곳을 Zone이라함(Zone==서버)
만약 서버가 도메인을 서브 도메인으로 나우고 일부를 다른 서버에 권한 이양하면 도메인과 서버(Zone)은 달라짐.
그 서버는 Zone File이라는 DB를 가지며 그 도메인 내의 모든 노드 정보를 여기에 보관함
*Zone File:
개별 도메인에 대한 DNS 정보가 설정되어 있는 파일
보통은 하나의 도메인에 대해서 하나의 Zone 파일을 만들어줌
*루트서버(13개)
전체트리를 zone으로 가지는 서버임, 루트 서버는 보통 도메인에 대한 어떤 정보도 가지지 않으며 자신의 권한을 다른 서버에게 이양함(도메인과 zone이 달라짐)
자신은 이러한 서버들에 대한 참조만을 가짐
*1차 및 2차 서버
DNS서버가 자신의 도메인에 있지 않은 이름에 대한 문의를 계속 검색하는 시간을 줄이기 위해 캐싱이라는 절차를 사용함.
서버가 다른 서버에게 매핑 정보를 요청하고 응답을 수신하면 이정보를 클라이언트에게 전달하기 위해 캐시 메모리에 저장함.
캐싱은 주소해석속도를 높일 수 있지만, 만약 서버가 오랫동안 캐싱 정보를 가지고 있으면 클라이언트에게 잘못된 매핑 정보를 보낼 수 있다.
/etc/hosts 파일은 도메인/호스트명과 ip주소 매핑정보를 담고 있는 파일로 네임서버에 질의 하기 전에 먼저 참조되는 파일이다.(파밍공격에 주의)
Recursive DNS 서버
인터넷 작업자가 가장 먼저 접근하는 DNS서버, DNS서버를 매번 거치면 효율성이 없기 때문에 한번 거친 후의 데이터를 일정시간(TTL)동안 캐시형태로 저장해두는 서버.
즉 직접 도메인과 ip 주소의 관계를 기록/저장/변경하지는 않고 캐시만을 보관함.
ex> KT/LG/SK와 같은 ISP(통신사) DNS 서버, 구글 DNS등
Authoritative DNS 서버(네임서버)
실제 개인 도메인과 IP 주소의 관계가 기록/저장/변경 되는 서버
ip 주소를 이름으로, 이름을 ip주소로 매핑하기 원하는 호스트는 해석기라고 불리는 DNS클라이언트를 호출함.
해석기가 매핑결과를 요청하고 수신하면 이 응답을 해석함(제대로 온것인지 오류가 난 것인지)
확인 후 그 결과를 요청한 프로세스에게 전달함.
계층 트리를 따라서 찾고자 하는 정보에 해당하는 도메인네임서버를 찾는다. 해당 정보가 없는 서버는 클라이언트가 되어 그 다음 계층으로 요청전달한다. 그 응답은 반대로 수신함.
클라이언트(A야 정보있어?)
A(정보 없으면 클라이언트 됨, B야 정보있어?)
B(정보 없으면 클라이언트 됨, C야 정보있어?)
C(엉 여기, B로 정보전달)
B(A로 정보 전달)
A(클라이언트로 정보 전달)
클라이언트(정보 수신)
네임서버에 요청을 보내면 그 정보에 답변할 수 있는 서버의 주소를 알려준다. 따라서 계층 트리를 따라서 가는 것이 아니라 클라이언트가 반복적으로 내 정보에 맞는 네임서버를 찾아가는 것이다.
클라이언트(A야 정보있어?)
A(B로 가봐!)
클라이언트(B야 정보있어?)
B(C로가봐)
클라이언트(C야 정보있어?)
C(여기있어~)
aaa.bbb.com에 해당하는 ip를 찾고자 한다.
사용자는 우선 캐시가 되어있는 DNS 로컬네임서버(Recursive DNS서버)로 aaa.bbb.com이 있는지 재귀적 질의를 보낸다.
재귀적 질의이기 때문에 캐시가 되어있다면 매핑되는 정보를 클라이언트에게 보내준다. 그러나 캐시가 없다면 DNS 로컬네임서버가 클라이언트가 된다.
DNS 로컬 네임서버는 루트DNS서버로 반복적 질의를 한다. 루트 DNS 서버는 com을 담당하는 네임서버의 ip를 알려준다.
DNS 로컬 네임 서버는 com 네임서버로 반복적 질의를 한다. com 네임 서버는 bbb.com을 담당하는 네임서버의 ip를 알려준다.
DNS 로컬네입서버는 bbb.com을 담당하는 네임서버로반복적 질의를 한다. bbb.com네임서버는 aaa.bbb.com을 담당하는 네임서버의 ip를 알려준다.
DNS 로컬 네임서버는 aaa.bbb.com을 담당하는 네임서버로 반복적 질의를 한다. 해당하는 ip주소를 받는다.
DNS 로컬 네임서버는 받은 ip주소를 클라이언트에게 준다.
전달되는 DNS 응답(IP주소)을 조작하거나 로컬 DNS 서버의 캐시정보를 조작하여 의도하지 않는 주소로 접속하게함.(Fake Site)
-공격방법
희생자가 DNS질의를 수행하면 이를 스니핑하고 있다가 정상 응답보다 빠르게 희생자에게 조작된 웹사이트 IP정보를 담은 DNS 응답을 보내 Fake Site로 접근되도록함.
조작된응답이 도착한 후에 오는 정상응답은 먼저 수신한 응답을 신뢰하는 특성으로 인해 폐기된다.(취약점)
즉 스니핑을 통한 DNS스푸핑공격은 동일 LAN에서 발생하므로 물리적으로 빠른 응답시간을 이용해 공격하는 방법이다.
-방어법
스니핑을 차단, 중요한 사이트의 IP주소에 대해서는 DNS 질의보다 우선순위가 높은 etc/hosts 파일에 등록하여 관리함.
로컬DNS서버(Recursive DNS서버)가 가진 캐시를조작하는 공격이다.
-공격방법
로컬DNS서버가 반복적 질의를 수행하는 동안, 다수의 조작된 DNS 응답을 보낸다.(조작할 정보)
공격자는 로컬DNS서버에 조작하고자 하는 IP주소를 보내게 되는데 네임서버로의 반복적 질의 과정에서 포트와 Transaction ID를 랜덤으로 쓴다.
따라서 이것을 맞춰야 하기 떄문에 공격자는 조작된 응답을 다수 생성해서 공격한다.(하나 얻어 걸려라!)
하나 얻어 걸리면 DNS서버의 캐시에 조작된 IP주소를 저장한다.(Fake Site)
-방어법
DNSSEC(DNS Security Extension) 기술활용
메시지 송신자 인증, 전자서명 보안서비스 이용하여 완전무결성을 제공함.(응답이 허가된 DNS 서버로부터 왔는지 디지털 서명을 확인함, 따라서 전자서명 없으면 바로 폐기함)
그러나 메시지 기밀성, DoS 공격에 대한 방지는 못함