Snort/Suricata rule 작성을 위한 환경 구성

github: https://github.com/spyrr/testbed

회사 업무로도 진행할 겸.... 겸사겸사... 여기저기에 환경을 좀 쉽게 구성하기 위해서 아래 내용을 작성합니다.
혹시나... 프로젝트에 contribution 할 수 있는 기회도 있지 않을까 싶어서 (있을까?)....- -;; snort와 suricata는 source code compile 을 하여, 구성합니다....

구성

  • kalilinux : 공격자
  • Monitor
    • Snort (alpinelinux)
    • Suricata (Ubuntu)

우선 기본적으로 docker0 interface를 모니터하는 것보다, 별도의 network을 구성하는게 좋을 것 같아서, testbed 용도로 bridge network을 우선 생성합니다.

docker network create --driver=bridge testbed
docker network ls

NETWORK ID     NAME      DRIVER    SCOPE
a5539584c261   bridge    bridge    local
c04e8db9b55d   host      host      local
2fcd6203db84   none      null      local
a6138535ea2d   testbed   bridge    local

여기서 NETWORK ID를 기억해서, NET_IF 값으로 사용합니다. (패턴: br-NETWORKID)

설치

git clone https://github.com/spyrr/testbed.git
cd testbed
NET_IF=br-a6138535ea2d docker-compose up 

snort/suricata rule 수정 : local.rules only

local.rules 파일은 snort와 suricata에서는 read only로 mount 되도록 설정했기 때문에, kali 에서 수정해야 합니다. 어차피 공격 테스트도 kali로 진행해야 하기 때문에 shell은 떠있을 것이라 생각해서, 이 방법을 선택!!

docker-compose exec kali bash
vi /rules/local.rules

룰 수정 후, snort/suricata 의 ruleset reload

아... 이게 좀 번거롭고 아쉬운 부분인데...
아래 방법을 이용하지 않아도, 그냥 "docker restart"를 통해서 특정 container만 재실행하셔도 무방합니다.

Snort

docker-compose exec snort sh
kill -1 $(pidof snort)

Suricata

docker-compose exec suricata sh
/suricata/bin/suricatasc -c ruleset-reload-nonblocking

혹은

docker restart testbed_snort_1
docker restart testbed_suricata_1

취약한 서버 실행

docker run -it --rm --name victim --net=testbed <some vulnerable image>

취약한 서버는 위와 같이, docker를 이용해서 testbed network에서 동작하도록 하시면 됩니다.

Screenshot

Screenshot

추가로 할 일....

  • HOME_NET, EXTERNAL_NET 등 환경변수를 docker-compose up 실행 시, 입력 받도록 수정
  • 파일로 생성되는 각종 로그파일 문제 -> 생성되지 않도록 수정 필요
  • SNORT/SURICATA 로그를 ELK로 모니터링 할 수 있게 변경 - 이건... 내가 필요한 부분은 아니라서 할지 안할지 모르겠.... 그냥 모든 로그를 syslog로 쏘고... syslog를 수집하도록 할까도 고민이....
Comment