
Zeek support for Community ID flow hashing.
이 Zeek 패키지는 Community ID 플로우 해싱을 지원합니다. 이는 네트워크 모니터에서 트래픽 플로우에 레이블을 지정하는 표준화된 방식입니다. 패키지를 로드하면 conn.log에 community_id 문자열 필드가 추가됩니다.
참고
Zeek 6 이상 버전에는 Community ID 지원이 포함되어 있습니다. 해당 Zeek 버전을 사용하는 경우 이 패키지가 더 이상 필요하지 않습니다. 자세한 내용은 문서를 참조하세요.
이 패키지는 해싱 로직을 구현하기 위해 BiF를 구현하므로 바이너리 컴파일이 필요하며, 따라서 Zeek 플러그인이기도 합니다. 결과 conn.log의 예는 다음과 같습니다:
#separator \x09
#set_separator ,
#empty_field (empty)
#unset_field -
#path conn
#open 2018-01-31-13-06-56
#fields ts uid id.orig_h id.orig_p id.resp_h id.resp_p proto service duration orig_bytes resp_bytes conn_state local_orig local_resp missed_bytes history orig_pkts orig_ip_bytes resp_pkts resp_ip_bytes tunnel_parents community_id
#types time string addr port addr port enum string interval count count string bool bool count string count count count count set[string] string
1071580904.891921 CPcWB54kqKkvkdNEXe 128.232.110.120 34855 66.35.250.204 80 tcp - 0.311104 496 1731 SF - - 2227 ShADadfF 6 816 6 2051 - 1:LQU9qZlK+B5F3KDmev6m5PMibrg=
#close 2018-01-31-13-06-56
이 패키지는 연결 컨텍스트가 있는 notice에 대해 Zeek의 notice.log에서 Community ID를 지원합니다. 이 기능을 사용하려면 local.zeek 또는 유사한 사이트 로컬 구성에 다음 줄을 추가하세요:
@load zeek-community-id/notice
이 줄은 Community ID 패키지 자체가 로드되지 않은 경우 아무 효과가 없습니다. 이 추가 스크립트 방식은 notice.log에 ID를 원하지 않는 사용자가 항상 사용되지 않는 추가 열로 인해 로그가 복잡해지지 않도록 보장합니다.
Community ID 사양은 현재 Zeek가 플로우 수준 상태를 추적하지 않는 여러 프로토콜 구성에 대한 지원을 구상합니다. 이는 Zeek의 분석기가 해당 트래픽을 처리하는 방법을 알지 못하기 때문입니다. 이러한 플로우의 경우 Zeek는 패키지에서 사용하는 연결 관련 이벤트를 절대 트리거하지 않으므로 어차피 conn.log에 출력이 없을 것입니다. (Zeek가 플로우 수준에서 추적하지만 플러그인이 지원하지 않는 프로토콜이 있다면 보고된 ID는 비어 있을 것입니다.) 현재 IPv4 또는 IPv6를 통한 TCP와 UDP, 그리고 ICMPv4와 ICMPv6를 지원합니다. 다른 전송 수준 프로토콜(예: SCTP) 또는 지원되지 않는 전송 계층 프로토콜에 대한 일반적인 IP 주소 쌍 플로우는 지원하지 않습니다.
패키지의 이름은 zeek-community-id이며, 플러그인의 이름은 Corelight::CommunityID입니다. 패키지의 구성 옵션은 해당 Zeek 스크립트에서 확인할 수 있습니다.
Community ID 패키지는 2.6.4 이후의 모든 Zeek 버전에서 작동합니다. 그 이후 Zeek 코드베이스에 상당한 변경이 있었으므로, 패키지는 특정 Zeek 버전 범위를 지원하는 호환성 브랜치를 제공하여 읽기 쉬운 코드와 설치 및 브랜치 관리의 용이성 사이의 균형을 유지합니다.
zeek/x.y 및 master 브랜치에서 git 태그는 Community ID 릴리스를 나타냅니다. 예를 들어 3.1.0은 zeek/3.1 브랜치의 첫 번째 릴리스이며 3.1 시리즈의 모든 Zeek에서 작동합니다. Zeek 3.1 시리즈의 다음 Community ID 릴리스는 3.1.1로 명명되며 역시 이 브랜치에 있으며, 이후 3.1.2 등이 이어집니다. (따라서 이는 시맨틱 버저닝이 아닙니다.)
각 브랜치는 또한 zkg.meta에 Zeek 버전 호환성 범위를 선언하므로 호환되지 않는 Zeek 버전과 함께 설치되지 않습니다. 예를 들어 master 브랜치는 현재 최소 Zeek 3.2.0을 요구하며 상한은 없습니다.
Zeek 버전, git 태그 및 git 브랜치가 어떻게 대응하는지 요약하면 다음과 같습니다:
| Zeek 버전 | Git 태그 | Git 브랜치 |
|---|---|---|
| 2.6.4 - 3.0.x | 3.0.y | zeek/3.0 |
| 3.1.x | 3.1.y | zeek/3.1 |
| 3.2.x - master | 3.2.y | master |
이 패키지에는 플러그인 로딩을 검증하는 btest와 포함된 테스트 pcap을 Zeek으로 처리하여 기준선(baseline) Zeek 콘솔 출력을 확인하는 btest가 포함되어 있습니다. 테스트 디렉터리에서 btest -c btest.cfg를 실행하면 됩니다.
질문과 피드백은 Zeek 메일링 리스트 또는 Zeek Slack을 통해 문의해 주세요. Github 이슈와 PR도 환영합니다.