본문 바로가기

23년 2학기 학교공부/컴퓨터네트워크

[CN] DNS(Domain Name System)

목차

    728x90
    반응형
    SMALL
    2023학년도 2학기 충남대학교 이영석 교수님의 컴퓨터네트워크 수업 정리자료입니다.

     

     

     

     

    📁 DNS(Domain Name System)

     

    DNS란 인터넷에 연결된 컴퓨터의 이름과 IP 주소를 매핑하는 분산 시스템을 말한다.

     

     

    일반적으로 웹사이트에 접속할때 우리는 기억하기 힘든 IP주소가 아닌 www.naver.com과  과 같은 도메인 이름을 사용한다.

     

    이렇게 사용하기 위해서 입력한 도메인을 실제 네트워크상에서 사용되는 IP 주소로 바꾸고, 해당 도메인으로 접속하면 매핑된 IP주소로 접속하게끔 하는 과정이 필요한데, 이러한 전체 시스템을 DNS(도메인 네임 시스템)이라고 한다.

     

     

    DNS는 상위기관에서 인증된 기관에게 도메인을 생성하거나 IP주소로 변경할 수 있는 권한을 부여해준다.

     

    즉 DNS는 상위기관과 하위기관같이 계층 구조를 지닌 분산 데이터베이스 구조를 가지며, 도메인의 계층은 점('.')으로 구분한다.

     

     

     

    User가 가장 가까운 DNS 서버에 www.example.com라는 서버의 IP를 알려달라고 요청하면, DNS 서버가 IP를 알려주는 방식으로 동작한다.

     

     

    이때 가장 가까운 DNS 서버를 찾고, 해당 DNS 서버에 입력받은 도메인 주소에 대한 IP를 조회해달라는 메시지를 보내고, 이에 반송되는 응답메세지를 받는 역할은 DNS Resolver가 수행한다.

     

    즉 DNS 서버는 이름에 대한 정보를 제공하고, DNS Resolver가 DNS 서버의 클라이언트가 되어서 이름을 IP 주소로 변환하는 기능을 제공한다고 볼 수 있다.

     

     

     

    마지막 루트 '.'은 생략할 수 있다.

    도메인 주소는 DNS 구조를 따라 점('.')을 기준으로 계층적으로 표시되어있다.

     

     

    이때 순서는 역트리구조로, 도메인주소는 sub부터 root 순서대로 쓰여있지만 DNS에서 주소를 찾아갈때는 root부터 sub 방향으로 주소를 단계적으로 찾아간다.

     

    위 DNS 흐름도를 살펴보면, DNS Resolver가 Root Name Server에 먼저 물어봤다가, TLD 네임 서버에 물어봤다가, Route 53 name 서버에 묻고있는 것을 볼 수 있다.

     

     

     

    참고로 한국에는 15개의 name server가 존재한다. ".kr"과 ".한국 도메인" 등이 있다.

     

     

     

    dig cnu.ac.kr ns
    dig cnu.ac.kr +trace

     

    dig 명령어로 네임서버로부터 정보를 가져와 확인해 볼 수 있고, +trace를 붙이면 DNS 질의를 추적할 수 있다.

     

     

     

     

     

     

    📁 DNS의 계층적 서버 분류

     

    1) Root DNS Server

    가장 상단에 위치한 도메인을 루트(root, ".") 도메인이라고 하며, 이를 관리하는 서버가 루트 DNS 서버이다.

     

    DNS 서버의 최상위 네임서버로 DNS 해석부터 발생한 DNS 요청에 대하여 적절한 TLD 네임서버 정보, 즉 TLD DNS Server ip 주소 를 반환한다.

     

     

    세계 13개 지역에 존재한다.

     

     

     

     

    2) TLD 네임서버 (Top Level Domain Name Server)

    TLD(Top-Level Domain)도메인은 루트 도메인 아래 계층이며 최상위 계층이라고 부른다.

     

    URL의 마지막 마침표 뒤에 오며, 예를 들면 com, org, edu, net, biz, kr, jp, 등이 있다.

     

     

    TLD를 관리하는 서버가 TLD DNS 서버이며, 도메인 등록 기관이 관리한다.

     

    루트 네임서버로부터 응답을 받은 후 Authoritative(책임) DNS Server의 ip 주소를 반환한다.

     

     

     

     

     

    3) Authoritative Name Server(도메인 책임 DNS 서버)

    일반적으로 IP 주소를 확인하는 확인자의 마지막 단계이며 제 도메인과 ip 주소 관계가 기록/저장/변경되는 서버이다.

     

    도메인 이름에 고유한 정보를 포함하여 DNS 서버에 Response 한다.

     

     

    보통 도메인/호스팅 업체의 네임서버를 말한다.

     

     

     

     

     

    📁 DNS관련 인터넷 사고

     

    🌱 Root Name Server 공격

     

    루트 네임서버에 대한 분산 서비스 거부 공격

     

     

    1) Botnet 이용 13개 root name server에 대한 ICMP ping 공격(2002) -> 실패

     

    2) 2개 root server 공격(2007) -> 성공

      - heavy traffic발생. Anycast 주소로 공격 대피

     

    3) 초당 5백만 query 공격(2015) -> 성공

       - timeout 발생

     

     

     

     

     

    🌱 1.25 인터넷 대란

     

    2003년 1월 25일 MS SQL서버 취약점

    -> Slammer Worm 바이러스로 인한 트래픽 과부하

    -> KT DNS 서버 공격

    -> DNS 서버 다운

    -> 인터넷 마비

     

     

     

     

     

    🌱 Slammer worm virus

     

    Slammer worm virus란 특정 포트를 이용해 MS SQL 서버를 공격한 웜 바이러스이다.

     

    2003년 1.25 인터넷 대란에서 SQL 서버의 버퍼 오버플로 버그라는 취약점을 공략하여 30분만에 전 세계의 컴퓨터를 감염시켰다.

     

    이 웜 바이러스는 SQL 서버간의 통신 프로토콜인 UDP 1434포트에 정상 패킷 데이터인 것처럼 잠입하여 SQL 서버 메모리에 상주한다. 이렇게 슬래머에 감염된 서버는 무작위 IP 주소로 376byte 이상의 페이로드를 포함한 404byte의 UDP 패킷 을 무한으로 전송하여, DNS에 과부하를 일으켰다.

     

    이는 SQL서버와 DNS 서버뿐만아니라, 윈도NT, 2000서버 등초당 1MB의 데이터를 보내 전체 네트워크의 부하를 유발시킨다.

     

     

    2001년 발생했던 코드레드(Code Red) 해킹과 방식이 비슷하지만, 코드레드 해킹은 TCP 패킷을 이용했던것과 달리 UDP 패킷을 이용했다.

     

     

     

    위 Slammer Worm을 추적하기 위해, network telescope(망원경)이라는 방식을 사용할 수 있다.

     

    IPv4 주소 공간은 약 32억개가 있는데, 이 중 사용하지 않는 일부 주소가 network telescope가 되어 사용되고있는 IP 주소들 중 부분집합을 담당하여 모니터링한다.

     

    이때 IP 주소의 부분집합은 보통 class 단위로 묶는다.

     

     

    예를 들어 B class를 network telescope로 모니터링한다고 하자. B class는 65,536개의 IP 주소가 있으므로, 해킹 패킷을 잡을 확률은 65536 / 32억 이다.

     

     

     

     

     

     

    🌱 DNS 패킷 구조

         

     

    위 패킷은 UDP를 이용 중이며, 포트번호는 53이다.

     

    전통적으로는 UDP 패킷을 이용하지만 최근에는 UDP와 TCP 모두 사용중이며, 보통 512보다 작은 패킷은 UDP, 512보다 큰 패킷은 TCP를 사용한다.

     

     

     

     

     

    🌱 DNS Query Type

     

    1. Type A vs Type AAAA

    브라우저가 인터넷에서 사용자를 올바른 주소로 안내하기 위한 Query Type이며, IPv4와 IPv6중 무엇을 기반으로 하는지에 따라 다르다.

     

     

    A: 주어진 도메인 이름과 IPv4 주소를 매칭하여 변환하는데 사용된다.

     

    AAAA: 주어진 도메인 이름과 IPv6 주소를 매칭하여 변환하는데 사용된다. quad-A라고도 부른다.

     

     

    즉, 사용자가 A 혹은 AAAA 레코드에 해당하는 도메인 주소에 대한 해석을 요청하면 DNS 서버는 IP 주소를 리턴한다.

     

     

     

     

    2. Type CNAME

    CNAME 레코드는 도메인의 정식 이름을 지정하는 DNS 영역에서 사용할 수 있는 레코드 유형으로, 다른 도메인의 별칭이거나 주 도메인의 하위 도메인일 수 있다.

     

    CNAME 레코드는 한 호스트 이름을 다른 호스트 이름에 매핑하여, 하나의 IP 주소가 각각 다른 이름을 가진 여러 호스트를 가질 수 있게 한다.

     

     

    CNAME 레코드는 도메인을 외부 도메인으로 별칭을 지정하려는 경우 유용하며, 경우에 따라 CNAME 레코드를 제거하고 A 레코드로 대체하면 성능 오버 헤드를 줄일 수 있다.

     

     

    예를 들어, 위와 같은 정보가 DNS 서버에 저장되어 있다고하자. 사용자가 dev.plusblog.co.kr 주소를 요청하면 서버는 172.17.0.1 를 응답한다. 이것은 A 레코드 정보의 해석이다. 

     

    하지만 만약 develop.plusblog.co.kr을 요청하면 DNS 서버는 dev.plusblog.co.kr을 리턴하고, 사용자는 다시 dev.plusblog.co.kr 정보를 DNS 서버에 요청한다. DNS 서버는 이제 172.17.0.1 을 리턴하고 사용자는 IP 주소를 사용하게 된다. 이렇게 도메인이 매칭된 도메인 주소에 대한 해석은 CNAME 레코드 정보의 해석이다.

     

     

     

    A 레코드의 장점은 한번의 요청으로 찾아갈 서버의 IP 주소를 한번에 알 수 있다는 점이다. 반면 단점은 IP 주소가 자주 바뀌는 환경에서는 조금 번거로울 수 있다는 점이다. 예를 들어, 172.17.0.2 서버에서 plusblog.co.kr, dev.plusblog.co.kr, travel.plusblog.co.kr 등 여러개의 서브 도메인들을 처리하고 있다고하자. 각 서브 도메인들을 A 레코드로만 매핑시켰다면, 172.17.0.2라는 IP 주소가 172.17.0.3이라는 주소로 변경되었다면 모든 A 레코드를 찾아서 변경해야 한다. 

     

    CNAME 레코드의 장점은 IP 주소가 자주 변경되는 환경에서 유연하게 대응할 수 있다는 점이다. 예를 들어, dev.plusblog.co.kr, travel.plusblog.co.kr 도메인 정보를 plusblog.co.kr이라는 주소로 매핑시키는 CNAME 레코드로 저장하고, plusblog.co.kr이라는 주소를 172.17.0.2 라는 IP 주소로 매핑시키는 A 레코드로 저장해 놨다면, 서버의 IP 주소가 바뀌었을 때 plusblog.co.kr의 A 레코드 정보만 변경시키면 된다.

     

    CNAME 레코드의 단점은 실제 IP 주소를 얻을 때까지 여러번 DNS 정보를 요청해야 한다는 점이다. DNS 정보를 해석하는데 여러번 요청이 필요하다는 점은 경우에 따라서 성능저하를 유발할 수 있다.

    ( 참고: https://dev.plusblog.co.kr/30 )

     

     

     

     

    3. NS

    NS 레코드는 주어진 호스트에 대한 공식적인 name server를 알려준다. 이때 알려주는 name server는 authoritative name server이다.

     

     

     

     

     

     

    📁 DNS Caching

     

    최신 브라우저는 자주 사용되는 DNS를 캐싱하고있다.

     

     

     

     

     

    📁 DDNS(Dynamic DNS)

     

    IP주소가 변경될 때 DNS 정보를 갱신하는 기술로, 유동 IP를 고정 IP처럼 사용할 수 있도록 해준다.

     

    IP가 유동적인 가정의 공유기같은 곳에서 쓰인다.

     

     

    DDNS는 도메인과 ip를 ' Domain : IP ' 쌍으로 기억하는데, 예를 들어 공유기 같은 경우 ' 설정할주소.iptime.org : 서비스포트 ' 로 저장된다.

     

     

     

     

     

    📁 DNS 공격

     

    DNS은 암호화되지 않아서, DNS 패킷을 보면 개인이 방문한 웹사이트를 바로 확인할 수 있기 때문에 공격 대상이 된다.

     

    정부에서도 유해사이트에 활용한다.

     

     

     

    1. DNS Spoofing

    중간자 공격.

    DNS 서버로 전송되는 query를 가로채서 변조된 결과를 전송한다.

     

     

     

    2. DNS cache poisoning

    캐시 정보를 조작한다. 파밍(pharming)

     

     

     

    3. 피싱(phishing)

    실제 도메인 네임과 유사한 이름을 사용한 가짜 사이트를 만든다.

     

     

     

     

     

    📁 최근 DNS 기술

    - 암호화된 DNS: DNSSEC (암호화는 아님)

    - TLS를 통한 DNS: DoT (DNS over TLS)

    - HTTPS를 통한 DNS: DoH (DNS over HTTPS)

     

     

     

    1. DNSSec(DNS Security Extension)

    데이터 위조-변조 공격 방지 표준 기술.

     

    공개키 암호화방식의 전자 서명을 도입하였다.

     

     

     

     

    2. DNS over HTTPS (DoH)

     

    DNS 내용을 json 형식 데이터로 만들어 HTTPS 전송하는 방식이다. : TCP 443?

     

     

    이렇게 만들어진 DNS response message는 아래와 같다.

     

    RFC8484

    HTTP/2와 HTTPS를 이용한다.

    MIME type은 application/dns-message.

    • OS • Apple’s iOS 14 macOS 11 in 2020 • Windows 10 in 2019 • Web browser • Chrome, Edge, Firefox • DoH DNS server • Google (8.8.8.8), Cloudfare (1.1.1.1), Quad (9.9.9.9), NextDNS

     

     

     

    3. DNS over TLS

    • RFC7858, RFC8310 • TCP 853 • HTTPS 접속시 SNI 필드가 보 임• SNI: server name indication • 어느 도메인의 웹 사이트 접속 하였는지 보임 • 차단 가능 • TLS 1.3에서는 SNI 암호화

     

     

     

    웹 사이트의 TLS SNI 필드 캡쳐 • 시크릿모드 창 띄우고, wireshark 실행 • 방문 웹 사이트 • Ex) coupang.co.kr • Wireshark의 filter tls 이용 • TLS의 Client Hello 메시지의 Extension: server_name field !

     

     

     

     

     

     

    더보기

    참고

    https://velog.io/@zinukk/9kpyzbdt

     

    DNS(Domain Name System)란?

    데이터를 받아오는 과정 1. 사용자가 www.naver.com을 입력하면 입력한 URL 주소 중, 도메인 이름에 해당하는 www.naver.com을 DNS 서버에서 검색 웹 브라우저는 DNS 서버에 검색하기 전에 캐싱된 DNS 기록들

    velog.io

    https://anggeum.tistory.com/entry/DNS-%EA%B0%9C%EB%85%90%EC%9E%A1%EA%B8%B0-2-DNS-%EA%B5%AC%EC%84%B1-%EC%9A%94%EC%86%8C-%EB%B0%8F-%EB%B6%84%EB%A5%98DNS-Resolver-DNS-%EC%84%9C%EB%B2%84

     

    DNS 개념잡기 - (2) DNS 구성 요소 및 분류(DNS Resolver, DNS 서버)

    2. DNS 기능 DNS 기능은 크게 정보를 제공하는 기능과 이름을 변환하는 기능으로 나눌 수 있다. (1) DNS 서버는 이름에 대한 정보를 제공한다. (2) Resolver는 이름을 변환하는 기능을 제공한다. 2-1. IP 주

    anggeum.tistory.com

    https://win100.tistory.com/360

     

    DNS 레코드 타입 설명

    DNS (Domain name Server)의 레코드 타입에는 몇가지 종류가 있다. A (Address Mapping records) 레코드 A는 주어진 호스트에 대한 IP 주소 (IPv4)를 알려줍니다. A 레코드는 도메인 이름을 해당하는 IP 주소로 변환

    win100.tistory.com

    https://dev.plusblog.co.kr/30

     

    DNS에서 CNAME과 A 레코드의 차이

    가비아, 후이즈, 고대디 등의 DNS를 이용해서 커스텀 도메인을 사용할 때, 서브 도메인을 등록하기 위해서 CNAME과 A 레코드 같은 정보를 DNS 서비스 홈페이지에 등록해야한다. 둘 다 서브 도메인을

    dev.plusblog.co.kr

     

    728x90
    반응형
    LIST