작성일 : 2018-06-25
작성자 : KOROMOON
( 1 ) Snort
Snort 는 네트워크에서 실시간 트래픽 분석 및 패킷 로깅을 수행할 수 있는 오픈소스 네트워크 침입 탐지 시스템(NIDS : Network Intrusion Detection System)임.
1998 년 마틴 로시에 의해 개발되었으며 2013 년 이후로 시스코 시스템즈가 소유중임.
Snort 홈페이지 : https://snort.org/
Snort Engine 및 Snort Rules 소스 코드를 자유롭게 수정하고 향상시킬 수 있음.
그러나 중요한 차이점은 Proprietary Snort Rules 는 개인적인 용도로만 라이센스가 부여되며 상업적 이익이나 이익을 위해 Proprietary Snort Rules 를 직접 또는 간접적으로 사용, 복사 또는 배포 할 수 없음.
( 2 ) Snort 아키텍처
Snort 아키텍처를 보면 5 가지 주요 부분이 있음.
1. 패킷 디코더 : 네트워크 인터페이스에서 패킷을 수신하고 패킷의 초기 분석을 수행함.
2. 전처리기 : 디코딩된 패킷을 추가적으로 처리하기 위한 플러그인으로 HTTP URI 정규화, 패킷 조각 모음 기능을 수행함.
3. 탐지 엔진 : 구성된 규칙에 따라 패킷을 일치시키는 역할
4. 로깅 및 경고 시스템 : 일치가 성공하면 규칙에 정의된 동작을 기반으로 알리는 역할
5. 출력 모듈 : 데이터베이스 또는 XML 파일과 같은 특정 양식으로 경고 또는 로그를 저장하는 역할
( 3 ) IDS 설치 환경
IDS 설치 환경은 아래와 같음.
설치 프로그램 다운로드 링크(암호 - koromoon1004) :
https://drive.google.com/file/d/1c9w6RP5nNAwWiqCpjnqLg1ufECl29_GW/view?usp=sharing
설치 프로그램 다운로드 링크(암호 - koromoon1004) :
https://drive.google.com/file/d/1c9w6RP5nNAwWiqCpjnqLg1ufECl29_GW/view?usp=sharing
OS : Windows 7 Enterprise K SP1 x64
요즘 32 비트 OS 를 사용하지 않으므로 64 비트 OS 를 기준으로 설치하고자 함. 그에 따른 설치 프로그램도 64 비트 위주로 설치하는 게 좋음.
Snort_2_9_2_3_Installer.exe
Snort 2.9.2.3 버전이 자체적으로 schemas 파일을 제공해주는 마지막 버전임.
해당 버전으로 설치하고자 하며 Snort 홈페이지에서는 실행 파일을 다운로드할 수 없음.
위 링크에서 다운받을 것!
Wireshark-win64-2.6.1.exe
부가적으로 WinPcap 4.1.3 프로그램이 포함되어 있음. 여기서 WinPcap 이란 Windows 버전의 libpcap 라이브러리임. Windows 에서 실시간 네트워크 트래픽을 캡처할려면 설치해야 함. WinPcap 만 따로 설치하면 되지만 Wireshark 도 사용할 겸 설치하면 됨.
base-1.4.5.tar.gz
Snort IDS 시스템의 탐지 로그를 쿼리하고 분석하기 위한 웹 프론트 엔드를 제공함.
Base 1.4.5 는 PHP 5.2 버전에서 설치해야 에러 발생이 거의(?) 없음.
adodb-5.20.12
PHP 데이터베이스 클래스 라이브러리로 쿼리 수행과 데이터베이스 관리를 위한 강력한 추상화 기능을 제공함.
xampp-win32-1.7.1-installer.exe
트로스 플랫폼 웹 서버 자유 소프트웨어 패키지로 Apache, PHP, MySQL 등을 포함되어 있음.
PHP 5.2 버전을 제공해주는 프로그램으로 설치해야 함.
( 4 ) IDS 설치
01. Wireshark 설치
디폴트로 설치하면 됨.
단, Install WinPcap 4.1.3 옵션이 꼭 체크되어 있는지 확인할 것!
02. Snort 설치
디폴트로 설치하면 됨.
"I do not plan to log to a database, or I am plannig to log to one of the databases listed above." 옵션은 추후에 데이터베이스로 계획할 예정인 옵션임.
03. XAMPP 설치
SERVICE SECTION 옵션을 다 체크한 후 설치할 것!
해당 옵션은 윈도우 서비스로 설치 여부에 대한 옵션임.
04. BASE 설치
압축을 해제한 후 C:\xampp\htdocs 위치에 base 폴더 이름으로 넣어둘 것!
05. ADOdb 설치
압축을 해제한 후 C:\xampp\htdocs 위치에 adodb5 폴더 이름으로 넣어둘 것!
( 5 ) IDS 설정
01. MySQL 초기 비밀번호 셋팅
XAMPP 설치 후에 MySQL 초기 비밀번호가 설정되어 있지 않음.
아래와 같이 명령어를 입력하여 비밀번호를 설정함.
mysql 라이브러리 파일 위치로 이동
cd C:\xampp\mysql\bin
mysql -u root -p mysql 입력 후 비밀번호 없이 엔터 치고 접속함.
비빌번호 설정 (특수문자 없이 평문으로 입력할 것!)
update user set password = password('비밀번호') where user = 'root';
권한테이블 업데이트
flush privileges;
접속 종료
quit
02. snort 데이터베이스 생성 후 mysql 전용 schemas 적용
아래와 같이 명령어를 입력함.
mysql 라이브러리 파일 위치로 이동
cd C:\xampp\mysql\bin
snort 데이터베이스 생성
mysqladmin -u root -p create snort
mysql 전용 schemas
적용
(여기서
create_mysql 파일은 C:\Snort\schemas 폴더에 위치해 있으며 C:\xampp\mysql\bin 폴더에 복사해서 넣어둘 것!)
mysql -D snort -u root -p <
create_mysql
mysql 콘솔 로그인
mysql -u root -p
snort 데이터베이스 선택
use snort;
snort 데이터베이스 안에 테이블 확인
show tables;
테이블이 정상적으로 적용되었는지 확인할 것!
03. BASE 설정
우선 base_action.inc.php 파일에서 빨간색 박스 부분은 Report 부분을 Mail 로 보여주는 소스 코드인데 파일이 없어서 오류가 나므로 2줄을 주석 처리함.
(해당 파일은 C:\xampp\htdocs\base\includes 폴더에 위치해 있음)
// include_once("Mail.php"); // r.rioux added for PEAR::Mail
// include_once("Mail/mime.php"); //r.rioux added for PEAR::Mail attachments
- http://localhost/base 입력하여 BASE 설정을 시작함.
- 하단의 Continue 버튼 클릭함.
Step 1.
- 언어는 한글이 안되므로 English 로 선택함.
- Path to ADODB 설정은 앞서 설치한 ADOdb 의 경로를 적어줌.
Step 2.
- Pick a Database type 설정은 MySQL 를 선택함.
- Database Name 설정은 앞서 생성한 DB 명을 넣어줌.
- Database Host 설정은 localhost 로 기재함.
- Database User Name 와 Database Password 설정은 MySQL 계정 정보를 입력함.
- Archive Database 관련 설정은 할 필요 없음.
Step 3.
- Use Authentication System 옵션을 체크함. (인증 시스템 사용 여부)
- BASE 웹페이지에 접속시 사용할 계정 정보 입력함.
Step 4.
Create BASE AG 버튼 클릭하면 미리 Table 을 등록하였기에 DOME 이 표시됨.
Step 5.
Step 3 에서 설정한 BASE 계정 정보를 입력하여 로그인함.
아직 Snort 탐지 로그가 없는 관계로 결과값이 없음.
04. snort.conf 설정
snort.conf 파일은 C:\Snort\etc 폴더에 위치해 있으며 notepad++ 프로그램으로 수정하면 편함.
invar 와 portvar 문자열을 전부 var 문자열로 수정함.
보호할 네트워크 정보, 외부 네트워크 정보, DNS 서버 정보 등 필요한 정보에 대해서 입력함.
(ex. 보호할 네트워크 정보에서 사설망 대역(192.168.100.0/24) 또는 자산의 IP(192.168.100.130)만 입력)
룰 경로를 리눅스 형식에서 윈도우 형식으로 변경함.
참고로 so_rules 폴더는 없는 관계로 생성할 것! (C:\Snort\so_rules)
var RULE_PATH C:\Snort\rules
var SO_RULE_PATH C:\Snort\so_rules
var PREPROC_RULE_PATH C:\Snort\preproc_rules
var WHITE_LIST_PATH C:\Snort\rules
var BLACK_LIST_PATH C:\Snort\rules
동적 로드 라이브러리 경로를 리눅스 형식에서 윈도우 형식으로 변경함.
참고로 snort_dynamicrules 폴더는 없는 관계로 생성할 것! (C:\Snort\lib\snort_dynamicrules)
dynamicpreprocessor directory C:\Snort\lib\snort_dynamicpreprocessor
dynamicengine C:\Snort\lib\snort_dynamicengine\sf_engine.dll
dynamicdetection directory C:\Snort\lib\snort_dynamicrules
인라인 패킷 정규화 기능 중지시킴.
IDS 모드에서는 사용할 수 없는 관계로 중지시킴.
# preprocessor normalize_ip4
# preprocessor normalize_tcp: ips ecn stream
# preprocessor normalize_icmp4
# preprocessor normalize_ip6
# preprocessor normalize_icmp6
블랙리스트와 화이트 리스트 경로를 리눅스 형식에서 윈도우 형식으로 변경함. (/ -> \ 수정)
참고로 white_list.rules 과 black_list.rules 파일을 빈 파일로 생성해서 C:\Snort 폴더에 넣어둘 것!
whitelist $WHITE_LIST_PATH\white_list.rules, \
blacklist $BLACK_LIST_PATH\black_list.rules
DB 정보를 입력함.
password 부분에서 특수문자가 들어가 있을 경우 snort.conf 파일 검증에서 Error 가 발생하므로 평문으로 MySQL password 를 설정해야 함.
output database: alert, mysql, user=root password=mysql1004 dbname=snort host=localhost
output database: log, mysql, user=root password=mysql1004 dbname=snort host=localhost
metadata reference data 경로를 입력함.
include C:\Snort\etc\classification.config
include C:\Snort\etc\reference.config
사용할 룰 파일 경로를 설정함.
필자는 IDS를 연구용으로 테스트하고자 디폴트로 설정되어 있는 룰 설정(Step #7: Customize your rule set 옵션)을 전체 주석 처리함.
사용할 룰 파일명을 입력한 후 위치에 C:\Snort\rules 폴더에 해당 룰 파일명으로 파일을 생성함.
(ex. C:\Snort\rules\KOROMOON.rules)
include $RULE_PATH\KOROMOON.rules
( 6 ) IDS 테스트
01. 먼저 테스트할 룰을 설정함.
참고로 Snort 는 sid 옵션을 입력하지 않으면 에러남.
여기서 sid 는 Snort 규칙을 구분하는 식별자임. Snort 의 모든 규칙은 식별 번호를 가지고 있으며 리포팅 프로그램에서 규칙을 구분하는데 사용되기도 함.
1000001 부터 사용자가 정의한 규칙에 대해서 식별자를 사용할 수 있음.
alert icmp any any -> any any (msg:”KOROMOON_ICMP_TEST”; sid:1000001;)
02. NIC 번호 확인
아래와 같이 명령어를 입력함.
Snort 라이브러리 파일 위치로 이동
cd C:\Snort\bin
NIC 번호 확인 명령어를 입력함. (사용할 NIC 번호가 Index 란에 표시됨)
-W 옵션은 네트워크 인터페이스 확인하는 옵션임.
snort.exe -W
03. snort.conf 오류 확인
Snort 라이브러리 파일 위치로 이동
cd C:\Snort\bin
NIC 번호 확인 명령어를 입력함. (사용할 NIC 번호가 Index 란에 표시됨)
-W 옵션은 네트워크 인터페이스 확인하는 옵션임.
snort.exe -W
03. snort.conf 오류 확인
“snort successfully validated the configuration!” 문자열이 나오면 오류 없이 설정 완료함.
여기서 필요한 옵션에 대한 설명은 아래와 같음.
-T 옵션 : Snort 설정 파일에 대해서 정상 여부 테스트
-l 옵션 : 로그 파일 저장 위치 지정
-c 옵션 : Snort 설정 파일 위치 지정
-i 옵션 : 모니터링할 NIC 번호 지정 (-W 옵션으로 NIC 확인)
snort.exe -T -c c:\snort\etc\snort.conf -l c:\snort\log -i 1
04. Snort 실행
snort.exe -c c:\snort\etc\snort.conf -l c:\snort\log -i 1
05. Ping 테스트 후 BASE 확인
참고 사이트 :
============================================================
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
본 게시물은 KOROMOON 님께서 작성하였으며 CCL (Creative Commons License) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.
snort/schemas 폴더가 존재하지 않으면 어떻게 해야되나요
답글삭제최신 버전은 없는 걸로 압니다.
삭제Snort 2.9.2.3 버전이 자체적으로 schemas 파일을 제공해주는 마지막 버전입니다.
최신 버전을 가지고 설치하는 방법은 해외 글을 참고하셔야 할 듯 합니다. ㅠㅠ
아이피를 보냈는데 icmp 빨간불이 안들어와요
답글삭제방화벽에서 ICMP 오픈되어 있는지 확인이 필요할 듯 합니다. 아니면 스노트 동작되어 있는지 확인이 필요할 듯 합니다.
삭제base_action.inc.php 파일이 없는것 같은데 어떻게 해야하나요
답글삭제base_action.inc.php 파일이 있어야는데 음... ㅠㅠ
삭제다시 설치해야 할 듯 합니다.
참고로 위 버전들로 설치할 경우 Snort 패턴에 심각한 버그가 있습니다.
2개 이상의 content 옵션이 간혹 안 먹히는 문제가 있으니 차라리 Security Onion 으로 설치해야 합니다.
NIC 번호 확인하고 오류 확인할때
답글삭제ERROR: Unable to open rules file "C:\Snort\rules\mmm.rules": Permission denied
라고 뜨는데 어케해야하나요
사용자가 임의로 만든 룰 파일인데 읽기 권한이 없는 거 같습니다.
삭제권한을 다시 확인하시길 바랍니다.
안녕하세요~~!! 좋은 자료를 공유해주셔서 많이 배우고 갑니다!!!ㅎㅎㅎ
답글삭제다름이 아니라 설치하다가 문제가 발생해서 지푸라기를 잡는 심정으로 질문해봅니다...ㅠㅠ
다 설치해서 스노트를 정상 작동 시키고, 방화벽에서도 icmp에서 핑 허용해서 핑이 정상적으로 잘 보내지는데
http://localhost/base/base_main.php 사이트에서 ICMP 트래픽이 안 잡히는 문제가 있습니다....ㅠㅠ
스노트를 설치할 때 snort.exe -T -c c:\snort\etc\snort.conf -l c:\snort\log -i 1 명령어를 쳤을 때 다음과 같은 에러가 나와서 정상적으로 설치가 안 되길래
(C:\Snort\lib\snort_dynamicrules 폴더에 접근할 수 없다
C:\Snort\rules\black_list.rules 파일에 접근할 수 없다
C:\Snort\rules\black_list.rules 파일에 접근할 수 없다)
해당 경로에 빈 폴더랑 파일들을 만들어놔서 결국 설치에 성공하긴 했거든요...
이 이유 때문일까요? ㅠㅠ
아 저게 정확히 무슨 에러였는지 기억이 안 나는데...
삭제접근할 수 없다가 아니라 저게 없어서 문제가 된다 이런 에러 메시지였던 것 같습니다!
아 참고로 설치할 때 “snort successfully validated the configuration!”라는 문자열을 보고 문제없이 설치했습니다! 대체 뭐가 문제인지... ㅎㄷㄷ
삭제안녕하세요. KOROMOON 입니다.
삭제해당 질문에 대한 현상은 저 또한 말로써는 해결해드리기 힘들 것 같습니다.
폴더에 접근할 수 없다는 건 접근 권한이 없어서 입니다.
접근 권한 여부에 대해서 확인하셔야 할 듯 합니다.
현재 제가 작성한 위 Snort 관련 프로그램들은 오래된 버전들로 약 10년 전에 구축한 자료입니다.
실제 서비스 앞단에 IDS 및 IPS 로 쓰기에는 부적합 합니다.
새로운 버전으로 구축하시길 바랍니다.
근데 최신 Snort 버전을 윈도우에 설치하는 자료는 구하기 힘들겁니다.
최신 리눅스 버전의 Security Onion 으로 대체하시길 바랍니다.
이상입니다.
NIC 번호 확인 과정에서 snort.exe -W를 입력하면 번호가 뜨지 않고 점선으로 뜨는데 왜 그런건지 알 수 있을까요?
답글삭제snort 탐지시 출발지, 목적지가 바뀌어서 탐지되는 이유가 있을까요?
답글삭제