DNS(Domain Name System)
DNS란 인터넷에 연결된 컴퓨터의 이름과 IP 주소를 매핑해주는 분산 시스템을 말한다.
우리는 어떤 사이트에 접속할 때 'http://naver.com'과 같이 도메인을 이용하여 접근할 수 있다.
도메인을 이용하여 접근을 하기 위해서는 실제 네트워크에서 사용하는 ip 주소로 변환하는 과정이 필요한데, 이러한 모든 일련의 과정을 DNS(Domain Name System)라고 한다.
도메인의 체계는 위 사진과 같다.
1. 최상위 도메인(TLD)
루트 바로 아래 도메인으로 각 국가 정보를 2자리 영문 약자로 표기한다.
2. 차상위 도메인(SLD)
최상위 바로 아래 도메인으로 최상위 도메인에서 정의된 문자열을 제외한 모든 문자열을 사용할 수 있다.
3. 하위 도메인(Sublevel Domain)
도메인의 관리자를 자유롭게 지정할 수 있다.
DNS는 상위 기관에서 인증된 기관에서 도메인을 생성하거나 ip 주소를 변경할 수 있는 권한을 부여해준다.
즉, DNS는 계층 구조를 지닌 분산 데이터베이스 구조를 가지며, 각 계층은 점('.')으로 구분된다.
위 흐름도는
1. DNS 서버에 도메인을 전송한다.
2. root 서버는 .com 서버의 ip 주소를 반환한다.
3. .com 서버는 example.com 서버의 ip 주소를 반환한다.
의 순서를 통해 도메인을 ip 주소로 mapping한다.
dig 명령어를 통해 네임 서버로부터 정보를 받아 확인할 수 있고,
+trace 옵션을 통해 DNS 질의를 추적할 수 있다.
위 사진은 dig 명령어와 +trace를 통해 www.naver.com의 DNS를 확인해본 것이다.
DNS의 계층구조는 아래와 같다.
Root Name Server
세계적으로 Root Name Server는 총 13개가 존재한다.
root name server는 미국이 가장 많이 보유하고 있다.
Root Name Server 공격
root name server는 지금껏 봐왔듯이, 모든 도메인을 연결해줄 수 있으므로 shut down 되면 큰 혼란을 초래한다. 이 root name server를 공격한 사례에 대해 알아보자.
- 2002년
Botent을 이용하여 13개의 root name server에 ICMP ping 공격을 시행하였으나 실패하였다.
- 2007년
2개의 root server를 공격하였다. DDoS 공격을 통해 heavy traffic을 초래하여 공격을 성공시켰다.
Anycast 주소를 통해 공격을 회피하였으며, Anycast가 처음 도입된 계기가 되었다.
- 2015년
초당 500만개의 쿼리를 보내 일부 timeout을 발생시켰다.
DNS 관련 인터넷 사고
2003년 1월 25일 MS SQL 서버의 취약점을 발견하여 Slammer Worm 바이러스로 트래픽을 과부화시켰다.
KT의 DNS 서버를 공격하여 DNS 서버를 다운시켜 인터넷을 마비시킨 사고이다.
Slammer Worm Virus
Slammer Worm Virus는 특정 포트를 이용하여 MS SQL 서버를 공격한 웜 바이러스이다.
웜 바이러스는 SQL 서버 통신 간의 통신 프로토콜인 UDP 1434 포트번호에 정상 패킷인 것처럼 잠입하여 SQL 서버를 감염시킨다. 감염된 서버는 무작위 IP 주소로 404bytes의 UDP 패킷(376byte의 payload 포함)을 무한으로 전송하여 DNS 서버를 과부화시켰다.
2003년 1월 25일의 인터넷 대란에서 30분 동안 전 세계의 컴퓨터를 감염시켰다.
하지만, 10의 보수를 구하는 계산 시 계산 실수가 있어 짝수가 증가하였고,
XOR 연산을 OR 연산으로 진행하여 count가 규칙적으로 증가하는 코딩 실수가 존재하여 감염이 상대적으로 덜 되었다.
망원경(Network Telescope)
이러한 slammer worm은 망원경(network telescope)을 통해 추적할 수 있다.
IPv4의 ip 주소 개수는 약 32억개이다. 이때, 사용하지 않는 주소 공간을 부분 집합으로 묶어 관찰하는 것이다.
이때, 보통 이러한 부분 집합은 보통 class 단위로 묶는다.
사용되지 않는 주소에서 packet이 보인다면 메세지 전송 측에서 ip 목적지 주소를
이상하게 찍어서 전송한 것이므로 이러한 packet을 잡기 위해 사용한다.
class B 전체를 부분 집합으로 두었을 때, 정상적이지 않은 packet을 잡을 확률은 65,536/32억이다.
DNS 패킷 구조
DNS 패킷을 캡처하면 위와 같다. UDP 연결이 연결 없이 바로 사용할 수 있으므로 보통은 UDP를 사용하지만, TCP를 사용하기도 한다. 512 바이트보다 작은 경우 UDP 연결을 사용하고, 512 바이트보다 큰 경우 TCP 연결을 사용한다.
이러한 DNS 패킷은 보통 53포트를 사용한다.
위 사진에서 가장 아래 박스에 있는 Type는 쿼리의 유형으로 종류는 아래와 같다.
여러 종류의 쿼리를 알아보자.
A vs. AAAA
위 사진은 dig를 통해 도메인의 주소를 IPv4로 나타낼지, IPv6로 나타낼지 명시한 모습이다.
A의 경우 IPv4, AAAA의 경우 IPv6을 통해 표현한 것을 확인할 수 있다.
CNAME
CNAME은 별칭 도메인 중 '정식' 도메인을 가리킨다.
한 호스트의 이름을 다른 호스트의 이름에 mapping하여 하나의 IP 주소가 다른 이름을 가진 여러 호스트를 가질 수 있도록 한다.
도메인이나 하위 도메인이 다른 도메인의 별칭인 경우 A 레코드 대신 CNAME를 사용한다.
CNAME은 무조건 다른 도메인의 이름을 가리켜야 하며, 직접 ip 주소를 가리키면 안 된다.
NS
NS는 Authoritative name server로 DNS를 관리하는 서버이다.
주어진 호스트에 대한 공식적인 name server(Authoritative name server)를 알려준다.
DNS Caching
최신 브라우저는 자주 사용하는 DNS를 최대 1시간 동안 캐싱하고 있다.
DDNS
DDNS는 Dynamic DNS로 ip 주소가 변경 되었을 때 자동으로 DNS 정보를 갱신하는 것이다.
이때, ip 주소가 바뀌는 이유는 네트워크 관리자가 일반적으로 공유 ip 주소를 유지하고 관리하는데,
이 Ip 주소를 미리 정해진 최대 시간 또는 연결 종료까지 user에게 ip 주소를 임대해준다.
컴퓨터가 네트워크에 연결될 때마다 새 동적 ip 주소를 얻고,
네트워크가 로그오프 시 DHCP(Dynamic Host Configuration Protocol)는
나머지 모든 기기에 ip 주소를 재할당한다. 따라서 불규칙한 간격으로 ip 주소가 자주 변경되는 것이다.
과거에는 고정된 ip 주소를 사용하였지만, 최근에 주소가 부족해지면서
네트워크 관리자를 통해 DHCP로 동적인 ip 주소를 할당해주는 것이다.
DNS 공격
DNS는 암호화되지 않으므로 DNS 패킷을 보면 개인의 방문 웹 사이트를 알 수 있다.
따라서 정부에서 유해사이트를 판별할 때 DNS 패킷을 사용한다.
정부에서 유해사이트임을 판별하면 DNS 테이블에서 해당 주소로 이동하지 못하도록 host의 주소를 변경하는 것이다.
DNS를 통해 공격을 하는 방법은 아래와 같다.
DNS Spoofing
중간자 사기로 DNS 서버로 전송되는 쿼리를 가로채 변조된 결과를 전송하는 것이다.
DNS cache posioning
캐시 정보를 조작한다. (pharming)
피싱(phishing)
가짜 사이트로 실제 도메인의 이름과 유사한 이름을 가진 가짜 사이트로 접속하도록 유도하는 것이다.
최근 DNS 기술
DNSSec
DNS Security Extension으로 데이터를 위조-변조 공격 방지 기술이다.
암호화는 아니며 접근하는 대상이 인증 받았는지를 확인하는 인증 방식이다.
공개키 암호화 방식의 전자서명을 도입하여 전자 데이터로 된 DNS에 서명 코드 추가하여 정보를 인증하는 것이다.
DNS over HTTPS(DoH)
RFS8484로 DNS 내용을 json 형식의 데이터로 만들어 HTTPS로 전송하는데,
이때 TCP 443 포트를 사용한다.
TCP 요청 시 모습이다.
HTTP/2와 HTTPS를 사용하며 MIME Type은 application/dns-message이다.
DNS over TLS(DoT)
RFC7858, RFC8310 표준으로 TCP 853 포트를 사용한다.
HTTPS 접속 시 SNI(server name indication)필드가 보이는데,
이 SNI를 통해 어느 도메인의 웹 사이트를 접속했는지 볼 수 있으므로 이를 차단할 수 있다.
TLS 1.3에서는 SNI를 암호화하였다.
출처 및 참고
https://velog.io/@woo0_hooo/네트워크-웹-통신의-흐름
https://m.blog.naver.com/okaysungnam/221258267897
https://en.wikipedia.org/wiki/Network_telescope
https://m.blog.naver.com/wergreat10/220188907219
https://aws.amazon.com/ko/what-is/dynamic-dns/
https://xn--3e0bx5euxnjje69i70af08bea817g.xn--3e0b707e/jsp/resources/dns/dnssecInfo/dnssecInfo.jsp
'Computer Science > 컴퓨터네트워크(ComNet)' 카테고리의 다른 글
[컴네/CN] 응용계층 프로토콜: FTP, SMTP (1) | 2023.11.29 |
---|---|
[컴네/CN] 응용 P2P (1) | 2023.11.29 |
[컴네/CN] 인터넷 성능 (1) | 2023.11.28 |
[컴네/CN] IP Address (0) | 2023.10.14 |
[컴네/CN] 프로토콜 및 소켓 (1) | 2023.10.14 |