Network

[Network] 패킷 수집 및 네트워크 트래픽 분석기 - Zeek

limsw 2023. 3. 17. 22:32
반응형

로그 수집 기술의 필요성

사이버보안이 중요해지고 있는 시대에서, 비인가(혹은 공격자)자의 위협 행위를 탐지하고 선제적으로 관제/차단하는 것은 매우 중요한 요소이다. 그리고, 사용자들의 행위는 대부분 Syslog와 같이 로그 형태로 기록되기 때문에 이러한 로그를 수집하고 분석하는 것은 더욱 중요하고 의미있는 행위라고 생각한다.

 

또한, 꼭 사이버보안의 측면 뿐만 아니라 시스템을 운영하는 측면에서도 시스템 내에서 발생하는 모든 네트워크 트래픽 행위들을 데이터로써 수집하고 저장할 수 있다면 그것 또한 중요한 자산이 될 수 있다.

 

따라서, 이번 글에서는 로그 수집 기술인 Zeek의 개념, 설치 방법 그리고 간단한 사용법을 통해 로컬 네트워크 상에서 발생하는 트래픽을 수집하는 방법을 간단하게 알아보고자 한다.

지크(Zeek)란?

지크(Zeek)는 오픈 소스 네트워크 트래픽 분석기로, 네트워크 상에서 발생하는 다양한 패킷 정보들을 수집하여 로그 파일의 형태로 저장하는 역할을 수행한다. 특히 지크는 이상 패킷이나 비인가 패킷을 탐지해야 하는 보안이 중요한 분야에서 효율적으로 사용할 수 있다.

 

패킷을 수집한다는 점에서 패킷 스니핑 툴인 와이어샤크(Wireshark)와 비슷하다고 생각할 수도 있지만, 지크는 패킷 정보를 로그 파일의 형태로 수집하고 와이어샤크는 패킷 정보를 PCAP 파일로 저장한다는 점에서 차이점이 존재하며, 프레임 수준에서 네트워크 트래픽의 모든 요소를 나타낸다는 점 또한 와이어샤크와 다른 부분이 존재한다.

지크(Zeek) 설치 및 환경설정

  • 해당 글은 MacOS 운영체제 기반의 실습이므로 모든 과정은 MacOS 기준으로 설명한다.

먼저 지크를 사용하기 위해서는 Xcode 또는 Command Line 툴이 필요하다. 터미널을 실행한 뒤 아래와 같은 명령어를 입력한다.

$ xcode-select -p // Library/Developer/CommandLineTools

주석과 같은 결과가 나오지 않는다면 아래 명령어를 입력한다.

$ xcode-select --install

다음으로는 brew를 이용하여 지크를 설치한다.

 

 

[Util] 맥북 Homebrew란? 설치 및 삭제 방법 알아보기

Homebrew는 무엇일까? MacOS 전용 패키지 관리 도구로 터미널을 통해서 명령어를 실행하며, 패키지 설치 및 제거를 쉽고 간단하게 할 수 있도록 도와준다. Homebrew 이외에도 터미널 명령어를 이용해서

limsw.tistory.com

$ brew install zeek
$ zeek -v # zeek version 5.2.0

설치 뒤 버전을 확인하면 가장 최신 버전의 지크가 설치된 것을 확인할 수 있다.

 

다음은 admin의 패킷 수집 관련 권한 설정을 진행한다.

$ sudo chgrp admin /dev/bpf*
$ sudo chmod g+r /dev/bpf*

이제 모니터링할 인터페이스를 지정해야 한다. nano /usr/local/etc/node.cfg 명령어를 입력하고 다음과 같이 코드를 수정한다.

[zeek]
type=standalone
host=localhost
interface=en0 # init, eth0

초기 설정한 eth0를 제거하고 en0 값을 사용했다. 인터페이스 값은 ifconfig 명령어를 이용하여 확인할 수 있으며 해당 실습의 경우 와이파이 환경에서 진행하는 실습이므로 en0를 사용했다.

다음으로는 네트워크 대역을 설정해야 한다. nano /usr/local/etc/networks.cfg 명령어를 입력하자.

10.0.0.0/8          Private IP space
172.16.0.0/12       Private IP space
192.168.0.0/16      Private IP space

networks.cfg 파일의 초기 구성은 위와 같다. 해당 내용에 자신의 IP 대역을 추가해주면 된다.

 

먼저, 본인의 IP 주소를 확인하기 위해서 다음과 같이 터미널 명령어를 입력한다.

$ dig -4 TXT +short o-o.myaddr.l.google.com @ns1.google.com
# 결과 : "121.171.235.11"

실습을 진행하는 환경에서 나의 IP 주소는 121.171.235.11 이다.

따라서 IP 대역을 121.171.0.0 ~ 121.171.255.255로 설정하기 위해 다음과 같이 네트워크 대역을 추가했다.

10.0.0.0/8          Private IP space
172.16.0.0/12       Private IP space
192.168.0.0/16      Private IP space
121.171.0.0/16      Private IP space # 추가 부분

이제 초기 환경설정이 모두 끝났으므로, 지크를 실행해보자.

지크(Zeek) 실행하기

$ cd /usr/local/bin
$ ./zeekctl

위 명령어를 차례대로 입력한다. 만약 Error: zeekctl option "logdir" directory not found: /usr/local/Cellar/zeek/5.2.0/logs

에러가 발생한다면 cd /usr/local/Cellar/zeek/5.2.0 으로 들어간 뒤 mkdir logs 명령어를 입력하여 디렉토리를 생성한다.

 

zeekctl을 실행한 화면

위 결과가 나타나면 ZeekControl에 성공적으로 접속한 것이다.

help 명령어를 통해 zeekctl에서 제공하는 명령어를 확인할 수 있다.

 

이제 로그를 수집하기 위해 deploy 명령어를 입력하자. (start 명령어를 입력해도 무방하다.)

 

  • deploy는 zeekctl stop 명령어를 수행 후 zeekctl start 명령어를 순차적으로 수행한다.

zeek가 성공적으로 실행된 화면

위와 같이 지크가 실행되면 /usr/local/Cellar/zeek/5.2.0/logs 안에 current 라는 디렉토리가 생성된다.

 

그리고 해당 디렉토리로 들어가보면,

아직 내용은 모르지만 여러 유형의 로그 파일이 생성된 것을 확인할 수 있다.

우리는 이후 네트워크의 연결을 다루고 있는 Connection Log (conn.log) 파일을 활용할 예정이다.

로그 수집 결과 확인하기

이제 stop 명령어를 이용하여 패킷 수집을 종료한다.

 

  • 패킷 수집이 종료되면 current 디렉토리 내 로그 파일은 모두 없어지며, 현재 날짜 기준으로 새로운 디렉토리가 생성되고 해당 디렉토리 안에 수집한 로그 파일이 생성된다. 이 때 로그 정보들은 압축된 형태로 저장된다.

현재 날짜 기준으로 디렉토리가 생성되고 그 안에 로그 파일이 생성되었다.

이제 특정 파일에 저장된 패킷 정보들을 확인해보자. 해당 실습에서는 conn.log 유형인

conn.21:05:04...(생략).log.gz 파일을 사용할 예정이다. 압축 파일을 읽기 위해서 다음과 같이 명령어를 입력한다.

$ zcat -f conn.21:05:04-21:07:16.log.gz

위 명령어를 입력하면 패킷 정보가 데이터 그리드 형태로 출력되는 것을 확인할 수 있을 것이다.

 

참고로, 여러 패킷 정보 중에서 원하는 정보만 추출하고자 할 때에는 zeek-cut 명령어를 이용하여 데이터를 전처리 할 수 있다.

5-Tuple 정보인 송/수신 IP, 송/수신 PORT, 프로토콜 유형을 추출해보자.

 

  • zcat -f 파일명 | zeek-cut id.orig_h id.resp_h id.orig_p id.resp_p proto

결론

이번 실습에서는 단순하게 네트워크 상에서 발생하는 트래픽을 수집해보았지만, 사이버 보안을 구축할 수 있는 첫번째 단계는 사용자 행위에 대한 데이터를 수집하는 것이라고 생각하기 때문에 단순 트래픽 수집 또한 매우 의미있는 일이라고 생각한다.

 

시간이 된다면 수집한 데이터를 가지고 분석/전처리 하여 패킷 정보들을 시각화하는 실습도 진행할 예정이다.