필드 추출 및 데이터 형식화

WiresharkBeginner
지금 연습하기

소개

네트워크 트래픽 분석을 수행하다 보면 수천 개의 패킷에서 특정 정보만을 추출해야 하는 경우가 많습니다. 패킷 요약 정보를 읽는 것은 사람이 확인하기에는 유용하지만, 자동화된 도구나 스크립트에는 구조화된 데이터가 필요합니다.

이 지점이 바로 패킷 분석과 데이터 엔지니어링이 교차하는 영역입니다. 사람은 몇 줄의 패킷 요약을 시각적으로 훑어볼 수 있지만, 컴퓨터는 정보가 안정적인 필드와 열로 정렬되어 있을 때 가장 효율적으로 처리합니다. 네트워크 트래픽이 구조화된 출력으로 변환되면 검색, 집계, 그래프 작성, 스프레드시트 가져오기 또는 Python 및 SIEM 파이프라인을 통한 처리가 가능해집니다.

이번 실습에서는 Wireshark 의 명령줄 버전인 tshark를 사용하여 원시 네트워크 트래픽을 파싱하기 쉬운 구조화된 형식으로 변환하는 방법을 배웁니다. 기본적으로 제공되는 사람이 읽기 쉬운 출력 형식을 비활성화하고, IP 주소, DNS 쿼리, HTTP User-Agent 와 같은 특정 프로토콜 필드를 선택한 뒤, 이를 추가 분석을 위해 CSV(Comma-Separated Values) 형식으로 변환하는 연습을 진행합니다.

기본 출력 비활성화

이 단계에서는 tshark의 기본 출력 동작을 변경하는 방법을 배웁니다.

기본적으로 tshark를 사용하여 패킷 캡처 파일을 읽으면 모든 패킷에 대해 요약 한 줄이 출력됩니다. 이 요약은 사람이 읽기에는 적합하지만, 스크립트를 사용하여 파싱하거나 데이터베이스로 가져오기에는 매우 어렵습니다. 특정 데이터를 추출하려면 먼저 tshark가 기본 요약을 출력하지 않도록 설정하고, 대신 특정 필드를 출력하도록 준비해야 합니다.

핵심은 요약은 '표시' 중심인 반면, 필드는 '분석' 중심이라는 점입니다. 요약 줄은 사람에게는 편리해 보일 수 있지만, 작은 형식 변경만으로도 하위 자동화 프로세스가 중단될 수 있습니다. 명명된 필드를 추출하면 다른 도구에서 안정적으로 사용할 수 있는 예측 가능한 출력을 얻을 수 있습니다.

이를 위해 -T fields 옵션을 사용합니다. -T 플래그는 "Text output format"을 의미하며, 이를 fields로 설정하면 tshark에게 우리가 지정한 정확한 데이터 필드만 출력하라고 지시하게 됩니다.

하지만 어떤 필드를 원하는지 지정하지 않고 -T fields만 사용하면 tshark는 아무것도 출력하지 않습니다. 따라서 추출할 정확한 필드를 지정하는 -e 플래그와 함께 사용해야 합니다.

먼저 샘플 캡처 파일에서 프레임 번호만 추출해 보겠습니다. 기본 작업 디렉터리인 /home/labex/project에 있는지 확인하세요.

다음 명령을 실행하여 sample.pcap 파일을 읽고 프레임 번호만 추출합니다.

tshark -r sample.pcap -T fields -e frame.number | head -n 5

-r 플래그는 tshark에게 실시간 트래픽을 캡처하는 대신 파일에서 읽도록 지시합니다. 명령의 | head -n 5 부분은 터미널에 숫자가 너무 많이 출력되지 않도록 처음 5 줄로 제한합니다.

다음과 유사한 출력이 나타나야 합니다.

1
2
3
4
5

표준 tshark 요약과 비교했을 때 출력이 얼마나 깔끔한지 확인해 보세요. 이것이 네트워크 트래픽으로부터 구조화된 데이터셋을 구축하는 기초가 됩니다.

사용자 정의 열 형식 사용

이 단계에서는 여러 필드를 동시에 추출하고 이를 쉼표로 구분된 값 (CSV) 형식으로 만드는 방법을 배웁니다.

여러 개의 -e 플래그를 사용하면 tshark는 여러 필드를 추출하여 열로 배치합니다. 기본적으로 tshark는 이러한 열을 "탭 (Tab)" 문자로 구분합니다. 탭으로 구분된 값도 유용하지만, CSV 는 스프레드시트, 데이터베이스, Python 의 Pandas 와 같은 분석 도구로 데이터를 가져올 때 사용하는 범용 표준입니다.

이것은 사소한 형식 지정처럼 보일 수 있지만, 형식 선택은 향후 작업의 효율성을 결정합니다. 보안 업무에서는 패킷 분석기, 셸 파이프라인, 스프레드시트, 노트북, 대시보드 간에 데이터를 이동해야 하는 경우가 많습니다. 출력을 다른 곳으로 가져오기 쉬울수록 일회성 명령을 반복 가능한 워크플로우로 확장하기가 더 쉬워집니다.

열을 구분하는 문자를 변경하려면 -E separator= 옵션을 사용합니다.

이제 프레임 번호, 출발지 IP 주소, 목적지 IP 주소를 추출하여 CSV 형식으로 만들어 보겠습니다. 출발지 및 목적지 IP 의 필드 이름은 각각 ip.src와 ip.dst입니다.

IP 주소가 실제로 포함된 패킷만 확인하고 (IP 가 없는 저수준 ARP 패킷 등은 제외), 필드 추출과 함께 -Y "ip" 필터를 사용하겠습니다.

터미널에서 다음 명령을 실행하세요.

tshark -r sample.pcap -Y "ip" -T fields -e frame.number -e ip.src -e ip.dst -E separator=, | head -n 5

다음과 유사한 출력이 나타나야 합니다.

12,127.0.0.1,127.0.0.11
13,127.0.0.11,127.0.0.1
14,127.0.0.1,127.0.0.11
15,127.0.0.11,127.0.0.1
16,172.60.1.88,104.18.26.120

초기 ARP 패킷을 필터링했기 때문에 프레임 번호가 1 부터 시작하지 않을 수 있습니다. 때때로 패킷에 특정 필드가 포함되어 있지 않을 수 있는데, 이 경우 tshark는 해당 열을 비워두어 CSV 구조가 유지되도록 합니다.

DNS 쿼리 추출

이 단계에서는 필드 추출과 디스플레이 필터를 결합하여 DNS 트래픽에서 특정 정보를 격리하고 추출하는 방법을 배웁니다.

네트워크 트래픽을 분석할 때 모든 패킷에서 필드를 추출하는 경우는 거의 없습니다. 보통은 특정 프로토콜에 관심이 있습니다. -Y 플래그를 사용하여 필드를 추출하기 전에 디스플레이 필터를 적용할 수 있습니다.

이는 결과를 해석하기 전에 범위를 좁히는 또 다른 예입니다. 관련 없는 프로토콜을 하나의 내보내기 파일에 섞으면, 많은 패킷에 요청한 필드가 포함되어 있지 않아 결과가 희소하고 혼란스러워집니다. 먼저 필터링을 수행하면 결과 데이터셋의 의미적 일관성을 유지할 수 있습니다.

예를 들어, 사용자가 방문하려는 웹사이트를 확인하려면 DNS 쿼리를 살펴볼 수 있습니다. DNS 트래픽에 대한 디스플레이 필터는 간단히 dns입니다. 쿼리 중인 도메인 이름이 포함된 특정 필드는 dns.qry.name입니다.

출발지 IP 주소와 DNS 쿼리 이름을 추출하되, 실제로 DNS 요청이나 응답인 패킷에 대해서만 추출해 보겠습니다.

다음 명령을 실행하세요.

tshark -r sample.pcap -Y "dns" -T fields -e ip.src -e dns.qry.name -E separator=, | head -n 5

출력은 다음과 유사하게 나타납니다.

10.0.2.15,labex.io
168.63.129.16,labex.io
10.0.2.15,google.com
168.63.129.16,google.com

-Y "dns"와 -T fields를 결합함으로써, 다른 네트워크 프로토콜의 배경 노이즈를 모두 필터링하고 CSV 출력에 관련 데이터만 포함되도록 할 수 있습니다.

HTTP User-Agent 추출

마지막 단계에서는 HTTP 트래픽에서 상세 정보를 추출하며, 특히 User-Agent 문자열에 집중합니다.

User-Agent 는 웹 브라우저나 클라이언트가 서버로 보내는 문자열로, 사용 중인 소프트웨어 (예: Chrome, Firefox 또는 사용자 정의 스크립트) 를 식별합니다. 보안 분석가는 종종 네트워크에서 악성 자동화 스크립트나 오래된 브라우저를 식별하기 위해 User-Agent 를 추출합니다.

User-Agent 와 같은 메타데이터는 모든 콘텐츠 바이트를 검사하지 않고도 동작에 대한 단서를 제공하기 때문에 유용합니다. 네트워크 방어에서 많은 유용한 판단은 User-Agent, 호스트 헤더, TLS 서버 이름 또는 DNS 쿼리 이름과 같은 컨텍스트 필드에서 나옵니다. 이는 분석가가 정상적인 애플리케이션 트래픽과 의심스러운 자동화 활동을 구분하는 데 도움을 줍니다.

HTTP 요청을 격리하기 위해 http.request 디스플레이 필터를 사용할 수 있습니다. 추출하려는 필드는 출발지 IP(ip.src), 요청된 호스트 도메인 (http.host), 특정 URI 경로 (http.request.uri), 그리고 User-Agent 문자열 (http.user_agent) 입니다.

다음 명령을 실행하여 이 HTTP 메타데이터를 CSV 형식으로 추출하세요.

tshark -r sample.pcap -Y "http.request" -T fields -e ip.src -e http.host -e http.request.uri -e http.user_agent -E separator=,

다음과 유사한 출력이 나타나야 합니다.

10.0.2.15,example.com,/,curl/7.81.0
10.0.2.15,neverssl.com,/,LabEx-Custom-Agent/1.0

실습 설정 중에 생성된 사용자 정의 User-Agent 인 LabEx-Custom-Agent/1.0이 성공적으로 추출된 것을 확인할 수 있습니다. 이 기술은 자동화된 보고서를 작성하거나 네트워크 데이터를 보안 모니터링 대시보드로 전송하는 데 매우 강력한 도구입니다.

요약

이번 실습에서는 tshark를 사용하여 원시 네트워크 패킷 캡처를 구조화되고 분석 가능한 데이터로 변환하는 방법을 배웠습니다. -T fields를 사용하여 사람이 읽기 쉬운 기본 출력을 비활성화하는 것부터 시작했습니다. 그 후 -e 플래그를 사용하여 특정 데이터 포인트를 선택하고 -E separator=,를 사용하여 CSV 형식으로 변환하는 방법을 익혔습니다. 마지막으로 이러한 형식 지정 기술을 디스플레이 필터 (-Y) 와 결합하여 DNS 쿼리 이름이나 HTTP User-Agent 문자열과 같은 매우 구체적인 정보를 추출했습니다. 이러한 기술은 네트워크 분석을 자동화하고 패킷 데이터를 다른 보안 도구와 통합하는 데 필수적입니다.