앵하니의 더 나은 보안

MITM Proxy를 통해 SSL/TLS 소켓 통신의 복호화는 가능한가 본문

보안 기술/Network

MITM Proxy를 통해 SSL/TLS 소켓 통신의 복호화는 가능한가

앵한 2024. 5. 19. 18:41

의문

HTTPS 패킷 뿐만 아니라 일반 TCP 통신에 SSL/TLS를 씌운 데이터에 대한 복호화를 MITM Proxy는 수행해낼 수 있을까?

 

물론 할수있다.

못할 이유가 없다. HTTPS를 복호화해낸 요령 그대로 SSL/TLS 통신을 복호화 해내면 된다.

라고 생각했다.. 일단 TLS 소켓 통신 복호화 시연을 어떻게 했는지 한번 보자.

 

환경 구성

시연을 위해 TLS 소켓 통신을 수행하는 소스코드를 작성한다.

import socket
import ssl

# SSLContext 생성
context = ssl.SSLContext(ssl.PROTOCOL_TLS_SERVER)  # 필요한 프로토콜에 맞게 선택
context.load_cert_chain(certfile="server.pem", keyfile="server.key")  # 키와 인증서 파일 지정

# 일반 TCP 소켓 생성
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('192.168.139.107', 12345))
server_socket.listen(1)

try:
    print("서버: 클라이언트 연결 대기 중...")
    client_socket, addr = server_socket.accept()

    # SSL/TLS 설정
    ssl_socket = context.wrap_socket(client_socket, server_side=True)

    data = ssl_socket.recv(1024)
    print("클라이언트로부터 받은 데이터:", data.decode())

    message = "Hello, client!"
    ssl_socket.send(message.encode())

    ssl_socket.close()
    client_socket.close()
finally:
    server_socket.close()

🔺 TLS 소켓통신 서버 소스

 

import socket
import ssl

context  = ssl.create_default_context()
context.check_hostname  = False
context.verify_mode  = ssl.CERT_NONE
ssl_socket  = context.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
ssl_socket.connect(('192.168.139.107',12345))

message = "Hello, server"
ssl_socket.send(message.encode())

data = ssl_socket.recv(1024)
print("서버로부터 받은 데이터:",data.decode())

ssl_socket.close()

🔺 TLS 소켓통신 클라이언트 소스

 

위 소스코드를 사용해 TLS 소켓통신 서버/클라이언트 간 통신을 정상적으로 해내면
아래와 같은 데이터를 서로 확인할 수 있다.

소켓 서버에서 클라이언트로부터 받은 데이터
소켓 클라이언트에서 서버부터 받은 데이터

 

TLS 소켓 통신 복호화

이제 위 TLS 소켓 통신을 사용해 MITM proxy가 HTTPS 이외에도 다른 TLS 통신을 복호화 할 수 있는지 테스트 해보겠다.

 

테스트를 위해 환경을 구성하는 방법은 간단하다.
모바일 단말기의 PCAPdroid에서 MITM 애드온 기능을 사용,
TLS 복호화 대상 패키지에 파이썬 터미널을 실행 시킬 수 있는 어플리케이션 지정한다.

 

패킷을 캡처할 어플리케이션을 지정한다.

패킷 캡처 진행 및 MITM 프록시 동작 상태를 확인한다.

 

TLS 클라이언트 소스코드가 작성된 파일을 Pydroid3(파이썬 3 소스코드를 동작시켜주는 어플리케이션)로 실행한다.


소스코드를 동작시킨다.

 

그리고는 알 수 없는 이유로 client Hello/server Hello 데이터가 유실돼 서버와 클라이언트 간 주고받는 데이터가 사라진다.

 

위 데이터 송수신 과정과 내용을 확인하기 위해 패킷 캡처 파일 및 ssl 키 파일을 단말기로부터 추출해
wireshark로 확인해보면 소켓 통신 간 송수신 된 데이터를 평문으로 확인해 볼 수 있다.

 

 

그렇다면 중간에 MITM Proxy 서버를 끼면 왜 소켓이 끊기고서는 데이터 유실이 발생하는가?

 

음....................................ㅜ 왜 그럴까?

미해결 과제로 남아버린 MITM Proxy와 암호화 소켓 통신..

 

 

 

'보안 기술 > Network' 카테고리의 다른 글

ICMP Reply 터널링을 통한 파일 송수신  (0) 2024.05.10
DoS 공격 GUI with ctypes  (0) 2023.06.09
DDoS testbed 구축(mod_status)  (0) 2023.06.09
DDoS testbed 구축(sFlow)  (0) 2023.06.09
Wifi(802.11x) MAC Address Change  (0) 2022.08.03
Comments