[보안] 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를 작성하는 예문들도 있으니 참조하기 바란다.

서진우

슈퍼컴퓨팅 전문 기업 클루닉스/ 상무(기술이사)/ 정보시스템감리사/ 시스존 블로그 운영자

You may also like...

페이스북/트위트/구글 계정으로 댓글 가능합니다.