BPF(Berkeley Packet Filter)

BPF(Berkeley Packet Filter)는 침입 감지 분석을 위한 강력한 도구를 제공합니다. BPF 필터링을 사용하면 특정 유형의 트래픽을 기반으로 필터링하여 대용량 패킷 캡처를 감소된 결과 세트로 빠르게 줄일 수 있습니다. 관리 및 비관리 사용자 모두 BPF 필터를 작성할 수 있습니다.

BPF 필터를 사용하려면 포렌식 복구 창에서 사용자 정의 BPF 사용 선택란을 선택하여 BPF 입력 필드를 활성화하십시오.

BPF 필터 작성에 대해 자세히 알아보려면 다음 절을 검토하십시오.

기초

기초는 호스트, 포트 또는 TCP 포트와 같은 네트워크 프로토콜 헤더에 있는 필드에 대한 참조입니다. BPF 구문은 하나 이상의 기초로 구성됩니다. 대개 기초는 ID(일반적으로 이름 또는 숫자)로 구성되며 하나 이상의 규정자가 ID 앞에 옵니다.
Type 규정자
Type 규정자는 ID 이름 또는 숫자가 나타내는 정보의 종류를 식별합니다. 예를 들어, 유형은 host, net, port 또는 portrange를 나타낼 수 있습니다. type 규정자가 없으면 host가 사용됩니다.
Dir 규정자
Dir 규정자는 ID와 관련된 전송 방향을 지정합니다. 예를 들어, dir 규정자는 src, dst 또는 src or dst일 수 있습니다.
Proto 규정자
proto 규정자는 일치를 특정 프로토콜로 제한합니다. 가능한 프로토콜은 ether, fddi, tr, wlan, ip, ip6, arp, rarp, decnet, TCP 또는 UDP입니다.
표 1. 기초 필터
기초 필터 설명
[src|dst] host <host> IP 소스, 대상 또는 둘 중 하나인 호스트와 일치합니다.
다음 목록은 호스트 표현식의 예제를 보여줍니다.
  • dst host 192.168.1.0
  • src host 192.168.1
  • dst host 172.16
  • src host 10
  • host 192.168.1.0
  • host 192.168.1.0/24
  • src host 192.168.1/24

호스트 표현식은 ip, arp, rarp 또는 ip6와 같은 다른 프로토콜과 함께 사용될 수 있습니다.

ether [src|dst] host <ehost> 이더넷 소스, 대상 또는 둘 중 하나인 호스트와 일치합니다.
다음 목록은 호스트 표현식의 예제를 보여줍니다.
  • ether host <MAC>
  • ether src host <MAC>
  • ether dst host <MAC>
[src|dst] net <network> 소스 및 대상 또는 둘 중 하나에서 보내거나 받은 패킷과 일치합니다.
IPv4 네트워크 번호는 다음과 같이 지정할 수 있습니다.
  • 점으로 구분된 네 개의 번호 형식(예: 192.168.1.0)
  • 점으로 구분된 세 개의 번호 형식(예: 192.168.1)
  • 점으로 구분된 두 개의 번호 형식(예: 172.16)
  • 단일 번호(예: 10)
다음 목록은 몇 가지 예제를 보여줍니다.
  • dst net 192.168.1.0
  • src net 192.168.1
  • dst net 172.16
  • src net 10
  • net 192.168.1.0
  • net 192.168.1.0/24
  • src net 192.168.1/24
[src|dst] net <network> mask <netmask> or [src|dst] net <network>/<len> 특정 넷마스크를 사용하는 패킷과 일치합니다.
/len을 사용하여 IP 주소 범위의 트래픽을 캡처할 수도 있습니다.
  • 점으로 구분된 네 개의 번호 형식(예: 192.168.1.0)에 대한 넷마스크는 255.255.255.255입니다.
  • 점으로 구분된 세 개의 번호 형식(예: 192.168.1)에 대한 넷마스크는 255.255.255.0입니다.
  • 점으로 구분된 두 개의 번호 형식(예: 172.16)에 대한 넷마스크는 255.255.0.0입니다.
  • 단일 번호(예: 10)에 대한 넷마스크는 255.0.0.0입니다.
다음 목록은 몇 가지 예제를 보여줍니다.
  • dst net 192.168.1.0 mask 255.255.255.255 or dst net 192.168.1.0/24
  • src net 192.168.1 mask 255.255.255.0 or src net 192.168.1/24
  • dst net 172.16 mask 255.255.0.0 src net 10 mask 255.0.0.0
[src|dst] port <port> or [tcp|udp] [src|dst] port <port> 포트로 전송되거나 포트에서 전송된 패킷과 일치합니다.

특정 결과를 얻기 위해 TCP, UDP 및 IP와 같은 프로토콜을 포트에 적용할 수 있습니다

다음 목록은 몇 가지 예제를 보여줍니다.
  • src port 443
  • dst port 20
  • port 80
[src|dst] portrange <p1>-<p2> or [tcp|udp] [src|dst] portrange <p1>-<p2> 특정 범위의 포트에서 보내거나 받은 패킷과 일치합니다.

범위 내의 특정 패킷을 필터링하기 위해 프로토콜을 포트 범위에 적용할 수 있습니다.

다음 목록은 몇 가지 예제를 보여줍니다.
  • src portrange 80-88
  • tcp portrange 1501-1549
less <length> 길이가 같거나 같은 패킷(예: len <= length)과 일치합니다.
greater <length> 길이가 length 이상인 패킷과 일치합니다(예: len >= length).
(ether|ip|ip6) proto <protocol> 이더넷, IPv4, 또는 IPv6 프로토콜과 일치합니다.
프로토콜은 숫자 또는 이름일 수 있습니다. 예를 들어, 다음과 같습니다.
  • ether proto 0x888e
  • ip proto 50
(ip|ip6) protochain <protocol> 프로토콜 헤더 체인에 프로토콜 헤더가 있는 IPv4 또는 IPv6 패킷과 일치합니다(예: ip6 protochain 6).
(ether|ip) broadcast 이더넷 또는 IPv4 브로드캐스트와 일치합니다.
(ether|ip|ip6) multicast 이더넷, IPv4 또는 IPv6 멀티캐스트와 일치합니다 예를 들면 ether[0] & 1 != 0입니다.
vlan [<vlan>] VLAN ID가 vlan인 802.1Q 프레임과 일치합니다.
다음은 몇 가지 예제입니다.
  • vlan 100 && vlan 200은 vlan 100 내에서 캡슐화된 vlan 200에 대해 필터링합니다.
  • vlan && vlan 300 && ip는 더 높은 차원의 vlan 내에서 캡슐화된 vlan 300에서 캡슐화된 IPv4 프로토콜을 필터링합니다.
mpls [<label>] 레이블이 있는 MPLS 패킷과 일치합니다.

MPLS 표현식을 두 번 이상 사용하여 MPLS 계층 구조를 필터링할 수 있습니다.

다음 목록은 몇 가지 예제를 보여줍니다.
  • mpls 100000 && mpls 1024는 외부 레이블이 100000이고 내부 레이블이 1024인 패킷을 필터링합니다.
  • mpls && mpls 1024 && host 192.9.200.1은 내부 레이블이 1024이고 외부 레이블이 임의의 레이블인 192.9.200.1의 패킷을 필터링합니다.
페이지의 맨 위로 돌아가기

프로토콜 및 연산자

한정자 및 연산자를 통해 프로토콜을 기초 BPF 필터와 결합하여 복잡한 필터 표현식을 빌드할 수 있습니다.

다음 목록은 사용할 수 있는 프로토콜을 표시합니다.
  • arp
  • ether
  • fddi
  • icmp
  • ip
  • ip6
  • link
  • ppp
  • radio
  • rarp
  • slip
  • tcp
  • tr
  • udp
  • wlan
표 2. 올바른 한정자 및 연산자
설명 구문
소괄호 ( )
부정 !=
병합 '&&' 또는 'and'
대체 '||' 또는 'or'
페이지의 맨 위로 돌아가기

BPF 필터 예제

다음 표는 연산자 및 한정자를 사용하는 BPF 필터의 예제를 보여줍니다.

표 3. BPF 필터 예제
BPF 필터 예제 설명
udp dst port not 53 포트 53에 바인드되지 않은 UDP입니다.
host 10.0 .0.1 && host 10.0 .0.2 이러한 호스트 간의 트래픽입니다.
tcp dst port 80 or 8080 지정된 TCP 포트 중 하나에 대한 패킷입니다.
ether[0:4] & 0xffffff0f > 25 25보다 큰 바이트에 적용되는 범위 기반 마스크입니다.
ip[1] != 0 IP 헤더의 TOS(Types of Service) 필드가 0과 같지 않은 패킷을 캡처합니다.
ether host 11:22:33:44:55:66 해당 Mac 주소를 포함하는 특정 호스트와 일치합니다.
ether[0] & 1 = 0 and ip[16] >= 224 이더넷 브로드캐스트 또는 멀티캐스트를 통해 전송되지 않은 IP 브로드캐스트 또는 멀티캐스트 브로드캐스트를 캡처합니다.
icmp[icmptype] != icmp-echo 에코 요청이 아닌 모든 icmp 패킷을 캡처합니다.
ip[0] & 0xf !=5 옵션을 사용하여 모든 IP 패킷을 캡처합니다.
ip[6:2] & 0x1fff = 0 조각화되지 않은 IPv4 데이터그램 및 조각화된 IPv4 데이터그램의 조각 0만 캡처합니다.
tcp[13] & 16 != 0 TCP-ACK 패킷을 캡처합니다.
tcp[13] & 32 !=0 TCP-URG 패킷을 캡처합니다.
tcp[13] & 8!=0 TCP-PSH 패킷을 캡처합니다.
tcp[13] & 4!=0 TCP-RST 패킷을 캡처합니다.
TCP[13] & 2!=0 TCP-SYN 패킷을 캡처합니다.
tcp[13] & 1!=0 TCP-FIN 패킷을 캡처합니다.
tcp[tcpflags] & (tcp-syn|tcp-fin) != 0 각 TCP 대화의 시작 및 마지막 패킷(SYN 및 FIN 패킷)을 캡처합니다.
페이지의 맨 위로 돌아가기