KOROMOON

착한 사마리아인이 되고 싶습니다.

6/25/2018

Windows 기반 IDS 설치 및 연동 (Snort + BASE + APM)


작성일 : 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

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 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) 에서 "저작자표시-비영리-동일조건변경허락" 이용조건으로 자료를 이용하셔야 합니다.

댓글 14개:

  1. snort/schemas 폴더가 존재하지 않으면 어떻게 해야되나요

    답글삭제
    답글
    1. 최신 버전은 없는 걸로 압니다.
      Snort 2.9.2.3 버전이 자체적으로 schemas 파일을 제공해주는 마지막 버전입니다.
      최신 버전을 가지고 설치하는 방법은 해외 글을 참고하셔야 할 듯 합니다. ㅠㅠ

      삭제
  2. 아이피를 보냈는데 icmp 빨간불이 안들어와요

    답글삭제
    답글
    1. 방화벽에서 ICMP 오픈되어 있는지 확인이 필요할 듯 합니다. 아니면 스노트 동작되어 있는지 확인이 필요할 듯 합니다.

      삭제
  3. base_action.inc.php 파일이 없는것 같은데 어떻게 해야하나요

    답글삭제
    답글
    1. base_action.inc.php 파일이 있어야는데 음... ㅠㅠ
      다시 설치해야 할 듯 합니다.

      참고로 위 버전들로 설치할 경우 Snort 패턴에 심각한 버그가 있습니다.
      2개 이상의 content 옵션이 간혹 안 먹히는 문제가 있으니 차라리 Security Onion 으로 설치해야 합니다.

      삭제
  4. NIC 번호 확인하고 오류 확인할때
    ERROR: Unable to open rules file "C:\Snort\rules\mmm.rules": Permission denied
    라고 뜨는데 어케해야하나요

    답글삭제
    답글
    1. 사용자가 임의로 만든 룰 파일인데 읽기 권한이 없는 거 같습니다.
      권한을 다시 확인하시길 바랍니다.

      삭제
  5. 안녕하세요~~!! 좋은 자료를 공유해주셔서 많이 배우고 갑니다!!!ㅎㅎㅎ
    다름이 아니라 설치하다가 문제가 발생해서 지푸라기를 잡는 심정으로 질문해봅니다...ㅠㅠ


    다 설치해서 스노트를 정상 작동 시키고, 방화벽에서도 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 파일에 접근할 수 없다)

    해당 경로에 빈 폴더랑 파일들을 만들어놔서 결국 설치에 성공하긴 했거든요...
    이 이유 때문일까요? ㅠㅠ

    답글삭제
    답글
    1. 아 저게 정확히 무슨 에러였는지 기억이 안 나는데...
      접근할 수 없다가 아니라 저게 없어서 문제가 된다 이런 에러 메시지였던 것 같습니다!

      삭제
    2. 아 참고로 설치할 때 “snort successfully validated the configuration!”라는 문자열을 보고 문제없이 설치했습니다! 대체 뭐가 문제인지... ㅎㄷㄷ

      삭제
    3. 안녕하세요. KOROMOON 입니다.

      해당 질문에 대한 현상은 저 또한 말로써는 해결해드리기 힘들 것 같습니다.
      폴더에 접근할 수 없다는 건 접근 권한이 없어서 입니다.
      접근 권한 여부에 대해서 확인하셔야 할 듯 합니다.

      현재 제가 작성한 위 Snort 관련 프로그램들은 오래된 버전들로 약 10년 전에 구축한 자료입니다.
      실제 서비스 앞단에 IDS 및 IPS 로 쓰기에는 부적합 합니다.
      새로운 버전으로 구축하시길 바랍니다.
      근데 최신 Snort 버전을 윈도우에 설치하는 자료는 구하기 힘들겁니다.

      최신 리눅스 버전의 Security Onion 으로 대체하시길 바랍니다.

      이상입니다.

      삭제
  6. NIC 번호 확인 과정에서 snort.exe -W를 입력하면 번호가 뜨지 않고 점선으로 뜨는데 왜 그런건지 알 수 있을까요?

    답글삭제
  7. snort 탐지시 출발지, 목적지가 바뀌어서 탐지되는 이유가 있을까요?

    답글삭제