sitelink1 | https://blog.naver.com/aepkoreanet/221465526990 |
---|---|
sitelink2 | |
sitelink3 | |
sitelink4 | |
extra_vars5 | |
extra_vars6 |
정부 기관의 요청에 따라, 국내 ISP(인터넷 사업자)는 “SNI 필드차단” 방식을 이용하여 유해한 웹사이트를, 2019년 2월 11일부터 차단하기 시작하였다고 합니다. 12일 보도된 자료에 의하면, 차단된 사이트는 음란물이나 도박 등 불법 유해 사이트로, 총 895개 이며, 이 중 776개는 도박사이트라고 하였습니다.
불법 유해 사이트 차단 관련 기사가 나오면서, 차단하기 위하여 사용된 기술이, 인터넷 검열(Censorship)을 하기 위해 사용되고 있는 기술과 동일하기 때문에, 인터넷 검열이라는 이슈로 불이 옮겨 붙어 논란이 되고 있습니다. 즉 잠자고 있는 민감한 이슈인 “인터넷 검열” 이슈를 깨운 것이라고 여겨집니다.
논란의 시발점이 된 “SNI 차단 기술”이 무엇인지를 기술적으로 정리해 보았습니다..
SNI(Server Name Indication)
SNI(Server Name Indication)는 HTTPS 통신 즉 암호통신을 제공하는 보안서버에서 사용하는 표준 프로토콜인, TLS 프로토콜의 확장(extension) 기능에 속합니다. 즉 시대의 요청에 따라 TLS 프로토콜에 추가된 필드(Field) 이름입니다..
Web Browser는 HTTPS를 지원하는 Web Server에 접속 시, 접속하고자 하는 Web Site 이름(도메인네임 또는 호스트이름)을 “SNI 필드(field)”에 넣은 상태로 Server에 접속합니다. 참고로, ClientHello 메시지에 들어 있습니다.
SNI(Server Name Indication)가 필요한 이유
클라우드 서비스 사업자 나 CDN(Content Delivery Network) 사업자 나 Web Hosting 서비스 사업자인 경우는, 동일한 자원으로 많은 고객에게 서비스를 제공해야 하기 때문에, 하나의 Server가 다수의 Site 이름을 가지는 것이 필요하며, 또한 IPv4 주소 체계에선, IP 주소가 고갈이 되었기 때문에, 새로운 Site가 생길 때마다, 새로운 IP 주소를 할당해 줄 수도 없기 때문에, 시장의 필요에 따라 한 개의 서버가 다수개의 Site 를 지원하는 기능이 요구되어져 왔습니다.
하나의 Server가 복수개의 “Site 이름(도메인이름)”을 가지고 있다면, 즉 물리적으로 Server는 하나이고 IP 주소도 하나이지만, 다수개의 Web Site 들이 존재하는 것이 됩니다.
Web Browser가 Server에 접속할 때는, 사이트 이름이 아닌 IP 주소로 접속하므로, 동일한 Server를 공유하는 모든 Site는 동일한 IP 주소를 갖게 되므로, Server 입장에서는, IP 주소만으론 어느 Site에 접속하는 지 알 수 없기 때문에, 구별하는 방법이 필요하였습니다.
HTTP 프로토콜을 지원하는 사이트인 경우는, HTTP Header 정보에 접속하고자 하는 Site 이름을 넣어 두고 접속하면 구현이 되었습니다.
HTTPS 프로토콜인 경우는 HTTP Header 정보가 전달되기 이전 즉 암호통신이 시작되기 전, 초기 단계에서, 접속 Site를 확정해야 하므로, 새로운 방식이 요구되어 졌고, SNI 필드가 추가된 것입니다. 초기 단계에서, SNI 필드에 저장된 Site 이름을 가지고 구별하는 것입니다.
이를 이해하기 위해서는, HTTPS 프로토콜이 동작하는 방식을 알아야 하므로, 설명하고자 합니다.
HTTPS 통신 즉 TLS 프로토콜에서는, Web Browser는 Server에 접속 시, ClientHello 메시지를 보내고, Server는 응답으로 ServerHello 메시지를 보냅니다. Browser는 ServerHello 메시지 안에 들어 있는 서버인증서인 “SSL Certificate”를 꺼내어 검증을 합니다. Server가 자신이 접속하고자 하는 바로 그 사이트 인지를 검증하는 절차를 거칩니다. 즉 Certificate안에 있는 이름과 동일한 지를 비교하는 것입니다. 일치되면, Certificate안에 들어 있는 Public-Key를 이용하여, Session-Key라 불리는 암호키를 생성한 후, 암호통신을 시작합니다.
복수개의 “Site 이름(도메인이름)”을 가진 Server를 지원하기 위해, ClientHello 메시지에 SNI 필드를 추가한 것입니다. Web Browser는 ClientHello 메시지를 보낼 때 SNI 정보도 함께 보내는 것입니다. Server는 SNI 필드에 들어 있는 정보를 보고, 접속하고자 하는 Site 명을 구분하고, 이에 대응되는 SSL Certificate를 ServerHello 메시지 안에 넣고, Browser에게 응답하는 것입니다. Server는 제공하는 Site 당 각각의 SSL Certificate를 가지고 있어야 합니다. 아래 그림은 이해를 돕기 위한 자료입니다.
요약하면, IP 주소는 동일하지만 다수개의 HTTPS 사이트를 지원하는 Web Server를 위해서 SNI가 필요한 것입니다.
SNI를 지원하는 Web Browser 와 Web Server S/W
SNI 기능을 사용하기 위해서는, Web Browser에서 SNI 기능을 지원해야 하며, Web Server Application(예를 들면, Apache HTTP Server, MS IIS, Nginx 등)에서도 SNI 기능을 지원해야 합니다.
SNI 기능을 지원하지 않는 Web Browser로, 다수개의 Web Site를 지원하는 Web Server에 접속하면, ServerHello 메시지에 default SSL Certificate만 들어 있으므로, default SSL Certificate에 대응되는 Web Site 외에는 모두 접속이 되지 않습니다.
요즈음 사용하고 있는 최신 버전들은 모두 SNI 기능을 지원하고 있습니다.
참고로, MS WinXP에서 사용하는 IE Browser는 SNI를 지원하지 않으며, MS IIS는 2012년도에 나온 Version 8 부터 지원하고 있으며, Apache HTTP Server 는 version 2.2.12부터 지원합니다.
SNI의 Security(보안) 문제점
SNI 정보는 암호화되지 않은 plain-text 형태로 전달되기 때문에, 제3자가 볼 수 있다는 것입니다. 즉 ISP(인터넷 서비스 사업자)같이, Network상에서 traffic을 볼 수 있는 자라면, 개인에 대한 “도메인 도청(접속하는 도메인이름 즉 사이트 이름을 엿봄)”을 할 수 있다는 것입니다. 좀 더 나아가면 도메인 이름을 기반으로 하는 인터넷 검열(Censorship)도 할 수 있습니다. 실제로 여러 국가에서 인터넷 검열을 하는 방법 중 하나로 “SNI 필드 필터링(filtering)” 방식을 사용하고 있습니다. 즉 검열하고자 하는 사이트에 대한 블랙리스트를 만들어 놓고, 통신 packet속에 들어 있는 SNI 필드 값을 비교하여, 블랙리스트에 속한 이름이면 검열하는 것입니다.
이러한 Security 문제를 해결하기 위해, ESNI(Encrypted SNI) 라는 기술표준이 제안되어졌고(2018년 7월 3일 IETF에 제안이 등록되었음), 개발되어지고 있다고 합니다. 참고로, TLS v1.3 에 표준 기능으로 들어가지는 못했지만, TLS v1.3을 기반으로 구현된다고 합니다.
참고로, CDN 서비스 사업자인 Cloudflare는 상기 규격 즉 ESNI를 지원하는 시범서비스를 2018년 9월24일부터 하고 있습니다. 물론 이 서비스를 사용하기 위해서는 ESNI를 지원하는 Web Browser를 사용해야 합니다. 파이어폭스(Firefox) 64버전부터 지원한다고 합니다. 실제로 사용하기 위해선 추가 설정을 해야 한다고 합니다(인터넷에 이에 대한 자료가 많이 올라와 있으므로 참조하시기 바랍니다)
[출처] SNI 기반 HTTPS 사이트 차단|작성자 AEP코리아네트