일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- CustomScrollView
- data
- textview
- binding
- LifeCycle
- textfield
- Navigation
- android
- DART
- Compose
- Dialog
- Flutter
- 앱바
- Coroutines
- Kotlin
- viewmodel
- 안드로이드
- drift
- Button
- TEST
- livedata
- scroll
- ScrollView
- 계측
- intent
- 테스트
- 앱
- appbar
- activity
- tabbar
- Today
- Total
Study Record
[암호] HTTPS 패킷 분석 - 복호화 작업 본문
※ 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
+ 복호화된 패킷을 볼 수 있다!
+ 다음은 키를 로드하기 전, 암호화된 패킷의 내용이다.
'암호' 카테고리의 다른 글
[암호] GPG CMD (0) | 2021.12.13 |
---|---|
[암호] 디지털 서명 (0) | 2021.12.13 |
[암호] Window에서 private key를 가지고 리눅스 서버 접속 - putty (0) | 2021.12.10 |
[암호] 메시지 인증 코드(MAC) (0) | 2021.12.10 |
[암호] Window 사용자 암호 크랙 - chntpw CMD (0) | 2021.12.10 |