마지막 수정 날짜 : 2018년 5월 8일


이미지 출처 : https://ko.depositphotos.com/69400889/stock-photo-censored-web.html

참고 자료 : [1] https://www.clien.net/service/board/park/12081162
[2] http://www.mcst.go.kr/web/s_notice/press/pressView.jsp?pSeq=16672
[3] https://savetheinternet.kr/

드디어 warning.or.kr 방식이 발전해버렸다.
기존에는 HTTP 패킷 중 Host: ~~~ 를 파악하여 해당 사이트를 차단1하는 데 그쳐, 요즘 사이트에 대세가 되버린 HTTPS 에 대응을 하지 못 했었는데, 결국 DNS 오염(DNS pollution)2 과 SNI 데이터3를 이용하여 검열을 하기로 결정(참고자료 2번 참고)되었다고 한다.

현재는 DNS 오염 방식4만 적용되어 있다.

정부가 검열을 하는 이유

굳이 따지자면 저작권과 성인 사이트, 즉 불법 사이트 때문이다. (라고 주장한다.)
즉, 일부가 알고 있는 밤x끼 사이트를 생각해보자. 레x코믹스 같은 사이트를 보면 알겠지만, 이런 사이트의 웹툰 등 자료를 무단으로 퍼가 무료로 배포하여 피해가 막심하다는 것이 주 이유다.

문제가 되는 이유

누구든지 다른 사람이 우리가 하는 것을 누군가가 보는 것을 원하지 않는다. 물론 가족이 보는 것이라면 상관이 없을 수도 있겠지만, 현재 주체는 국가(정부) 다.
SNI 검열까지 시작되고 나면, 사실상 우리가 들어가는 HTTPS 사이트를 포함하여 내가 어디에 들어갔는지를 파악할 수 있다.

물론, 기계적인 방식으로 처리하기 때문에 누군가가 들여다보거나 할 수 없다고 주장하고 있지만, 트위터 사태를 보면 알 수 있듯, 절대 안전하지는 않다.
예전에 국정원에서 민간인을 사찰한 적이 있었다. 불법 사이트를 위해 검열을 한다는 것은 결국 정부에서 관련 자료를 이용하여 악용5할 수도 있는 것이다.

해결 방안

현재 TLS 1.3 관련하여 SNI 암호화가 개발(draft) 중이다.
또한, TLS 1.3 에서는 TLS 1.2 에서 인증서에 대한 내용이 평문으로 전송된 것에 반해 어느 정도 암호화가 되어 전송되기 때문에 사실상 검열할 수 있는 부분은 해당 아이피에 접속했다는 로그를 제외하고는 거의 확인할 수 없다.

TLS 1.3 + SNI encryption(아직 개발되지 않음) 은 서버와 클라이언트 모두가 지원해야 하기 때문에 프록시 혹은 VPN 등을 통해 처리할 수 있다. 물론 차후에 sni encryption 이 승인되고 탑재된다면 얘기가 달라지겠지만.
DNS 는 매우 간단하다. 해외 서버를 이용하면 된다.
차후에 DNS 데이터 패킷 자체를 파악하여 검열한다면, 길호넷 사이트에 배포되어 있는 SecretDNS 같은 도구를 이용해 보자.

안전한 서버 만들기(?)

현재 내 서버에는 TLS 1.3 (draft 23) 이 적용되어 있고, dnscrypt-proxy 를 사용하여 DNS 데이터도 암호화되어 처리하고 있다.
최신 브라우저(Chrome, Firefox) 들은 현재 TLS 1.3 draft 23 기준으로 자동으로 활성화가 되어 있다.
이전에 TLS 1.3 관련 글을 썼을 때는 직접 설정을 해 줘야 하고, Chrome Canary 나 Firefox Nightly 같은 버전을 설치해야 된다고 안내했지만 현재는 일반 사용자용 최신 버전만 설치해도 기본적으로 활성화가 되어 있다.

OpenSSL-1.1.1-pre2 버전을 이용하면 본인의 서버에 바로 TLS 1.3 이 적용된다. 시간이 된다면 TLS 1.3 관련 정보도 찾아 보고 바로 세팅 해 보자.

SSL Cipher - hakase.io by https://dev.ssllabs.com/

SSL Cipher – hakase.io by https://dev.ssllabs.com/


  1. HTTP 헤더 일부가 들어가면 판단하는 것 같다. ↩
  2. 한국 DNS 서버 한정(KT DNS 등) 관련된 사이트 (밤x끼 등) 로 lookup 하면 warning.or.kr 아이피로 띄워버린다. ↩
  3. SSL 은 원래는 한 아이피+포트 당 하나의 인증서만 사용할 수 있었지만, SNI 값을 이용하여 다른 가상호스트(virtualhost) 라면 해당 도메인의 인증서를 보낸다. ↩
  4. 2018.05.08 한국시각 기준 ↩
  5. 물론 비밀스럽게 하기 때문에 사실상 했는지 안 했는지는 거의 알 수 없는 일이지만. ↩