13 Security Lab

Wireshark HTTPS 분석방법 본문

Computer Security/Security Articles

Wireshark HTTPS 분석방법

Maj0r Tom 2022. 3. 15. 19:37

Wireshark HTTPS Decryption
Wireshark TLS Decryption 
Wireshark SSL Decryption 

Wireshark HTTPS 분석방법 이해에 대해서 다룬다.

SSL 통신 및 HTTPS 송수신 데이터를 복호화 분석하는 방법 정리한다.

Wireshark 에서 이를 복호화해서 평문형태로 보여주는 기능을 지원한다.

 

Decryption 방법

Wireshark는 적절한 키가 제공되면 TLS Decryption 가능. 지원 가능한 방법은 아래 두가지이다.

  • RSA 개인 키를 사용한 복호화.     . . . 1) 
  • 세션별 ​​비밀키 로그 파일( #Usingthe (Pre)-Master Secret ).     . . . 2)
Wireshark TLS Decryption 문서참고
https://wiki.wireshark.org/TLS#tls-decryption

 

 

Edit >  Preferences.. 선택

Protocol > TLS 선택, 

 

RSA key 방식

RSA keys list 에서 선택, 서버의 Private Key (pem key) 를 넣어주면 된다.

서버의 PrivateKey를 가지고 있고, 서버가 RSA공개키 방식을 사용하는 경우 사용가능 (서버관리자 또는 테스트 분석에 사용가능할 듯)

# https_ssl.key
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQCmhjzTShoeFYLg
...
+ci6O0z5TLaxlFJxlBRJcv2AvLjp+dAC8XtabW1HwL0xXkdkNontZmiVUXwkEdRv
cFcv8m+/swQeAcpUi/qsQZY=
-----END PRIVATE KEY-----

*클라이언트 인증서나 인증 기관(CA) 인증서가 아님에 주의

RSA Key를 이용하는 경우 제한사항

  • Diffie Hellmann (DHE) ciphers 를 이용하는 경우 안됨

Elliptic-curve Diffie–Hellman (ECDHE)

 

RSA

  • New TLS 1.3 protocol 이상은 안됨 (TLS 1.2 버전 이하)
    • TLS 1.3 이상을 지원하지 않는 것이 아니라 TLS1.3 프로토콜 상 RSA 키를 사용할 수 없음

만약 TLS1.3 or DHE를 사용한 상태에서 Private RSA Key를 사용한 Decryption을 시도한다면?
Wireshark TLS Decryption TLS Debug file log 를 보면 MasterKey를 찾을 수 없어 실패했다는 로그가 찍힌다.

 

How to check what SSL/TLS protocols are enabled in Apache configuration?
[ CentOS/RHEL-based distributions ]
> grep SSLProtocol /etc/httpd/conf.d/ssl.conf
SSLProtocol +TLSv1.2
[ Debian/Ubuntu-based distributions ]
> grep -ir SSLProtocol /etc/apache2/*
/etc/apache2/mods-available/ssl.conf:SSLProtocol +TLSv1.2 +TLSv1.3

*OpenSSL 1.1.1 부터 TLS1.3 공식 릴리즈에 반영 (OpenSSL 1.0.1 부터 TLS1.2 반영)

# Apache Version
apache2 -version

# Output
Server version: Apache/2.4.41 (Ubuntu)
Server built:   2020-04-13T17:19:17

# OpenSSL Version
openssl version

# Output
OpenSSL 1.1.1f  31 Mar 2020

 

강제로 TLS 특정버전 사용하게 하는 세팅

[ Apache ]

/etc/apache2/mods-available/ssl.conf

#   The protocols to enable.
#   Available values: all, SSLv3, TLSv1, TLSv1.1, TLSv1.2
#   SSL v2  is no longer supported

# SSLProtocol all -SSLv3 # 주석처리 하고 작성
SSLProtocol -all +TLSv1.2 # 지원되는 프로토콜 전부(all)을 제외하고 TLSv1.2 추가
# 결국 TLSv1.2만 사용하도록 강제함

 

[ XAMPP ] 

 /opt/lampp/etc/httpd.conf

# line 488
# Virtual hosts
Include etc/extra/httpd-vhosts.conf

 /opt/lampp/etc/extra/httpd-vhosts.conf

# Non-SSL or http hosts                                                                                                                                                                                                            
<VirtualHost *:80>                                                                                                                                                                                                                 
       DocumentRoot "/opt/lampp/htdocs/"                                                                                                                                                                                           
       ServerName localhost                                                                                                                                                                                                        
                                                                                                                                                                                                                                   
</VirtualHost>                                                                                                                                                                                                                     
                                                                                                                                                                                                                                   
<VirtualHost *:80>                                                                                                                                                                                                                 
       DocumentRoot "/opt/lampp/htdocs/test/"
       ServerName test.local.com
</VirtualHost>

# SSL or https Hosts
<VirtualHost *:443>
       DocumentRoot "/opt/lampp/htdocs/test/"
       ServerName test.local.com
       SSLEngine on
       SSLCertificateFile "/home/username/Documents/https_ssl.crt"
       SSLCertificateKeyFile "/home/username/Documents/https_ssl.key"
       #SSLProxyProtocol -all +TLSv1.2
       SSLProtocol -all +TLSv1.2
       SSLCipherSuite AES256-SHA
</VirtualHost>

*AES256-SHA : TLS_RSA_WITH_AES_256_CBC_SHA

tlsv1.2 설정 후 통신패킷 확인

 

CipherSuite RSA_AES_256_CBC_SHA 적용 확인

 

Test Apache

# Test Apache for TLS 1
curl -I -v --tlsv1 --tls-max 1.0 https://www.example.com/

# Test Apache for TLS 1.1
curl -I -v --tlsv1.1 --tls-max 1.1 https://www.example.com/

# Test Apache for TLS 1.2
curl -I -v --tlsv1.2 --tls-max 1.2 https://www.example.com/

# Test Apache for TLS 1.3
curl -I -v --tlsv1.3 --tls-max 1.3 https://www.example.com/

 

 

 

세션별 비밀키 방식

(Pre)-Master-Secret log filename 에서 키로그 파일 선택

 

키로그 파일을 생성하는 방법 

키로그 파일을 생성하는 방법 1 환경변수

환경변수에서 SSLKEYLOGFILE 경로를 설정 (Key: "SSLKEYLOGFILE", Value: "키로그파일 생성 될 경로")

 

*SSLKEYLOGFILE 
The key log file is a text file generated by applications such as Firefox, Chrome and curl when the SSLKEYLOGFILE environment variable is set. To be precise, their underlying library (NSS, OpenSSL or boringssl) writes the required per-session secrets to a file.
SSLKEYLOGFILE 은 환경 변수가 설정 되면 Firefox, Chrome 및 curl과 같은 응용 프로그램에서 생성되는 텍스트 파일 입니다. 정확히 말하면 기본 라이브러리(NSS, OpenSSL 또는boringssl)가 필요한 세션별 비밀을 파일에 기록합니다.

 

키로그 파일을 생성하는 방법 2 Powershell로 설정

PS > SetX SSLKEYLOGFILE "$(get-location)\ssl.log"
Verify that the variable has been set in a separate powershell window (SetX does not apply to the current window).

PS > Get-ChildItem ENV: | findstr SSLKEYLOGFILE
SSLKEYLOGFILE                  C:\Users\rj\Desktop\ssl.log

 

키로그 파일을 생성하는 방법 2 어플리케이션 옵션으로 설정

"C:\Program Files\Google\Chrome\Application\chrome.exe" --ssl-key-log-file=%USERPROFILE%\sslkey.log

 



키로그 파일 생성이 안되는 경우 해결 방법

1) (stackoverflow.com article) You MUST be sure chrome totally be closed. And then reopen a fresh new chrome instance. Chrome has a default options let chrome run in background enabled.
Double check your taskbar of windows or processes lists to make sure there's no chrome instance exists.
That's why --ssl-key-log-file don't working, chrome stills alive after you click exit button.

2) (Wireshark Docs) SSLKEYLOGFILE필요에 따라 경로를 변경하고 Chrome용으로 바꿉니다 firefox. chrome이 메커니즘은 Safari, Microsoft Edge 및 기타 TLS 라이브러리(Microsoft SChannel/Apple SecureTransport )가 이 메커니즘을 지원하지 않기 때문에 작동하지 않습니다. 이 메커니즘은 웹 브라우저 이외의 애플리케이션에서도 작동하지만 애플리케이션에서 사용하는 TLS 라이브러리에 따라 다릅니다.

 

Decrypted TLS Example

Decrypted TLS packet in Wireshark

 

 

Reference

hxxps://wiki.wireshark.org/TLS#tls-decryption  

hxxps://accedian.com/blog/how-to-decrypt-an-https-exchange-with-wireshark/ 

hxxps://unit42.paloaltonetworks.com/wireshark-tutorial-decrypting-https-traffic/  

apache.tutorials24x7.com/blog/how-to-enable-tls-1-2-and-tls-1-3-in-apache-web-server 

hxxps://www.lesstif.com/software-architect/curl-ssl-tls-version-113346985.html 

hxxps://wiki.openssl.org/index.php/TLS1.3#Groups 

hxxps://blog.didierstevens.com/2020/12/14/decrypting-tls-streams-with-wireshark-part-1/

 

Comments