앵하니의 더 나은 보안

SSL strip과 HSTS 본문

보안 기술/WEB

SSL strip과 HSTS

앵한 2022. 8. 12. 19:16

SSL strip을 다시 공부하다가 SSL strip에 안전하기 위해서 HSTS를 설정해야된다는데

웹 서버에 HSTS를 적용하는게 어떻게 조치가 된다는건지 이해가안됐다.

 

뭐 HSTS 정보를 웹 서버에서 HTTP Response Header로 보낸다는데,

'https에서 http로 바꾼것처럼 해커가 HSTS 관련 HTTP 헤더를 없애버리면 그만이잖아' 싶어서 한번 자세히 찾아봤다.

 

기본적으로 SSL strip은 아래의 과정으로 진행된다.

1. hacker가 victim에게 ARP spoofing 수행

2. 임의의 웹 서버 A에 http 프로토콜로 접근 시도(일반적으로 브라우저의 URL 입력으로 접근할 경우 http 사용),

ARP spoofing 된 상태이므로 네트워크 패킷을 hacker에게 송신

3. 해커는 수신된 패킷을 그대로 웹 서버 A 송신하여 hacker와 웹 서버 A가 통신 수행

4. 만약 victim에게 노출되는 HTTP 응답 내용 중, https 링크가 존재할 경우 http로 바뀌치기하여 클라이언트에게 전달, https로 접근을 의도했던 중요 서비스(로그인, 회원가입...)를 victim은 http로 접근할 수 밖에 없는 환경에 노출

5. 해당 환경에서 중요 서비스에서 발생하는 데이터(패스워드, 주민등록번호, ...)를 평문으로 탈취

 

그러니까 웹 서버에서 HSTS를 적용하면 이상태에서 뭐가 달라지냐는 거다.

그냥 똑같이 웹 서버에서 hsts로 response 헤더에 담아서 넘기면 다시 hacker는 response 헤더에 있는 hsts 설정을 제거해

클라이언트한테 넘기면 되잖아 라고 생각했다.

사실 맞는말이다.

 

근데, response 헤더의 hsts 설정을 제거하려면 사실 다음과 같은 2가지 전제조건이 더 필요하다.

 

1. 접근하는 웹 서버에 HSTS가 설정되지 않아야한다.

혹은 설정되어 있더라도 클라이언트에서 HSTS 설정기한이 만료된 상태거나 최초로 접근하는 웹 서비스여야 한다.

웹 서버에서 HSTS 설정이 돼 있을 경우, 클라이언트가 해당 웹 서버에 최초 접근했을 때, 브라우저는 그 사실을 기억해놓는다. HSTS가 설정된 웹 서버에 최초 접근 했을 때의 HTTP Response는 다음과 같다.

HTTP/1.1 200 OK
Strict-Transport-Security: max-age=15552000; preload
Pragma: no-cache
X-XSS-Protection: 0
X-Frame-Options: DENY
.
.
생략

이때 브라우저는 Strict-Transport-Security 헤더를 확인하고 max-age의 기한(초단위) 만큼 해당 도메인의 HSTS 정보를 기억한다.

그 후 HSTS 정보가 저장된 웹 서버에 다시 접근하려 할 경우에 클라이언트가 http로 접근하려해도 브라우저가 https 통신으로 변경한다. victim이 통신을 시작할 때 부터 https를 사용한다면 SSL Strip을 수행할 수 없다.

 

2. victim이 접근하려는 웹 서버의 도메인이 브라우저의 HSTS Preload List에 포함되지 않아야한다.

우리가 사용하는 메이저 브라우저(IE, Chrome, Mozilla, MSEdge, Whale...)들은 기본으로 가지고있는 HSTS 리스트가 존재한다. 만약 클라이언트가 브라우저에서 HSTS list로 존재하는 도메인으로 접근한다면, 브라우저가 HTTPS를 붙여준다.

그래서 victim이 HSTS Preload List 포함된 도메인에 접근하는 경우 브라우저가 자동으로 https 통신을 수행하기 때문에 SSL strip 공격을 수행할 수 없다.

 

정리하자면 SSL Strip 공격이 유효하려면 다음과 같은 전제조건이 요구된다.

  1. ARP Spoofing이 가능해야하고, 클라이언트가 ARP Spoofing을 인지하지 못해야함
  2. 웹서버에서의 HSTS 미설정 or HSTS가 설정돼있더라도 최초 접근하는 상황 or 브라우저에서 HSTS 정보 만료
  3. victim이 사용하려는 웹 서버의 도메인이 브라우저의 HSTS Preload List에 미포함돼 있거나 victim이 HSTS Preload List도 지원하지 않는 마이너 브라우저를 사용하도록 기도

 

... 결론

사족이 많이 붙는 공격기법은 실효성이 있다 보긴 힘들다

 

결국 victim이 전제조건에 부합하기를 기도메타로 공략할 수 밖엔 없다.

사실 뭐 요즘같은 환경에서는 유명무실하다고 봐도 무방하지 않나 싶다.

만약 SSL Strip을 사용한다면 시나리오로 엮어 충분히 사용할 수 있지만

저 전제조건들을 만족시키려 많은 사전작업들이 요구될 것으로 보인다.

'보안 기술 > WEB' 카테고리의 다른 글

JWT 검증 우회 +α  (0) 2023.06.09
CSRF 취약점과 대응방안  (0) 2022.08.22
WEB Ahnlab Safe Transaction bypass  (20) 2022.08.12
X-XSS-PROTECTION bypass(X-XSS-Nightmare, XXN)  (0) 2022.07.18
JWT  (0) 2022.07.18
Comments