와이어샤크(Wireshark)를 이용하여 SSL 트래픽 복호화


와이어샤크(Wireshark)를 이용하여 SSL 트래픽 복호화

SSL으로 암호화된 데이터를 Wireshark으로 복호화 하는 방법에 대해서 설명하도록 합니다.
직접 사용하고 있는 비밀키 파일과 패킷 데이터를 이용하여 복호화 활 수 있지만, wireshark의 위키 페이지에서 제공되는 샘플을 이용하여 복화화 해보도록 하겠습니다. 샘플 파일은 아래의 링크에서 다운 받으실 수 있습니다.

snakeoil2_070531.tgz

직접 패킷 구조를 분석 하는 프로그램을 개발하시거나, 직접 패킷을 수집하는 프로그램을 개발 하실 경우 아래 페이지의 내용을 참고해 주시기 바랍니다.

pcap 파일 구조 분석 예제 / libpcap 예제 기본 사용법

그리고 저장된 SSL/TLS트래픽에서 서버의 인증서의 내용을 추출하고자 하시는 경우, 아래의 글을 참고해 주시기 바랍니다.

와이어샤크 인증서 추출

1. wireshark 실행

wireshark를 실행하여 rsasnakeoil2.cap 파일을 엽니다.

데이터가 암호화 된 것을 확인 하실 수 있습니다.

2. 비밀키 설정

[Edit] – [Preferences] 팝업 윈도우에서 [Protocols] – [SSL]를 선택하면 다음과 같은 설정 화면이 나타납니다.

이 곳에서 [RSA Keys list] 의 [Edit] 버튼을 클릭하여 비밀키 정보를 추가하는데, 예제 파일을 복호화 하기 위해서는 아래와 같이 입력합니다.

IP address : SSL 서버의 아이피 주소를 IPv4 또는 IPv6 형태로 입력합니다.
Port : 포트 번호입니다.
Protocol : 복호화할 네트워크 데이터의 프로토콜 이릅입니다. 주로 http 또는 data 를 사용합니다.
Key File : RSA 비밀키 파일 경로입니다.

3. 복호화 된 값 확인

패킷이 캡쳐된 리스트를 확인하면 초록색으로 복호화 된 데이터를 확인 하실 수 있습니다.

4. 참고

서버의 비밀키를 보유하고 있다고하더라도, 서버의 모든 SSL 트래픽을 복호화 할 수 없습니다.

왜냐하면 인증서에 포함되어 있는 공개키로 데이터를 암호화 하지 않고, 동적으로 생성되 키 쌍을 이용하여 데이터를 암호화 할 수도 있기 때문입니다.

다음 화면은 Cipher Suites 에서 최종적으로 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 으로 사용된다는 것을 나타냅니다.

키 교환 알고리즘은 RSA, DH, DHE, ECDH, ECDHE 등을 제공하는데, ECDHE 또는 DHE 등이 포함된 키교환 방식은 인증서의 공개키를 이용하여 데이터를 암호화 한 것이 아니고, 동적으로 키 쌍을 생성하여 암호화 한것이기 때문에 서버의 비밀키로 복호화 하실 수 없습니다.

해당 패킷을 복호화 하기 위해서는 브라우저에서 해당 키교환 방식을 비활성화 하신 다음에 테스트를 하셔야 합니다.

( 본문 인용시 출처를 밝혀 주시면 감사하겠습니다.)