TLS(SSL) 연결이 어떤 알고리즘으로 선택되어 암복호화가 진행된건지 확인하는 방법
- 작성자
- 고친과정
2018년 7월 23일 : 처음씀
1.1. 개요
- 사전준비
- Wireshark 를 적절한 PC에 설치합니다. (pcap 포함)
- 장비에서 원하는 TCP 연결 포트에 대한 캡쳐를 tcpdump를 이용하여 캡쳐합니다.
# tcpdump 'tcp port <캡쳐할 TCP 포트번호>' -i <캡쳐할 인터페이스명> -w <캡쳐된 내용을 저장할 pcap 파일 저장경로> => 만약 캡쳐할 인터페이스명을 모르거나 여러개인 경우 any 로 지정할 수 있습니다. => '-i any'
예) https://:8443 에 대한 캡쳐 # tcpdump 'tcp port 8443' -i eth1 -w /tmp/mytrace.pcap
- 캡쳐(HTTPS/443) 예제 파일 : https://www.minzkn.com/public/sample/protocol/https/https.pcap
- tcpdump 캡쳐준비가 되면 실제 연결을 수행합니다. (정확히는 첫 연결부가 캡쳐되어야 합니다.)
- 캡쳐된 파일은 wireshark 가 설치된 PC로 다운로드 받습니다.
- Wireshark로 캡쳐된 pcap 파일을 Open 합니다.
- (중요) Wireshark 의 "Analyze > Decode As"를 선택하고 "Current" 항목에 "HTTPS"인 경우 "HTTP" 검색 후 "SSL"검색하여 확인을 누릅니다.
- 이제 캡쳐된 내용이 TLS 해석된 사항으로 보이게 됩니다. 마찬가지로 "SSH"인 경우 "SSH" 검색 후 "SSL"검색하여 확인 누르는 식으로 진행할 수 있습니다.
- Decode As 를 잘 선택해야지만 올바른 해석뷰가 보입니다. 이는 Application layer 이기 때문에 Wireshark가 직접 판단할 수 없기 때문에 사용자가 지정해야 합니다.
- 이제 "Info" 항목에 "Client Hello" 인 부분을 찾아서 세부 내용으로 "Cipher Suites"를 찾아보면 Client 에서 지원가능한 목록이 확인됩니다.
- 그리고 "Info"항목에 "Server Hello"인 부분을 찾아서 "Cipher Suites"를 보면 최종 서버로부터 선택된 알고리즘이 확인 가능합니다.
- 아래 그림에서 보면 우리 장비의 웹 서버측에서는 Server Hello 에서 AES128GCM-SHA256 이 선택되었다는 것을 알 수 있습니다.
- 아래 그림에서 보면 우리 장비의 웹 서버측에서는 Server Hello 에서 AES128GCM-SHA256 이 선택되었다는 것을 알 수 있습니다.
[PNG image (325.76 KB)]
tshark -nr mytrace.pcap -Y "ssl.handshake.ciphersuites" -Vx > ssl.output.txt Secure Sockets Layer SSL Record Layer: Handshake Protocol: Client Hello Content Type: Handshake (22) Version: TLS 1.0 (0x0301) Length: 512 Handshake Protocol: Client Hello Handshake Type: Client Hello (1) Length: 508 Version: TLS 1.2 (0x0303) Random GMT Unix Time: Jun 28, 2097 09:17:21.000000000 W. Europe Daylight Time Random Bytes: 577f9fb99f0e042633046e9b969fd957b903edb4bbb77449... Session ID Length: 32 Session ID: 888489fa25a177efb30c21cc89b6e447ae680357a0b762b6... Cipher Suites Length: 32 Cipher Suites (16 suites) Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 (0xc02b) Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (0xc02f) Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA (0xc00a) Cipher Suite: TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA (0xc009) Cipher Suite: TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA (0xc013) Cipher Suite: TLS_ECDHE_RSA_WITH_AES_256_CBC_SHA (0xc014)
1.2. 참고자료
- 인증서 만들기
- https://osqa-ask.wireshark.org/questions/62098/how-to-find-out-which-ssl-cipher-suite-is-being-used
- Wireshark 로 볼 때 checksum 오류가 뜰 경우 해당 wireshark 실행환경의 TCP offload (TSO => 예: "ethtool -K eth0 tso off gso off") 를 끄고 해보세요.
- checksum offload 기능이 활성화 된 장비에서 packet capture 를 하는 경우 checksum 오류가 표시될 수 있으며 문제가 있는 것이 아니고 capture 단계가 checksum offload 계산보다 먼저 수행되어 발생되는 것으로 이해하시면 됩니다.
- https://www.roe.ch/SSLsplit
- OpenSSL Cipher Suite Name mapping