최근 핫한 SNI 필드 감청 이슈에 대한 이야기
지난 월요일(2월 11일) KT를 시작으로 몇몇 해외 사이트들이 접속이 되지 않는다는 이야기와 함께 핫한 이슈로 떠오른 것이 있습니다. 바로 SNI 필드 감청입니다. 얼마나 핫한 이슈인지, 이슈 발생 직후 빠른 속도로 전파되고 어떠한 부분이 잘못된 것이며 문제가 있는지, 그리고 이에 대해서 어떻게 대응할 수 있는지 빠른 속도로 공유가 이루어지고 있습니다.
많은 분들이 이야기하시고, 이에 대해서 대응할 수 있는 방법을 이야기하고 계시기 때문에 기술적으로 너무 깊게 다루지 않고, 간단하게 SNI가 무엇인지, 왜 이걸 감청하는 것인지, 그리고 무엇이 잘못된 것인지 간단하게나마 집고 가는 시간을 가져보겠습니다.
SNI는 Server Name Indication의 약어로 한국어로 풀어내면 서버 이름 지정이란 뜻입니다. TLS 프로토콜의 확장형 중 하나로 하나의 웹서버가 여러 웹사이트를 서비스하면서 인증서 인증에 관련된 문제가 발생하여 이를 해결하기 위해 나온 것입니다.
예전에는 하나의 서버 IP 주소와 도메인이 1:1로 매칭되어있다 보니 서버 인증서 제공에 대한 문제점이 없었습니다. 하지만 최근에는 여러 도메인을 하나의 IP 주소와 서버로 연결하는 서비스가 대중화되다 보니, 보낼 인증서를 특정하지 못하는 문제점이 발생하게 되었습니다.
이를 해결하기 위해서 TCP 통신 과정 중 핸드 셰이크(HandShake, 주고받기) 과정의 시작점에 서 웹브라우저에 호스트 명을 정해주어 하나의 서버에서 여러 개의 SSL 통신을 할 수 있도록 변경한 것입니다.
HTTPS/SSL 인증 후 사용자와 웹 서버 사이의 통신은 암호화되어있습니다. 하지만 인증 과정에서 발생하는 통신은 암호화되지 않은 채 진행되고 있습니다. 즉, TLS 인증 과정 중 핸드 셰이크 시 처음 발생하는 패킷을 ISP에서 확인하고 차단 대상 사이트 DB와 일치한 접근이면 차단하여 막는 형태입니다.
요기서 한 가지 집고 넘어가야 될 점은.. 많은 분들이 모든 통신이 감청당한다고 생각하는 경우가 많습니다. 하지만 기술적으로는 어떠한 사이트에 대해서 접근하려고 하는지에 대해서만 알 수 있을 뿐, 실제 사용자와 웹 서버 간의 통신은 암호화되어있기 때문에 어떠한 데이터를 주고받았는지에 대해서는 알 수 없습니다.
그리고 암호화되지 않은 SNI 인증 과정 역시 암호화하기 위해, DNS 통신 단계에서부터 암호화하는 Encrypted Server Name Indication, ESNI가 TLS1.3의 확장 기능으로 발표되었으며, 클라우드 플레어(Cloudflare)에서 시범 서비스되고 있습니다. 그리고 향후 차세대 표준으로 등재될 예정으로 장기적으로는 사용자가 어떠한 사이트에 접근하려고 하는지도 암호화되어 확인할 수 없게 될 예정입니다.
이유는 매우 심플합니다. 우리 사회에서 막대한 피해를 일으키고 있는 암적인 존재들인 불법 공유 · 도박 · 리벤지 포르노 배포를 하고 있는 유해 사이트들 차단하기 위해서 하고 있습니다. (관련 보도자료 1 / 보도자료 2)
VOD나 웹툰 서비스와 달리 저작권을 무시하고 유료 콘텐츠를 무료 배포하여 콘텐츠 생산자에게 피해를 입히는 불법 공유 사이트, 자극적이고 제한 없는 사행성 도박을 통해서 막대한 피해를 일으키고 있는 도박 사이트, 당사자의 동의 또는 인지 없이 촬영 및 배포되어 수많은 피해자를 발생시키고 있는 리벤지 포르노 배포 사이트, 이들은 분명히 사회적 암이고 없어져야 될 존재입니다.
취지 자체는 매우 좋습니다. 정말 좋아요.
하지만 이를 시행하는 방법이 잘못되었습니다.
HTTPS는 서버와 사용자의 통신이 암호화되어있기 때문에 어디로 접속하는지 알 수 없습니다. 즉, 어디와 어떠한 통신이 이루어지고 있는지에 대해서 알 수 없기 때문에 차단하지 못한다는 것입니다. 이러한 부분을 해결하기 위해서 보안상 취약점인 사용자와 서버가 통신하기 전 암호화되어있지 않은 보안 인증 과정을 확인해서 어떠한 사이트로 접속하려고 하는 것인지 파악해서 차단한다는 것입니다.
즉, 간단하게 비유해서 치킨을 시켜 먹고 싶어서 치킨집에 전화해서 "거기 OO 치킨집이죠?" 하고 확인하는 과정을 듣고 "어 거기 맛없어"하고 강제로 전화를 끊어버린다는 겁니다.
분명히 누가 어디에 간다는 개인의 사생활 영역입니다. 고로 개인이 어떠한 사이트를 이용하는지도 사생활의 영역이고, 이를 보호하기 위해서 암호화를 진행합니다. 하지만 이번 SNI 필드 감청을 통한 차단 방식은 개인의 사생활 영역을 무시하고 보안의 허점을 이용해 확인하고 차단한다는 것입니다.
몇 번을 곱씹어서 다시 보아도 불법 유해사이트를 차단하기 위해 암호화되지 않은 SNI 필드를 확인하여 차단하는 것은 집에 들어온 벌레를 잡겠다고 약을 뿌리는 것이 아닌 불을 놓아서 집 전체를 태우고 있는 것과 다를 바 없어 보입니다.
불법 유해 사이트 관리자들을 잡아내고 엄벌하여, 많은 사람들이 그런 행위는 할 생각이 들지 않도록 반면교사하여 근절해야 될 것을, 급급하게 개인의 사생활 영역을 확인해서 접근하지 못하도록만 막고 있는 것으로 보인다는 것입니다.
대한민국 헌법과 통신비밀보호법에는 아래와 같은 조항이 있습니다.
대한민국헌법 [조문 바로가기]
제17조 모든 국민은 사생활의 비밀과 자유를 침해받지 아니한다.
제18조 모든 국민은 통신의 비밀을 침해받지 아니한다.
통신비밀보호법 [조문 바로가기]
제3조(통신 및 대화비밀의 보호)
① 누구든지 이 법과 형사소송법 또는 군사법원법의 규정에 의하지 아니하고는 우편물의 검열ㆍ전기통신의 감청 또는 통신사실확인자료의 제공을 하거나 공개되지 아니한 타인간의 대화를 녹음 또는 청취하지 못한다.
② 우편물의 검열 또는 전기통신의 감청(이하 "통신제한조치"라 한다)은 범죄수사 또는 국가안전보장을 위하여 보충적인 수단으로 이용되어야 하며, 국민의 통신비밀에 대한 침해가 최소한에 그치도록 노력하여야 한다.
사회적으로 막대한 피해를 일으키고 있는 암적인 존재들은 분명히 잡아내야 됩니다. 엄벌을 주어서 다시는 하지 못하게 막아야 됩니다. 다른 사람들이 동일한 행위를 하지 못하도록 제대로 된 반면교사 사례로 만들어야 됩니다. 하지만 이들을 잡기 위해서 보안의 허점을 이용하여 법을 위반하고 개인의 사생활을 침해하는 것이 과연 옳은 것일까요?
이에 대해 "아니다"라고 답하며 이만 글을 마칩니다.