Lua 스크립트로 Tshark 확장하기

WiresharkBeginner
지금 연습하기

소개

이 랩에서는 Lua 스크립팅을 사용하여 Wireshark 의 패킷 분석 기능을 확장하는 방법을 배우게 됩니다. 명령줄 옵션을 통해 사용자 지정 스크립트를 로드하고 인수를 전달하여 기능을 향상시키는 방법을 살펴봅니다.

이 연습에서는 Lua 스크립트를 생성하고, Wireshark 의 tshark 명령으로 테스트하고, 출력을 확인하는 과정을 안내합니다. 빈 캡처로 스크립트 실행을 연습하고 자세한 패킷 정보를 해석하는 방법을 배우게 됩니다.

-X lua_script:script.lua 로 스크립트 로드

이 단계에서는 -X 옵션을 사용하여 Wireshark 에서 Lua 스크립트를 로드하는 방법을 배우게 됩니다. Lua 는 Wireshark 와 잘 통합되는 가벼운 스크립팅 언어로서, 핵심 프로그램을 수정하지 않고도 사용자 지정 패킷 분석을 위해 기능을 확장할 수 있게 해줍니다.

먼저, 기본 작업 디렉터리에 간단한 Lua 스크립트를 생성해 보겠습니다. 이 스크립트는 Wireshark 가 Lua 코드를 성공적으로 로드하고 실행할 수 있는지 확인하기 위한 기본 테스트 케이스 역할을 합니다.

  1. 터미널을 열고 ~/project 디렉터리에 있는지 확인합니다. 여기에서 Lua 스크립트를 생성하고 저장합니다.

    cd ~/project
    
  2. nano 를 사용하여 script.lua라는 새 Lua 스크립트 파일을 생성합니다. nano 는 간단하고 대부분의 Linux 환경에서 사용할 수 있기 때문에 사용합니다.

    nano script.lua
    
  3. 로드될 때 메시지를 출력하는 다음 기본 Lua 코드를 추가합니다. 이는 가장 기본적인 작업, 즉 스크립트 실행을 확인하는 것을 보여줍니다.

    -- Simple Wireshark Lua script
    print("Wireshark Lua script loaded successfully!")
    
  4. 파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X). 이제 스크립트는 Wireshark 에서 로드할 준비가 되었습니다.

이제 Wireshark 의 명령줄 인터페이스를 사용하여 이 스크립트를 로드해 보겠습니다. 실제 네트워크 트래픽을 처리하지 않고 스크립트를 테스트하기 위해 특별한 매개변수 조합을 사용합니다.

wireshark -X lua_script:script.lua -r /dev/null -k

이 명령의 각 부분이 무엇을 하는지 자세히 살펴보겠습니다.

  • -X lua_script:script.lua는 Wireshark 에 Lua 스크립트 파일을 로드하도록 지시합니다.
  • -r /dev/null은 빈 캡처 파일을 지정합니다 (패킷을 분석하는 것이 아니라 스크립트 로드를 테스트하는 것입니다).
  • -k는 사용자 입력을 기다리지 않고 즉시 캡처를 시작합니다.

이 명령을 실행하면 터미널 출력에 "Wireshark Lua script loaded successfully!" 메시지가 표시되어야 합니다. 이는 Wireshark 가 Lua 스크립트를 성공적으로 찾아 로드하고 실행했음을 확인합니다. 이 메시지가 표시되지 않으면 스크립트 파일이 올바른 위치에 있는지, 구문 오류가 없는지 확인하십시오.

-X lua_script1:arg1 로 인수 전달

이 단계에서는 -X lua_script1: 옵션을 사용하여 Wireshark 에서 Lua 스크립트에 인수를 전달하는 방법을 배우게 됩니다. 이 기술은 스크립트 자체를 매번 수정하지 않고도 다양한 입력을 허용하여 스크립트를 더 유연하게 만들고 싶을 때 유용합니다.

먼저, Wireshark 의 Lua 환경에서 인수 전달이 어떻게 작동하는지 이해해 보겠습니다. -X lua_script1: 옵션을 사용하면 스크립트에 문자열 값을 보낼 수 있으며, 이 값은 get_string() 함수를 사용하여 액세스할 수 있습니다. 이는 다른 프로그래밍 언어에서 명령줄 인수가 작동하는 방식과 유사합니다.

이제 기존 Lua 스크립트를 수정하여 인수를 허용하고 처리해 보겠습니다.

  1. 이전 단계에서 script.lua 파일을 엽니다.

    nano ~/project/script.lua
    
  2. 내용을 인수를 허용하고 표시하는 다음 코드로 바꿉니다.

    -- Lua script with argument handling
    local arg1 = get_string("lua_script1")
    print("Received argument: " .. (arg1 or "no argument provided"))
    

    get_string("lua_script1") 함수는 -X lua_script1:과 함께 전달된 인수를 검색합니다. or "no argument provided" 부분은 인수가 제공되지 않은 경우 기본 메시지를 제공합니다.

  3. 파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X).

이제 인수를 사용하여 스크립트를 실행해 보겠습니다.

wireshark -X lua_script:script.lua -X lua_script1:test123 -r /dev/null -k

이 명령을 분석해 보겠습니다.

  • -X lua_script:script.lua는 Lua 스크립트 파일을 로드합니다.
  • -X lua_script1:test123은 "test123"을 스크립트에 인수로 전달합니다.
  • -r /dev/null은 빈 캡처 파일을 지정합니다 (스크립트만 테스트하므로).
  • -k는 사용자 입력을 기다리지 않고 즉시 캡처를 시작합니다.

다음과 유사한 출력을 볼 수 있습니다.

Received argument: test123

스크립트가 다른 입력으로 작동하는지 확인하려면 다른 값으로 실행해 보십시오.

wireshark -X lua_script:script.lua -X lua_script1:another_value -r /dev/null -k

이는 서로 다른 인수를 사용하여 동일한 스크립트를 재사용하여 분석을 더욱 동적이고 다양한 시나리오에 적응할 수 있도록 하는 방법을 보여줍니다.

-r capture.pcap 으로 파일 처리

이 단계에서는 -r 옵션을 사용하여 Wireshark 의 명령줄 도구인 Tshark 로 미리 기록된 네트워크 캡처 파일을 처리하는 방법을 배우게 됩니다. 이는 실시간 패킷을 캡처하는 대신 저장된 네트워크 트래픽을 분석하려는 경우에 유용합니다.

먼저, 작업할 샘플 패킷 캡처 파일이 필요합니다. PCAP 파일에는 분석할 수 있는 실제 네트워크 트래픽 데이터가 포함되어 있습니다. 표준 HTTP 트래픽 샘플을 다운로드해 보겠습니다.

  1. 샘플 pcap 파일을 프로젝트 디렉터리에 다운로드합니다.

    wget https://wiki.wireshark.org/SampleCaptures/http.cap -O ~/project/capture.pcap
    
  2. 파일 크기와 위치를 확인하여 파일이 올바르게 다운로드되었는지 확인합니다.

    ls -lh ~/project/capture.pcap
    

이제 이 캡처 파일을 분석하도록 Lua 스크립트를 수정하겠습니다. 스크립트는 파일의 모든 패킷을 계산하고 총계를 보고합니다. 업데이트 방법은 다음과 같습니다.

  1. 편집을 위해 스크립트를 엽니다.

    nano ~/project/script.lua
    
  2. 이 패킷 계산 로직으로 내용을 업데이트합니다.

    -- Packet counter script
    local arg1 = get_string("lua_script1") or "default"
    local packet_count = 0
    
    -- Called for each packet
    function tap.packet(pinfo,tvb)
        packet_count = packet_count + 1
    end
    
    -- Called after processing all packets
    function tap.draw()
        print("Argument received: " .. arg1)
        print("Total packets processed: " .. packet_count)
    end
    
    -- Register the tap
    tap = Listener.new()
    
  3. 파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X).

이제 캡처 파일에 대해 스크립트를 실행해 보겠습니다. 이 명령은 Tshark 에 다음을 지시합니다.

  • Lua 스크립트 사용 (-X lua_script)
  • 스크립트에 인수 전달 (-X lua_script1)
  • 다운로드한 파일 처리 (-r)
  • GUI 없이 조용히 실행 (-q)
wireshark -X lua_script:script.lua -X lua_script1:analysis -r ~/project/capture.pcap -q

처리 후 다음을 보여주는 출력을 볼 수 있습니다.

  • 스크립트에 전달한 인수
  • 계산된 총 패킷 수

예시 출력:

Argument received: analysis
Total packets processed: 83

-V 옵션으로 사용자 지정 출력 확인

이 단계에서는 Wireshark 의 -V (verbose, 상세) 옵션을 사용하여 Lua 스크립트의 출력을 확인하는 방법을 살펴보겠습니다. 이는 사용자 지정 스크립트의 상세 분석 결과와 표준 패킷 정보를 함께 확인해야 할 때 특히 유용합니다.

먼저, 더 의미 있는 통계를 제공하도록 Lua 스크립트를 개선해 보겠습니다. 다양한 프로토콜 유형을 추적하도록 수정하겠습니다.

  1. nano 에서 편집을 위해 스크립트를 엽니다.

    nano ~/project/script.lua
    
  2. HTTP 및 TCP 패킷을 계산하는 이 향상된 버전으로 스크립트를 업데이트합니다.

    -- Enhanced packet analyzer
    local arg1 = get_string("lua_script1") or "default"
    local stats = {
        total = 0,
        http = 0,
        tcp = 0
    }
    
    function tap.packet(pinfo,tvb)
        stats.total = stats.total + 1
        if pinfo.visited then return end
    
        if pinfo.protocols:find("http") then
            stats.http = stats.http + 1
        end
        if pinfo.protocols:find("tcp") then
            stats.tcp = stats.tcp + 1
        end
    end
    
    function tap.draw()
        print("=== Analysis Report ===")
        print("Argument received: " .. arg1)
        print("Total packets: " .. stats.total)
        print("HTTP packets: " .. stats.http)
        print("TCP packets: " .. stats.tcp)
        print("======================")
    end
    
    tap = Listener.new()
    
  3. 파일을 저장하고 (Ctrl+O, Enter) nano 를 종료합니다 (Ctrl+X).

이제 상세 출력을 활성화하여 스크립트를 실행해 보겠습니다. -V 플래그는 Wireshark 에 사용자 지정 스크립트 출력을 포함하여 사용 가능한 모든 정보를 표시하도록 지시합니다.

wireshark -X lua_script:script.lua -X lua_script1:final_run -r ~/project/capture.pcap -q -V

다음과 유사한 출력을 볼 수 있으며, 패킷 세부 정보와 스크립트의 분석 결과가 모두 표시됩니다.

=== Analysis Report ===
Argument received: final_run
Total packets: 83
HTTP packets: 10
TCP packets: 83
======================

향후 참조를 위해 이 출력을 파일에 저장하려면 파일로 리디렉션합니다.

wireshark -X lua_script:script.lua -X lua_script1:final_run -r ~/project/capture.pcap -q -V > ~/project/analysis_output.txt

마지막으로, 파일 내용을 확인하여 저장된 출력을 확인합니다.

cat ~/project/analysis_output.txt

요약

이 Lab 에서는 명령줄 작업을 통해 Lua 스크립트를 사용하여 Wireshark 의 기능을 확장하는 방법을 배웠습니다. 주요 단계에는 -X lua_script:script.lua 옵션을 사용하여 Lua 스크립트를 로드하고 Wireshark 의 CLI 인터페이스로 테스트하는 것이 포함되었습니다.

또한 -X lua_script1:arg1을 사용하여 Lua 스크립트에 인수를 전달하는 방법을 탐색하여 외부 매개변수를 허용하는 유연한 스크립트를 만드는 방법을 시연했습니다. 이 기술은 사용자 정의 가능한 Lua 확장을 통해 Wireshark 의 패킷 분석 기능을 향상시킵니다.