Study Record

[암호] HTTPS 패킷 분석 - 복호화 작업 본문

암호

[암호] HTTPS 패킷 분석 - 복호화 작업

초코초코초코 2021. 12. 13. 10:44
728x90

 

※ HTTPS 패킷을 복호화하는 작업은,

인증서에 포함되어 있는 공개키로 데이터를 암호화 하지 않고, 동적으로 생성되 키 쌍을 이용하여 데이터를 암호화할 수도 있기 때문에 서버의 비밀키를 보유하고 있다고하더라도 서버의 모든 SSL 트래픽을 복호화할 수 없다.

 

패킷 분석 실습

웹서버(Linux) : 192.168.10.200

클라이언트/사용자(Kali) : 192.168.10.60

 

☞ 사용하는 프로그램

wireshark 

curl

tcpdump

 

[Linux] 웹서버 설정

(설치) # yum install httpd mod_ssl

# systemctl restart httpd

# systemctl status httpd

 

[Kali]

㉮ 먼저, 상대편과 https 통신을 할 때 기본적으로 사용하는 암호화 알고리즘 정보를 알아낸다.

# crul -k -v 192.168.10.200

-k : 인증서 무시

-v : you can get information about which cipher and TLS version are negotiated

암호 알고리즘 정보는 ECDHE-RSA-AES256-GCM-SHA384 이다.

 

㉯ 이제 복호화할 패킷을 잡을 차례다.

[TERM 1] # mkdir -p ~/packet ; cd ~/packet

[TERM 1] # tcpdump -w https-sample.pcap -s 0 -i eth0 host 192.168.10.200

tcpdump -w <패킷을 캡처할 파일 이름> -i <패킷을 캡쳐할 인터페이스 이름> host <패킷을 캡쳐할 filter 규칙>

tcpdump -s 0 : You should limit snaplen to the smallest number that will capture the protocol information you're interested in.  Setting snaplen to 0 sets it to the default of 262144

[TERM 2] # export SSLKEYLOGFILE=$HOME/packet/ssl_log.txt

[TERM 2] # curl -k -X GET --cipher ECDHE-RSA-AES256-GCM-SHA384 https://192.168.10.200

-k : 인증서 무시

--cipher <암호 알고리즘> : 통신할 때 사용할 암호 알고리즘을 직접 설정한다.

-X <method> : 통신 방식을 지정한다.

crul 명령어를 이용하여 암호 알고리즘을 ㉮에서 미리 알아낸 알고리즘 정보와 같은 걸로 GET 방식으로 인증서는 무시하면서 요청한다.

export SSLKEYLOGFILE 을 설정하여 SSL 통신 시 키를 저장할 파일 경로를 설정한다. $HOME/packet/ssl_log.txt 에는 키값이 들어갈 것이다.

[TERM 1] # <Ctri + c>

tcpdump로 패킷 캡처를 했던 것을 그만둔다.

이렇게 ~/packet/https-sample.pcap 에는 HTTPS 패킷이 들어있고, ~/packet/ssl_log.txt($HOME/packet/ssl_log.txt) 파일에는 HTTPS 통신할 때 사용했던 키가 들어있을 것이다.

 

㉰ 이제 wireshark 를 작동시켜 HTTPS 패킷과 키를 가지고 복호화 작업을 해본다.

# wireshark &

Edit > Preferences > Protocols > TLS (Pre)-Master-Secret log filename 에서 키가 저장된 파일(~/packet/ssl_log.txt)을 로드한다.

저장해둔 HTTPS 패킷을 연다. (~/packet/https-sample.pcap)

+ 패킷을 여는 과정은 위와 같이 안하고 아래의 명령어로 대체할 수 있다.

# wireshark ~/packet/https-sample.pcap 

 

+ 복호화된 패킷을 볼 수 있다!

+ 다음은 키를 로드하기 전, 암호화된 패킷의 내용이다.

728x90