패킷 스니핑 알아보기 2장 - Wireshark 사용하기
앞서서
본격적으로 패킷 스니핑을 진행하기 위해 와이어샤크를 설치하고 사용해보자.
설치
와이어샤크 공식 다운로드 페이지(https://www.wireshark.org/download.html)에서 본인 OS 에 맞는 인스톨러를 선택해 다운로드하자.
나는 Stable Release: 4.2.3 버전의 Windows x64 Installer 를 다운로드했다.
설치 과정은 딱히 건드릴게 없고 기본 설정으로만 진행했다.
시작
버전에 따라 달라지겠지만 현재 버전인 4.2.3 버전에서는 실행 시 가장 먼저 해야할 것은 패킷을 캡쳐할 네트워크 인터페이스를 선택하는 것이다.
나는 노트북을 사용하고 있어서 일단 Wi-Fi 를 선택했다.
선택하는 순간부터 패킷 캡쳐가 진행이 되는데, 상단의 중단버튼을 눌러서 멈출 수 있다.
1분정도 캡쳐 후 중단하고나서 저장(Ctrl + S)을 했다.
메인 창
기본적으로 캡쳐된 패킷은 3개의 영역으로 나뉘어져 정보가 출력이 되는데, 위에서부터 Packet List
, Packet Details
, Packet Bytes
영역이다. 아래의 이미지를 참조하자.
기본적으로 Packet List 에서 패킷을 클릭하면 Packet Detail 영역과 Packet Bytes 영역에서 관련 내용을 확인할 수 있다.
- Packet List
- 현재 수집된 패킷들을 모두 보여준다. 최상단을 보면 열 별로 패킷 번호, 수집된 시간, Source(발신지), Destination(목적지), 프로토콜, 패킷의 기본 정보들을 보여준다.
- Packet Detail
- 하나의 패킷에 대한 정보를 계층적으로 보여준다.
- Packet Bytes
- 가공되지 않은 형태(Raw 형태)의 패킷을 보여준다.
캡처 파일 작업
저장, 내보내기(Export)
파일 메뉴 - 저장 버튼을 통해 캡처한 패킷리스트를 그대로 저장할 수 있다. 저장된 파일의 기본 형식은 .pcapng
이다.
파일 메뉴 - 지정한 패킷 내보내기 버튼을 사용하면 아래의 Packet Range 를 설정함으로써 지정한 구간의 패킷만 따로 저장할 수도 있다.
와이어샤크에서 캡처한 패킷을 다른 패킷 분석 프로그램에서 사용할 수 있게 하는 방법으로 내보내기 기능을 제공한다. 파일 메뉴 - 패킷 분해 결과 내보내기 버튼을 사용해 다양한 포맷(.txt, .csv, .c)으로 패킷을 내보낼 수 있다.
병합
현재 패킷 리스트에 패킷이 존재하는 경우, 다른 패킷 캡처 파일을 불러와서 병합할 수 있다. 현재 리스트에 다른 파일을 가져와서 앞쪽에 붙이는 prepend 방식
, 뒤쪽에 붙이는 append 방식
, 타임스탬프(시간) 기준 날짜순으로 병합하는 chronologically 방식
이 있다.
패킷 검색
특정 기준이나 문자열 비교를 통해 원하는 패킷을 찾으려면 Ctrl + F
를 통해 검색바를 출력해서 사용이 가능하다.
검색바에서는 먼저 메인 창 3개의 영역 중 검색을 진행할 영역을 선택할 수 있고, 값을 검색할 때 어떤 기준(문자열, 16진수값, 표시 필터, 정규 표현식)으로 검색할 것인지 선택이 가능하다.
필터
캡처 필터
대용량 트래픽에서 모든 패킷을 캡처하기 보단 사용자 지정 캡처 필터를 통해 원하는 패킷만 캡처하는 것이 성능적으로 좋을 수 있다.
간단한 예시로 여러 역할을 가진 서버에서 특정 서비스가 실행중인 포트의 트래픽만 캡처하고 싶은 경우 특정 포트를 캡처 필터에 설정하면 된다.
필터의 목록을 보거나 새로운 필터를 만들기 위해서는 캡처 - 캡처 필터
메뉴로 들어가면 된다.
필터를 설정할 때 BPF(Berkeley Packet Filter) 구문을 사용한다. BPF 구문을 이용해 만들어진 필터를 표현식(expression)이라 부르고, 이 표현식은 하나 이상의 primitives 로 이루어져있다.
위의 예시를 살펴보자. 첫번째 프리미티브로 목적지 호스트의 주소가 192.168.0.10 인 패킷만 필터링 하고, &&
연산자를 이용해 동시에 두번째 프리미티브로 tcp 프로토콜이면서 포트번호 80번을 사용하는 패킷들을 필터링한다. 따라서 두 프리미티브를 모두 만족하는 패킷만 캡처가 될 것이다.
한정자(Qualifier)의 종류와 예시
한정자 | 설명 | 예제 |
---|---|---|
Type | 어떤 ID 나 숫자를 사용하는건지 식별해준다. | host, net, port |
Dir | ID 나 숫자의 전송 방향을 지정한다. | src, dst |
Proto | 특정 프로토콜로 제한한다. | ether, ip, tcp, udp, http, ftp |
host 한정자를 통해, 여러 ID(MAC 주소, IPv4 주소, IPv6 주소, DNS 호스트명)를 기준으로 필터링할 수 있다.
ID | 예시 |
---|---|
IPv4 | host 192.168.0.1 |
IPv6 | host 2001:DB8:1000::1111:2222 |
호스트명 | host testserver |
MAC | ether host 00-1a-a0-52-e2-a0 |
프로토콜 필터링 시 !
를 앞에 붙이면 해당 프로토콜을 제외한 필터가 된다. ex) !ip6
디스플레이 필터
캡처 필터와는 다르게 필터가 적용되지 않은 나머지 패킷을 출력에서만 제외하고 삭제하지 않는다. 필터 표현식을 제거하면 원래의 패킷 리스트로 돌아간다.
예를들어 ARP 브로드캐스트 트래픽을 일시적으로 제외하고 싶은 경우, 캡처 필터보다는 디스플레이 필터를 이용해 일시적으로 필터링한 후에 나중에 필터 표현식을 제거하면 브로드캐스트 트래픽도 분석이 가능하다.(!arp
)
디스플레이 필터 표현식에 대해서 더 자세한 설정방법이 궁금하다면 분석 - 표시 필터 표현식
메뉴에서 확인이 가능하다.
또 분석- 표시 필터
메뉴에 원하는 디스플레이 필터 표현식을 만들고 저장해둘 수 있다.