HTTPS SNI 차단 우회하는 방법 | 모바일 PC 총정리

2019년 2월 11일 KT부터 시작된 HTTPS SNI 필드 차단을 우회하는 방법을 아래와 같이 정리합니다. 현재 시행중인 차단의 기술적인 내용보다는 이를 우회하는 방법에 관련된 내용 위주로 정리하였으니 필요한 내용 참고하여 사용하시기 바랍니다. 모든 내용은 테스트 후에 공유 드리는 것이나 혹, 동작하지 않거나 잘못된 부분이 있다면 댓글로 알려주시기 바랍니다.

  • UPDATE 2019-03-12 : 구글 번역기 & 오페라 브라우저 추가
  • UPDATE 2019-04-15 : SafeVisit 추가
  • HTTPS SNI 패킷 분석으로 이루어진 차단은 ‘Warning’과 같은 경고 문구를 띄우지 않습니다. ▼

HTTPS SNI 필드 차단 관련 참고 ▼

과거 HTTP 통신을 분석하여 유해 사이트를 색출한 방식(warning 페이지가 뜨는 경우)은 단순히 HTTPS 프로토콜을 사용하거나 DNS를 변경해주는 것으로 쉽게 우회가 가능합니다.

  • 과거 차단 방식 : 네임 서버에 접촉하는 과정 중 사용자가 어떤 도메인의 IP를 요청하는지를 확인하여, 유해사이트의 도메인이 포함되어 있다면 warning.or.kr로 우회시키는 방식.

하지만 몇일 전 적용된 HTTPS SNI 차단은 HTTPS 통신에서 ‘클라이언트가 보내는 서버 이름’을 ‘방통위의 블랙리스트’와 대조하여 차단합니다. 이는 SNI 영역이 평문으로 노출되는 점을 이용하는데, 비밀 통신을 위해 HTTPS 프로토콜을 사용한 ‘모든 사용자들의 SNI 필드를 검사’해야지만 ‘HTTPS SNI 차단’이 기술적으로 가능합니다. 고로 유해 사이트 차단이라기보다는 인터넷 사용 검열이라는 것이 더 적절합니다.

  • HTTPS SNI 차단 방식 : HTTPS 프로토콜을 사용하지만 첫 인증 과정에서 SNI(서버 이름)은 암호화가 되지 않는다는 점을 이용하여 이를 조회 및 검열하는 방식. 어떠한 경고문도 출력되지 않고 연결이 끊어짐.

SNI 영역의 서버 이름을 암호화할 수 있는 ESNI(Encrypted SNI) 기술을 브라우저에 적용한다면 지금도 이 차단 방식을 근본적으로 우회할 수 있긴 합니다. 하지만 ESNI를 지원하는 브라우저는 현재 많지 않으며(파이어폭스), 브라우저가 이를 지원하더라도 서버가 Cloudflare 인증서를 사용하지 않으면 무용지물이라 할 수 있습니다.

자세한 기술적 내용 참고 링크 ▼


Puffin 브라우저 사용 | 아이폰 / 안드로이드

앱만 설치하시면 따로 설정이 필요없는 가장 간편한 방법입니다. iOS / 안드로이드 등 모바일 기기에서는 무료로 제공되며 PC 버전은 유료로 운영됩니다. 편의상 iOS 기기에서 본 문단을 작성하였으나 안드로이드 기기에서도 사용하실 수 있습니다.

* 모바일 PRO 버전에서는 플래시를 지원합니다. 플래시는 점점 사라지는 추세라 굳이 PRO 버전이 필요 없을 듯합니다.

 

1) Puffin 브라우저를 다운로드합니다. ▼

 

2) 따로 설정이 필요 없습니다. 원하는 웹페이지를 입력해서 다른 브라우저와 동일하게 이용하시면 됩니다. ▼


Intra 앱 사용 | 안드로이드

‘Intra’ 앱은 DNS에 대한 연결을 보호해주는 앱이며 안드로이드 운영체제에서만 사용가능합니다. VPN을 사용할 때와 유사하게 앱의 기능만 활성화시켜주시면 되기 때문에 간편하게 사용하실 수 있습니다.

 

1) Intra 앱을 다운로드합니다. ▼

 

2) 앱을 실행하신 후, 아래 연결 허용 팝업에서 ‘확인’을 선택합니다. ▼

 

3) ‘보호됨’ 표시가 나오게 되면 앱에서의 설정이 완료된 것입니다. 이제 브라우저에서 원하는 사이트에 접속해보시면 됩니다. ▼

  • 토글 버튼을 한번 더 누르시면 Intra 앱이 비활성화됩니다.
  • 이 앱을 활성화하신 후에 https 프로토콜을 활용하여 웹페이지에 접속하셔야 합니다. 만약, http 프로토콜로 사용하시면 여전히 ‘Warning 페이지’로 리다이렉트 되실 겁니다.


VPN 우회

가장 확실한 방법이며 모바일 / PC 모두 잘 동작합니다. 다만, 무료 서비스를 사용하시면 속도면에서 확실히 불편함을 느끼실 수도 있습니다. SNI 영역을 암호화(ESNI)하는 것이 근본적인 해결책인 것은 맞으나 아무래도 제한 사항이 많기 때문에 모든 웹사이트를 우회 접속하기에는 아직 이른 방법입니다.

 

아이폰 VPN 우회

앱스토어를 통해 VPN 서비스를 지원하는 앱을 다운로드 받아 사용하시면 됩니다. 정말 다양한 VPN 앱이 있기 때문에 아래 ‘VPN Master’ 외에 본인이 안전하다고 판단되는 VPN 서비스가 있다면 그 기업체의 앱을 사용하시면 됩니다. ▼

* 자세한 내용은 이전에 작성해둔 ‘아이폰, VPN을 통해 IP 우회하기 | VPN Master‘를 참조 바랍니다.

 

안드로이드 VPN 우회

크롬 브라우저에서 확장 프로그램으로 주로 이용하던 ‘UltraSurf’을 안드로이드 모바일 앱으로도 사용하실 수 있습니다. 속도도 나쁘지 않고 모바일 기기에서 요구하는 권한도 없습니다. 마찬가지로 다른 본인이 좋다고 판단되는 다른 VPN 앱을 사용하셔도 무방합니다(정말 많습니다).

 

크롬 브라우저 VPN 우회

몇가지 확장 프로그램을 사용해본 결과 ‘UltraSurf’가 속도면에서 가장 좋았던 것 같습니다. 맥/윈도우 등 운영체제 관계 없이 크롬 브라우저를 설치하시고 아래 확장 프로그램을 크롬에 추가해주기만 하시면 됩니다.

* 자세한 내용은 이전에 작성해둔 ‘크롬 브라우저에서 VPN으로 IP 우회하는 방법‘를 참조 바랍니다.

 

오페라 브라우저 VPN 우회

오페라는 브라우저 자체로 VPN 서비스를 무료로 제공하는 유일한 브라우저입니다. 오페라 브라우저를 다운로드 받으신 후에 브라우저 내에서 VPN 설정을 활성화하시면 쉽게 우회가 가능합니다.

* 자세한 설명이 필요하시면 ‘오페라 브라우저 내장 VPN 사용하는 방법‘ 글을 참고 바랍니다.

 

맥 VPN 우회

Tunnelblick‘ 앱을 설치하신 후에 http://www.vpngate.net/en/에서 적절한 OpenVPN 서비스를 선택하여 접속하시면 됩니다. 해당 설정이 귀찮으신 분들은 브라우저에 확장 프로그램을 설치해서 이용하셔도 됩니다.

* 자세한 설정 방법은 이전에 작성해둔 ‘[맥북 / macOS] VPN 설정으로 IP 우회하기‘를 참고 바랍니다.

 

윈도우 VPN 우회

네트워크의 VPN 설정으로도 우회할 수 있긴 하나 ‘SoftEther’ VPN Client를 사용하시면 조금 더 간단하게 VPN을 사용하실 수 있습니다. ‘SoftEther VPN Client + VPN Gate Client Plug-in‘를 다운받아 설치만 하시면 됩니다. 해당 설정이 귀찮으신 분들은 브라우저에 확장 프로그램을 설치해서 이용하셔도 됩니다.

* 자세한 설정 방법은 ‘윈도우 10 IP 우회하는 방법 | VPN & 프록시‘ 글을 참고 바랍니다.


구글 번역기 우회 | 운영체제 무관

구글 번역기를 사용하여 우회하는 방법입니다. VPN, ESNI 등의 설정이 전혀 필요 없으며 일반 브라우저의 일반 인터넷 환경에서 사용하시면 된다는 장점이 있습니다. 접속까지는 문제 없으나 특정 사이트에서 스트리밍이 되지 않을 수는 있습니다.

간단 사용 방법 ▼

https://translate.google.com/translate?hl=ko&sl=en&u=[본인이 접속하고자 하는 URL]

예시 ▼

https://translate.google.com/translate?hl=ko&sl=en&u=https://www.google.com

 

기본 사용 방법 ▼

1) 구글 번역 페이지로 이동하여 접속하기를 원하는 사이트 URL을 입력합니다. 그리고 번역 결과의 링크를 클릭합니다. ▼

번역 언어는 크게 관련 없습니다. 한국어로 번역되는 것이 싫으시면, 번역 언어를 영어로 선택하시면 됩니다.

 

2) 접속된 페이지를 이용합니다. ▼

  • 다른 웹사이트 이동 : 구글 번역 검색바에 접속하고자 하는 URL을 입력하시면 됩니다.
  • 번역이 싫으시면 : 도착어를 해당 페이지 오리지널 언어로 설정하시던가 원본 옵션을 선택하시면 됩니다(그림 참조).


Goodbye DPI 사용 | 윈도우

‘Goodbye DPI’는 SNI 패킷 감청으로 인한 차단을 우회할 수 있는 오픈 소스 프로그램입니다. 윈도우에서만 사용 가능합니다. 바이러스 등이 의심가시면 소스 코드 까보시고 직접 빌드하시면 됩니다.

 

1) ‘Goodbye DPI’ 최신 버전을 다운로드합니다. ▼

 

2) 압축을 해제하고 ‘goodbyedpi.exe를 실행합니다. ▼

(대부분 64비트 운영체제를 사용하고 계시다고 가정하면) x86_64 폴더 안에 있는 ‘goodbyedpi.exe’를 실행하시면 됩니다.

 

3) ‘Fliter activated!’ 문구를 확인하시면 성공적으로 필터가 적용된 것입니다. 이 창을 닫으시면 기능이 비활성화되니 창을 최소화해두시고 인터넷을 사용하시기 바랍니다.

* GUI 버전을 보니 사용/중지 버튼이 있었던 것 같습니다.


ESNI (SNI 암호화) & DNS over HTTPS

파이어폭스 브라우저에서 DNS over HTTPS & ESNI를 설정하는 방법입니다. 아래 제한 사항을 확인하시고 진행해보시기 바랍니다. 현재 ESNI를 지원하는 브라우저는 파이어폭스 밖에 없습니다.

우회 시 제한 사항

  • 접속하려는 웹사이트가 Cloudflare 인증서를 사용 : 서버 측에서 ESNI를 지원하는 DNS는 Cloudflare 밖에 없습니다. 고로, Cloudflare 인증서를 사용하지 않는 웹사이트는 설정을 완료하셔도 어차피 접속이 되지 않습니다.
  • 고로, 우회를 목적으로 사용되기보단 본인의 프라이버시와 보안을 위해서 필요한 설정입니다.
  • 파이어폭스 브라우저 사용 : 현재 파이어폭스(64 이상) 외엔 지원하지 않습니다.
  • 안드로이드 파이어폭스 브라우저는 똑같이 설정이 가능합니다만 iOS에서는 불가능합니다.

Cloudflare 인증서 사용 유무 확인 방법

확인하고자 하는 URL(주소) 뒤에 ‘cdn-cgi/trace’를 추가하여 입력합니다. 만약 해당 서버가 Cloudflare 인증서를 사용한다면 아래와 같은 정보 화면이 나와야 합니다.

 

* 아래 내용은 파이어폭스 65에서 진행되었으며 편의상 맥을 사용하였습니다. 파이어폭스가 없으시거나 최신 버전을 사용 중이지 않으신 분들은 다운로드 & 업데이트 후 진행하시기 바랍니다.

1) 파이어폭스 브라우저를 실행하신 후, Cloudflare에서 현재 브라우저의 보안 수준을 먼저 확인합니다(선택 사항).

기본적으로 아무 설정을 하지 않은 최신(65) 파이어폭스를 사용하고 계시다면 아래와 같이 나오실겁니다.

 

2) 주소창에 아래와 같이 입력하신 후, ‘위험을 감수하겠습니다!’를 선택합니다. ▼

about:config

 

3) 먼저 DNS over HTTPS 설정을 진행합니다. ▼

‘network.trr’ 키워드로 검색하셔서 아래 값을 변경합니다. * trr(Trusted Recursive Resolver)

network.trr.BootstrapAddress : 1.1.1.1 //Cloudflare DNS 주소
network.trr.mode : 3 혹은 2

network.trr.mode 값 참조

  • 0 (OFF) : 기존 방식 사용 (DNS over HTTPS 사용하지 않음)
  • 1 (Race) : 기존 방식과 DNS over HTTPS를 병렬로 실행해서 빠른 응답을 우선 순위로 사용
  • 2 (First) : DNS over HTTPS를 먼저 해보고 실패 시 기존 방식을 사용
  • 3 (Only) : DNS over HTTPS 사용
  • 4 (Shadow) : 두가지 방법을 병렬로 실행하지만 기존 방식만 사용
  • 5 (Off by choice) : 0 값을 사용하는 것과 동일하지만 선택에 의해서 결정

 

4) ESNI 설정을 사용으로 변경합니다. ▼

검색바에 ‘esni’ 키워드로 검색하셔서 아래 항목의 값을 ‘true’로 변경합니다.

network.security.esni.enabled : true

 

5) 다시 한번 Cloudflare에서 현재 브라우저의 보안 수준을 합니다. 아래와 같이 모두 체크 표시가 되었다면 성공적으로 보안 작업된 것입니다. ▼


윈도우 & 안드로이드 패킷 파편화

SafeVisit는 네트워크 패킷을 파편화하여 프라이버시를 유지하는 작동원리를 가지고 있는 프로그램입니다. 윈도우 / 안드로이드에서 사용 가능하며, 간단하게 테스트해본 결과 문제 없이 잘 우회되는 듯합니다. ZIP 파일을 내려받으시면 설치 없이 운용하실 수도 있습니다.

우측 상단의 톱니바퀴 버튼을 누르시면, 패킷 사이즈를 조절하실 수 있습니다. 기본적으로 48으로 설정되어 있습니다.

* 이 프로그램은 ‘Gabjong Kim’님이 댓글로 공유해주신 프로그램입니다.

주요 기능 | 출처 – SafeVisit

  • 개인프라이버시 보호
  • 차단된 웹사이트와 서비스 접근
  • 방문 웹사이트 감시 방지
  • 윈도우즈 OS 지원. Windows 7, Windows 8, Windows 10
  • 프록시 서버를 사용하지 않아 안전함
  • 네트웍 패킷의 파편화
  • 100% 무료 소프트웨어
  • 68개 백신에서 안전한 소프트웨어로 인정

MTU 수정 (참고용)

MTU(Maximum Transmission Unit)는 네트워크 인터페이스에서 세그먼트 없이 보낼수 있는 최대 데이터그램 크기 값이며 패킷이 한번에 담을 수 있는 최대 데이터그램 크기라고 볼 수 있습니다. 데이터가 MTU 값을 넘을 경우 여러 개의 패킷으로 분할되어 보내지는 점을 이용하여 SNI 필드 차단을 우회해볼 수 있다고 합니다.

* 맥/윈도우 시스템에 기본적으로 설정되어 있는 MTU 값은 1500입니다.

* 가장 초기에 MTU 수정으로 SNI 필드 차단 문제를 해결하신 분의 내용에 따라 글을 작성하였었는데 직접 몇번 더 확인해보니 동작/막힘의 반복인 것 같습니다. 이 글에서 제외할까 생각하다 참고용으로라도 남겨두게 되었습니다.

 

윈도우 MTU 값 변경

MTU 값 변경에는 문제가 없으나 우회 기능에는 약간 문제가 있는 듯합니다. 여러번 새로고침하면 동작하긴 하는데 ‘동작한다’라고 말하긴 애매한 것 같습니다.

명령 프롬프트(cmd)를 관리자 기능으로 실행하시고 아래순으로 진행하시면 됩니다.

netsh interface ipv4 show interfaces //색인 번호 확인
netsh interface ipv4 set subinterface [색인 번호] mtu=400 store=persistent //MTU 변경
netsh interface ipv4 show interfaces //색인 번호 재확인

 

맥 MTU 값 변경

여러 예시들을 참고해보았을 때 맥에서도 MTU 값을 변경할 수 있는 듯이 보이나 제 경우엔 최소 범위(1280) 이하로 변경할 수 없었습니다. 고로 우회가 되는지 안되는지도 테스트할 수 없었습니다. 이 내용은 후에 조금 더 알아보고 업데이트해볼 생각입니다. 아래 내용은 단순 기록용으로 적어둡니다.

 

  • 터미널 환경 MTU 수정 ▼

* en0은 네트워크 어뎁터 이름입니다. 유선 네트워크를 사용하신다면 en0이 유선 en1이 와이파이가 됩니다. 정확한 내용은 ifconfig 명령어로 확인하시면 됩니다.

networksetup -getMTU en0 //MTU 값 확인
networksetup -setMTU en0 400 //MTU 값 수정
  • 터미널에서 MTU 값을 변경하는 다른 명령어 – 참고글

* 왜 안되는지 찾는 중입니다.

sudo ifconfig en0 //저는 안됩니다. invalid argument를 리턴합니다.
sudo ifconfig en0 mtu 400 //마찬가지로 invalid argument를 리턴합니다.

  • GUI 환경 MTU 수정 : System Preferences > Network > Advanced 버튼 > Hardware 탭 ▼

* 1280 이하 값으로 수정해도 다시 1280으로 변경되더군요. 원인 혹은 해결 방법은 찾는 중입니다.


이상입니다.

3 COMMENTS

댓글 남기기