본문 바로가기
반응형

툴/Snort15

Snort 명령 사용 -Snort는 snort.conf 파일 또는 명령행 옵션을 통해 여러 가지 명령을 설정할 수 있다. ex:)config nolog snort.conf 명령행 옵션 설명 alertfile 없음 Snort가 발생시킨 모든 경고를 저장할 파일을 지정할 수 있다. bpf_file -F BPF 포맷 필터를 포함하는 파일을 지정할 때 쓰인다. checksum_mode 없음 패킷 체크섬을 검사할 패킷의 종류를 지정할 때 쓰인다. 들어 갈 수 있는 값에는 all, none, noicmp, noip, notcp, noudp가 있다. chroot -t Snort의 새로운 홈디렉터리를 지정한다. 기본적으로 홈 디렉터리는 Snort 실행 파일이 위치하는 곳이다. deamon -D Snort 프로세스를 fork한다. (프로세스.. 2010. 11. 30.
Snort 변수 변수의 정의 종류 사용법 예시 일반 변수 var 변수명 값 var DNS_SERVER 203.248.252.2 배열 var 변수명 [값1,값2] var INTERNAL_NETS [10.1.100.0/24,10.1.0.0/16] 동적 변수 var 변수1 값 var 변수2 $변수1 var DNS_SERVER 203.248.252.2 var MY_DNS $DNS_SERVER 동적 변수2 var 변수1 값 var 변수2 $(변수1:기본값) ※변수1이 존재하지 않는 경우, 변수2는 기본값 적용 var DNS_SERVER 203.248.252.2 var MY_DNS $(DNS_SERVER:10.1.1.2) 동적 변수3 var 변수1 값 var 변수2 $(변수1:?경고 메세지) ※변수1이 존재하지 않는 경우, 경고 .. 2010. 11. 30.
Snort 로그 Snort 로깅 옵션 옵션 설명 -l 로그 파일을 저장할 디렉터리 경로 -h 홈 서브넷 -b 로그를 2진 형태로 저장한다. -L 2진 로그 파일 이름 snort -dev -l /var/adm/snort/logs -h 192.168.1.0/24 -위 옵션을 사용할 경우 /var/adm/snort/logs 디렉토리에 해당 IP 주소명의 디렉토리가 생성되고 세션별로 파일이 생성된다. ex)TCP:3039-80 (TCP 프로토콜,출발지 포트:3039, 목적지 포트 80) ※로그를 2진 형태로 저장하면 데이터를 사람이 읽기 편한 형태로 로그를 바꿀 필요가 없기 때문에 Snort의 패킷 수집 속도가 빨라진다. Snort 2진 형태 로그 snort -l /var/adm/snort/logs -b -b옵션을 사용하여 로.. 2010. 11. 30.
Snort 모드 Snort 침입 탐지 모드 -Snort를 기본 IDS 모드로 실행하면 기본 출력은 log 하위 디렉터리의 alert라는 파일에 저장된다. 경고 모드 -패킷이 alert 규칙과 일치했을 경우 Snort는 다음 2가지 작업을 수행한다. 경고 보관소(alert facility)로 이벤트를 출력한다. 설정된 로깅모드로 가능한 많은 데이터를 기록한다. alert facility 옵션 옵션 설명 Full 경고 메시지와 전체 패킷 헤더를 포함한다. (기본값) Fast 타임스탬프, 경고 메시지, 출발지와 목적지 IP, Port만으로 구성된 간단한 형태의 경고를 만든다. Syslog syslog로 로그를 기록한다. 기본적으로 로그는 LOG_AUTHPRIV와 LOG_ALERT에 저장된다. Unixsock UNIX도메인 소.. 2010. 11. 30.
Snort를 스니퍼로 사용 -Snort를 -v 옵션으로 실행할 경우 캡쳐한 패킷의 IP, TCP, UDP, ICMP헤더를 화면에 출력한다. -보다 많은 정보를 얻고 싶다면 -d 옵션과 -e 옵션을 사용해야한다. 옵션 설명 -d 애플리케이션 계층 데이터를 HEX와 ASCII 코드로 출력한다. -e 데이터링크 계층 헤드를 포함한다. -v 패킷 스니핑 모드로 동작한다. (TCP 헤더) snort -dev ※-v 옵션이 없이 -d 옵션과 -e 옵션을 동시에 사용할 경우 아무 옵션 없이 Snort를 실행하는 것과 같은 결과를 얻는다. 2010. 11. 30.
Snort 플러그인 탐지 플러그인 Snort는 탐지엔진에서 플러그인 구조를 사용하고 있는데(detection-plug-ins 하위 폴더에 존재) 탐지 플러그인의 구조는 다른 개발자가 Snort 규칙과 연결된 플러그인을 쉽게 작성할 수 있도록 되어있다. 예를 들어 snortsam 프로그램이 있는데 이 프로그램은 공격을 탐지할 경우 방화벽을 재구성하여 패킷 차단이 가능하다. -공격지 주소를 1시간동안 차단 alert tcp $EXTERNAL_NET any -> $HOME_NET 21 (msg : "FTP EXPLOIT wu-ftpd 2.6.0 site exec format string overflow Linux"; flow:to_server, established; content: "|31c031db31c9b046cd8031c.. 2010. 11. 30.
Snort 규칙 -규칙 헤더 alert tcp $EXTERNAL_NET any -> $HOME_NET 21 헤더 값 내용 alert alert, log, pass, dynamic, activate 출력 포맷을 의미한다. 이 출력 포맷은 연결리스트 트리 헤더의 맨 상위 부분과 비교된다. tcp TCP, UDP, IP, ICMP 사용되는 프로토콜을 의미하며 연결리스트의 상위 부분과 비교된다. $EXTERNAL_NET · 출발지 IP 주소를 가리킨다. (기본 설정은 any) any any, 포트 번호 출발지 포트를 의미한다. -> · 패킷의 방향을 가리킨다. $HOME_NET · Snort 규칙에서는 $Variables를 이용한다. 변수는 snort.conf파일의 맨 앞부분에서 정의되며 나머지 부분에서 그 변수를 사용한다. .. 2010. 11. 30.
Snort 규칙 생성기 동작 과정 -규칙 파일 : Snort 규칙은 텍스트 기반으로 되어 있으며 종류별로 서로 다른 그룹으로 분류되어 있다. 과정 설명 snort.conf 파일 확인 Snort 실행과 동시에 snort.conf 파일의 'Step 4-Cstomize your ruleset' 부분에서 지정한 규칙 파일을 불러들인다. ParseRulesFile() 함수 호출 규칙 파일을 읽는 작업을 실행한다. (함수 정의 : parser.c | 함수 호출 : snort.c) 3차원 연결리스트 생성 마지막으로 Snort는 불러들인 규칙을 파싱해서 연결리스트를 생성한다. 2010. 11. 30.
Snort 전처리기 -패킷은 탐지 엔진까지 가기 전에 전처리기를 거친다. -전처리기는 패킷이 탐지 엔진에 도달하기 전에 패킷에 대한 경고하거나 수정하거나 버리기 위하여 사용한다. frag2 전처리기 -수많은 패킷이 분할되어 전송 되는 경우, 분할된 패킷을 재조합하는데 상당한 메모리와 자원이 필요하고, IDS 서버가 많은 부하를 받고 있다면 일부 패킷을 캡처하지 못 할 수 있기 때문에 IDS 서버의 성능이 떨어지게 된다. ※단 하나의 분할 패킷이라도 캡처하지 못한다면 IDS는 서명 비교를 제대로 할 수 없다. -따라서, Snort는 frag2 전처리기를 사용하여 분할된 패킷이 탐지 엔진에 도달하기 전에 재조합하여 Snort가 서명비교를 개별 패킷이 아닌 전체 세션에 적용할 수 있도록 한다. 또한, frag2 전처리기는 분할 .. 2010. 11. 30.
Snort 패킷 디코딩 과정 과정 설명 NIC promiscuous 모드 설정 Snort가 실행되면 NIC는 libpcap에 의해 promiscuous 모드로 설정된다. 패킷 복사 promiscuous로 설정된 Snort 서버의 NIC는 허브를 지나가는 패킷을 캡처해서 네트워크 드라이버로 복사한다. ProcessPacket() 함수 호출 lipcap 라이브러리는 무한 루프를 돌면서 패킷을 기다리다가 패킷을 받을 경우 ProcessPacket()함수를 실행한다. (decode.c) DecodeEthPkt() 함수 호출 ProcessPacket 함수는 이더넷 프레임을 디코딩하는 DecodeEthPkt 함수를 호출한다. DecodeIP() 함수 호출 DecodeEthPkt 함수 내에서는 IP 프로토콜을 디코딩하는 DecodeIP 함수를 .. 2010. 11. 30.
Snort.conf 설정 (/etc/snort/snort.conf) 내용 설명 var HOME_NET 내부 네트워크 주소를 설정한다. 단일 아이피 주소 또는 전체 서브넷 주소를 가진다. ex) 192.168.1.0/24 var EXTERNAL_NET 외부 네트워크 주소를 설정한다. any로 정의하면 외부 네트워크에서 유입되는 모든 트래픽을 받는다. 기본 값인 any로 사용하는 것이 좋다. 2010. 11. 30.
Snort 시스템 보호 내용 설명 불필요한 서비스 제거 Telnet, Berkeley R, FTP, NFS, NIS와 같은 서비스를 중지하고 불필요한 서비스를 실행하고 있지 않은지 확인한다. 시스템 무결성 유지 TripWire 또는 AIDE,Samheim 등을 사용하여 시스템 무결성을 유지한다. 사용하는 서비스를 방화벽 또는 TCP Wrapper로 보호 SSH, Mysql 등의 서비스는 나름대로의 취약점이 존재하기 때문에 방화벽(IPTables 등) 또는 TCP Wrapper로 보호하고 TCP Wrapper로 보호가 불가능한 Apache 같은 서비스는 보안을 최대한 고려한 설정을 한다. 데이터를 암호화하고 공개키 인증을 사용 공개키 인증을 OpenSSH에서만 활성화하는 것이 아닌 Apache 등의 서비스에서도 Apache-SS.. 2010. 11. 30.
유용한 Snort 추가 프로그램 프로그램 URL 설명 SnortSnarf www.silicondefense.com/software/snortsnarf Silicon Defense에서 만든 Snort 분석기, 출력이 HTML이다. Snortplot.php www.snort.org/dl/contrib/data_analysis/snortplot.pl 공격을 그래픽으로 표시해 주는 Perl 스크립트 Swatch swatch.sourceforge.net 실시간 syslog 모니터로서 e메일을 통해 실시간 경고를 전송한다. ACID acidlab.sourceforge.net The Analysis Console for Intrusion Databases의 약자다. Snort의 로그를 분석한다. 이 프로그램이 동작하려면 PHP, Apache, Sn.. 2010. 11. 30.
Snort 구성 요소 구성 요소 설명 패킷 캡처/디코드 엔진 먼저, Snort는 libpcap 라이브러리를 통해 네트워크 트래픽을 캡처하고 디코드 엔진은 패킷을 분석하여 링크-계층 프로토콜용 패킷 구조를 채운다음 TCP와 UDP 포트와 같은 상위-계층 프로토콜용 패킷 구조를 채운다. 전처리 플러그인 디코드 엔진을 거친 다음 패킷은 전처리기로 전송되는데 전처리기는 패킷이 탐지엔진에 도착하기 전에 패킷을 검사하고 조작한다. 각 전처리기는 패킷의 내용을 검사하고, 경고를 보내고, 수정하는 등 작업을 수행한다. 탐지 엔진 전처리기 플러그인을 거친 다음 패킷은 탐지 엔진으로 전송된다. 탐지 엔진은 각 패킷을 간단한 검사를 통해 규칙파일의 항목과 비교한다. 탐지 플러그인은 패킷에 대한 추가 탐지 기능을 제공한다. 규칙에 들어 있는 각 .. 2010. 11. 30.
Snort 빌드 configure 옵션 옵션 설명 --enable-debug 디버깅 옵션을 활성화한다. (개발자 전용) --with-snmp SNMP 경고 코드를 활성화한다. --enable-smbalerts SMB 경고 코드를 활성화한다. 이 기능은 내부에서 popen() 콜을 실행하기 때문에 보안에 취약하다. 따라서 주의해서 사용해야한다. --enable-flexresp "Flexible Response"(세션 스나이핑) 코드를 활성화한다. 이 기능을 사용하면 특정 규칙에 일치하는 악성 연결을 IP 레벨에서 끊을 수 있다. 이 기능은 libnet-liblary가 필요하다. --with-mysql=DIR MySql을 지원한다. ACID에서 MySQL을 사용하려면 이 옵션을 켜야 한다. --with-odbc=DIR ODBC을 지원한다. ACI.. 2010. 11. 30.
반응형

바로가기