[보안] swatch로 실시간 로그 모니터링 하기
swatch를 이용해 로그파일을 실시간으로 모니터해 보자.
Swatch란
swatch(The Simple Watcher and filer) 는 펄로 작성된 실시간 로그 모니터링 툴이다.
로그를 모니터하면서 특정 패턴에 반응해 요청한 작업들을 해 줄수 있다.(콘솔출력,메일전송등)
설치나 관리등이 간편히 예전부터 많이 사용되는 로그 모니터링 툴이다.
설치하기에 앞서
로그를 모니터하려면 당연히 로그 기록이 있어야 한다.
/var/log/syslog나 /var/log/messages 파일이 존재하는지, 그리고 로그가 쌓이고 있는지 부터 확인을 해야 한다.
그리고 당연히 펄이 설치되어 있어야 한다.
Swatch 다운받기
다운 : http://www.oit.ucsb.edu/~eta/swatch/
http://sourceforge.net/projects/swatch/ <== 현재는 이곳에서 받을수 있다.
다운을 받아보니 swatch-3.0.8 이 최신버전이다.
Swatch 설치하기
해당 파일을 풀고 난뒤 /usr/local로 mv를 시켜 둔다.
[root@dream swatch-3.0.8]# perl Makefile.PL
Checking if your kit is complete…
Looks good
Warning: prerequisite Date::Calc 0 not found.
Warning: prerequisite Date::Parse 0 not found.
Writing Makefile for swatch
swatch는 Date::Calc Date::Parse File::Tail Time::HiRes 의 펄 모듈이 필요한데..
Date::Calc, Date::Parse이 없다고 나오고 있다.
우선 이들 모듈부터 설치를 해야 한다.
http://search.cpan.org 로 가서 우선 Date::Calc로 검색해 Date-Calc-5.3를 다운 받을수 있다.
그리고 Date::Parse로 검색한후 나타나는 TimeDate-1.16 를 다운 받는다.
tar로 풀고 난뒤
[root@dream Date-Calc-5.3]# perl Makefile.PL
Checking if your kit is complete…
Looks good
Warning: prerequisite Bit::Vector 5.7 not found.
Writing Makefile for Date::Calc
Writing patchlevel.h for /usr/bin/perl (5.008)
하면 위에서 Warning이 뜨는데.. 무시해도 상관이 없다.(INSTALL 문서 참조)
[root@dream Date-Calc-5.3]# make
[root@dream Date-Calc-5.3]# make test
PERL_DL_NONLAZY=1 /usr/bin/perl “-MExtUtils::Command::MM” “-e” “test_harness(0, ‘blib/lib’, ‘blib/arch’)” t/*.t
t/f000….ok
………(생략)
t/m004….ok
t/m005….FAILED test 5
Failed 1/30 tests, 96.67% okay
t/m006….ok
t/m007….skipped
all skipped: no reason given
t/m008….skipped
all skipped: no reason given
t/m009….skipped
all skipped: no reason given
t/m010….skipped
all skipped: no reason given
t/m011….ok
Failed Test Stat Wstat Total Fail Failed List of Failed
——————————————————————————-
t/m005.t 30 1 3.33% 5
4 tests skipped.
Failed 1/48 test scripts, 97.92% okay. 1/2436 subtests failed, 99.96% okay.
make: *** [test_dynamic] 오류 29
100%로 안되나 그냥 install 시킴(버전마다 약간씩 차이가 있음)
[root@dream Date-Calc-5.3]# make install
[root@dream Date-Calc-5.3]# make realclean
위와 동일하게 실행하면 된다.
[root@dream TimeDate-1.16]# Makefile.PL
[root@dream TimeDate-1.16]# make
[root@dream TimeDate-1.16]# make test
[root@dream TimeDate-1.16]# make install
[root@dream TimeDate-1.16]# make realclean
펄 모듈을 모두 설치후 다시 swatch로 가서
[root@dream rpm]# cd swatch-3.0.8/
[root@dream swatch-3.0.8]# perl Makefile.PL
Writing Makefile for swatch
에러 없이 Makefile을 실행한다..
[root@dream swatch-3.0.8]# make
[root@dream swatch-3.0.8]# make test
………
t/01cpan_modules….Can’t locate File/Tail.pm in @INC (@INC contains:….
BEGIN failed–compilation aborted at t/01cpan_modules.t line 8.
t/01cpan_modules….dubious
Test returned status 2 (wstat 512, 0x200)
DIED. FAILED test 1
Failed 1/1 tests, 0.00% okay
Failed Test Stat Wstat Total Fail Failed List of Failed
——————————————————————————-
t/01cpan_modules.t 2 512 1 1 100.00% 1
Failed 1/1 test scripts, 0.00% okay. 1/1 subtests failed, 0.00% okay.
make: *** [test_dynamic] 오류 2
이처럼 또 에러가 발생한다..
File::Tail 모듈을 설치를 안하서 그런것 같다..
위의 펄 모듈 설치를 참조하여 File::Tail 를 다시 깐다.(File-Tail-0.98.tar.gz를 다운 받아서 설치하면 된다.)
설치후 다시 동일하게 swatch를 make 해 준다.
[root@dream swatch-3.0.8]# perl Makefile.PL
[root@dream swatch-3.0.8]# make
[root@dream swatch-3.0.8]# make test
PERL_DL_NONLAZY=1 /usr/bin/perl “-MExtUtils::Command::MM” “-e” “test_harness(0, ‘blib/lib’, ‘blib/arch’)” t/*.t
t/01cpan_modules….ok
All tests successful.
Files=1, Tests=1, 0 wallclock secs ( 0.08 cusr + 0.01 csys = 0.09 CPU)
[root@dream swatch-3.0.8]# make install
[root@dream swatch-3.0.8]# make realclean
이로써 swatch 설치가 끝난다.
Swatch 설정하기
우선 해당 디렉토리 밑에 .swatchrc 파일을 생성한다.
[root@dream swatch-3.0.8]# vi .swatchrc
watchfor /su/
echo=bold
그리고 이처럼 간단히 입력해 저장해 보자.
위는 su명령어를 사용할 경우 콘솔상에 굵게 메세지를 보여주게 된다.
그럼 여기서 잠깐 swatchrc에서 사용되는 명령어를 알아보자.
watchfor : 이것은 swatch에서 감시할 로그의 명령어이다. 위에서는 /Priority\: 1/ snort 로그중 우선순위가 1인(snort 로그 기록시 Priority: 1로 표기되는) 패턴을 잡아내는 것이다. 앞뒤에 / /를 사용해 주어야 한다.
echo : 일치하는 라인을 찍어주는 명령어이다. bold,inverse,under-score 같은 값들이 올수 있다.
exec : 외부 프로그램을 실행할때 사용되는 명령어이다.(경로명은 절대경로로..) 외부명령어 실행시 $N이나 $0을 사용해야 한다.
실행시 잡아오는 결과물중 특정라인을 가져오려면 $N을 사용하고, $0이나 $*는 전체 라인을 가져온다.
mail : 해당 계정으로 메일을 보낼수 있는 명령어이다. /etc/aliases에 그룹을 추가하면 해당 그룹으로 메일을 보낼수도 있다.
throttle : 실행되는 경고의 수를 제한하는 명령어로, 시간을 지정하면 해당 시간동안 동일한 경고 메세지를 보내지 않는다. 서버 부하나 메일부하를 막아주기 위해 사용된다.
(형식은 HH:MM:SS (시:분:초)로 나타낸다.
예를 들어 throttle 5:00 0:16
이면 5분동안 해당 패턴에 대한 경고 메세지를 반복하지 않는다.
0:16은 타임스탬프의 위치와 길이를 나타낸다.
예문을 몇개 들어보면..
watchfor /Priority\: 1/
echo=normal
exec /usr/local/bin/qpage -f test@domain.com -p IDS_admin ‘$0’
throttle 00:00:10
위는 센드메일 대신에 qpage라는 대신해 test@domain.com 이라는 이메일 주소로 IDS_admin에게 메일을 보내게 된다.
qpage로 경고 문구를 넘기기 위해 $0을 사용했으며, Priority: 1 이라는 패턴이 10초이전에 발생하면 무시하게 된다.
(만일 qpage에 관해 알고 싶다면, http://www.qpage.org 를 참고하기 바란다.)
watchfor /Prioriy\: 2/
echo=bold,bell 5
위는 콘살상에서 경고 문구가 출력이 되게 된다.(bold하면 굵게, inverse면 선택반전상태로,normal은 출력하지 않는다.)
원하는 형태로 패턴을 작성한 뒤 swatch를 실행해 보자.
swatch 실행하기
[root@dream swatch-3.0.8]# swatch -c /usr/local/swatch-3.0.8/.swatchrc /var/log/messages &
swatch 실행시 사용되는 옵션은
-c : .swatchrc의 경로를 지정하는 옵션
-p : 따로 실행된 명령어의 출력 정보를 읽어 오는 옵션이다.
그외 옵션은 man을 참조하기 바란다.
이제 새로운 창에서 원격에서 접속을 해 보자.. 그리고
$ su -l 유저명
을 입력후 패스워드를 입력하면..
콘솔상에서 경고 메세지가 출력될 것이다.(새로이 접근한 곳이 아닌 swatch를 실행한 콘솔창에..)
간단히 예문을 들어지만, 로그기록에 대한 막강한 기능을 발휘할수 있는 툴이니 활용을 해 보기 바란다.
snort와 결합 할 경우 attack에 관한 것들을 실시간으로 확인해 볼수 있다.
(다음번에 snort와 swatch를 결합해 실시간 경보를 구현해 보자고 한다.)
swatch 디렉토리밑에 example이라는 곳에 .swatchrc를 작성하는 예문들도 있으니 참조하기 바란다.