1. 개요
HSTS(HTTP Strict Transport Security)는 HTTPS을 보조하는 정책 중 하나로서, 일정 기간 동안 이용자의 보안(HTTPS) 접속을 강제할 수 있다.2. 설명
컴퓨터 보안에서 보안접속(HTTPS)을 적용한 웹 기반 시스템이 항시 보안접속을 유지할 수 있는지는 언제나 이슈 사항이다. 이 이슈 사항을 해결하기 위해선 개발 과정에서 프로토콜(일반 HTTP인지 HTTPS인지)을 매번 확인하거나, 보안접속을 이용하는 사용자가 아니면 접근을 불가능하게 하거나, 위조된 인증서 혹은 이와 유사한 부정한 방법을 사용하는 등의 경우를 모두 확인[1]해야 하는데, 서비스를 운영함에 있어서 현실적으로는 불가능하다.그래서 나온 개념 중 하나가 HSTS이다. HSTS는 일정 기간 동안 아예 특정 도메인에 HTTPS 접속을 강제할 수 있어, 만약 페이지 이동 중 일반 HTTP 접속이 시도될 경우 강제로 HTTPS로 프로토콜을 변경시킨다.[2] 표준화된 절차이기 때문에 다양한 웹 브라우저와 디바이스에 호환된다. (Microsoft Edge, 인터넷 익스플로러, 크롬, 파이어폭스, 사파리, 오페라, 그 외 모바일 웹 브라우저 등)
구글 크롬이 주도하는 HSTS Preload List에 사이트를 등록하면 브라우저 업데이트 이후 해당 도메인은 반영구적으로 무조건 HTTPS로 연결된다. 크롬뿐만 아니라 엣지, 사파리, 파이어폭스 등 다양한 브라우저도 이를 지원하며 동일한 DB를 사용한다. 해당 사이트에 도메인을 입력하면 사이트가 Preload List에 등록되어 있는지, 또는 등록이 가능한 상태인지 알 수 있다. 우선 해당 리스트에 사이트가 등록되면 이후 업데이트되는 브라우저는 등록된 도메인을 무조건적으로 HTTPS로 연결하며, HTTPS가 지원되지 않는 경우 연결 자체가 불가하게 된다.[3] 만일 리스트에서 도메인 삭제를 신청하더라도 등록할 때와 마찬가지로 브라우저의 업데이트 주기를 따르므로 애초부터 신중하게 등록해야 한다. 장기적으로 사이트의 하위 도메인을 포함한 모든 페이지에 HTTPS를 지원할 수 있다는 보장이 없는 한 등록해선 안 된다.
Cloudflare에서 CDN을 이용하면 HSTS 옵션을 설정에서 적용할 수 있다. Cloudflare를 이용하고 있지 않다면, 웹 서버의 세팅에서 Strict-Transport-Security 헤더를 직접 추가하면 된다. 기본적으로 Preload List에 사이트를 등록하려면 Strict-Transport-Security의 max-age가 1년(31536000) 이상이어야 하고, 하위 도메인을 포함해야 하며(includeSubDomains), preload 옵션이 있어야 하고 HTTP로 접속 시 HTTPS로 301 리디렉션이 되어야 한다.
나무위키는 HSTS 헤더와 Preload까지 적용되어 있다. #
3. 슈퍼 쿠키
HSTS는 보안 향상을 위해 나온 개념이지만, HSTS를 이용한 '슈퍼 쿠키' 개념이 알려지면서 논란이 되었던 적이 있다. 특정 도메인에 HTTPS 접속을 강제하기 위해 어딘가에 도메인 정보를 기록하는 행위가, 이용자의 방문 웹 사이트 추적 도구로 악용될 위험성이 있기 때문이다. 실제로, PC용 브라우저의 경우 웹 브라우저에 저장된 모든 캐시 파일을 지워야만 설정이 초기화되고, PC가 아닌 임베디드용 브라우저의 경우 아예 지우는 방법이 제공되지 않을 수도 있다.이용자가 정말 세심히 신경 써서 지우지 않는 한 영원히 남아있을 수도 있는 특성 때문에, HSTS에 의해 구워지는 일명 '슈퍼 쿠키'는 구글, 애플, MS, 모질라 등의 모든 웹 브라우저 개발사가 법적 면책 조항을 추가할 정도이다. 실제로 HSTS과 연관되어 있는 웹 브라우저의 보안 취약점이나 소프트웨어 버그를 리포팅하면, 보고 내용 자체에 대한 의견보다 이용 약관에 명시된 면책 조항이 답으로 돌아올 가능성이 높다.
이와 유사한 개념에 있어 HSTS가 도메인 버전이라면 인증서 버전으로는 HPKP가 있는데, HPKP 역시 HSTS의 주요 우려 사항을 그대로 가지고 있다.
다만 1월 26일 모질라 파이어폭스에서 슈퍼 쿠키를 통한 추적을 방지하는 업데이트를 적용하였다.
[1]
HTTPS 접속 시 특정 인증서만 사용하도록 강제할 수도 있다. 관련 개념으로 HPKP(HTTP Public Key Pinning)가 있다.
[2]
이때 HTTP 응답코드 302를 이용한 페이지 이동(리다이렉션)이 일어난다.
[3]
인증서가 만료되는 등의 상황에서도 HSTS 미적용 사이트는 예외 옵션으로 사이트를 접속할 수 있는 경로라도 있지만, HSTS가 적용된 사이트는 예외 옵션조차 주어지지 않는다. 즉, 유효한 인증서가 적용되어 있는 보안 연결이 아니면 아예 브라우저 차원에서 접속이 불가하게 된다는 의미이다.