Wireshark 에서 SSL/TLS 트래픽 해독하기

WiresharkBeginner
지금 연습하기

소개

이 랩에서는 널리 알려진 네트워크 프로토콜 분석기인 Wireshark 를 사용하여 SSL/TLS 트래픽을 해독하는 방법을 배우게 됩니다. SSL/TLS 암호화는 인터넷 통신을 보호하기 위해 일반적으로 사용됩니다. 그러나 문제 해결 또는 보안 분석과 같은 경우, 암호화된 트래픽을 해독하는 것이 필수적입니다.

이 랩은 SSL/TLS 트래픽을 해독하도록 Wireshark 를 구성하는 과정을 안내합니다. 통제된 환경 내에서 실질적인 경험을 제공합니다.

이것은 가이드 실험입니다. 학습과 실습을 돕기 위한 단계별 지침을 제공합니다.각 단계를 완료하고 실무 경험을 쌓기 위해 지침을 주의 깊게 따르세요. 과거 데이터에 따르면, 이것은 중급 레벨의 실험이며 완료율은 74%입니다.학습자들로부터 96%의 긍정적인 리뷰율을 받았습니다.

Wireshark 에서 SSL/TLS 해독 설정하기

이 단계에서는 Wireshark 를 구성하여 SSL/TLS 트래픽을 해독할 것입니다. 하지만 먼저, 우리가 무엇을 하고 있는지 조금 이해해 봅시다. SSL/TLS는 인터넷 통신을 보호하는 데 사용되는 프로토콜입니다. SSL/TLS를 사용하여 인터넷을 통해 데이터를 전송할 때, 기밀성을 보호하기 위해 암호화됩니다. 이 트래픽을 해독하고 실제 데이터를 보려면 Wireshark 가 암호화 키에 접근해야 합니다. 이러한 키는 pre-master secret log file 이라는 특수한 파일에 저장됩니다. 이제 이 파일을 만들 것입니다.

Wireshark 는 TLS 트래픽을 해독하기 위해 암호화 키에 접근해야 합니다. 이러한 키는 pre-master secret log file 이라고 하는 곳에 저장되며, 지금 만들 것입니다.

  1. 터미널을 엽니다. 터미널은 컴퓨터의 운영 체제와 상호 작용하기 위해 명령을 입력할 수 있는 텍스트 기반 인터페이스입니다. 터미널이 열리면 /home/labex/project/ 디렉토리에 pre_master_secret.log라는 새 파일을 만들 것입니다. 이 파일은 해독에 필요한 TLS 세션 키를 저장하는 데 사용됩니다. 파일을 만들려면 터미널에 다음 명령을 입력합니다.

    touch /home/labex/project/pre_master_secret.log

    이 명령은 나중에 해독에 필요한 TLS 세션 키를 저장할 빈 파일을 만듭니다.

  2. 이제 로그 파일이 준비되었으므로 Wireshark 가 이를 사용하도록 구성해야 합니다. 먼저 터미널에 다음 명령을 입력하여 Wireshark 를 엽니다.

    wireshark

    Wireshark 가 열리면 상단에 메뉴 표시줄이 표시됩니다. Edit > Preferences를 클릭합니다. 이렇게 하면 Wireshark 에서 다양한 설정을 사용자 정의할 수 있는 창이 열립니다. Preferences 창의 왼쪽 패널을 봅니다. Protocols라는 섹션이 있습니다. 이를 클릭한 다음 TLS를 찾을 때까지 아래로 스크롤합니다.

    TLS 설정에는 (Pre)-Master-Secret log filename이라는 필드가 있습니다. 여기에서 방금 만든 pre-master key log file 의 위치를 Wireshark 에 알려줍니다. 파일의 전체 경로를 입력합니다.

    /home/labex/project/pre_master_secret.log

    창은 다음과 유사하게 보일 것입니다.

    ![Wireshark TLS Preferences](https://file.labex.io/namespace/33fa8aba-d546-42e9-9692-64968aeaf0cc/cybersecurity/ws_decrypt_ssl_tls/lab-cipher-quest-tls-decrypting-guide/ko/../assets/lab - CipherQuestTLSDecryptingGuide - step1 - image1.png)

    경로를 입력했으면 OK를 클릭하여 변경 사항을 저장합니다. 이제 Wireshark 는 TLS 트래픽을 해독하기 위해 이 파일을 사용하도록 구성되었습니다. 즉, SSL/TLS 트래픽을 캡처하면 Wireshark 가 로그 파일의 키를 사용하여 데이터를 해독하고 실제 내용을 표시할 수 있습니다.

SSL/TLS 트래픽 캡처하기

이 단계에서는 Wireshark 를 사용하여 SSL/TLS 트래픽을 캡처하고 Python 스크립트로 보안 트래픽을 생성합니다. SSL/TLS는 네트워크를 통해 안전한 통신을 제공하는 프로토콜입니다. 이 트래픽을 캡처하면 나중에 분석할 수 있으며, 이는 네트워크 문제 디버깅 또는 보안 위협 감지와 같은 작업에 중요합니다.

  1. 네트워크 트래픽 캡처부터 시작해 보겠습니다. Wireshark 에서 네트워크 인터페이스는 컴퓨터가 데이터를 보내고 받는 연결입니다. 관심 있는 트래픽을 캡처하려면 적절한 인터페이스를 선택해야 합니다. 사용 가능한 네트워크 인터페이스 목록을 찾습니다. eth1 인터페이스를 클릭하여 선택합니다. 이 인터페이스는 캡처하려는 트래픽이 통과하는 곳입니다. 그런 다음 도구 모음에서 Start 버튼 (파란색 상어 지느러미 아이콘) 을 클릭하여 패킷 캡처를 시작합니다.

    이제 Wireshark 는 선택한 인터페이스에서 모든 네트워크 트래픽을 캡처합니다. 캡처하는 동안 주 창에 패킷이 나타나기 시작하는 것을 볼 수 있습니다. 각 패킷은 네트워크를 통해 전송되는 작은 데이터 단위입니다.

  2. 이제 분석할 수 있는 SSL/TLS 트래픽을 생성해야 합니다. 새 터미널 창을 엽니다. 터미널은 컴퓨터와 상호 작용하기 위해 명령을 실행할 수 있는 명령줄 인터페이스입니다. 다음 명령을 사용하여 프로젝트 디렉토리로 이동합니다.

    cd /home/labex/project/

    이 명령은 현재 작업 디렉토리를 프로젝트 디렉토리로 변경합니다. 웹사이트에 대한 보안 연결을 설정하는 Python 스크립트를 만들 것입니다. Python 은 다양한 작업을 수행하기 위해 스크립트를 작성할 수 있는 프로그래밍 언어입니다. nano 텍스트 편집기를 사용하여 tls_client.py라는 새 파일을 만듭니다.

    nano tls_client.py

    nano 텍스트 편집기는 터미널에서 사용하기 쉽고 간단한 텍스트 편집기입니다. 다음 Python 코드를 복사하여 편집기에 붙여넣습니다.

    #!/usr/bin/env python3
    
    import ssl
    import socket
    import os
    
    HOST = "example.com"
    PORT = 443
    
    ## Set the path for the pre-master secret log file
    os.environ['SSLKEYLOGFILE'] = '/home/labex/project/pre_master_secret.log'
    
    ## Create an SSL/TLS context
    context = ssl.create_default_context(ssl.Purpose.SERVER_AUTH)
    
    ## Create a socket and wrap it with SSL/TLS
    with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as sock:
        with context.wrap_socket(sock, server_hostname=HOST) as ssock:
            ssock.connect((HOST, PORT))
    
            ## Send a simple HTTP GET request
            request = "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
            ssock.sendall(request.encode())
    
            ## Receive the response and print all the received data
            data = ssock.recv(4096)
            print(data.decode())

    이 스크립트는 다음을 수행합니다.

    • TLS 세션 키를 저장할 위치를 지정하기 위해 환경 변수를 설정합니다. 이러한 키는 나중에 SSL/TLS 트래픽을 해독하는 데 매우 중요합니다.
    • example.com 에 대한 보안 연결을 만듭니다. sslsocket 라이브러리를 사용하여 이 연결을 설정합니다.
    • 기본 HTTP 요청을 보냅니다. 이 요청은 서버에 example.com 의 메인 페이지를 요청합니다.
    • 서버의 응답을 수신하고 표시합니다.

    Ctrl+O를 누른 다음 Enter를 눌러 파일을 저장하고 Ctrl+X를 눌러 nano 를 종료합니다.

    이제 스크립트를 실행하여 TLS 트래픽을 생성합니다.

    python3 tls_client.py

    example.com 에서 HTTP 응답을 볼 수 있으며, 이는 스크립트가 보안 연결을 성공적으로 설정했음을 확인합니다. 스크립트는 또한 TLS 세션 키를 pre-master secret log file 에 기록했으며, Wireshark 는 이를 해독에 사용합니다.

    출력은 다음과 유사하게 보일 것입니다.

    HTTP/1.1 200 OK
    Age: 558804
    Cache-Control: max-age=604800
    Content-Type: text/html; charset=UTF-8
    Date: ...
    ...
  3. 이제 TLS 트래픽을 생성했으므로 Wireshark 로 돌아가 도구 모음에서 빨간색 Stop 버튼을 클릭하여 캡처를 중지합니다. 캡처된 트래픽을 저장하려면 캡처를 중지해야 합니다.

    캡처된 트래픽을 분석하기 위해 저장하려면 메뉴 표시줄에서 File을 클릭한 다음 Save As...를 선택합니다. 저장 대화 상자에서 /home/labex/project/로 이동하여 파일 이름을 tls_traffic.pcapng로 지정하고 Save를 클릭합니다. .pcapng 파일 형식은 네트워크 트래픽 캡처를 저장하기 위한 표준 형식입니다.

    Save Captured Traffic

    이제 캡처된 트래픽이 저장되었으며 다음 단계에서 분석할 준비가 되었습니다.

해독된 SSL/TLS 트래픽 분석

이 단계에서는 Wireshark 의 필터링 및 분석 도구를 사용하여 해독된 SSL/TLS 트래픽을 분석합니다. 이러한 도구는 방대한 양의 네트워크 트래픽 데이터에서 의미 있는 정보를 추출하는 데 필수적입니다.

  1. 먼저, TLS 핸드셰이크의 특정 부분에 집중하기 위해 필터를 적용해 보겠습니다. TLS 핸드셰이크는 클라이언트와 서버 간의 보안 연결을 설정하는 데 중요한 초기 프로세스입니다. 이 프로세스 동안 클라이언트와 서버는 암호화 알고리즘, 키 및 기타 보안 매개변수에 동의하기 위해 정보를 교환합니다.

    필터 도구 모음 (Wireshark 창 상단의 텍스트 입력 필드) 에 다음 표현식을 입력합니다.

    tls.handshake.type == 1

    이 필터 표현식은 TLS 핸드셰이크 유형을 기반으로 패킷을 선택하는 데 사용됩니다. 값 1Client Hello 패킷에 해당합니다. Enter를 눌러 필터를 적용합니다. 필터를 적용하면 Wireshark 는 TLS 핸드셰이크를 시작하기 위해 클라이언트가 보낸 초기 패킷인 Client Hello 패킷만 표시합니다.

    이제 이 필터와 일치하는 패킷만 표시됩니다. 표시된 패킷을 좁히면 TLS 연결의 시작에 집중하고 보안 통신이 어떻게 시작되는지 더 쉽게 이해할 수 있습니다.

    해독된 콘텐츠를 보려면 TLS 스트림을 따라가 보겠습니다. 필터링된 목록에서 아무 패킷이나 마우스 오른쪽 버튼으로 클릭하고 컨텍스트 메뉴에서 Follow > TLS Stream을 선택합니다. 이 작업은 Wireshark 에 선택한 패킷을 기반으로 전체 TLS 세션을 재구성하고 해독된 데이터를 표시하도록 지시합니다.

    해독된 데이터를 보여주는 새 창이 열립니다. 이 데이터는 보안 연결을 통해 전송된 실제 HTTP 통신을 나타냅니다. pre-master secret log file 에 저장된 TLS 세션 키 덕분에 Wireshark 는 일반적으로 암호화될 이 데이터를 해독하고 표시할 수 있습니다.

    해독된 데이터는 Python 스크립트에서 보낸 HTTP 요청과 서버의 HTTP 응답을 모두 표시합니다. 헤더, 콘텐츠 유형 및 응답의 실제 HTML 콘텐츠를 볼 수 있습니다. 이 정보는 클라이언트와 서버 간의 통신, 예를 들어 어떤 데이터를 요청하고 반환하는지 이해하는 데 유용합니다.

  2. 추가 분석을 위해 이 해독된 데이터를 저장해 보겠습니다. "Follow TLS Stream" 창에서 Save as... 버튼을 클릭합니다. 데이터를 저장하면 나중에 검토하거나, 다른 사람과 공유하거나, 추가 분석을 수행할 수 있습니다.

    저장 대화 상자에서 /home/labex/project/로 이동하여 파일 이름을 decrypted_data.txt로 지정하고 Save를 클릭합니다.

    Save Decrypted Data

    이제 분석을 위해 TLS 트래픽을 성공적으로 캡처, 해독 및 저장했습니다. 해독된 데이터 파일에는 원래 TLS 로 암호화된 전체 HTTP 통신이 포함되어 있습니다.

    작업이 완료되면 "Follow TLS Stream" 창을 닫을 수 있습니다. 더 자세히 탐색하려면 다른 Wireshark 필터를 사용하여 캡처된 트래픽의 다른 측면을 검사해 보십시오. 예를 들어, 필터 http는 해독 후 HTTP 트래픽만 표시합니다. 이러한 방식으로 네트워크를 통해 전송되는 특정 유형의 데이터를 더 자세히 파악할 수 있습니다.

요약

이 랩에서는 Wireshark 를 사용하여 SSL/TLS 트래픽을 해독하는 방법을 배웠습니다. TLS 세션 키를 저장하기 위해 pre-master secret log file 을 만들고, 해독을 위해 이 파일을 사용하도록 Wireshark 를 구성했으며, Python 스크립트로 SSL/TLS 트래픽을 생성했습니다. 그런 다음 Wireshark 의 필터링 및 스트림 팔로우 기능을 사용하여 해독된 트래픽을 분석했습니다.

이러한 기술은 네트워크 문제 해결, 보안 분석 및 보안 통신 이해에 매우 중요합니다. 제어된 환경에서 TLS 트래픽을 해독하고 분석하면 네트워크 프로토콜을 더 잘 이해하고 암호화된 통신에서 문제를 발견하는 데 도움이 됩니다. 실제 상황에서 TLS 트래픽을 해독하려면 적절한 권한이 필요하며, 개인 정보 보호법을 위반하지 않도록 권한이 있는 네트워크에서만 수행해야 합니다.