본문 바로가기

IT/new Technology

[new Technology] DoH(DNS over HTTPS)에 대하여

본 자료는 4가지의 참고문헌이 있습니다. 참고문헌 원본 링크는 맨 아래에 기재하였습니다.
또한 개인적으로 흥미가 있어서 자료를 모아서 정리한 자료이므로 정확하지 않을 수 있습니다.

<최근 화두가 되는 크롬의 DoH>

DoH란 무엇인가?

DoH란 DNS over HTTPS의 약자로 IETF에서 새로 표준화 하려는 기능 중 하나이다. Mozilla사에서 제안했다.
DoH를 알기 위해서는 DNS와 HTTP 그리고 발전된 형태의 HTTPS 에 대하여 알아야 하며, 먼저 HTTP부터 알아보기로 한다.

<IEFT에 등재된 DoH, RFC 8484>

HTTP란 무엇인가?

HTTP는 Hyper Text Transfer Protocol의 약자로서 우리가 사용하는 인터넷 브라우저가 이용하는 통신 규약이다. HTTP를 이용해서 사용자가 서버에 데이터를 요청하면 서버는 해당 데이터가 담긴 파일을 응답하여 전달해준다.

<간단하게 보는 HTTP 통신방식, 출처 : 참고문헌 1>

즉, 브라우저가 서버에 GET 요청을 전달하면 서버가 HTML 파일이 담긴 응답을 전달하면서 통신이 이루어진다고 요약할 수 있지만, 실제로는 그렇게 단순한 작업이 아니다.

이유는 여러가지가 있겠지만 사용자와 서버 사이의 거리는 최소 수 킬로미터, 최대 수만 킬로미터가 떨어져 있을 것이고 먼 거리를 이동하기 위해 사용자와 서버 사이에는 수 많은 라우터들이 존재할 것이기 때문이다.

<실제 HTTP 응답>

HTTP의 전달을 학교에서 몰래 하던 쪽지 전달을 예시로 들 수 있는데, 여기에는 수 많은 문제점이 있다.

<쪽지 전달 예시로 보는 HTTP 통신, 출처 : 참고문헌 1>

1) 중간에 전달해주는 친구가 나쁜 마음을 먹으면 쪽지가 모두에게 공개될 수 있다.

2) 전달은 되었으나 쪽지의 내용이 중간 과정에서 유출 되었을 수 있다.

3) 쪽지의 내용이 변경되었을 수도 있다.

HTTP에는 이러한 수 많은 문제점들이 존재하고 이를 해결하기 위해 나온 것이 HTTPS이다.

HTTPS란 무엇인가?

HTTPS는 HTTP over Secure Socket layer의 약자로 2000년 5월 IEFT, RFC 2818에 규정되었다. 넷스케이프 커뮤니케이션즈 코퍼레이션에서 개발하였으며, 소켓 통신에서 일반 텍스트를 이용하는데 소켓 통신에서 일반 텍스트를 이용하는 대신에 SSL(Secure Socket Layer)이나 TLS(Transport Layer Security) 프로토콜을 통해 세션(둘 이상의 통신 장치 간 또는 컴퓨터와 사용자간 임시 대화식 정보 교환) 데이터를 암호화한다. 보호의 수준은 웹 브라우저에서의 구현 정확도와 서버 소프트웨어, 지원하는 암호화 알고리즘(대칭키 암호 : DES AES 등 , 공개키 암호 RSA 등, 전자서명 : RSA , 양자암호 etc)에 따라 다르다.

HTTPS를 통해 많은 보안적인 문제점들이 해결되었으나 데이터가 여전히 노출되는 지점이 존재하였다.

1) 서버와의 connection을 맺는 단계에서 데이터가 노출된다.
사용자가 서버에 메세지를 전달할 때, SNI(Server Name Indication)필드에서 서버 네임을 함께 전달한다. 이 필드 데이터를 이용해서 하나의 머신에서 여러개의 사이트를 운영하는 서버 운영자가 내가 통신하고 싶어하는 상대를 파악할 수 있다. 이 초기 요청은 암호를 설정하는 단계의 일부로 사용되지만 초기 요청 자체는 암호화 되지 않는다.

2) DNS에서도 데이터가 노출될 수 있다.
DNS(Domain Name System) : 쪽지 예시를 보면 쪽지 겉면에 수신자(쪽지를 받을 친구)의 이름이 적혀있어야 한다. HTTP 요청도 마찬가지다. 모든 요청은 어디에 전달되어야 하는지 밝혀야 한다. 하지만 컴퓨터의 경우 상대방의 이름이 아닌 IP주소(208.80.154.224)로 요청해야 한다.

<DNS에 대한 설명을 돕는 사진, 출처 : 참고문헌 1>

설명에 앞서 DNS에 대하여 간략하게 알아보자

DNS는 Domain Name System의 약자로, 우리가 입력하는 텍스트 형식의 웹사이트(ex : en.wikipedia.org)주소를 도메인 주소라고 하는데 이 주소를 IP형식으로 변환해주는 서비스를 의미한다. 만약 en.wikipidia.org라고 사용자가 주소창에 입력을 하면 DNS는 해당 주소를 208.80.154.224로 변환해준다. 도메인 주소를 IP 주소로 바꾸는 과정을 도메인 네임 레졸루션(Domain Name Resolution)이라고 한다.

DNS의 문제점

도메인 주소를 관리하는 서버를 하나의 거대한 데이터베이스처럼 관리하는 방법도 있겠지만 이 방식은 새로운 정보를 업데이트할때 매우 번거롭다. 이를 해결하기 위해 하나의 거대한 데이터베이스를 수많은 작은 목록으로 나누어서 사용함으로써 서로 독립적으로 관리할 수 있게 하였다.

<DNS 데이터베이스에 대한 예시, 출처 : 참고문헌 1>

도메인을 나누고 나눠진 부분들을 이용해서 해당 사이트의 IP주소를 담은 목록을 찾을 수 있는데 이러한 과정에서 찾는 것을 도와주는 장치를 리졸버(resolver)라고 한다. 리졸버는 우리 대신 IP주소를 찾아준다.

<Domain 네임 분류, 출처 : 참고문헌 1>


resolver는 Root DNS라 불리는 서버와 이야기를 한다. 리졸버는 몇 개의 Root DNS 서버를 알고 있고, 그 중 하나에 요청을 전달한다. top-level 도메인 .org 주소들의 위치를 묻고 해당 주소를 아는 서버의 주소를 전달한다.

<Root DNS를 통해 Domain을 찾아가는 과정, 출처 : 참고문헌 1>

TLD(Top-Level Domain)네임 서버는 .org로 끝나는 모든 2번째 도메인들의 정보를 포함한다. 때문에 ?.wikipedia.org에 대한 정보는 알지만 en.wikipedia.org IP 주소는 모른다. 때문에 TLD 네임 서버는 wikipedia의 네임 서버를 물어보라고 요청한다.

wikipedia의 네임 서버를 Authoritative Server라고 한다. 해당 서버는 wikipedia.org 아래의 모든 주소를 알고 있다. 따라서 en.wikipedia.org도 알고 de.wikipedia.org도 알고 있다. Authoritative Server는 리졸버에게 어떤 IP 주소가 웹사이트의 HTML 파일을 가지고 있는지 알려준다. 리졸버는 해당 웹사이트의 IP주소를 OS(운영체제)에 전달하고 이 과정을 Recursive Resolution(여러 서버를 오가며 같은 질문을 반복해서 하기 때문)이라 한다.

OS가 리졸버(resolver)를 고르는데는 두 가지 방법이 있다.

1) 직접 신뢰하는 리졸버를 설정, 이 방법을 사용하는 사람은 매우 드물다.

2) default 사용, 네트워크가 일러주는 리졸버를 그대로 사용한다. 컴퓨터에 네트워크를 연결하면 네트워크는 컴퓨터에 IP주소를 할당하고 사용할 리졸버를 추천해준다. 이 뜻은 하루에도 리졸버가 여러분 바뀔 수 있다는 것을 의미하는데 커피숍에서 접속했을 때와 집에서 접속했을 때 다른 리졸버를 사용할수 있다는 뜻이다.(직접 설정하는 경우에도 마찬가지)이는 DNS 프로토콜에는 보안이 고려되어 있지 않기 때문이다.

<리졸버 추천, 출처 : 참고문헌 1>

여기서 문제점이 나타난다.
리졸버는 각 DNS 서버에서 내가 찾는 도메인을 묻는데 이 요청에 나의 전체 IP 주소가 포함되어 있다. IP 주소 전체가 아니더라도 IP 주소의 대부분이 포함되기 떄문에 정보를 조합하면 내가 누구인지 알아낼 수 있다. 이 말인 즉슨, DNS 서버에 요청을 던지는 모든 서버들이 내가 무슨 사이트를 찾는지 지켜볼 수 있고, 나와 DNS 서버 사이의 경로에 있는 누군가가 내 요청을 볼 수 있다는 것이다. DNS 시스템이 사용자의 데이터를 위험에 빠뜨리는 몇 가지 경우가 있는데 트래킹(Tracking : 추적)과 스푸핑(Spoofing : 위장)이다.

1) 트래킹(Tracking : 추적)

전체, 혹은 일부 IP 주소를 가지고 어떤 웹사이트를 찾는 사람이 누구인지 유추하는 것은 쉬운 일이다. 이는 DNS 서버와 나 사이의 경로 라우터가 내 프로필을 만들고 내가 찾았던 모든 웹사이트들의 기록을 만들 수 있다는 것을 의미한다. 리졸버 그 자체가 문제가 된다는 뜻이다. 리졸버마다 데이터 수집 정책이 다른데 어디서 접속하느냐에 따라 정보가 셀 가능성이 농후하다는 뜻이다. 단순히 데이터 수집 혹은 판매 이외에도 시스템이 사용자를 속게 만드는 더 악질적인 방법도 존재한다.

<트래킹, 출처 : 참고문헌 1>

2) 스푸핑(Spoofing : 위장)

DNS 서버와 나 사이에 있는 누군가가 DNS 서버의 응답을 변경하는 것이다. 스푸핑을 한 사람은 사용자에게 가짜 IP주소를 전달하여 진짜 웹사이트에 방문하는 것을 막거나 scam 웹사이트(비슷하지만 다른 웹사이트)를 보여준다.
혹은 리졸버 자체가 악의적으로 동작하는 경우가 있다. 만약 A사의 wifi에서 경쟁사인 B사를 접속하려고 하는데, A사에서 제공하는 wifi의 리졸버는 B사의 웹사이트에 접속할 수 없다고 거짓말을  할 수도 있다.

<스푸핑, 출처 : 참고문헌 1>

TRE와 DoH로 문제 해결에 있어서 사전 문제점은 다음과 같다.
1) 신뢰할 수 없는 리졸버를 사용하는 경우
2) 경로 라우터들이 추적이나 변조를 할 경우
3) DNS 서버들이 내 DNS 요청을 추적할 경우

이에 대한 해결로
1) TRR(Trusted Recursive Resolver)를 사용함으로써 신뢰할 수 없는 리졸버의 사용을 회피
- TRR은 Cloudflare라는 회사의 프라이버시 정책과 RRS(Recursive Resolution Service)제공을 받아 해결하는 것. 해당 회사에서 24시간 마다 사용자 식별에 사용될 수 있는 모든 데이터를 폐기하고 그 데이터를 3자에 제공하지 않으며, 규정대로 폐기되었음을 증명하는 감사자료를 제공.

2) DoH(DNS over HTTPS)를 사용함으로써 경로 상에서의 도청을 방지한다.
- DNS전달 과정에서 HTTPS를 사용함으로써 도청을 어렵게 한다.

3. 가능한 최소한의 데이터만 전송해서 사용자 식별을 못하게 함
- 리졸버는 도메인 네임 전부를 모든 서버들(루트 DNS, TLD 네임서버, 2차 네임 서버 등)에 전달하지만 Cloudflare는 상대하는 DNS 서버에 따라 꼭 필요한 일부 정보만 전달(QNAME minimization), 리졸버는 통상 요청을 보낼때 사용자의 IP 주소의 첫 24비트를 포함시켜 보내는데 DNS 서버는 이 정보를 이용해서 사용자 근처의 CDN(Contents Delivery Network, 지리적 물리적으로 떨어져 있는 사용자에게 컨텐츠 제공자의 컨텐츠를 더 빠르게 제공할 수 있는 기술, 출처 : 참고문헌 2)을 골라서 추천해준다. 하지만 이 정보를 다른 DNS 서버들이 악용하기 좋다.

TRR과 DoH를 사용해도 고쳐지지 않는 것

DNS로 IP 주소를 찾으면 초기 요청(initial request)를 보내야 하는데, 이 요청에는 SNI(Server Name Indication, TLS의 확장 표준 중 하나) 정보가 포함되어 있다. SNI는 사용자가 요청한 서버의 여러 사이트들 중 어떤 사이트에 접속하고 싶어 하는지를 표시하는데 암호화가 되어있지 않다. 이는 내가 사용하는 ISP(Internet Service Provider)가 내가 어떤 사이트를 방문하는지 알 수 있다는 것을 의미한다.(SNI가 그 정보를 담고 있기 때문에) 또한 사용자의 초기 요청을 전달한 경로 라우터들도 그 정보를 볼 수 있다. 즉, 웹서버와 커넥션이 이루어지면 모든 것이 암호화가 되지만, 초기에는 암호화가 되지 않는다는 뜻이다. 이를 해결하는 방법이 HTTP/2 커넥션 합치기(Connection Coalescing), 혹은 간단히 커넥션 재사용(Connection Reuse)이다. 초기 요청에 데이터 유출 위험이 있다면 다음 연결시 다시 처음부터 연결하는 것이 아니고 기존 커넥션을 재사용함으로써 암호화된 데이터를 보낼 수 있다.

최근 한국에서 문제가 되었던 사례

2019년 2월, 방송통신위원회와 정부가 협력하여 불건전한 내용과 저작권 침해를 원천 차단하겠다는 명목으로 HTTPS 를 통한 해외 사이트 접속을 막는 인터넷 검열 방안을 발표했다. 이 방식은 암호화의 인증 과정에서 주고받게 되는 SNI 패킷을 보고 웹사이트 접속을 차단하는 방식이다. 해당 위원회에서 지정한 '유해 사이트'에 국민들이 접속하지 못하도록 URL 접근을 특수한 사이트로 강제 우회시키고 있었는데, HTTPS를 통한 접속이 많아지면서 실용성이 없어지자 이같은 방안을 따르도록 국내 통신사들에 명령하였다.(출처 : 참조문헌 3)

위 내용을 보면 SNI 패킷을 보고 웹사이트 접속을 차단한다고 기재되어있다. 즉, 국가가 사용자의 정보(사용자 IP)와 접속하려는 사이트의 정보(웹사이트 IP주소)를 볼 수 있다는 뜻이다. 물론, 국가가 개인정보를 악용하거나 그렇지는 않겠지만, 필요하다면 도청은 충분히 가능하다는 뜻이다. DoH를 사용하면 국가의 감청망에서 벗어날 수도 있다.

다만...(여기서부터는 개인적인 생각입니다)
DoH를 지원하는 곳 중 유명한 브라우저는 크롬(곧 출시한다고 함)과 파이어폭스(FireFox, Mozilla)등이 있습니다. 위 설명에서 보면 예시로 Mozilla의 경우 Cloudflare를 통해 데이터를 안전하게 보호하고 처리한다고 하였지만, 여전히 마음만 먹으면 회사에서 데이터 분석용으로는 사용할 수 있다는 뜻입니다. 최근에 유투브에서 갑수목장이라는 양이 관련 유트브를 보다가 알 수 없는 알고리즘(?)에 의해 크롬의 DoH를 이용해 대한민국의 도청에서 벗어나자? 라는 느낌의 영상을 보게 되었는데 해당 영상에서는 국가가 개인정보를 도청할 수 있으니 DoH로 회피하고 야x(성인물...) 마음 편히 볼 수 있도록 하자라는 말을 하더군요... 물론 국가가 개인정보를 유해 사이트 차단(즉, 강제 우회) 이외의 용도로(도청이라던지) 사용할 수 있다고 생각은 합니다. 하여 DoH를 사용한다면, 본인의 정보를 국가에서 해외 사기업으로 돌리는 것일 뿐, 언제든 도청, 혹은 이용될 수 있다는 사실에는 변함이 없습니다.(오히려 국가보다 개인정보를 더 이용하면 더 이용했지 더 안전하다라고는 생각이 안듭니다) 정~말로 본인 정보를 깔끔하게 보호하고 싶으면 ISP(Internet Service Provider, ex: SKT, KT, LG etc) 회사와 브라우저 회사를 본인이 만들고 이용하는 것(불가능에 가깝다고 봅니다만...) 정도려나요... 그마저도 도중에 패킷이 어디로 셀지도 모르고 어떻게 바뀔지도 모르는 거니까요...
참고문헌
1) DNS와 HTTP 관련 사진 참조
http://hacks.mozilla.or.kr/2019/10/a-cartoon-intro-to-dns-over-https/

정말 설명이 잘 되어 있습니다. 사진도 일상에서 겪었을 법한 예제로 알기 쉽게 표현이 되어 있어서 전공자가 아니더라도 기본적인 내용 이해에는 어려움이 없을 정도입니다.(물론 패킷이니 뭐니 하는 전공 내용들은 이해에 어려움이 있겠지만)

읽으면서 궁금한 용어들도 많고 해서 추가 설명 기재하여 개인 공부용으로 정리하였습니다. 잘못된부분은 지적해주시면 감사하겠습니다.

 

만화로 보는 DNS over HTTPS ★ Mozilla 웹 기술 블로그

사용자의 프라이버시와 보안에 대한 위협이 커지고 있습니다. Mozilla 는 이런 위협들을 면밀히 관찰하고 있습니다. Mozilla 는 Firefox 사용자와 그들의 데이터를 보호하기 위해 할 수 있는 모든 일을 해야 한다는 책임감을 느낍니다. Mozilla 는 은밀하게 사용자의 데이터를 수집하려 하고 판매하려 하는 회사들과 조직들을 알고 있습니다. 바로 추적 금지 기능과 Facebook Container 확장기능을 만든 이유입니다. 이제 곧 당신은 Mo

hacks.mozilla.or.kr

2) CDN
https://cdn.hosting.kr/cdn%EC%9D%B4%EB%9E%80-EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94/
 

https://cdn.hosting.kr/cdn%EC%9D%B4%EB%9E%80-%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%EC%9A%94/

 

cdn.hosting.kr

3) HTTPS
https://ko.wikipedia.org/wiki/HTTPS
 

HTTPS - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. HTTPS(HyperText Transfer Protocol over Secure Socket Layer, HTTP over TLS,[1][2] HTTP over SSL,[3] HTTP Secure[4][5])는 월드 와이드 웹 통신 프로토콜인 HTTP의 보안이 강화된 버전이다. HTTPS는 통신의 인증과 암호화를 위해 넷스케이프 커뮤니케이션즈 코퍼레이션이 개발했으며, 전자 상거래에서 널리 쓰인다. HTTPS는 소켓 통신

ko.wikipedia.org

4) SNI
https://ko.wikipedia.org/wiki/%EC%84%9C%EB%B2%84_%EB%84%A4%EC%9E%84_%EC%9D%B8%EB%94%94%EC%BC%80%EC%9D%B4%EC%85%98
 

서버 네임 인디케이션 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 서버 네임 인디케이션(Server Name Indication, SNI)은 컴퓨터 네트워크 프로토콜인 TLS의 확장으로, 핸드셰이킹 과정 초기에 클라이언트가 어느 호스트명에 접속하려는지 서버에 알리는 역할을 한다.[1] 이를 이용하면 같은 IP 주소와 TCP 포트 번호를 가진 서버로 여러 개의 인증서를 사용할 수 있게 되고, 따라서 모든 사이트가 같은 인증서를 사용하지 않아도 동일한 아이피로 여러 HTTPS 웹사이트(또는

ko.wikipedia.org

'IT > new Technology' 카테고리의 다른 글

[TCP 혼잡]Bufferbloat  (0) 2020.05.13
[대학원 논문용] Bufferbloat와 TSN에 대한 정리글  (0) 2020.05.09