2015년 2월 16일 월요일

Snort Install Guide

책을 내면서 실습 가이드를 제공하지 않아 독자분들께 죄송했는데, 이제나마 Snort를 쉽게 테스트할 수 있는 가이드를 제공하고자 한다.

사실 인터넷에 널린 게 설치 가이드라 집필 당시엔 이게 필요할까 싶었는데, 의외로 책 출간 후 가장 많이 받았던 문의가 'Snort 설치'였고, 그 다음으로 많았던 게 공격 로그를 보고 싶다, 또는 만들고 싶다거나 책에 소개된 공격 로그를 얻을 수 있느냐는 문의였다.

문의를 주신 많은 분들이 보안장비를 이용해서 공격 탐지 및 분석 경험을 쌓고 싶어 한다. ‘보안’하면 해커가 먼저 떠오르는 상황에서 공격을, 공격 방법을 더 궁금해하는 마음은 충분히 이해가 간다.

분명 책에 소개한 몇가지 공격 로그를 직접 분석해보는 건 도움이 될 것이다. 하지만 그것에만 그친다면 얻는 것은 많지 않다. 제일 좋은 건 Snort를 직접 운영하면서 발생한 로그를 책에 소개한 방식을 응용해서 분석해보는 것.

정보보안의 최전방인 보안관제 분야의 발전이 더딘 이유는 오탐을 제대로 처리하지 못하기 때문이며, 그렇기 때문에 우리는 많은 오탐을 분석해 볼 필요가 있다.

그런데 Snort를 직접 운영하면 현업에 종사하지 않더라도 너무 쉽게, 다양한 오탐 사례를 얻을 수 있으며, 공격을 탐지하려고 만든 룰에 의해서 오탐이 발생하는 이유를 찾고, 룰을 더 정확하게, 오탐이 발생하지 않게 수정는 과정의 반복을 통해 룰기반 보안솔루션의 효과적인 운영 노하우를 쌓을 수 있게 된다.

서두가 길었는데, Snort를 설치하는 이유는 크게 네가지다.

1. 기존 룰의 정확도를 측정하고, 정확도가 낮다면 그 원인을 찾는다.
2. 룰 수정 과정을 통해 다양한 룰 옵션을 익히고, 룰 정확도를 높인다.
3. 룰 정확도를 높이는 과정에서 룰이 탐지하고자 하는 공격의 특성을 이해한다.
4. 전체 과정에서 로그 분석과 패턴매칭의 공통분모인, '텍스트 처리'의 효율을 극대화 해주는 정규표현식을 이해한다.

Snort 룰은 사실상 전세계 네트워크 보안 업계에서 기술 표준처럼 사용되고 있다. 즉 Snort 룰 포맷은 만국 공통이다. 그래서 Snort 룰을 잘 쓸 필요가 있는데, 그런 목적으로는 역시 Snort만한 게 없다.

그리고 룰 테스트를 제대로 하려면 룰 입력 결과 출력된 로그 분석이 뒤따라야 하며, 단순 로그 분석 수준을 뛰어넘으려면 Snort 로그, 정확히는 패킷 페이로드 로그를 데이터베이스에 저장해야 한다.

그런데 무슨 이유에선지 Snort.org에서는 2014년 시스코에 합병(시스코의 sourcefire.com 인수)된 이후, Snort와 데이터베이스 직접 연동 기능을 빼버렸으며, 현재는 barnyard2(Snort 데이터베이스 연동을 도와주는 써드파티 도구)를 이용한 연동만이 가능하다.

이 글은 데이터베이스 직접 연동이 가능한 'Snort 2.9.0.4' 버전을 기준으로 작성했으며, 설치파일은 아래 링크에서 구할 수 있다. 그럼 이제 시작해보자.

[ Snort Install ]

Snort 설치 화면.

mysql 연동은 설치옵션에 없으나 Snort 설치 후, 설정파일을 수정하면 된다.

IPv6 설정은 필요없으니 선택하지 않는다.

Snort 설치 시 선택 가능한 콤포넌트 화면.

데이터베이스 연동 시 필요한 Schemas 콤포넌트가 보인다.

Snort 설치 경로 선택. 끝
















[ Mysql Install ]

mysql 설치화면.

다운로드는 'dev.mysql.com'에서.

설치와 동시에 데이터베이스 설정 옵션을 선택.

mysql을 윈도우 서비스로 선택,

mysql 실행 명령어 경로를 윈도우 경로에 추가.

mysql 관리자 패스워드 설정 화면.

관리자의 원격 접속 허용 설정.

mysql 설치 완료. 끝

















[ Create Database ]

mysql 설치 후, Snort 데이터베이스 생성.

Snort 데이터베이스 스키마 생성.

'mysql -u root -p snort < c:\snort\schemas\
create_mysql' 명령어를 이용.


Snort 데이터베이스에 생성된 테이블 목록 확인.
















[ snort.conf ]

c:\snort\etc\
snort.conf 설정파일(manual.snort.org 참조).

1번 섹션, 내/외부 네트워크, 포트번호 범위 등을 설정.

'ipvar' 옵션은 IPv6 관련 설정.

IPv6 지원을 선택하지 않았으므로 'ipvar' 옵션을 'var' 옵션으로 변경.



오픈소스라 불친절하다. (공짠데 뭘 바람?)

윈도우버전인데 설정파일은 리눅스 환경.

주요 경로 설정을 윈도우 환경으로 변경.


4, 5번 섹션은 전처리기(preprocessor) 설정 섹션

Snort는 룰 처리 효율을 높이기 위해 룰 동작 전에 트래픽을 처리해주는 다양한 전처리기('URL 디코딩' 등)를 제공함.

경로 설정만 윈도우 환경으로 변경.

6번 섹션은 룰 입력(input) 결과 출력(output)되는 로그 설정.

syslog 및 mysql 연동 설정.

7번 섹션은 룰 경로 설정. (snort.org에 가입하면 룰 다운로드 가능)

룰 사용 여부 결정.








[ Snort 실행 ]

'snort -W' 명령어 실행 화면.

Snort로 모니터링 가능한 NIC 리스트를 확인할 수 있다.

Snort 실행.

Snort가 실행된 화면.












[ syslog 연동 ]

Snort 로그 실시간 확인 용도인 'kiwi syslog' 실행 화면.

'kiwi syslog'로 실시간으로 전송되고 있는 Snort 로그.






'-l c:\snort\log' 옵션을 이용하면 Snort 로그를 발생시킨 원본 패킷을 'snort.log.일련번호' 형식으로 함께 저장한다.

'snort.log.일련번호' 파일은 Snort 실행 단위, 즉 Snort 실행과 함께 생성을 시작하고, Snort 실행 종료와 함께 저장된다.

저장된 'snort.log.일련번호' 파일을 wireshark로 실행시킨 화면.

'snort -r c:\snort\lo
g\snort.log.142967
8860 -c c:\snort\
etc\snort.conf -l
c:\snort\log -s' 명령을 이용해서 저장된 패킷만을 이용한 탐지 테스트도 가능.



[ Log Search ]

mysql 쿼리분석기를 이용한 데이터베이스 접속 화면.

'phpmyadmin' 등 다양한 쿼리분석기 사용 가능.

mysql 데이터베이스에 저장된 Snort 로그 조회 화면.

data_payload 컬럼에 저장된 패킷 페이로드 데이터를 확인할 수 있으나, 16진수(HEX)로 저장된 관계로 읽을 수 없다.

패킷 페이로드(data_payload) 데이터만을 csv 등의 텍스트 파일로 저장.










[ HEX2Char Converter ]

16진수를 사람이 읽을 수 있는 문자로 변환(디코딩)하는 과정.

16진수를 읽기 가능한 문자로 변환.

이제 Snort 룰의 입력 결과인 출력 로그를 분석해서 룰 정확도를 측정해보자.






[ ETC ]

[참고1] HEX 디코딩을 위한 IIS 웹서버 경로 설정.

'rawdata_tmp'는 업로드되는 HEX 파일 저장 경로.

[참고2] HEX 디코딩을 위한 IIS 웹서버 PHP 설정.

PHP 다운로드는 www.php.net에서.

php.ini는 C:\PHP\PHP5, C:\Windows 경로로 복사.








'홈디렉토리 > 구성' 메뉴에서 '응용 프로그램 매핑' 추가

[참고3] vi 설정파일(_vimrc).

라인 자동 넘버링(set nu),

대소문자 구분 자동 해제
(set ignorecase) 설정 화면





[ 관련 글 ]

댓글 없음:

댓글 쓰기

크리에이티브 커먼즈 라이선스