-
[네트워크] 6. DNSCS/네트워크 2023. 3. 21. 23:02
1. DNS
DNS(Domain Name Service)는 우리가 흔하게 쓰는 hostname (www.google.com)을 ip주소로 바꿔주는 서비스입니다.
DNS는 다음과 같은 특징을 가집니다.
- aliasing : hostname의 별명입니다. 실제 canonical 주소는 너무 길기 때문에 보통 사용하는 이름입니다.
- canonical : 실제 서버의 hostname입니다.
- distribution : 웹 서버를 복사하여 여러 대의 서버로 응답합니다. 서버들은 똑같은 DB를 접근하며, 동기화 해야 됩니다.
서버를 분산하는 이유는 다음과 같습니다.
- 서버가 한 개일 경우, 오작동을 일으키면 위험합니다.
- 트래픽 제한이 걸립니다.
- 거리상 멀게 되면 delay 등의 문제가 생깁니다.
- 유지 보수를 하는 동안 작동을 멈춥니다.
- 규모 확대와 축소가 어렵습니다.
1.1 DNS의 계층 구조
Root name servers
세계에는 13개의 root name server가 있습니다. 똑같은 DB를 가지면서 세계에 퍼져 있어 delay를 방지합니다.
Anycast방식을 통해 가까운 서버를 찾아줍니다.
TLD
top-level domain서버는 com, org, net, edu, kr, jp 등의 도메인을 대표하는 서버입니다.
Authoritative DNS servers(권한 서버)
최종 hostname을 IP주소로 매핑하는 서버입니다. 기관 또는 service provider(ISP 등)에 의해 운영됩니다.
Local DNS name server(default name server)
공식적인 계층 구조에는 포함되지 않지만, ISP마다 갖고 있는 서버로, 캐시 역할을 하게 됩니다.
proxy 서버로써의 기능을 하게 됩니다.
아래는 nslookup 명령어를 사용했을 때, Local DNS name server가 나오는 모습입니다.
위쪽의 IP주소(100.64.0.2)가 local dns name server가 되고, 아래 결과 172.217.26.228이 google의 IP주소가 됩니다.
실제로 80포트로 접속하게 되면 google의 웹 서버에 접속하는 걸 확인할 수 있습니다.
지금까지 알아본 각 계층을 통해 DNS name을 IP주소로 알아내는 과정을 알아보도록 하겠습니다.
1.2 DNS resolution example - iterated query
우리의 컴퓨터가 requesting host가 되어, gaia.cs.umass.edu의 hostname에 대한 IP주소를 요청한다고 가정합시다.
iterated query 방식은 local DNS 서버가 각각 root, tld, authoritative 서버에 반복적으로 물어보는 방식입니다.
- requesting host에서 local DNS 서버에게 요청을 보냅니다.
- local DNS서버는 root 서버에게 edu에 대한 정보를 어디서 받을 지 물어봅니다.
- root 서버는 답변으로 특정 TLD 서버를 알려주게 됩니다.
- 다시 local DNS 서버는 TLD 서버에게 umass에 대한 정보를 어디에서 받을 지 물어보게 됩니다.
- TLD는 특정 authoritative 서버를 답변으로 알려주게 됩니다.
- 다시 local DNS서버는 authoritative에게 최종적인 host name인 gaia.cs.umass.edu에 대한 정보를 물어봅니다.
- authoritative 서버는 답변으로 최종 IP주소를 전달해줍니다.
- 마지막으로 local DNS서버는 최종 결과를 우리 컴퓨터(requesting host)에게 알려주게 됩니다.
1.2 DNS resolution example - recursive query
또다른 쿼리문 방식으로 재귀적인 쿼리를 보낼 수 있습니다.
물어보는 정보는 똑같지만, 위와 차이점은 각각 서버가 쿼리를 받으면 다음 서버에게 재귀적으로 쿼리를 보내며 결과를 기다리게 됩니다.
이러한 방식은 서버에서 서버로 바로 결과를 전달해주기 때문에 친절한 방식일 수 있지만, 문제가 있습니다.
root DNS 서버는 다른 처리를 하느라 바쁜데 재귀 처리를 하는 동안 pending상태가 되어 비효율적이고 취약한 점이 있습니다.
1.3 iterated query의 함정
사실 iterated query는 완벽한 iterator 방식이 아닙니다. local DNS 서버와 requesting host의 관계를 살펴보면, 사실 recursive방식이라는 것을 알 수 있습니다. 요청을 보내면, 결과를 바로 받기 때문입니다.
완전한 iterated query 방식으로 되기 위해선, root, TLD, authoritative 서버로부터 결과를 매번 requesting host로 전달 받아야 할 것입니다.
1.4 caching, updating records
hostname에 대한 매핑이 이뤄지면, 이 정보를 캐싱하게 됩니다.
하지만 캐싱한 정보가 너무 오래 되면(out of date), 유효기간(TTL)이 지났을 때 "권한 없는 응답"을 주게 됩니다.
위에서 nslookup 명령어를 사용한 결과를 보면, Non-authoritative answer라고 나옵니다.
레코드는 데이터베이스를 구성하는 요소입니다. DNS 데이터베이스에는 RR format형식으로 레코드를 저장합니다.
RR format : (name, value, type, ttl)
RR format은 type에 따라 4가지 의미를 가지게 됩니다.
- type=A : name이 hostname, value가 ip주소가 됩니다.
- type=NS : name이 도메인, value가 hostname(IP주소가 아닌 이름)이 됩니다.
- type=CNAME : name이 alias name, value가 canonical name이 됩니다.
- type=MX : value가 메일 서버의 이름이 됩니다.
1.5 DNS protocol, messages
- identification : 쿼리 또는 응답에 대한 16bit 식별자입니다.
- flags : 쿼리인지 or 응답인지, recursion이 허용되는지 등에 대한 1bit 값입니다.
- 아래는 실제 쿼리에 대한 데이터입니다.
1.6 DNS 구축하기
우리가 DNS를 구축하고 싶을 때, 다음과 같은 절차를 밟게 됩니다.
- 돈을 주고 사용하고 싶은 URL을 구매합니다.
- 레지스트라에 등록합니다.
- 레지스트라는 레지스트리의 데이터베이스에 도메인을 등록합니다.
- 최종적으로 ICANN에서 DNS 기술을 관리합니다.
1.7 DNS 공격 방법
DNS 관련 해킹 공격은 크게 3가지 방식이 있습니다.
DDoS(Distributed Denial of Service)
서버가 감당하지 못하게 대량의 악성 트래픽을 발생시켜 서버를 마비시키는 방법입니다.
보통 좀비 PC를 사용해서 대량의 PC에서 한번에 트래픽을 발생시킵니다.
하지만 Local DNS 서버를 통해 공격이 가기 때문에, local DNS서버 측에서 차단하거나 필터링 할 수 있어서 큰 효과를 보기 어렵습니다.
Redirect attacks
중간에 쿼리를 탈취하거나(mim) DNS를 감염시키는 공격입니다.
mim(man in middle)공격 종류로는 sniffing과 spoofing 방식이 있고, 각각 아래와 같습니다.
- sniffing : wireshark 등의 툴을 사용하여 dns, arp, http등으로 전송되는 패킷을 훔쳐 보는 것입니다.
- spoofing : 클라이언트와 서버 사이에 해커가 위치하여 중간에서 정보를 탈취하는 것입니다. 해커가 클라이언트 입장에서는 서버인 척을 하고, 서버 입장에서는 클라이언트인 척을 하여, 정보를 빼내는 것입니다. 카페 wifi같은 공공 와이파이를 사용할 때 취약합니다.
Exploit DNS for DDos
트래픽 증폭 공격을 하여 소량의 쿼리로 대량의 응답을 하게 만들어 DDoS를 유발하는 공격입니다.
본 글은 Computer networking : a top-down approach 라는 책을 통해 작성되었습니다.
'CS > 네트워크' 카테고리의 다른 글
[네트워크] 8. Transport Layer, multiplexing, UDP (0) 2023.04.03 [네트워크] 7. P2P와 Video Streaming (0) 2023.03.25 [네트워크] 5. FTP와 Electronic Mail(SMTP, POP3, IMAP) (0) 2023.03.16 [네트워크] 4. Web and HTTP (0) 2023.03.15 [네트워크] 3. Protocol stack과 Application Layer (0) 2023.03.09