Suricata를 Kali linux에 구축할 경우 sudo apt install suricata 명령어로 설치 후 바로 사용이 가능하지만, Ubuntu에 설치하게 될 경우 추기적인 패키지 설치와 몇 가지 설정들을 추가적으로 해줘야해서 조금 더 복잡해지는 것 같다. 상황에 따라 우분투에서 진행해야하는 경우가 있을 수 있으니 Ubuntu 20.04 버전에 Suricata를 설치하는 방법을 정리해보려고 한다.
설치 전에 먼저 루트 계정으로 들어간 뒤 apt get update 해준다.
1. Suricata에서 요구되는 종속성 설치
Suricata를 컴파일하기 위해 필요한 몇가지 종속성을 설치해야한다.
apt-get install rustc cargo make libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev libjansson-dev libjansson4 pkg-config
Suricata는 기본적으로 IDS로 동작한다. IPS 기능을 포함하려면 아래와 같은 패키지를 더 설치해야한다.
apt-get install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
모든 패키지를 설치 완료하면 python3-pip 패키지를 설치한 뒤 Suricata rule을 업데이트하기 위한 suricata-update 툴을 설치한다.
apt-get install python3-pip
pip3 install --upgrade suricata-update
ln -s /usr/local/bin/suricata-update /usr/bin/suricata-update
2. Suricata 설치
https://www.openinfosecfoundation.org/download
위 링크에 들어가서 Suricata의 최신 버전을 확인한다. 지금의 경우 최신 버전은 suricata-6.0.3.tar.gz 이다.
최신 버전을 확인하면 아래와 같이 명령어를 입력해서 가장 최신 버전의 Suricata를 다운한다.
다운이 완료되면 압축을 풀어준다.
wget https://www.openinfosecfoundation.org/download/suricata-6.0.3.tar.gz
tar -xvzf suricata-6.0.3.tar.gz
압축을 푼 디렉터리 내로 들어간 뒤 configure 명령어를 입력한다.
cd suricata-6.0.3
./configure --enable-nfqueue --prefix=/usr --sysconfdir=/etc --localstatedir=/var
make 명령어를 입력하여 소스코드를 컴파일 한 뒤 make install로 Suricata를 설치한다. (이 부분은 시간이 좀 걸린다.)
make
make install-full
이제 아래 명령어를 입력해서 모든 rule 파일을 설치한다.
기본적으로 모든 규칙은 /var/lib/suricata/rules/suricata.rules에 존재한다. 해당 경로로 가서 cat suricata.rules 을 입력하면 설치한 정책들을 볼 수 있다.
make install-rules
3. Suricata 옵션 설정
Suricata를 우분투에 설치 완료했으면 suricata.yaml 파일에서 옵션을 설정해주어야한다.
vim /etc/suricata/suricata.yaml
아래와 같이 HOME_NET과 EXTERNAL_NET 변수를 인프라 요구사항에 따라 설정해준다.
여기서 HOME_NET은 탐지 대상 네트워크가 된다.
HOME_NET: "[IP 주소 입력]"
EXTERNAL_NET: "!$HOME_NET"
이제 Suriacata 설치는 끝났다! Suricata가 잘 동작되는지 테스트해보자.
4. Suricata 테스트
테스트하기 전에 Suricata가 수신하는 네트워크 인터페이스에서 패킷 오프로드 기능을 비활성화해야한다.
ethool 패키지가 설치되어있지 않으면 먼저 설치하고, 패킷 오프로드를 비활성화한다.
apt-get install ethtool
ethtool -K eth0 gro off lro off
rule 파일 기본 경로는 처음에 /var/lib/suricata/rules로 설정되어있으므로 해당 경로로 이동한 뒤 test.rules 파일을 작성한다.
cd /var/lib/suricata/rules
vi test.rules
테스트를 위해 다음과 같이 ICMP 패킷 발생 시 alert 경고를 알리는 rule을 작성하였다.
alert icmp any any -> $HOME_NET any (msg:"ICMP 연결 시도"; sid:1000002; rev:1;)
다시 /etc/suricata 경로로 가서 suricata.yaml 파일을 수정해준다.
rule-files 단어 검색 후 아래에 test.rules 파일을 추가해준다.
IDS 모드 실행: suricata -c /etc/suricata/suricata.yaml -i eth0
IDS를 작동시켰으면 새로운 터미널을 열어 탐지되는 로그를 실시간으로 확인한다.
Suricata IDS에 탐지되는 로그 실시간 확인: tail -f /var/log/suricata/fast.log
tail -f /var/log/suricata/fast.log 명령어를 입력하고 위에서 ICMP 패킷 발생 시 alert하는 룰을 작성했으므로 해당 ip주소로 ping을 날려보았다.
그러면 다음과 같이 fast.log 파일에 로그가 뜨는 것을 확인할 수 있다!!
5. Suricata 사용방법 정리
1) rule 작성
/var/lib/suricata/rules에서 특정 패킷에 대한 로그를 수집하거나 차단하고자 하는 정책을 작성한다.
2) rule 파일 추가
/etc/suricata/suricata.yaml : rule-files 검색해서 아래 리스트에 작성한 rule 파일을 추가한다.
3) IDS/IPS 실행 및 로그 실시간 확인
* IDS의 경우: suricata -c /etc/suricata/suricata.yaml –i eth0
새로운 터미널 열어서 tail –f /var/log/suricata/fast.log 입력
* IPS의 경우: suricata -c /etc/suricata/suricata.yaml -q 0
룰셋에 의해 차단된 로그는 tail -f /var/log/suricata/drop.log 명령어로 실시간 확인
★차단을 하기 위해서는 리눅스 방화벽(iptables)과 Suricata를 연결해서 네트워크 패킷을 실시간으로 Suricata에서 읽어와야한다. 따라서 Suricata의 특정 함수로 네트워크 패킷들을 보내주어야한다. 이 특정 함수가 바로 "NFQUEUE"이고, 이것이 Suricata로 네트워크 패킷을 보내주는 역할을 한다.
INTPUT , OUTPUT 모든 네트워크들을 보내주는 명령어
sudo iptables -I INPUT -j NFQUEUE
sudo iptables -I OUTPUT -j NFQUEUE
만약 특정 프로토콜 통신만 Suricata로 보내고자 한다면 아래와 같이 작성하면 된다.
sudo iptables -I INPUT -p [프로토콜] -j NFQUEUE
sudo iptables -I OUTPUT -p [프로토콜] -j NFQUEUE
'Security > Suricata' 카테고리의 다른 글
Suricata rule 구조 및 rule 작성 규칙 정리 (0) | 2021.08.02 |
---|