https SNI 필드 차단 검열기술과 대처법

지난 2월 11일자 기준으로 정부의 검열방식이 한차례 진화하였는데요.
바로 패킷의 SNI부분에 대해 검열을 실시하여 https를 막아버리는 국가 레벨의 크래킹 기법을 도입하였습니다.

https 통신은 기본적으로는 암호화가 되어있지만 취약점이 하나 있는데요. 바로 초기 접속 확립 시에 도메인을 전송하는 과정이 평문이라는 점입니다. 이 평문으로 도메인을 전송하는 부분이 있는 곳이 SNI(Server Name Indication)이구요. 요청 패킷에서 DPI장비를 활용해 해당 부분을 도청한 다음, 도메인이 블랙리스트에 있으면 강제적으로 TCP RST(reset)패킷을 반환하여 연결을 종료시킵니다.

[warning 페이지]
[DNS 차단 개요도, 출처 인벤 - http://m.inven.co.kr/board/powerbbs.php?come_idx=2097&l=1149173]

기존의 검열 방식에서 나타났던 Warning페이지인데요. 기존의 검열 방식은 dns에 blacklist를 넣어, blacklist에 해당하는 요청이 있을 경우 강제적으로 Warning페이지를 반환합니다. 

이 방식도 중간자 공격(MITM)에 해당하는 해킹이나, https가 보급되면서 보기 어려워진 페이지입니다.


[19년 2월 11일 이후 검열 방식(SNI 검열 기반)]

2월 11일자 기반의 검열 결과, blacklist에 해당하는 사이트에 접속할 경우 아예 TCP RST를 반환하여 연결을 강제 종료시켜버리더군요. 기존에는 dns에 들어오는 요청에 기반해 차단했다면, 현재의 검열은 DPI를 이용하여 전 국민의 접속결과를 실시간으로 분석해 차단하는 방식이라 그 폐해가 더욱 크다고 볼 수 있겠지요.


[패킷 레벨에서의 SNI검열 방식, 출처 : http://blog.deadcoder.net/221463192946]

위의 패킷그림(18~27)번을 보면 알 수 있지만, blacklist에 있는 사이트에 대한 접속이 확인되면 연결을 강제로 종료시켜버립니다.(TCP RST) 다만 아직은 해당 검열 시스템에 결함이 있어 접속이 가능한 경우도 있는데요. 해당 검열취약점 부분은 28번 패킷에 나와있습니다. 

TCP segment of a reassembled PDU, 즉 패킷을 나누어서 client hello(클라이언트 접속 시작)를 서버측에 요청할 경우, 검열 시스템이 두번째 이후에 오는 패킷을 확인하지 못하고 통과시켜주는 거 같네요. 이 때문에 MTU(Max Transmission Unit)크기를 작게 할 경우 검열을 통과하는 경우가 있으나, 조만간 막힐 것으로 보입니다. 



[현재까지 나온 여러 검열 우회방법]

확실한 검열 우회 방식은 DNS보호를 포함하고 있는 정규 유료 VPN뿐이며, 다른 차단 회피 수단은 미봉책으로 수개월 이내에 다 막힐 것으로 예상됩니다.


1. MTU기반 우회 방식(혹은 DNS 프록시) : 검열시스템의 취약점을 이용한 것으로서 일시적인 회피만을 제공합니다. 
조만간 다 막힐 것으로 보입니다. 다만 현재로서는 유효한 거 같네요.

방법 
1. MTU크기를 400kb이하로 줄이기

2. intra등 DNS 프록시 앱 사용

3. Goodbye DPI 프로그램 사용(DPI 장비에서 인식이 안 되도록 패킷 생성 부분을 제어) - 일종의 미봉책입니다.
https://github.com/Include-sys/GUI-for-GoodbyeDPI/releases 에 가서 운영체제에 맞는 버전을 다운로드하면 사용 가능한 거 같네요.

=====================================================

2. Firefox 64버전 이상에서의 ESNI사용 : 차세대 https 표준안?인 ESNI가 적용된 사이트에서만 사용할 수 있습니다. 
현재로서는 파이어폭스 브라우저에서만 쓸 수 있는 방식이며, 제한이 많은 방식이에요.

방법


1. 파이어폭스 주소창에 about:config 를 쳐서 고급 설정창에 접속한다.

2. network.trr.mode를 2로 바꾼다.(사실 3으로 해야 더 안전할 수도 있습니다. 2는 가변적인 DNS 사용이며 3은 해당 DNS만을 사용하는 옵션이거든요)

3. network.trr.uri가 비어있다면(신규 설치시에는 안 비어있다), https://mozilla.cloudflare-dns.com/dns-query로 바꾼다.

4. network.security.esni.enabled를 true로 바꾼다.


[출처 - 나무위키, https://blog.bypass.sh/1209]

다만 위 방법의 문제는 ESNI가 적용되지 않은 사이트에는 기존의 SNI 미 암호화된 방식과 동일하게 작동한다는 점이며, 차세대 표준이기에 아직 적용되지 않은 사이트가 많다는 점입니다. 

======================================================
3. DNSCrypt, 시크릿DNS : 무용지물이며 ESNI를 제공하지 않습니다. 2개의 KT 회선으로 실험해 보았으나 다 안되더군요.


그리고 많은 분들이 
에서의 결과가 잘 나오면 현재의 검열을 피할 수 있다고 생각하시는 분이 있는데, 실제로는 잘 안되는 경우도 꽤 많더군요. 반대로 위의 intra 앱의 경우에는 cloudflare 결과가 안좋게나오지만 11일자 검열을 '아직은' 피할 수 있습니다. 언젠가는 막히겠지만요.


다만 제가 실험해본 결과 위에 있는 방식들은 미봉책이며 불안정한 방식들입니다. 그냥 속 편하게 유료 VPN 결제를 하시는 게 좋을 꺼 같네요. 


Express VPN을 추천합니다.


지금 보니 광고처럼 보여서 좀 뭐한데요. 아니면 다른 VPN을 하셔도 괜찮을 듯... 

댓글 없음:

댓글 쓰기

글에 대한 의문점이나 요청점, 남기고 싶은 댓글이 있으시면 남겨 주세요. 단 악성 및 스팸성 댓글일 경우 삭제 및 차단될 수 있습니다.

모든 댓글은 검토 후 게시됩니다.

Translate