Study/Network

[Network]Zeek 구축 및 파일 추출(File extraction)

seomj 2024. 9. 19. 22:00

suricata에 이어 zeek에서도 파일 추출을 진행해봤다.


Zeek

passive 오픈소스 네트워크 트래픽 분석기

네트워크 보안 모니터로 주로 사용된다. 보안 외에도 성능 측정, 트러블 슈팅 등 다양한 트래픽 분석 작업을 지원한다. 

 

네트워크 활동을 자세히 기록한 다양한 로그 파일을 생성한다.

파일 추출, 악성코드 탐지, 취약 소프트웨어 버전 보고, 인기 웹 애플리케이션 식별 등 다양한 분석 기능을 제공한다.

사용자 정의 가능한 플랫폼이다.

 

즉, 네트워크 트래픽을 해석하고 이를 바탕으로 로그를 생성하는 데 최적화 되어 있다.

 

구성

 

설치

공식 페이지를 참고하면 쉽게 설치 가능하다. 

https://docs.zeek.org/en/master/install.html

 

쉽게 설치하는 방법은 아래와 같으나, 본인의 경우 소스 코드를 이용해 설치했다.

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-6.0

echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.04/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list
curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.04/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null
sudo apt update
sudo apt install [zeek, zeek-6.0, or zeek-nightly]

 

 

소스코드로 설치하기 위해 필요한 종속성 먼저 설치하자.

sudo apt-get install cmake make gcc g++ flex libfl-dev bison libpcap-dev libssl-dev python3 python3-dev swig zlib1g-dev

 

git에서 소스 코드를 가져오도록 하자.

git clone --recurse-submodules https://github.com/zeek/zeek

 

이후 그대로 설치하면 된다.

./configure
make
make install

 

 

PF_RING 설치

PF_RING이란?

고속 패킷 캡처, 필터링 및 분석

 

패킷 캡처 속도를 획기적으로 향상시키는 새로운 유형의 네트워크 소켓

Linux 시스템에 새로운 유형의 소켓을 설치하여 패킷 캡처 프로세스를 가속화할 수 있다.

 

https://www.ntop.org/products/packet-capture/pf_ring/

 

설치

공식 페이지: https://docs.zeek.org/en/master/cluster-setup.html#pf-ring-config

 

cd /usr/src
tar xvzf PF_RING-5.6.2.tar.gz
cd PF_RING-5.6.2/userland/lib
./configure --prefix=/opt/pfring
make install

cd ../libpcap
./configure --prefix=/opt/pfring
make install

cd ../tcpdump-4.1.1
./configure --prefix=/opt/pfring
make install

cd ../../kernel
make
make install

modprobe pf_ring enable_tx_capture=0 min_num_slots=32768

위 과정을 진행하면 설치 가능하다.

 

설치를 확인하려면 다음과 같은 명령어를 통해 확인할 수 있다.

modinfo pf_ring

 

이제 zeek를 설치한다.

export LD_LIBRARY_PATH=/opt/pfring/lib:$LD_LIBRARY_PATH

./configure --with-pcap=/opt/pfring
make
make install

 

다음과 같은 결과가 나오면 제대로 구성이 된 것이다.

ldd /usr/local/zeek/bin/zeek | grep pcap
        libpcap.so.1 => /opt/pfring/lib/libpcap.so.1 (0x00007fc99d81e000)

 

설정

네트워크 대역 설정

vi /usr/local/zeek/etc/networks.cfg

192.168.0.0/16

 

모니터링 할 인터페이스 설정

vi /usr/local/zeek/etc/node.cfg

[zeek]
type=standalone
host=localhost
interface=eth0   # change this according to your listening interface in ifconfig

참고로, zeek 스크립트를 사용할 것이 아니라면 명령줄에서 인터페이스 지정이 가능하다.

 

설정 확인

zeekctl check
Hint: Run the zeekctl "deploy" command to get started.
zeek scripts are ok.

 

실행

zeekctl
Hint: Run the zeekctl "deploy" command to get started.

Welcome to ZeekControl 2.5.0-58

Type "help" for help.

[ZeekControl] >

 

zeekctl 셸이 시작되고 install, start, deploy, stop 등의 명령이 있다. 

  • install: zeekcontrol 구성의 초기 설치를 수행
  • start: zeek 인스턴스 시작
  • deploy: install+start 
  • stop: zeek 인스턴스 중지
  • status: zeek 인스턴스 상태 확인

 

PF_RING 설정

인터페이스 관련 설정

vi /usr/local/zeek/etc/node.cfg

#[zeek]
#type=standalone
#host=localhost
#interface=eth0
#interface=enp2s0

[logger-1]
type=logger
host=localhost
#
[manager]
type=manager
host=localhost
#
[proxy-1]
type=proxy
host=localhost
#
[worker-1]
type=worker
host=localhost
interface=enp2s0
lb_method=pf_ring
lb_procs=10

 

이때 2가지 오류가 발생했다. 필요한 사람만 참고하길 바란다.

 

cluster-layout

export ZEEKPATH=/usr/local/zeek/share/zeek
echo $ZEEKPATH

 

bad_TCP_checksum

vi /usr/local/zeek/etc/zeekctl.cfg
zeekargs = --no-checksums

 

파일 추출

명령줄에서 실행하는 방법은 간단하다.

zeek -i enp2s0 -C /usr/local/zeek/share/zeek/policy/frameworks/files/extract-all-files.zeek

이를 수행시킨 후 client에서 파일을 업로드/다운로드 진행한다.

이후 zeek 폴더를 확인해보면 extract_files라는 디렉토리가 생성된다.

해당 디렉토리 내부에 추출된 파일이 저장된다.

 

zeekctl에서 실행하는 방법은 추가 설정이 조금 필요하다.

본인의 경우 extract만 수행하고 싶어 local.zeek가 아닌 seomj.zeek를 만들어 진행했다.

vi seomj.zeek

@load frameworks/files/extract-all-files.zeek

 

이후 zeekctl.cfg에서 seomj.zeek를 실행하도록 설정한다. 

vi /usr/local/zeek/etc/zeekctl.cfg

SitePolicyScripts = seomj.zeek

 

이와 같은 설정을 통해 스크립트를 작성하여 커스텀 가능하다. 

그리고 이때는 zeek/spool/ 아래에 extract_files라는 디렉토리가 생성된다.