━━━━ ◇ ━━━━
정보보안실무/서버, 클라우드

S-Part. 16 IDS 구축, Snort Rule 작성 - [인스테도뷰]

728x90
반응형

구축환경

CentOS 7.6 Minimal - (www.centos.org)

VirtualBox 7.0 - (www.virtualbox.org)

Snort - (www.snort.org)

 

알고가기

IDS(intrusion detection system: 침입탐지시스템)
공격자: attacker
피해자: victim
무료 snort를 사용하면 탐지패턴을 계속 등록해야하기 때문에 계속해서 관리하고 작성하여 추가해줘야한다.
하지만 유료 snort를 사용하면 snort사이트에서 최신 탐지정책들을 제공하기때문에 다운 및 적용만 해주면 된다.

네트워크 IDS (외부에서 들어오는 트래픽들 탐지)
호스트 IDS (내부에서 통신되는 트래빅들을 탐지)

yum install -y libdnet-devel openssl-devel pkgconfig gcc flex bison zlib* libpcap* pcre* libpcap-devel libpcre3-devel libnetfilter-queue-devel iptables-devel libdnet* tcpdump 설치
yum install -y daq daq-devel daq-modules libnghttp2설치

yum install -y epel-release epel 저장소 설치

 

wget https://snort.org/downloads/archive/snort/snort-2.9.16-1.centos7.x86_64.rpm

스노트엔진 wget으로 다운

(snort.org사이트에서 보면 download-snort 에서 rpm은 리눅스용 다운로드파일, exe는 윈도우용 다운로드파일)

 

rpm -ivh snort-2.9.16-1.centos7.x86_64.rpm   스노트엔진 설치


snort -V  snort V 명령어는 snort의 버전을 확인할 수 있다. 

하지만 지금은 libdnet.1 파일이나 디렉토리가 없다며 에러 메시지가 출력된다. 

 

 

cd /lib64 /lib64로 이동

ls  파일 목록을 보면 libdnet.so.1과 libdnet.so.1.0.1 을 볼 수 있다.  

 

ln -s libdnet.so.1.0.1 libdnet.1  libdnet.so.1.0.1에서 libdnet.1 로 링크연결하는 명령어

* 링크(link) 명령어 = ln 에는 소프트링크와 하드링크가 있다. 

snort-V  싱크 연결 해주고 snort 혹은 snort -V 를 입력하면 버전확인 가능함. 

내가 설치한 snort 버전은 2.9.16인 것이 확인된다. 


권한변경해주기
chmod -R 700 /var/log/snort snort 디렉토리 권한 700으로 설정
mkdir /usr/local/lib/snort_dynamirules snort_dynamirules 디렉토리 생성
chmod -R 700 /usr/local/lib/snort_dynamirules snort_dynamirules 권한 700으로 설정

 

-R: 내가 지정하는 디렉터리는 물론 하위디렉터리까지 모두 포함시키는 것
탐지정책이기 때문에 소유자만 읽고, 쓰기(700)가 가능하게 설정했다. 

 

파일 소유자변경
chown -R snort.snort /etc/snort
 (소유자 = snort, 그룹 = snort, /etc/snort 디렉토리에 관해서 소유자 변경)
chown -R snort.snort /var/log/snort
chown -R snort.snort /usr/local/lib/snort_dynamirules

 

cd /etc/snort
ls

rules라는 디렉토리가 있는데 탐지정책들이 저장되는 곳이다.

cd /etc/snort/rules

ls

아직은 설정된 정책이 없어서 아무것도 없다. 

 

cd /var/log

ls

이제 snort 디렉토리가 생성된 것을 볼 수 있다. 


vi /etc/snort/snort.conf → snort.conf 파일 vi편집기 모드 진입

45번 ipvar HOME_NET any 수정 예) ipvar HOME_NET 0.0.0.0/24

☞ 원래는 any로 적혀있지만 any를 지우고 ipvar HOME_NET 탐지 및 보호 받을 ip대역대 혹은 ip주소 입력

 

104번 var RULE_PATH /etc/snort/rules  이렇게 절대경로로 들어와있어야함
105번 var SO_RULE_PATH ../so_rules 수정   var SO_RULE_PATH /etc/snort/rules
106번 var PREPROC_RULE_PATH ../reproc_rules 수정   var PREPROC_RULE_PATH /etc/snort/rules
113번 var WHITE_LIST_PATH ../rules 수정 -> var WHITE_LIST_PATH /etc/snort/rules
114번 var BLACK_LIST_PATH ../rules 수정 -> var BLACK_LIST_PATH /etc/snort/rules

 

522번 output unified2: filename snort.log, limit 128

출력할 때 unified2 방식으로 출력하고 파일이름은 snort.log 메모리 제한은 128

 

546번 include $RULE_PATH/local.rules 

정상적으로 입력이 되어있는지 확인하고 입력되어있다면 건드리지 않아도 된다. 

 

자동으로 생성되는 룰 / 내가 작성한 룰에 의해 된건지 원래 룰에 의해 된건지 구분하기 어렵기 때문에 snort를 설치할 때 자동으로 설치되는 룰들을 주석처리 해줘야한다. 

따라서 548번 부터 651번까지 모두 주석처리를 해줘야하는데 하나하나 하려면 시간이 굉장히 많이 걸린다. 

아래 vi편집기 명령어를 이용하자. 

:548, 651 s/^/#/g → 548번부터 651번까지 일괄적으로 주석처리

:wq!  저장 후 나가기


아까 113번, 114번에서 화이트리스트, 블랙리스트 경로 설정을 했기 때문에 화리, 블리 모두 만들어준다. 

touch /etc/snort/rules/white_list.rules
touch /etc/snort/rules/black_list.rules

 

snort -T -c /etc/snort/snort.conf  환경설정 파일을 확인하는 명령어 (-T: test, -c: check) 

 

역시 한 번에 보내주는 법이 없다.. 253번 라인에 문제가 있다. 파일 또는 디렉토리가 없다는 오류이다. 

에러를 해결하려면 253번에 주석을 달거나 해당경로에 디렉토리를 하나 만들어주는 방법이 있다. 

 

vi /etc/snort/snort.conf

나는 그냥 253번에 주석처리를 해두었다. 

 

snort -T -c /etc/snort/snort.conf  환경설정 파일을 확인하는 명령어 (-T: test, -c: check) 

아.. 253번에 그냥 주석만 달았더니 또 에러가 발생했다. /etc/snort//etc/snort/rules/local.rules 파일을 사용할 수 없다는 에러가 뜬다. 

cd /etc/snort/rules  rules 디렉토리로 이동

touch local.rules local.rules 파일 생성

 

snort -T -c /etc/snort/snort.conf  환경설정 파일을 확인하는 명령어 (-T: test, -c: check) 

드디어 오류없이 성공 


조금 양이 많은 듯 해서 Snort 룰 작성은 다음 포스팅에서 다뤄야겠다. 

일단 IDS는 구축완료


 

 

728x90
반응형
COMMENT