어플리케이션

HSTS(HTTP Strict Transport Security)에 대해 알아보겠습니다.

forward error correction Circle 2025. 1. 9. 08:16
반응형

Ⅰ. HSTS(HTTP Strict Transport Security) 란?

웹사이트가 브라우저와의 모든 통신에서 HTTPS를 강제하도록 설정하는 웹 보안 정책 메커니즘입니다.
HSTS는 HTTP 요청이 발생하지 않도록 제한하며, HTTPS 프로토콜을 통해 암호화된 통신을 보장하여 중간자 공격(MITM)이나 SSL Stripping 공격과 같은 위협으로부터 사용자를 보호합니다.

 

중간자 공격(MITM) : 공격자가 사용자와 서버 간의 통신을 몰래 가로채거나 조작하는 공격 방식

SSL Stripping 공격 : HTTPS 연결을 HTTP로 다운그레이드하여 보안 연결을 무력화하는 중간자 공격의 한 유형

Ⅱ.  HSTS(HTTP Strict Transport Security) 주요 목적

 ⅰ. 강제 HTTPS 사용
     : 브라우저가 HTTP 대신 항상 HTTPS 프로토콜을 사용하도록 강제합니다.
 ⅱ. 중간자 공격 방지
     : HTTPS로 다운그레이드되는 공격(SSL Stripping)을 방지합니다.
 ⅲ. 암호화된 데이터 보호
     : HTTP를 통한 민감한 데이터 전송 위험을 제거합니다.

Ⅲ. HSTS(HTTP Strict Transport Security)  작동 방식

HSTS는 서버에서 브라우저로 전송되는 HTTP 응답 헤더인 Strict-Transport-Security를 통해 동작합니다.
브라우저는 이 헤더를 수신한 후 해당 도메인에 대해 HTTP를 사용하지 않고, HTTPS만 허용하는 정책을 저장합니다.

ⅰ. 초기 접속
사용자가 HTTP로 접속하면 서버가 HTTPS로 리디렉션합니다.


HTTPS 응답에 Strict-Transport-Security 헤더가 포함됩니다.


ⅱ. 정책 저장
브라우저는 HSTS 정책을 저장합니다(지정된 기간 동안 유효).
이후 브라우저는 사용자가 HTTP로 접근하려 할 경우 HTTP 요청을 생략하고 HTTPS로 바로 연결합니다.
ⅲ. 적용 후
HTTP 요청이 완전히 차단되며, HTTPS 외의 프로토콜로는 접근이 불가능합니다.

Ⅳ. Strict-Transport-Security 헤더 구성

 

HSTS는 다음과 같은 HTTP 헤더를 통해 설정됩니다:

Strict-Transport-Security: max-age=31536000; includeSubDomains; preload

헤더 구성 구성 요소

max-age : 브라우저가 HSTS 정책을 기억하는 기간(초 단위).
예: max-age=31536000은 1년 동안 HTTPS만 사용하도록 설정합니다.
includeSubDomains : 해당 도메인의 모든 서브도메인에도 HSTS 정책을 적용합니다.
preload : HSTS 프리로드 목록에 도메인을 등록하여 브라우저가 첫 접속부터 HTTPS를 강제합니다.

 

Ⅴ. HSTS (HTTP Strict Transport Security) 설정 예제

 ⅰ. Apache

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"

 

 ⅱ. Nginx

add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload";

 

ⅲ. Express.js(Node.js)

const helmet = require('helmet');
app.use(helmet.hsts({
  maxAge: 31536000, // 1 year in seconds
  includeSubDomains: true,
  preload: true
}));

Ⅵ. HSTS ( HTTP Strict Transport Security)장·단점

HSTS
(HTTP Strict Transport Security)
장점 단점
1) HTTPS 강제 : 브라우저가 HTTP로의 접근을 완전히 차단하여 보안성을 강화
2) 중간자 공격(MITM) 방지 : SSL 제거 공격과 같은 취약점을 방지
3) 보안 일관성 유지 : HTTPS 연결을 표준으로 설정하여 데이터 무결성과 기밀성을 보장
4) 속도 개선 : HTTPS로 직접 연결하여 리디렉션 속도를 개선합니다.
1) 첫 요청 시 취약성 : 브라우저가 HSTS 정책을 받기 전에는 HTTP로 접속할 가능성이 있습니다. HSTS 프리로드 목록에 도메인을 등록하는 것이 필요합니다.
2) 무효화의 어려움 : HSTS 정책이 적용된 도메인은 설정된 max-age 기간 동안 비활성화하기 어렵습니다.
3) 테스트 환경 제한 : HSTS 정책이 활성화된 도메인에서는 HTTPS 외의 프로토콜을 테스트하기 어렵습니다.
4) 서브도메인 관리 부담 : includeSubDomains 플래그를 설정한 경우, 모든 서브도메인에 HTTPS를 적용해야 하므로 추가 비용이 발생할 수 있습니다.

Ⅶ. HSTS(HTTP Strict Transport Security) Preloading

 웹 브라우저가 특정 도메인에 대해 HTTPS 연결을 기본적으로 강제하도록, 해당 도메인을 브라우저에 미리 등록하는 메커니즘입니다.사용자가 도메인에 처음 접속하기 전에 HTTP 요청이 발생하지 않도록 보장하여, HSTS의 초기 접속 취약점을 보완합니다.

Ⅶ. HSTS(HTTP Strict Transport Security) Preloading 등록 요건

 ⅰ) HTTPS를 지원해야 하며, 모든 HTTP 요청은 HTTPS로 리디렉션되어야 합니다.
 ⅱ) Strict-Transport-Security 헤더에 preload 플래그를 포함해야 합니다.
 ⅲ) HSTS Preload Submission을 통해 등록 가능합니다.

 

Ⅷ. HSTS와 HTTPS 차이점

항목 HTTPS HSTS
역할 웹사이트의 암호화된 통신 제공 HTTPS를 강제하는 정책 제공
구현 방식 SSL/TLS 인증서 사용 Strict-Transport-Security 헤더 사용
보호 수준 HTTPS가 사용되지 않을 가능성 존재 HTTPS 외의 모든 접근을 차단
취약성 첫 HTTP 요청에서 중간자 공격 가능 초기 접속 취약점을 제외한 안전성 보장

 

반응형