IDS 란?
- Intrusion Detection System
- 침입탐지시스템
- 시스템에 대한 원치 않는 조작을 탐지
- 네트워크 트래픽 탐지
- 설치의 위치와 목적에 따라 NIDS와 HIDS로 나뉨
IDS의 종류
- NIDS
Network Traffic을 감시할 수 있는 위치에 설치하며, Payload를 검사한다. Traffic을 이용하여 흔적 제거가 불가능 하지만, 실시간 탐지가 가능하다. - HIDS
실제 로그를 사용하며, 시스템 이벤트를 감시한다. 시스템 내부에서의 공격을 탐지하며, 암호화된 환경에 적합하다. Network와는 무관하게 동작한다.
IDS 탐지 기법
- 침입탐지방식에 따라 오용탐지 방식과 비정상 행위탐지 방식으로 나뉨
- Well-known 공격 행위로 부터 특정 Signature를 추출하여 판단하는 갓이 오용탐지 방식
- 네트워크 사용 상황의 정상행위의 범위를 정해두고 정상 행위에 어긋나는 행위를 탐지하는 것이 비정상 행위탐지 방식
Snort 설치
Snort는 Sourcefire에서 개발된 open source network 침입탐지시스템이다. 따라서 네트워크 스니퍼, 로거, 탐지, 차단등 다양하게 활용할 수 있다.
테스트 환경
OS: CentOS 6.5
Snort 설치에 앞서 패키지를 설치 해야 한다.
- gcc: 리눅스 C언어 컴파일러
- flex: Lex를 컴파일 하기 위한 구문
- bison: Yacc를 컴파일 하기 위한 구문 분석기
- zlib: Data 압축 라이브러리
- libpcap: Packet을 capture하기 위한 라이브러리
- pcre: Perl-compatible regular expression library(정규 표현식)
- libdnet: low-level network routines을 단순화 시켜 제공
- tcpdump: 패킷을 가로채기 위한 분석기
패키지가 설치되었는지 확인한다.
이제 Snort 설치에 필요한 파일을 다운받을것이다.
https://www.snort.org 사이트에 들어가면 다운을 받을 수 있다.
Snort를 설치 하기 위해서는 Snort와 Daq 파일을 다운 받아야 한다.
wget을 이용하면 간편히 다운을 받을 수 있다. wget 패키지가 업을 경우 yum을 통해 다운받으면 된다.
wget https://www.snort.org/downloads/snort/snort-2.9.8.3.tar.gz
wget https://www.snort.org/downloads/snort/daq-2.0.6.tar.gz
위와 같이 다운 받아진것을 확인할 수 있다.
snort와 daq는 /usr/local/src 디렉토리에 설치를 진행할 것이다.
cd /usr/local/src <enter>
tar -zxvf <path to>daq-2.0.x.tar.gz <enter>
tar -zxvf <path to>snort-2.9.8.x.tar.gz <enter>
위와 같이 압축이 풀어진것을 확인한다.
daq-2.0.6을 먼저 설치 할 것이다.
./configure && make && make install을 해준다.
ldconifg 명령을 이용하여 동적 라이브러리를 연결시켜준다.
snort는 ./configure --enable-sourcefire를 한 후
make && make install을 해준다.
snort도 daq와 마찬가지로 ldconifg 명령을 이용하여 동적 라이브러리를 연결시켜준다.
/etc에 snort 라는 디렉토리를 생성한 후, 설치한 snort-2.9.8.3 etc 디렉토리의 파일을 모두 복사해온다.
snort를 사용하기 위해서는 promisc 모드를 적용해야한다.
snort는 설치 되었지만, 아직 rules는 설치 되지 않았다.
rules를 다운 받기 위해서는 먼저 snort.org에서 가입을 한 후 로그인을 한다.
Downloads 에서 Rules에 들어간 후 설치 한 snort 버전과 맞는 Rules를 다운 받는다.
다운 받은 Rules의 압축을 해제 한다.
Rules의 압축을 해제하면 etc 디렉토리가 생성한다. etc 디렉토리 안의 파일을 복사해준다.
white_list.rules 와 black_list.rules 파일을 만든다.
snort 유저와 그룹을 생성한 후 권한 변경을 해준다.
/etc/snort의 snort.conf 파일 수정이 필요하다.
위 처럼 snort.conf를 변경해준다.
파일의 소유권과 권한을 변경해준다.
다음으로 아래의 Shell 스크립트를 복사한후 /etc/init.d 디렉토리 안에 snort 라는 이름의 파일을 만든다.
#!/bin/bash
#
# snort Start up the SNORT Intrusion Detection System daemon
#
# chkconfig: 2345 55 25
# description: SNORT is a Open Source Intrusion Detection System
# This service starts up the snort daemon.
#
# processname: snort
# pidfile: /var/run/snort_eth0.pid
### BEGIN INIT INFO
# Provides: snort
# Required-Start: $local_fs $network $syslog
# Required-Stop: $local_fs $syslog
# Should-Start: $syslog
# Should-Stop: $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Start up the SNORT Intrusion Detection System daemon
# Description: SNORT is an application for Open Source Intrusion Detection.
# This service starts up the Snort IDS daemon.
### END INIT INFO
# source function library
. /etc/rc.d/init.d/functions
# pull in sysconfig settings
[ -f /etc/sysconfig/snort ] && . /etc/sysconfig/snort
RETVAL=0
prog="snort"
lockfile=/var/lock/subsys/$prog
# Some functions to make the below more readable
SNORTD=/usr/local/bin/snort
#OPTIONS="-A fast -b -d -D -i eth0 -u snort -g snort -c /etc/snort/snort.conf -l
/var/log/snort"
#PID_FILE=/var/run/snort_eth0.pid
# Convert the /etc/sysconfig/snort settings to something snort can
# use on the startup line.
if [ "$ALERTMODE"X = "X" ]; then
ALERTMODE=""
else
ALERTMODE="-A $ALERTMODE"
fi
if [ "$USER"X = "X" ]; then
USER="snort"
fi
if [ "$GROUP"X = "X" ]; then
GROUP="snort"
fi
if [ "$BINARY_LOG"X = "1X" ]; then
BINARY_LOG="-b"
else
BINARY_LOG=""
fi
if [ "$LINK_LAYER"X = "1X" ]; then
LINK_LAYER="-e"
else
LINK_LAYER=""
fi
if [ "$CONF"X = "X" ]; then
CONF="-c /etc/snort/snort.conf"
else
CONF="-c $CONF"
fi
if [ "$INTERFACE"X = "X" ]; then
INTERFACE="-i eth0"
PID_FILE="/var/run/snort_eth0.pid"
else
PID_FILE="/var/run/snort_$INTERFACE.pid"
INTERFACE="-i $INTERFACE"
fi
if [ "$DUMP_APP"X = "1X" ]; then
DUMP_APP="-d"
else
DUMP_APP=""
fi
if [ "$NO_PACKET_LOG"X = "1X" ]; then
NO_PACKET_LOG="-N"
else
NO_PACKET_LOG=""
fi
if [ "$PRINT_INTERFACE"X = "1X" ]; then
PRINT_INTERFACE="-I"
else
PRINT_INTERFACE=""
fi
if [ "$PASS_FIRST"X = "1X" ]; then
PASS_FIRST="-o"
else
PASS_FIRST=""
fi
if [ "$LOGDIR"X = "X" ]; then
LOGDIR=/var/log/snort
fi
# These are used by the 'stats' option
if [ "$SYSLOG"X = "X" ]; then
SYSLOG=/var/log/messages
fi
if [ "$SECS"X = "X" ]; then
SECS=5
fi
if [ ! "$BPFFILE"X = "X" ]; then
BPFFILE="-F $BPFFILE"
fi
runlevel=$(set -- $(runlevel); eval "echo \$$#" )
start()
{
[ -x $SNORTD ] || exit 5
echo -n $"Starting $prog: "
daemon --pidfile=$PID_FILE $SNORTD $ALERTMODE $BINARY_LOG
$LINK_LAYER $NO_PACKET_LOG $DUMP_APP -D $PRINT_INTERFACE
$INTERFACE -u $USER -g $GROUP $CONF -l $LOGDIR $PASS_FIRST $BPFFILE
$BPF && success || failure
RETVAL=$?
[ $RETVAL -eq 0 ] && touch $lockfile
echo
return $RETVAL
}
stop()
{
echo -n $"Stopping $prog: "
killproc $SNORTD
if [ -e $PID_FILE ]; then
chown -R $USER:$GROUP $PID_FILE &&
rm -f $PID_FILE
fi
RETVAL=$?
# if we are in halt or reboot runlevel kill all running sessions
# so the TCP connections are closed cleanly
if [ "x$runlevel" = x0 -o "x$runlevel" = x6 ] ; then
trap '' TERM
killall $prog 2>/dev/null
trap TERM
fi
[ $RETVAL -eq 0 ] && rm -f $lockfile
echo
return $RETVAL
}
restart() {
stop
start
}
rh_status() {
status -p $PID_FILE $SNORTD
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
start
;;
stop)
if ! rh_status_q; then
rm -f $lockfile
exit 0
fi
stop
;;
restart)
restart
;;
status)
rh_status
RETVAL=$?
if [ $RETVAL -eq 3 -a -f $lockfile ] ; then
RETVAL=2
fi
;;
*)
echo $"Usage: $0 {start|stop|restart|status}"
RETVAL=2
esac
exit $RETVAL
snort 파일이 생성되었다. snort 파일의 경우
chmod 755 snort 명령을 통해 권한을 상승시킨다.
심볼릭링크를 설정한다.
위와 같은 방법으로 아래 Shell 스크립트를 /etc/sysconfig에 snort 라는 이름으로 만들어준다.
# /etc/sysconfig/snort
# $Id: snort.sysconfig,v 1.8 2003/09/19 05:18:12 dwittenb Exp $
#### General Configuration
INTERFACE=eth0
CONF=/etc/snort/snort.conf
USER=snort
GROUP=snort
PASS_FIRST=0
#### Logging & Alerting
LOGDIR=/var/log/snort
ALERTMODE=fast
DUMP_APP=1
BINARY_LOG=1
NO_PACKET_LOG=0
PRINT_INTERFACE=0
다음으로 snort 로그 파일을 저장 할 디렉토리를 만든 후, snort 관련 파일의 소유권과 권한을 변경한다.
이것으로 기본적인 Snort 설치와 Rule 설정은 완료되었다.
위와 같이 snort를 한번 실행시켜보았다.
그 결과 위와 같은 ERROR가 나타날것이다.
/usr/local/lib/snort_dynamicrules가 없어서 발생한 에러이므로 위 처럼 디렉토리를 만든 후 소유권과 권한을 변경한다.
다시 한번 실행을 시켜본다.
다시 실행한 결과 설치가 잘된것을 확인할 수 있다.
[출처]
https://www.snort.org/documents
댓글 없음:
댓글 쓰기