HTTPS 복호화하는 세 가지 방법

기술을 설명하마!·2024년 2월 13일
0

WEB

목록 보기
1/1

HTTP 프로토콜은 암호화가 되어있지 않으므로 보안이 취약하다.
그래서 HTTPS로 안전하게 암호화를 한다.

w3techs.com에서 확인 된 24년 1월 웹사이트 HTTPS 사용 추이는 85.2%이며, 이는 한국에 국한되지 않는 글로벌 추이이다.

하지만 WEB에 대한 이해를 돕기 위해 우리는 복호화하여 내용을 볼 필요가 있다.
그래서 HTTPS 패킷을 복호화하는 3가지 방법을 소개하려고 한다.

전체 Flow

우선 우리가 복호화의 방법을 알기 위해서는 HTTPS(RSA) 흐름을 인지할 필요가 있다.
DH(Diffie–Hellman)에 대해서는 추가 보완 예정

1. 개인키 사용

WEB 운영자가 아니라면 실제 개인키를 획득하기가 어렵다. 하지만 OpenSSL 을 적용해서 테스트를 한 경우라면 Private.key 를 획득은 쉽다.
OpenSSL로 키를 발급 받는 방법도 긴 편이므로 나중에 적어보도록 한다.

우선 개인키를 획득했다면 Wireshark에 넣어주면 된다.
RSA Key list에서 주의할 점은 HTTPS이여도 Protocol은 HTTP로 기입을 해야한다.

위와 같이 등록을 하면 열어진 상태에서는 reload 를 한다.

하지만 복호화된 결과는 보여지지 않았다.
이유는 암호화 프로토콜이 TLS 1.3으로 맺어졌고, TLS 1.3의 Cipher suite(보안 알고리즘)은 전부 DH(Diffie–Hellman)으로 개인키로 복호화가 불가하다.

웹 서버의 설정을 암호화 프로토콜은 TLS 1.2로 보안 알고리즘은 TLS_AES_256_GCM_SHA384으로 변경하여 RSA 키 교환 방식으로 변경하였다.

RSA key list 적용

RSA key list 미적용

실제로 테스트를 진행 시 보안 알고리즘 선택을 키 교환 방식을 RSA 임의의 알고리즘으로 적용 시 실패할 수 있다. 이는 브라우저에서 지원하는 보안 알고리즘의 리스트가 다르며 사용 브라우저와 버전에 따라 상이하다. https://www.ssllabs.com/ [Test your browser] 를 이용하여 간편하게 확인이 가능하다.

복호화 방법 : Flow 이미지 중 ⑧ 개인키를 이용

2. Proxy Tool(Burp suite) 사용

대표적인 프록시 툴이다. 개인키의 등록이 아닌 신뢰할 수 있는 루트 인증 기관 인증서를 PC에 설치하는 방법이다.

위와 같이 PortSwigger 인증서를 루트 인증서에 설치 시 완료
브라우저는 burp suite 자체 Proxy 탭의 Open browser에서 이용해야 한다.

Intercept on 타이밍은 변조 직전에 On으로 활성화를 해야하며, Intercept 중에는 브라우저 페이지가 넘어가지 않는다.

하지만 이 또한 보안알고리즘의 키 교환방식이 DH(Diffie–Hellman)인 경우 제한이 있다.

DH 알고리즘 사용 시불가 화면

복호화 방법 : Flow 이미지 중 ⑥을 이용

시연을 위해서 서버의 보안 알고리즘을 변경 함

3. Pre-master-scret 키를 사용

[Window 가이드]

윈도우 키를 누른 후에 '환경 변수' 를 입력하여 '시스템 속성'을 열어준다

변수 이름은 'SSLKEYLOGFILE' 로 생성하고, 변수 값은 폴더 위치를 포함한 파일 이름까지 설정한다.

[주의] 윈도우 관리자 권한으로 자동으로 폴더를 생성하지 않으므로, 지정한 폴더의 생성이 필요하다.
[주의] 생성이 안되는 경우 재시작 후 브라우저를 열어서 확인이 필요하다.

위와 같이 키가 생긴다면, wireshark 설정에서 아래와 같이 설정한다.

기존의 test1.pcap 의 Pre-master-scret 키가 있어 설정 후 다시 패킷을 불러왔다.

해당 방법이 완벽할 것 같지만, 몇 가지 제한점이 있다.
OS 환경 변수를 사용하였기에, 변수가 설정 된 OS 브라우저를 사용해야한다는 점이다.
(Jmeter나 Postman 같은 Tool 사용 시 Pre-master-scret 키가 생성되지 않으므로 복호화 불가)

복호화 방법 : Flow 이미지 중 ⑨을 이용

이제 HTTPS 를 복호화한 값을 보도록하자.
HTTP/2의 경우 DH(Diffie–Hellman)을 이용하므로 3번째 방법을 꼭 진행해야 한다.

0개의 댓글

관련 채용 정보