일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- pytest
- x64
- Analysis
- data distribution
- MySQL
- TensorFlow
- error
- Python
- NumPy Unicode Error
- javascript
- idb2pat
- h5py.File
- commandline
- error fix
- idapython
- debugging
- why error
- open office xml
- Injection
- hex-rays
- ida
- Ransomware
- mock.patch
- ecma
- idapro
- svn update
- 포인터 매핑
- Rat
- malware
- ida pro
- Today
- Total
13 Security Lab
Wireshark HTTPS 분석방법 본문
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 를 이용하는 경우 안됨
- 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
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
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/