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입니다.
| 기초 필터 | 설명 |
|---|---|
[src|dst] host <host> |
IP 소스, 대상 또는 둘 중 하나인 호스트와 일치합니다. 다음 목록은 호스트 표현식의 예제를 보여줍니다.
호스트 표현식은 |
ether [src|dst] host <ehost> |
이더넷 소스, 대상 또는 둘 중 하나인 호스트와 일치합니다. 다음 목록은 호스트 표현식의 예제를 보여줍니다.
|
[src|dst] net <network> |
소스 및 대상 또는 둘 중 하나에서 보내거나 받은 패킷과 일치합니다. IPv4 네트워크 번호는 다음과 같이 지정할 수 있습니다.
다음 목록은 몇 가지 예제를 보여줍니다.
|
[src|dst] net <network> mask <netmask> or [src|dst] net
<network>/<len> |
특정 넷마스크를 사용하는 패킷과 일치합니다./len을 사용하여 IP 주소 범위의 트래픽을 캡처할 수도 있습니다.
다음 목록은 몇 가지 예제를 보여줍니다.
|
[src|dst] port <port> or [tcp|udp] [src|dst] port <port> |
포트로 전송되거나 포트에서 전송된 패킷과 일치합니다. 특정 결과를 얻기 위해 TCP, UDP 및 IP와 같은 프로토콜을 포트에 적용할 수 있습니다 다음 목록은 몇 가지 예제를 보여줍니다.
|
[src|dst] portrange <p1>-<p2> or [tcp|udp] [src|dst] portrange
<p1>-<p2> |
특정 범위의 포트에서 보내거나 받은 패킷과 일치합니다. 범위 내의 특정 패킷을 필터링하기 위해 프로토콜을 포트 범위에 적용할 수 있습니다. 다음 목록은 몇 가지 예제를 보여줍니다.
|
less <length> |
길이가 같거나 같은 패킷(예: len <=
length)과 일치합니다. |
greater <length> |
길이가 length 이상인 패킷과 일치합니다(예: len >=
length). |
(ether|ip|ip6) proto <protocol> |
이더넷, IPv4, 또는 IPv6 프로토콜과 일치합니다. 프로토콜은 숫자 또는 이름일 수 있습니다. 예를 들어, 다음과 같습니다.
|
(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 프레임과 일치합니다.다음은 몇 가지 예제입니다.
|
mpls [<label>] |
레이블이 있는 MPLS 패킷과 일치합니다. MPLS 표현식을 두 번 이상 사용하여 MPLS 계층 구조를 필터링할 수 있습니다. 다음 목록은 몇 가지 예제를 보여줍니다.
|
| 페이지의 맨 위로 돌아가기 | |
프로토콜 및 연산자
한정자 및 연산자를 통해 프로토콜을 기초 BPF 필터와 결합하여 복잡한 필터 표현식을 빌드할 수 있습니다.
다음 목록은 사용할 수 있는 프로토콜을 표시합니다.
arpetherfddiicmpipip6linkpppradiorarpsliptcptrudpwlan
| 설명 | 구문 |
|---|---|
| 소괄호 | ( ) |
| 부정 | != |
| 병합 | '&&' 또는 'and' |
| 대체 | '||' 또는 'or' |
| 페이지의 맨 위로 돌아가기 | |
BPF 필터 예제
다음 표는 연산자 및 한정자를 사용하는 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 패킷)을 캡처합니다. |
| 페이지의 맨 위로 돌아가기 | |