요즘 해외 불법 사이트에 관하여 HTTPS 차단에 대한 찬반 논란이 꽤 크게 발생하고 있다.
반대하는 입장의 이야기를 들어보면, '이번 차단 방식이 패킷 감청과 다를 바가 없다. 즉, 우리가 무얼 하는지 어느곳에 접속하는지 알 수 있게 되고 표면적으로는 불법 사이트 차단이지만 마음만 먹으면 개개인의 인터넷 속 행적을 감시할 수 있다' 는 것이다.
결론부터 이야기하면 반은 맞고 반은 틀리다.
어느 곳에 접속하는 지는 알 수 있으나, 무엇을 하는지는 알 수 없다.
HTTP와 HTTPS의 차이를 간단하게 이야기하면ㅡ HTTP(HyperText Transfer Protocol)의 보안 취약점을 보완한 것이 HTTPS(HyperText Transfer Protocol over Secure Socket)이다. HTTPS의 S는 Secure "보안"이다.
HTTP는 서버와 개인 컴퓨터가 웹사이트 문서를 주고 받을때 정해진 형식으로 요청을 하는 네트워킹 방식인데,
문제는 암호화가 되어 있지 않은 평서문으로 전달하므로 누군가 불법적으로 접근하면 당신이 무엇을 하는지,
언제 접속하는지 전부 알 수 있게 된다.
하지만 HTTPS는 이러한 문서를 암호화하여 누군가 감청을 하고 싶어도 불가능하게 만드는 일을 하는 것이다.
이번 규제 논란에서 이야기하는 부분은 HTTPS 까지 차단을 하는 부분이다.
여기에서 중요한 것인데, 앞서 말했듯이 HTTPS는 암호화되어 있는 것이므로 내용물을 읽어 볼 수 없다.
찾아본 결과, 규제에서 활용하는 방식은 HTTPS의 TLS라는 보안 규정에서 SNI 패킷을 읽어 확인하는 것이다.
그러면 이 SNI가 무엇이냐?
Server Name Indicator이다. 한국어로 서버명 표시기(?) 정도 된다.
단순히 서버 이름만 표기한다고 보면 된다.
( 출처 = 위키피디아 )
HTTPS 활용시 SNI가 무엇을 하는지 위 사진에서 알 수 있다.
SNI는 연관된 서버 이름과 함께 인증서에 정의된다 (= SNI defined on the certifiacte with associated server names)
실제 HTTPS 패킷을 열어 확인한 문서들이 있었는데, 그 중 하나에서 발췌한 것으로 어떤식으로 표기되는지는 아래 사진과 같다.
( 출처 = https://docs.apigee.com/api-platform/system-administration/using-sni-edge )
맨 마지막에 보면 Server Name Indicator extension이라고 표기되어 있다.
여기에서 SNI가 어떤건지 좀더 자세히 설명 해놓았는데,
Server Name Indication (SNI) allows multiple HTTPS targets to be served off the same IP address and port without requiring those targets to use the same TLS certificate. When SNI is enabled on a client, the client passes the hostname of the target endpoint as part of the initial TLS handshake. That allows the TLS server to determine which TLS cert should be used to validate the request.
TLS 핸드쉐이킹(클라이언트와 서버 사이에 접속을 위한 확인 과정) 과정에서 상대 호스트네임(웹사이트 주소)을 넘기는 것이다.
연결 과정에서 필요한 정보가 HTTPS 헤더에 담겨있기 때문에 핸드쉐이킹 과정에서는 열어 볼 수가 없다*. 따라서 SNI를 전달해 확인하는 것 이다.
평서문이기 때문에, 보안적인 취약점이라고 볼 수 있다.
(* HTTPS 통신에서는 TLS 핸드셰이크 시점에서 아직 서버가 HTTP 헤더를 읽을 수 없기 때문에 서버가 HTTP host 헤더를 읽어 어떤 인증서를 보낼지 선택하는 작업이 불가능하게 되고 따라서 한 아이피당 한 인증서만을 사용해 거기 포함된 호스트명만을 사용할 수 있다. = 위키피디아 출처)
따라서 현재 규제 방식은 SNI 속의 이 호스트 네임을 확인하여 유저가 어느 웹사이트에 가고자 하는지 확인하며, 불법 사이트일 경우 차단하는 방식이다.
즉, 웹사이트 이름 (ex. naver.com)은 알 수 있다. 하지만 거기에서 무슨 내용을 요청하는지는 알 수 없다.
이상한 이야기가 나와서 뭐 빅브라더니, 뭐니, 이야기가 많이 나오는 것 같아서 나도 정리할 겸, 잘못된 부분은 알릴 겸 포스팅했다.
물론 " 내가 요청한 웹사이트를 정부가 알 수 있다는 것 자체가 감청이다! " 라고 이야기하면 할말은 없다.
하지만 이전부터 정부가 활용하던 차단 방식인 warning 사이트로 막아놓는 경우도 위와 비슷한 사안이다. 어떻게 확인하냐의 차이다.
결국 무엇을 확인해서 구분하는지 정도의 차이다.
더군다나 엄밀히 따지면 TLS의 취약점을 이용하는 것인데, TLS 보안된 버전들이 이미 나왔고 점점 늘리는 추세다.
SNI의 취약점을 해결한 ESNI 를 사용한다. 이 보안버전을 점점 사용하게 될 것이고 그러면 위에서 활용한 방식도 무용지물이다. SNI를 읽을 수 없으니까!
다시 결론으로 돌아가면, 당신이 네이버를 접속하는지 티스토리를 접속하는지는 알 수 있으나!
무엇을 하고자 하는 지는 모른다.
이것보다 더 심하게 요청 값까지 알아내는 방식을 정부가 시작하면 그건 매우 문제가 된다. 하지만 아직까지 SNI 감청 방식으로는 불가능하다.
++
찾아보니 이 규제 방안을 만든 이유가 불법 웹툰 사이트로 인한 저작권 침해에서 비롯되었다고 한다.
( 보도자료 =https://www.mcst.go.kr/kor/s_notice/press/pressView.jsp?pSeq=16672 )
이전에 만화가 이말년이 불법 사이트로 인해 네이버 웹툰 수익이 뚝 떨어졌다고 했다. 아마 10년전으로 돌아갔댔나???
그만큼 불법 사이트 접속자 수도 많고, 사이트 수도 엄청 많았다. 구글 트렌드 순위에도 들어갈 정도였으니까.
이 글을 읽는 사람들 중 누군가도 저런 불법 사이트에 들어갔었던 적이 있을 수도 있다.
제발, 불법 웹툰 사이트 같은거 이용하지 말자.
'컴퓨터 공학' 카테고리의 다른 글
👉 [Linux] MySQL 설치 및 실행 (0) | 2019.06.08 |
---|---|
👉 [Python] referenced before assignment (0) | 2019.05.25 |
[Android] Viewpager indicator 적용 (0) | 2019.02.06 |
[Android] 좀비 서비스(zombie service) 구현 (1) | 2019.01.24 |
[Android] editText 입력 변화 감지 이벤트 (0) | 2019.01.23 |