서울대학교 컴퓨터공학과 권태경 교수님의 "Topics in Computer Networks" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

DNS

-인으로 IP addr 를 얻어내기 때문

  • 두가지의 방식이 있다 → centralized, distributed
  • centralized 의 경우에는
    • 단일실패점 문제
    • 트래픽이 몰림
    • 특정 client 에게는 너무 멀리 있을 수 고
    • 확장성 문제가 있어서 안사용한다고 한다
  • DNS 는 domain namespace 라는 트리구조를 가지고 있다

Domain-IP 관계

  • 1:1 관계가 일반적이지만
  • 도메인 여러개가 하나의 IP 를 받을 수도 있고
  • 도메인 한개가 여러 IP 를 받을 수도 있다

FQDN

Resource Record (RR)

-ey 는 domain 의 이름

  • value 는 rdata (resource data) 로 아마 IP 겠지
  • RR 에는 추가적으로 ttl 과 class 가 있는데 얘네는 알아서 찾아보고
  • type 은 너가 알고 있던 그 A, CNAME 등이다

RR Type

  • A: name 이 domain 이고 value 가 IP 인 경우
    • IPv6 의 경우에는 AAAA 이다
  • CNAME: name 이
  • NS:
  • MX:

작동 방식

#은 local dns server 가 root, tld, authorative dns 서버에 순서대로 물어보는 방식이다

Recursive

  • local dns server 가 무조건 root dns 에 물어보고 이놈이 해당 authorative dns 서버에 대신 물어봐주는 방식
    • 가령 cis.poly.edu 에서 gaia.cs.umass.edu 를 물어봤을 때
    • local dns 인 dns.poly.edu 가 root 에 물어보면 root 는 tld dns server 정보를 준다
    • 그럼 local dns 는 tld 에 물어보고, 그럼 auth dns 인 dns.cs.umass.edu 의 정보를 준다
    • 마지막으로 local dns 가 auth dns 에 물어보는 것으로 끝남
  • 트리를 끝까지 올라갔다와야하기 때문에 오버헤드가 커 잘 사용되지 않는다

Root server

-메인은 a.root-server.net 부터 m.root-server.net 까지 총 13개가 있다고 한다.

Anycast

  • 여러 서버가 같은 (ASN, IP Prefix) 를 갖고록 해서 클라이언트가 질의를 해서 BGP 를 탔을 때 이러한 서버 중에서 가장 가까운 놈이 응답을 하는 구조
  • CDN 생각하면 된다
  • root server 도 이런식으로 운영되고 있으며 root-servers.org 에 가면 어디에서 이런 server 가 운용되는지 알 수 있다

TLD (Top Level Domain)

-ic TLD (gTLD)

  • .com 같은 애들
  • .com 의 경우에는 a.gtld-servers.net 부터 m 까지 운용하고
  • 다른 tld 의 경우에는 이름이 다르다고 한다

country code TLD (ccTLD)

  • .kr 같은 애들

Stub, local

-는 기관에 설치되어 root, tld, auth 에 물어보며 결과들을 캐싱하고

  • Stub 은 OS 에 포함된 기능으로 dns 결과를 client os 에 캐싱해서 질의 없이 ip 를 알아낼 수 있게 하는 것
  • 뭐 systemd 에서 systemd-resolvd 같은애들 (127.0.0.53)

Public dns servers

-.4.4 혹은

  • cloudflare 의 1.1.1.1 1.0.0.1 가 있더라

DNS Message format

- return code? 0이 no error 고 2 가 servfail (server fail) 이랜다

  • (ppt 에서 simple view 놓쳤는데 따로 공부해야할듯 - 별로 어렵진 않아보인다)
  • Question 에 domain, type 이 담김
  • Answer 에 domain, ttl, type, ip 가 담김
  • authority section: 해당 domain 을 담당하고 있는 dns nameserver 들을 알려줌
  • additional section: authority section 에서 준 dns nameserver 들의 ip 를 알려준다

53

  • DNS 는 기본적으로 53/udp 에서 작동한다고 한다.
  • 따라서 result 는 512byte 보다 작아야 한다.
  • 하지만 만약에 이것보다 클 경우에는, tcp 로 변환된다
    • TC Flag 가 이것을 뜻함 - TCP 로 바꾸자
    • 즉, dns 가 tc 를 올려서 응답하면 client 가 tcp 로 dns server 와 새로 connection 을 맺는다

Extension

  • client 가 멀리 있는 dns resolver 에 질의를 했을 때 이놈은 auth dns 의 정보를 알려줄 텐데
  • 이놈은 dns resolver 와 가까이 있는 auth dns 를 알려줄 것이므로 dns resolver 가 client 에게 이 auth dns 정보를 전달하게 되면 client 는 멀리있는 auth dns 에 보내야 할 것이다
  • 하지만 client 의 subnet 으로 client 와 가까이 있는 auth dns 를 알아내어 응답하게 해서 해결하는 것?
  • 근데 client 위치가 노출되기 때문에 privacy 문제가 있어 요즘은 사용하지 않는다고 한다

EDNS0

  • 여기서는 udp 에서 4096byte 까지 사용할 수 있도록 하게 한다고 하네
    • 근데 mtu 는 1500 이지만 OPT Pseudo? 같은걸로 잘라서 보낸다?

DNS Spoofing Cache Poisoning

-해놨다가 다음번 질의때 응답한다

  • 근데 local dns 가 질의를 했을 때 auth dns 가 응답하기 전에 해커가 다른 IP 로 응답하면 local dns 는 그것을 받아들이게 된다
  • 따라서 local dns 는 다음번 질의가 들어와도 잘못된응답을 하게 되고, 이것을 cache poisoning 이라고 한다.
  • 이것을 위해 identification field 를 이용해 auth 가 응답한 내용만을 받아들이도록 한다고 한다.

DNS Amplification & reflection

o]-#symlink 내용 옮겨짐

- 존재하지 않는 도메인에 대한 쿼리를 잔뜩 날리게 되면 그것은 local dns 를 타고 auth dns 로 갈텐데 없는 도메인이기 때문에 cache 되지 않고 항상 auth dns 로 가게 된다

  • 이런식으로 auth dns 를 공격할 수 있음
  • 이를 위해 local dns 에서는 negative cache 를 가져서 질의를 카운트 하고, 너무 많은 질의의 경우에는 차단한다?

DNS Tunneling

--- date: 2024-03-20


서울대학교 컴퓨터공학과 권태경 교수님의 "Topics in Computer Networks" 강의를 필기한 내용입니다.

다소 잘못된 내용과 구어적 표현 이 포함되어 있을 수 있습니다.

DNS

  • DNS 는 약간 KV Store 과 같다 → 도메인으로 IP addr 를 얻어내기 때문
  • 두가지의 방식이 있다 → centralized, distributed
  • centralized 의 경우에는
    • 단일실패점 문제
    • 트래픽이 몰림
    • 특정 client 에게는 너무 멀리 있을 수 고
    • 확장성 문제가 있어서 안사용한다고 한다
  • DNS 는 domain namespace 라는 트리구조를 가지고 있다

Domain-IP 관계

  • 1:1 관계가 일반적이지만
  • 도메인 여러개가 하나의 IP 를 받을 수도 있고
  • 도메인 한개가 여러 IP 를 받을 수도 있다

FQDN

  • FQDN 은 domain namespace 트리 내에서 도메인을 유일하게 구분해준다.
    • 그리고 이것은 도메인의 트리에서의 위치도 알려준다
    • 트리의 각 노드는 label 이고
    • FQDN 은 마지막에 . 로 끝난다 → 여기가 root
    • domain 에서 . 이후에는 상위 label 로 올라간다
    • 한 노드는 그 노드의 직계자손만을 관리하고, 노드와 자손을을 묶어 zone 이라고 한다
      • root 의 직계자손들은 top-level domain 이라고 부른다.
      • 여기는 ICANN 이라는 단체에서 관리한다.
    • 각 zone 에는 nameserver 를 유지할 의무가 있다

Resource Record (RR)

  • DNS 의 KV 가 저장되는 자료구조의 이름
  • Key 는 domain 의 이름
  • value 는 rdata (resource data) 로 아마 IP 겠지
  • RR 에는 추가적으로 ttl 과 class 가 있는데 얘네는 알아서 찾아보고
  • type 은 너가 알고 있던 그 A, CNAME 등이다

RR Type

  • A: name 이 domain 이고 value 가 IP 인 경우
    • IPv6 의 경우에는 AAAA 이다
  • CNAME: name 이
  • NS:
  • MX:

작동 방식

Iterative

  • 이것은 local dns server 가 root, tld, authorative dns 서버에 순서대로 물어보는 방식이다

Recursive

  • local dns server 가 무조건 root dns 에 물어보고 이놈이 해당 authorative dns 서버에 대신 물어봐주는 방식
    • 가령 cis.poly.edu 에서 gaia.cs.umass.edu 를 물어봤을 때
    • local dns 인 dns.poly.edu 가 root 에 물어보면 root 는 tld dns server 정보를 준다
    • 그럼 local dns 는 tld 에 물어보고, 그럼 auth dns 인 dns.cs.umass.edu 의 정보를 준다
    • 마지막으로 local dns 가 auth dns 에 물어보는 것으로 끝남
  • 트리를 끝까지 올라갔다와야하기 때문에 오버헤드가 커 잘 사용되지 않는다

Root server

Anycast

  • 여러 서버가 같은 (ASN, IP Prefix) 를 갖고록 해서 클라이언트가 질의를 해서 BGP 를 탔을 때 이러한 서버 중에서 가장 가까운 놈이 응답을 하는 구조
  • CDN 생각하면 된다
  • root server 도 이런식으로 운영되고 있으며 root-servers.org 에 가면 어디에서 이런 server 가 운용되는지 알 수 있다

TLD (Top Level Domain)

  • root 바로 아래 있는 dns 들

generic TLD (gTLD)

  • .com 같은 애들
  • .com 의 경우에는 a.gtld-servers.net 부터 m 까지 운용하고
  • 다른 tld 의 경우에는 이름이 다르다고 한다

country code TLD (ccTLD)

  • .kr 같은 애들

Stub, local

  • Local dns server 는 기관에 설치되어 root, tld, auth 에 물어보며 결과들을 캐싱하고
  • Stub 은 OS 에 포함된 기능으로 dns 결과를 client os 에 캐싱해서 질의 없이 ip 를 알아낼 수 있게 하는 것
  • 뭐 systemd 에서 systemd-resolvd 같은애들 (127.0.0.53)

Public dns servers

  • 뭐 구구르 의 8.8.8.8 8.8.4.4 혹은
  • cloudflare 의 1.1.1.1 1.0.0.1 가 있더라

DNS Message format

  • Flag 들:
    • RCODE (4bit): return code? 0이 no error 고 2 가 servfail (server fail) 이랜다
  • (ppt 에서 simple view 놓쳤는데 따로 공부해야할듯 - 별로 어렵진 않아보인다)
  • Question 에 domain, type 이 담김
  • Answer 에 domain, ttl, type, ip 가 담김
  • authority section: 해당 domain 을 담당하고 있는 dns nameserver 들을 알려줌
  • additional section: authority section 에서 준 dns nameserver 들의 ip 를 알려준다

53

  • DNS 는 기본적으로 53/udp 에서 작동한다고 한다.
  • 따라서 result 는 512byte 보다 작아야 한다.
  • 하지만 만약에 이것보다 클 경우에는, tcp 로 변환된다
    • TC Flag 가 이것을 뜻함 - TCP 로 바꾸자
    • 즉, dns 가 tc 를 올려서 응답하면 client 가 tcp 로 dns server 와 새로 connection 을 맺는다

Extension

EDNS0 Client Subnet (ECS), RFC7871

  • client 가 멀리 있는 dns resolver 에 질의를 했을 때 이놈은 auth dns 의 정보를 알려줄 텐데
  • 이놈은 dns resolver 와 가까이 있는 auth dns 를 알려줄 것이므로 dns resolver 가 client 에게 이 auth dns 정보를 전달하게 되면 client 는 멀리있는 auth dns 에 보내야 할 것이다
  • 하지만 client 의 subnet 으로 client 와 가까이 있는 auth dns 를 알아내어 응답하게 해서 해결하는 것?
  • 근데 client 위치가 노출되기 때문에 privacy 문제가 있어 요즘은 사용하지 않는다고 한다

EDNS0

  • 여기서는 udp 에서 4096byte 까지 사용할 수 있도록 하게 한다고 하네
    • 근데 mtu 는 1500 이지만 OPT Pseudo? 같은걸로 잘라서 보낸다?

DNS Spoofing Cache Poisoning

  • local dns 는 auth dns 로부터 받은 내용을 캐싱해놨다가 다음번 질의때 응답한다
  • 근데 local dns 가 질의를 했을 때 auth dns 가 응답하기 전에 해커가 다른 IP 로 응답하면 local dns 는 그것을 받아들이게 된다
  • 따라서 local dns 는 다음번 질의가 들어와도 잘못된응답을 하게 되고, 이것을 cache poisoning 이라고 한다.
  • 이것을 위해 identification field 를 이용해 auth 가 응답한 내용만을 받아들이도록 한다고 한다.

DNS Amplification & reflection

수업 내용 놓침

DNS NXDomain attack

  • nxdomain: non-existent domain - 존재하지 않는 도메인
  • 해커가 존재하지 않는 도메인에 대한 쿼리를 잔뜩 날리게 되면 그것은 local dns 를 타고 auth dns 로 갈텐데 없는 도메인이기 때문에 cache 되지 않고 항상 auth dns 로 가게 된다
  • 이런식으로 auth dns 를 공격할 수 있음
  • 이를 위해 local dns 에서는 negative cache 를 가져서 질의를 카운트 하고, 너무 많은 질의의 경우에는 차단한다?

DNS Tunneling

수업 내용 놓침