일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- RTMP
- golang
- ebpf
- Sysinternals
- ffmpeg
- HLS
- wireshark
- nginx-media-server
- spring cloud config
- configmap
- dart
- Pod
- Python
- Kubernetes
- Windows10
- aws
- 행정구역분류
- aws cli
- VSCode
- deployment
- namespace
- Android
- android studio
- docker
- Java
- Shell script
- kubectl
- macos
- Flutter
- service
- Today
- Total
woonizzooni
tcpdump SSL/TLS 패킷 복호화 본문
[관련글]
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 인터페이스 캡쳐 등...
'MISC' 카테고리의 다른 글
[VSCode] XDebug PHP 디버깅 환경 설정 (1) | 2019.11.12 |
---|---|
SSL/TLS 패킷 복호화 관련 (nss, libnss ...) (0) | 2019.10.18 |
"VMware Workstation Pro은 Windows에서 실행할 수 없습니다" (0) | 2019.10.18 |
MacOS 환경에서 vim 환경 설정 (0) | 2019.10.15 |
Windows10 환경에서 vim 환경 설정 (0) | 2019.09.17 |