Search

Zeek 설치 완벽 가이드

Zeek은 오픈소스 NIDS로 네트워크 보안 모니터링 도구다. 여러곳에서는 bro 버전일 때부터, 직접 make install 을 하는 등의 방법을 안내하고 있다. 해당 방식으로 설치하기엔 너무 오래걸릴 뿐더러 오류도 잦아 수많은 시행착오를 거친 뒤 공식 도큐먼트와 블로그에서 안내하는 방법들을 조합해 정리했다. 2023.04.13

Zeek?

Zeek은 오픈소스 NIDS(Network + IDS)로 네트워크 보안 모니터링 도구다.
Zeek의 목적은 네트워크 트래픽을 검사하고 보이는 활동을 설명하는 다양한 로그를 생성하는 것으로 http, dns, ssh, ssl 등 다양한 통신에 대한 로그를 만들어 남겨준다.
보통 이것만으로는 로그를 보기 힘들기 때문에 ELK나 Splunk 등 SIEM에 연동하여 로그를 기반으로 악성 행위는 없는지 분석하곤 한다. Snort나 Suricata 등의 다른 오픈소스 기반 툴과 연계하는 형태로 자주 사용한다.

Zeek 설치

다음 문서를 참조했고 설치는 우분투 22.04 이미지 위에 설치했다.
공식 문서와 아래 블로그에서 참조 및 인용했다.

🅐 패킷 손실을 최소화해 Zeek에서 확인하기 위한 사전 작업 (선택)

1) MAX RING 설정

먼저 네트워크 인터페이스의 Ring Parameter 값을 최대로 늘려준다.
enp2s0, bt_mirror는 zeek을 통해 모니터링하고 싶은 서버 네트워크 인터페이스다.
RX 최대 값은 4096이지만 현재는 256으로 설정돼있으므로 최대로 늘려준다.
sudo ethtool -g bt_mirror
Bash
복사
root/sudo 권한 계정으로 파일 생성(또는 수정)으로 각 네트워크 인터페이스에 대해 아래 내용을 작성한다.
vi /etc/networkd-dispatcher/routable.d/10-set-max-ring
Bash
복사
#!/bin/sh # Set ring rx parameters for all sniffing interfaces ethtool -G enp2s0 rx 4096
Bash
복사
해당 파일에 대해 755 권한을 부여한다.
sudo chmod 755 /etc/networkd-dispatcher/routable.d/10-set-max-ring
Bash
복사

2) NIC OFFLOADING 비활성화

root/sudo 권한 계정으로 파일 생성(또는 수정)으로 각 네트워크 인터페이스에 대해 아래 내용을 작성한다.
vi /etc/networkd-dispatcher/routable.d/20-disable-checksum-offload
Bash
복사
#!/bin/sh # Disable checksum offloading for all sniffing interfaces ethtool -K enp2s0 rx off tx off sg off tso off ufo off gso off gro off lro off
Bash
복사
해당 파일에 대해 755 권한을 부여한다.
sudo chmod 755 /etc/networkd-dispatcher/routable.d/20-disable-checksum-offload
Bash
복사

3) 네트워크 인터페이스 PROMISCUOUS 모드 설정

root/sudo 권한 계정으로 파일 생성(또는 수정)으로 각 네트워크 인터페이스에 대해 아래 내용을 작성한다.
vi /etc/networkd-dispatcher/routable.d/30-enable-promisc-mode
Bash
복사
#!/bin/sh # Enable promiscuous mode for all sniffing interfaces ip link set enp2s0 arp off multicast off allmulticast off promisc on
Bash
복사
해당 파일에 대해 755 권한을 부여한다.
sudo chmod 755 /etc/networkd-dispatcher/routable.d/30-enable-promisc-mode
Bash
복사

4) 제대로 적용됐는지 확인

시스템을 재부팅하고 각각 설정 적용을 확인한다.
Current hardware settings RX 값이 4096으로 최대값을 만족한다.
sudo ethtool -g bt_mirror
Bash
복사
NIC offloading이 제대로 꺼져있다.
sudo ethtool -k enp2s0 | grep "checksumming"
Bash
복사
PROMISC 설정도 정상적이다.
ip a show enp2s0 | grep -i promisc
Bash
복사

🅑 Zeek 설치

1) Zeek 관련 패키지 설치

sudo apt-get install cmake make gcc g++ flex bison libpcap-dev libssl-dev python3 python3-dev python3-git python3-semantic-version swig zlib1g-dev libjemalloc-dev sudo apt-get update sudo apt-get dist-upgrade
Bash
복사

2) Zeek 유저 생성 및 권한 부여

root/sudo 권한으로 실행한다.
sudo adduser zeek sudo usermod -aG zeek zeek sudo passwd zeek # 비밀번호 설정 sudo usermod -aG sudo zeek #sudo 권한 부여 sudo mkdir /opt/zeek sudo chown -R zeek:zeek /opt/zeek sudo chmod 750 /opt/zeek
Bash
복사

3) Zeek 설치

zeek 계정으로 로그인한다.
su zeek
Bash
복사
아래 APT INSTALL 명령어로 간단히 해결된다. 공식 Doc에서는 도커 방식도 지원하고 있으니 도커에 친숙하다면 도커를 활용하는 것도 좋다.
Git에서 직접 다운받는 방법도 있으나 추천하지는 않는다.
참조 : Git에서 받아서 Install하는 방식 (오래걸린다)
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_22.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_22.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null sudo apt update sudo apt install zeek-lts -y
Bash
복사
Internet Site를 그대로 선택해주면 된다. (관련 설정은 doc 참조, 이메일 서비스에 관련된 설정이다)
Zeek 실행프로그램(bin)에 패킷캡처 권한을 부여한다.
sudo setcap cap_net_raw=eip /opt/zeek/bin/zeek sudo setcap cap_net_raw=eip /opt/zeek/bin/capstats
Bash
복사

4) PATH 설정

zeek 유저로 실행, 바로 실행이 가능하도록 .bashrc파일에 다음 값을 최하단에 추가한다.
vi ~/.bashrc
Bash
복사
# Add Zeek to PATH export PATH="/opt/zeek/bin:$PATH"
Bash
복사
적용을 위해 다음 명령어를 실행한다.
source ~/.bashrc
Bash
복사

 🅒 Zeek 설정

네트워크 인터페이스를 설정할 노드 설정
vi /opt/zeek/etc/node.cfg
Bash
복사
interface부분을 수정해주면 된다.
[zeek] type=standalone host=localhost interface=eth0 # change this according to your listening interface in ifconfig
Bash
복사
여러 노드를 사용할 경우 다음과 같이 worker 부분을 사용하면 된다. (CPU 최대 수보다 1,2개 적도록 구성)
interface 값을 수정해 여러 네트워크에서 수집할 수도 있다.
참조 : 네트워크 로그 interface를 활성화하기 위해 네트워크 망에서 다음 설정이 필요한 경우가 있다.
sudo ip link set dev [네트워크인터페이스명] up
Bash
복사

🅓 Zeek 실행

zeek 사용자로 다음과 같이 실행하면 설정이 적용되고 시작된다.
zeekctl [ZeekControl] > install [ZeekControl] > start
Bash
복사
zeek를 종료하고 싶을 땐 다음 명령어를 실행한다.
[ZeekControl] > stop
Bash
복사
잘 운영되고 있는지 확인하고 싶을 땐 다음 명령어를 실행한다.
[ZeekControl] > status
Bash
복사
오류가 발생하면 다음 명령어를 통해 오류를 확인할 수 있다.
[ZeekControl] > diag # zeekctl diag
Bash
복사
로그 생성 위치는 아래서 확인 가능하다.
ls -l /opt/zeek/logs/current
Bash
복사

🅔 Zeek Crontab 설정

zeek는 지속 실행되는 것이 좋으므로 계속 실행될 수 있도록 예약작업을 걸어둔다.
zeek사용자로 로그인해 crontab을 실행한다.
crontab -e
Bash
복사
다음을 추가해 5분마다 실행되는 cron 작업을 설정한다.
*/5 * * * * /opt/zeek/bin/zeekctl cron
Bash
복사

Zeek 연동

Zeek 로그만으로는 분석하기 어려운만큼 다른 체계에 해당 로그를 전송해 분석하는 형태가 대부분이다.
대표적으로 Splunk와 Elastic을 사용하며 연동 방법에 대해서는 아래에서 다루고 있다.

Splunk

세계 점유율 1위 SIEM Splunk다. Zeek을 제작한 Corelight 사에서 공식적인 앱도 제공하며 Suricata와 함께하는 위협헌팅을 적극 권장하고 있다.

 ELK(Elastic Search + Logstash + Kibana)

엘라스틱서치에 대한 설명은 다음 문서를 참고하자
요약하면 Zeek 정보를 보기 좋게, 검색하기 쉽게 만들기 위해 설치하는 친구로 오픈소스 SIEM이다
Zeek은 ELK 연동 및 Splunk 연동 둘다 가능한데 다음을 참고하자.

다른 포스트

✓ 다른 [정리] 포스트

베트남 환전 왜 한국에서 하면 안될까? (한국 vs 공항 vs 금은방)
Travel
베트남 환전 왜 한국에서 하면 안될까? (한국 vs 공항 vs 금은방)
Travel
Load more
︎ 더 많은 게시물을 보려면
︎ 작성자가 궁금하면?
 2023. Absolroot all rights reserved.