Capture Filter와 Display Filter
캡처필터는 수집자체를 제한하는것으로, 랜카드에 들어오는 수많은 필터 중 걸러서 수집하는 것을 의미합니다.
디스플레이 필터는 수집된 데이터 중에서 원하는 내용을 뽑는 것을 의미합니다.
Capture Filter
캡쳐필터는 빨간 네모칸을 활용하면 됩니다.
필터를 사용자가 만들어서 등록하여 사용할 수도 있습니다.
1) [Capture]-[Capture Fiilters...] 클릭
2) +를 클릭
3) Filter Name 설정 > make_filter_tcp 입력
4) Filter Expression 설정 > tcp 입력
5) 확인 후 책갈피에서 make_filter_tcp 선택 후 이더넷 또는 와이파이 실행
Capture Filter 자동화
캡처필터를 하고 계속해서 저장하는 것을 수동적으로 하기는 비효율적입니다. 그래서 그것을 자동화시키는 방법이 있는데, 수집 중에 일정조건이 만족하면 저장하게 됩니다. 패킷 수집 설정은 output에서 하고 종료 조건은 options에서 설정합니다.
1) [Capture]-[Options...] 클릭
2) [Input] 이더넷 또는 와이파이 선택, 하단 책갈피에 원하는 필터 선택 > make_filter_tcp 선택
3) [Output] file에 저장할 위치와 파일명을 입력
4) format (pcapng / pcap)선택 > WireShark 버전에 따라 다름
5) Create a new file automatically... 체크 후 옵션 설정
예를 들어 10 packets, 30 seconds로 설정하면 둘 중 하나에 만족하면 파일이 저장됩니다.
6) [Options] Stop capture automatically after > 4 files
파일 4개가 만들어지면 자동으로 종료되게 설정합니다.
주소기반의 트래픽 수집
1) 특정 IP 주소에서 /로 오는 트래픽 수집
연산자를 포함할 수 있습니다.
host 주소 : 주소를 포함한 모든 데이터 수집
not host 주소 : 주소를 제외한 모든 데이터 수집
src host 주소 : 송신지 호스트
dst host 주소 : 수신지 호스트
ex)
● host 10.3.1.1
● host 2406:da00:ff00::6b16:f02d
● not host 10.3.1.1
● src host 10.3.1.1
● dst host 10.3.1.1
● host 10.3.1.1 or host 10.3.1.2
● host www.espn.com
2) IP 주소 범위에서/로 오는 트래픽 수집
대역대를 가지고 수집하는 경우입니다.
net 주소
net ~ mask ~
ex)
● net 10.3.0.0/16
● net 10.3.0.0 mask 255.255.0.0
● not dst net 10.3.0.0/16
● dst net 10.3.0.0/16
● src net 10.3.0.0/16
3) 브로드캐스트 또는 멀티캐스트 트래픽 수집
ipv6는 브로드캐스트가 없습니다.
● ip broadcase
● ip multicase
● dst host ff02::1
● dst host ff02::2
4) MAC 주소 기반의 트래픽 수집
ether host 맥주소
● ether host 00:08:15:00:08:15
● ether src 00:08:15:00:08:15
● ether dst 00:08:15:00:08:15
● not ether host 00:08:15:00:08:15
특정 애플리케이션에 대한 트래픽 수집
port 53 / not port 53 / port 80 / port 20 or port 21 / host 10.3.1.1 and port 80 / udp src port 68 and udp dst port 67 ...
portrange 1-80 : 1부터 80번 포트 다 보여줘
tcp portrange 1-80 : 1부터 80번 포트 중 tcp인 것을 보여줘
Display Filter
디스플레이 필터는 빨간 네모칸 안에 문법을 넣으면 사용할 수 있습니다.
송신지 ip가 192.168.0.2 인 것들만 필터링 해보겠습니다.
1) ip.src == 192.168.0.2 입력 후 엔터
그런데 문법이 확실하게 알지 못할 때는 어떻게 해야할까요? apply as filter와 prepare as filter를 활용하면 됩니다!
apply as filter => 문법이 확실해서 값을 불러 enter까지 친다.
prepare as filter => 문법이 확실하지 않아서 값을 불러놓는다.
prepare as filter 사용
1) 문법이 필요한 필드 위에서 오른쪽 마우스 클릭
2) prepare as filter 클릭
3) Selected 클릭
4) 필터부분에 값이 들어감.
5) 엔터 후 실행
apply as filter 사용
1) apply as filter 클릭 후 Selected 선택 시 바로 실행됨
트래픽 필터링
1) 단순 IP 주소 호스트에게/부터의 트래픽 필터링
필드명 연산자 값
● ip.addr == 10.3.1.1
● !ip.addr ==10.3.1.1
● ipv6.addr == 2406:da00:ff00::6b16:f02d
● ip.src==10.3.1.1
● ip.dst==10.3.1.1
● ip.host == www.wireshark.org
2) 주소 범위에게/부터의 트래픽 필터링
관계/논리연산자 사용 가능하고, 범위에 있는 값을 찾는 것도 가능합니다.
● ip.addr > 10.3.0.1 && ip.addr < 10.3.0.5
● (ip.addr >= 10.3.0.1 && ip.addr <= 10.3.0.6) && !ip.addr ==10.3.0.3
● ipv6.addr == fe80:: && ipv6.addr < fec0::
3) IP 서브넷에서/으로부터 트래픽 필터링
대역대로 걸고 싶을때 사용합니다.
● ip.addr == 10.3.0.0/16
● ip.addr == 10.3.0.0/16 && !ip.addr ==10.3.0.3
● !ip.addr == 10.3.0.0/16 && !ip.addr ==10.2.0.0/16
Capture Filter vs Display Filter 구문 비교
캡처 필터 구문 예제 | 디스플레이 필터 예제 |
host 172.16.1.1 | ip.host == 172.16.1.1 |
src host 172.16.1.1 | ip.src == 172.16.1.1 |
dst host 172.16.1.1 | ip.dst == 172.16.1.1 |
port 8080 | tcp.port == 8080 |
!port 8080 | !tcp.port == 8080 |
[추가 설명]
syn==1 && ack == 0 (3way handsake 1단계)
syn==1 && ack == 1 (3way handsake 2단계)
syn==0 && ack == 1 (3way handsake 3단계) (3 way가 아니어도 필터링에서 잡힐 수 있음)
필터링 사용 시 tcp.flags.syn == 1 and tcp.flags.ack == 0 이런 방식으로 사용
Conversation Filter
관심있는 데이터를 빠르게 분석 할 수 있는 필터입니다. 필터링 방법은 2가지가 있는데 Conversation과 Strem Follow가 있습니다.
Statistics > Conversation Filter
[Statistics]-[Conversations]를 클릭합니다.
위의 그림에서 보면 172.16.0.122와 가장 많은 통신을 한 곳은 205.234.218.129입니다. 반대로 가장 적은 통신을 한곳은 199.181.132.250입니다. Conversation은 하나하나가 아닌 전체적인 것을 볼 때 사용하면 좋습니다. 누가누구에게 얼마만큼의 데이터를 전송했는지 한눈에 알 수 있습니다.
Statistics > Protocol Hierarchy
[Statistics]-[Protocol Hierarchy]를 클릭합니다.
956개의 패킷이 있음을 알수 있고, 이더넷 망에서 수집한 패킷이 100%입니다. UDP는 2.9, TCP는 97.1를 차지하고 있습니다. TCP중에서도 HTTP가 가장 많이 차지하고 있음을 알 수 있습니다. 이 화면에서도 프로토콜에 오른쪽 마우스를 눌러 Apply as Filter를 적용할 수 있습니다.
Statistics > Flow Graph
[Statistics]-[Flow Graph]를 클릭합니다.
전체적인 흐름을 볼 수 있습니다. 만약 TCP의 흐름만 보고 싶다면 하단 Flow type을 바꿔주면 됩니다.
[참고] Endpoints
[Statistics]-[Endpoints]를 클릭합니다.
어느 사이트에서 얼마만큼의 데이터가 들어오고 나갔는지, 송수신지 패킷량이나 특정 사이트에 오는 패킷을 볼 때 활용합니다.
Stream Follow
여러 패킷의 데이터를 통합하여 쉽게 읽을 수 있는 형식으로 재구성(재조립)한 것입니다. TCP, UDP, SSL, HTTP로 총 4가지 유형의 스트림이 있습니다.
1) 패킷을 선택합니다.(TCP, UDP, SSL, HTTP)
2) 오른쪽 마우스를 클릭하여 Follow > ?? Stream을 선택
Tshark
현업에서 망 관제사로서 다수의 트래픽을 통해 패킷을 수집할 때, Wire Shark으로 수집하면 수집량이 너무 많기 때문에 컴퓨터가 다운됩니다. 그래서 Tshark을 사용합니다.
통역식 분석 : 즉시즉시 한줄씩 번역 (interpreter식)
번역식 분석 : 한방에 번역 (comfile식)
Wire Shark 는 라인별 분석, 통역식분석을 진행합니다. 그래서 분석하다가 놓치는 패킷들이 있기 때문에 캡쳐율이 낮다고 하며, 수집률이 낮습니다. 수집된 데이터의 신뢰성이 떨어집니다.
[Tshark 실습]
1) Wire Shark을 열고 [Help]-[About Wireshark] 클릭
2) Folders 클릭 > Global configuration 폴더 더블클릭
3) cmd 관리자 권한으로 실행
4) cd C:\Program Files\Wireshark 이동
5) dir tshark* 입력
트래픽 수집은 dumpcap.exe 또는 tshark.exe를 이용하여 cmd에서 수집합니다.
6) cmd 창에 tshark -D 입력 (랜카드 목록 확인하는 명령어)
7) cmd 창에 tshark -i 5 입력 (d 명령어로 확인한 이더넷 목록번호 입력)
i는 interface 번호입니다. 이 명령어를 수행한 화면으로는 패킷을 수집한 것이지 분석할 수는 없습니다.
8) cmd 창에 tshark -i 5 -w T1.pcapng 입력
패킷 수집과 동시에 파일화 시켜주는 명령어 입니다. 파일명은 T1으로 설정하였습니다.
해당 파을은 C:\Program Files\Wireshark 폴더 안에 생성되어있습니다.
9) cmd 창에 tshark -r T1.pcapng입력
T1.pcapng 파일을 읽어오는 명령어 입니다. 근데 언제 읽어... T1.pcapng 파일 더블클릭하면 WireShark로 연결됩니다.
10) cmd 창에 tshark –i 5 –a files:3 –b duration:10 –w T2.pcapng 입력
파일로 저장하더라도 계속 사람이 종료하고 실행하고 할 수 없습니다. 다음 명령어는 cmd에서 자동화 하는 명령어입니다.
-a file:3 3개 파일 수집 후 자동정지
-b duration:10 10초 후에 다음파일 생성
-w T2.pcapng 추적파일명
11) Tshark에서도 Capture Filter 적용이 가능합니다.
cmd 창에 tshark –i 5 –f "tcp" –w T3_tcp.pcapng 입력
12) Display Filter를 적용도 됩니다.
cmd 창에 tshark –r “T3_tcp.pcapng” –Y "tcp.analysis.flags" 입력
T3_tcp를 읽어와서 그 중 필요한 값만 걸러내는 명령어 입니다.
13) 읽고 원하는 정보 뽑아서 파일로 만들 수도 있습니다.
cmd 창에 tshark –r “T3_tcp.pcapng” –Y "tcp.analysis.flags" -w tcpflag.pcapng 입력