woonizzooni

tcpdump SSL/TLS 패킷 복호화 본문

MISC

tcpdump SSL/TLS 패킷 복호화

woonizzooni 2019. 10. 18. 19:22

[관련글]

https://woonizzooni.tistory.com/entry/Wireshark-SSLTLS-패킷-복호화

https://woonizzooni.tistory.com/entry/SSLTLS-패킷-복호화-관련-nss-libnss


이번에는 Linux에서 curl로 생성한 SSL/TLS패킷에 대해 복호화를 해보자.

 

실행 환경 

  • 메시지 유형 : HTTPS
  • 클라이언트 환경
    • 운영체제 : CentOS Linux release 7.7.1908 (Core)
    • 클라이언트 툴 : curl
    • 패킷캡처 툴 : tcpdump

  • 복호화 툴 : wireshark

 

실행 과정

 

1. 테스트 (복호화 희망) 서버 선정 (난 그냥(?) 임의 선정해봄)

   1) https://www.daum.net

   2) https://apis.pooq.co.kr/cf/supermultisections/GN4?... 

 

 

2. 테스트 서버의 SSL연결 방식 확인 및 ciphers값 선정(?)

참고 : 

    SSL ciphers - cURL : https://curl.haxx.se/docs/ssl-ciphers.html

    TLS - cURL :  https://ec.haxx.se/usingcurl-tls.html

  "Using the verbose option, -v, you can get information about 
     which cipher and TLS version are negotiated. 
     By using the 
--ciphers option, you can change what cipher to prefer in the negotiation,
     but mind you, this is a power feature that takes knowledge
     to know how to use in ways that do not just make things worse.
"

 

 

1) curl -v 옵션으로 url 요청

2) 'SSL connection using...' 값으로 위 SSL ciphers url을 참고해서 SSL Ciphers값을 찾는다.

www.daum.net : sa_aes_256_cbc_sha_256

apis.pooq.co.kr : ecdhe_rsa_aes_128_gcm_sha_256

 

 

3. 실행 환경 구성 및 패킷 캡쳐 시작

1) 쉘 접속 & root 로그인

  $ su -

 

2) tcpdump로 패킷 캡쳐
  (default gw interface, 메뉴얼 : https://www.tcpdump.org/manpages/tcpdump.1.html)

모든 패킷

   # tcpdump -w ./aa.pcap -s 0 -i ens33

cf) 특정 서버(ip or domain name)와의 패킷만 필터링

   # tcpdump -w ./aa.pcap -s 0 -i ens33 host www.daum.net  

 

 

4. curl로 HTTPS url 요청 (SSLKEYLOGFILE 변수가 export되어 있는 쉘에서)

 1) 쉘을 하나 더 열고 root 로그인.

 2) 환경 변수 설정 (필요에 따라 rc파일에 등록 후 사용)

   # export SSLKEYLOGFILE=/root/ssl_log.txt

 3) 테스트 서버에 curl로 요청/응답 메시지 송수신

    # curl -X GET --ciphers rsa_aes_256_cbc_sha_256  https://www.daum.net 

    # curl -X GET --ciphers ecdhe_rsa_aes_128_gcm_sha_256 "https://apis.pooq.co.kr/cf/supermultisections/GN..."

 4) ssl_log.txt 파일 내용 확인 (작성되어 있는지)

    # cat ./ssl_log.txt

       # SSL/TLS secrets log file, generated by NSS
       CLIENT_RANDOM d6e01d3d8ebae23d6ad90bc302a186....
       CLIENT_RANDOM d38972503360e5576a16a1cc99808af....

 5) tcpdump 실행 중지.

 

 

5. wireshark 실행 & 설정

1) wireshark를 실행할 PC로 aa.pcap파일과 ssl_log.txt 다운로드

2) wireshark 실행 & ssl_key.txt 파일 등록 ('이글 '참고)

3) wireshark에서 aa.pcap파일 열기

 

복호화 결과

1) www.daum.net의 경우

2) apis.pooq.co.kr의 경우

 

[기타 참고]

위 글은 실시간 복호화가 아닌 경우인데, 실시간 환경 구성도 가능함.

ex) 

curl로 SSL key 로그 파일 생성

> wireshark 환경 구성(네트웍 파일 공유 등)

> 라우터 포트 미러, Docker or 가상OS에서 트래픽 발생시키고 호스트 outgoing 인터페이스 캡쳐 등...

 

Comments