꿈을꾸는 파랑새

오늘은 DNS 인터넷 검열을 피하기 위한 파이어폭스 SNI 설정 방법에 대해 알아보겠습니다. 일단 기본적으로 해당 부분에서 SNI이라는것에 대해 알아야 합니다. SNI이라는 것은 Server Name Indication을 줄임말로 TLS 확장 표준 중 하나로서 인증서에서 사용하는 방식 중 하나입니다.

일단 불법사이트를 차단하는 것은 반대하지 않지만, 불법사이트를 차단하기 위해서 DNS 검열을 하는 것은 반대입니다. 이유는 간단합니다. 불법 사이트를 차단하기 위해서 전 국민의 패킷을 본다는 것은 개인적으로 정말 위험한 생각이라고 생각이 됩니다.

일단 기본적으로 TLS 표준에서는 SNI 암호화라는 것이 없어서 SNI 부분이 평문 형태로 전송되어서 이로 말미암아 제 3자에게 쉽게 노출이 되어 보안 문제가 되기 때문에 TLS에 SNI의 암호화 규격을 추가하는 문제는 오랫동안 논의가 되어왔고 그리고 2018년 7월 2일에 Apple, Cloudflare, Fastly, Mozilla가 TLS 1.3을 전제로 한 확장 규격으로서 SNI 암호화 규격의 초안 문서를 생성했습니다.

그리고 2018년 9월 24일에 Cloudflare가 위 초안 규격에 의한 ESNI(Encrypted SNI) 시범 서비스를 개시했고 그리고 2018년 10월 파이어폭스 나이틀리(64.x)에서 ESNI 지원이 시작되었고 2018년 12월 12일부터 최신 안정화 버전(64.x)에서도 ESNI를 지원하고 있습니다.

[안드로이드 어플 소개] - 안드로이드 스마트폰 DNS-over-HTTPS를 통한 DNS 변경 어플-Intra

[소프트웨어 팁/보안] - 파이어폭스의 DNS-over-HTTPS를 통한 DNS 변경 방법

DNS-over-HTTPS 서버 목록

그리고 2018년 10월 24일 미국 오레곤 상원의원 Ron Wyden이 미국 국토안보부에 미국 국내 기업들에 대한 DNS 암호화 및 ESNI의 적용을 지원할 수 있도록 움직여달라고 요청했다고 합니다.

ESNI 구현은 클라이언트 브라우저에 서버의 공개키가 전달되는 시점을 DNS 통신 단계로 앞당겨서 서버와 연결하는 시점에 해당 공개키로 도메인이 암호화될 수 있도록 하는 것이며 파이어폭스는 ESNI 구현이 DNS 통신의 암호화가 이루어지지 않는 상황에서는 별 의미가 없다는 생각해서 파이어폭스에서는 ESNI가 작동하려면 DNS over HTTPS가 활성화되어 있으라고 요구하고 있습니다. 그래서 지난 시간에 파이어폭스의 DNS-over-HTTPS를 통한 DNS 변경 방법에 대해 알아보았습니다.


먼저 파이어폭스 최신 버전을 설치합니다. 그리고 나서 about:config 주소창에 입력하고 엔터키를 눌러주면 경고창이 나오는데 이것을 무시하고 설정 화면에 들어옵니다. 그리고 나서 검색 부분에 trr를 입력을 하면 다음과 같은 화면이 나오는 것을 볼 수가 있습니다. 여기서 해당 부분을 몇 가지 수정을 해야 합니다.
수정해야 하는 항목은 다음과 같습니다.

preference network.trr.mode는 Firefox에서 TRR의 상태를 정의합니다.
값 0은 사용 불가능하고 사용되지 않음을 의미합니다.
파이어폭스가 어느 쪽이 더 빠른지에 따라 네이티브 DNS 또는 TRR 중 하나를 사용하는 값은 1입니다.
값 2는 기본적으로 TRR을 사용하지만 어떤 이유로 든 이름 확인이 실패할 때 네이티브 리졸버로 롤백합니다.
값 3은 TRR 전용 모드를 사용 가능하게 합니다. TRR 만 사용되며 폴백이 없습니다.
값 4는 섀도우 모드에서 실행됩니다. 즉, TRR이 데이터 수집을 위해 병렬로 실행되지만 원시 확인자가 사용됩니다.
여기서 preference network.trr.mode 값은 2로 수정을 합니다.
기본 설정 network.trr.uri는 HTTPS를 통한 DNS 서버의 주소로 설정되어야 합니다.
https://dns.cloudflare.com/.well-known/dns
https://dns.google.com/experimental
기타 환경 설정


network.trr.credentials:HTTPS 끝점을 통한 DNS 요청에 사용되는 자격 증명입니다 (기본값 : 없음).
network.trr.wait-for-portal:전용 포털 탐지가 알맞은 경우에만 TRR을 사용하십시오. (기본 값 : true).
network.trr.allow-rfc1918: TRR 응답에서 RFC 1918개인 주소를 허용합니다. (기본 값 : false).
network.trr.useGET:Post 대신 GET를 사용하려면 (기본 값 : false).
network.trr.confirmationNS:Firefox는 기본 도메인 이름을 확인하여 긍정적인 답변 (기본 값 : example.com)을 수락하여 TRR이 작동하는지 확인합니다.
network.trr.bootstrapAddress:network.trr.uri 아래 URI의 IP로 설정하여 네이티브 시스템 분석기를 사용하여 이를 찾지 않고 우회할 수 있습니다. (기본 값 : none).
network.trr.blacklist-duration:항목이 블랙리스트에 보관되는 시간 (초) (기본값 : 259200)
network.trr.request-timeout:밀리 초 단위로 시간 초과를 요청합니다. (기본 값 : 3000).
network.trr.early-AAAA:Firefox는 A 및 AAAA 항목을 확인하고 기본 설정이 true로 설정된 경우에만 AAAA를 먼저 사용합니다. (기본 값 : false)
입니다. 여기서 변경을 해야 하는 항목은 다음과 같습니다.
network.trr.uri를 다음값중 한개를 선택을 합니다.
https://dns.cloudflare.com/.well-known/dns
https://dns.google.com/experimental
그리고 나서 다음 값들을 변경합니다.
network.trr.allow-rfc1918:true
network.trr.bootstrapAddress:1.1.1.1 또는 8.8.8.8 둘 중 하나 사용하면 됩니다.더 자세한 방법은 지난 시간에 소개해 드린 글을 참고 하시면 될 것입니다. 일단 지난 버전에서는 적용되지 않았지만, 파이어폭스 64 버전부터는 SNI가 적용이 되니까 설정을 하면 됩니다.


파이어폭스(64 버전 이상)에서의 활성화 방법은 다음과 같습니다.
1) 도구->설정->일반->네트워크 설정에서 HTTPS를 통한 DNS를 사용하도록 설정 부분에 체크
안드로이드 모바일 버전은 해당 설정이 없으므로 about:config에서 network.trr.mode를 2로 바꾸어 줍니다.
2) 파이어폭스 주소창에 about:config 를 쳐서 고급 설정 창을 열어줍니다.
network.security.esni.enabled를 true로 변경해줍니다. 그리고 나서 브라우저 재시작 후 클라우드플레어 ESNI Checker 사이트에서 정상적용이 된 것을 볼 수가 있습니다. 여기서 DNS가 클라우드플레어가 아닌 경우 Secure DNS 항목은 불확실할 수 있습니다.
그리고 해당 기능을 인터넷 검열에서 사용하는 경우에는 HTTPS는 인증 후의 사용자와 웹서버 사이의 통신은 암호화되지만, 인증 과정에서 발생하는 통신은 암호화되지 않고 진행되며 이 인증 과정에서 SNI 패킷을 주고받아야 하는데 해당 SNI 패킷에 나오는 도메인을 보고 특정 웹사이트를 차단할 수 있게 됩니다.

단 SNI의 암호화 표준화가 추진 중이지만 아직 초안 단계이고 웹사이트가 TLS 1.3을 지원하고 ESNI가 구현된 서버 프로그램을 사용해야 ESNI가 작동이 되며 클라우드플레어를 사용하는 사이트는 TLS 1.3과 ESNI가 지원되기 때문에 차단되어도 들어갈 수 있습니다.

클라우드플레어 ESNI 검사 사이트

그래서 조금 더 확실하게 사용을 하고 싶은 경우에는 일단 신뢰할 수가 있는 VPN을 사용해서 인터넷을 사용하는 방법입니다. 물론 스마트폰도 항상 VPN에 연결해 두면 인터넷 검열에서는 조금은 피해갈 수가 있을 것입니다.

일단 개인적으로 불법사이트 및 국가 안보에 위험이 되는 사이트 등은 차단하는 것은 반대하지 않지만, DNS 검열을 한다는 것은 정말 잘못된 방법이라고 생각이 됩니다.

그래서 DNS 검열, HTTPS 검열은 위험한 발상이고 특히 HTTPS 검열은 정말 위험한 생각입니다. 왜냐하면, https는 보안을 위해서 존재하는 것인데 다른 사람이 자신이 접속한 https 접속한 페이지 내용을 본다는 것은 아무리 나쁜 짓을 하지 않아도 개인정보에 대한 심각한 위험이라고 생각이 됩니다.아마도 이런 방법을 하게 되면 트럼프 대통령이 한말을 인용을 해서 이야기 하면 Make Internet Great Again!이라고 표현을 할수가 있지 않을까 생각이 됩니다.

그리드형

공유하기

facebook twitter kakaoTalk kakaostory naver band