[시스템] 로그 필터링 자동화 하기
로그 필터링 자동화하기
로그 관찰하기
Lance Spitzner
최종 수정일: 2000. 4. 14.
출처 : http://www.enteract.com/~lspitz/swatch.html
번역일 : 2000. 5. 23
번역자 : 문태준 ( taejun
at tunelinux.pe.kr http://tunelinux.pe.kr http://taejun.pe.kr
http://database.sarang.net )
번역자 첨부 : 본 문서는 시스템의 로그를 필터링해서 유용한 정보를 보는 방법에 대해
설명하고
있다. 이 글을 쓴 저자의 홈페이지를 방문하면 여러 가지 유용한 자료들이 있다.
KLDP에서 리눅스 보안 하우투 등과 갈이 해서 보면 좋을 것이다. 본 번역글의 오역으로 인한
피해에 대해서는 본인이 책임을 지지 않으며 번역자의 이름과 출처를 밝히면 어느 곳이든
옮길 수 있다. 단 상업적인 목적으로 사용시는 번역자의 허락을 받아야한다. 번역이 목적이
아니기 때문에 내용을 전달하는데 초점을 두겠다. 본 번역자의 주석은 ** 로 표시를 하겠다.
로그는 시스템을 성공적으로 운영하는데 아주 중요한 부분이다. 시스템에서 어떠한 일들이
벌어지를 알려준다. 그러나 로그는 순식간에 엄첨나게 커지며 너무나 많은 정보를 빠르게
보여준다. 곧 디스크 공간만을 채우는 불필요한 파일이 된다. 이번 주제는 로그를 자동으로
필터링해서 위와 같은 문제를 해결하고 필요한 정보만을 알려서 좀더 자유로와질 수 있는
방법에 대해 다룬다.
필터링
로그는 아주 중요한 부분이지만 불행히도 사람들은 가끔씩 이러한 사실을 잊어먹는다. 너무나
많은 정보들을 보는데 시간이 너무 적다. 유용한 로그를 보는 과정을 자동화해서 필요한
정보만 알려준다면 멋지지 않는가. 자 이제 한번 해보자. 여기서는 필요한 정보를 찾기 위해
로그를 필터링하고 알려주는 방법에 대해 설명한다.
첫 번째로 무엇을 필터링하고 무엇을 알리기 원하는지 계획을 세우는 것에 대해 설명할
것이다.
두 번째로는 필터링을 수행한다. 여기서 필터로 토드 아트킨스가 만든 swatch를 사용할
것이다.필터링 처리에 대한 예로는 센드메일 로그를 사용할 것이다. 그렇지만 각자가 원하는
유형의 로그에 적용할 수 있다.
어디서 시작해야 하는가
첫 시작은 계획 세우기이다. 자동화된 로깅을 만드는 계획에는 세가지 단계가 있다. 첫
번째는
원하는 로그를 선택한다. 시스템 로그에서 어떤 정보가 필요한지를 결정해야한다. 두 번째
단계는 어떤 로그 파일에 정보가 들어있는지 확인한다. 세 번째 단계는 필요한 로그를
정의하는
트리거를 만든다.
예를 들어 센드메일의 보안에 대해 생각을 하는 경우, 당신의 메일서버를 스팸 릴레이로
사용하려는 시도에 대해 알고싶을 것이다. 또한 expn 등과 같이 인증되지 않은 SMTP 명령을
시도하는 것에 알고자 할 것이다. 우리가 알고자 하는 정보를 정함으로서 첫 번째 단계를
마쳤다.
(** 역자 참고 : expn은 아래에서 보는바와 같이 주소가 메일링리스트를 가리키면 그 목록에
대해 알 수 있다. 예를 들어 알리아스로 설정해놓은 목록같은 것도 볼 수 있다는 것이다.
214-EXPN <recipient>
214- Expand an address. If the address indicates a mailing
214- list, return the contents of that list.
214 End of HELP info
)
두 번째 단계는 소스를 결정해야하는데 어떤 로그에 정보가 담겨있는지를 알아야 한다. 가장
좋은 방법은 /etc/syslog.conf를 보면 된다. 이 설정 파일에 각 로그가 어떻게 기록되는지
나와있다. 메일의 경우 솔라리스에서는 /var/logsyslog 이며 리눅스에서는 /var/log/maillog
이다.
(** 역자 참고: 각 로그파일의 의미에 대해서는 다음 사이트를 참고한다.
http://tunelinux.pe.kr/bbs/include/linuxinfo/files/phpQHFsET/log_admin.txt
->
본인의 글
http://mgt.kaist.ac.kr/~sakai/Docs/Security_document/Part3.html ->
kaist 보안
홈페이지
)
goalith #cat /etc/syslog.conf | grep mail
mail.debug ifdef(`LOGHOST’, /var/log/syslog, @loghost)
마지막 단계는 트리거 설정이다. 로그파일에서 우리가 보고자하는 특정한 항목을 설정한다.
센드메일의 겨우 두가지 트리거를 설정할 것이다.
1.우리 메일 서버를 메일 릴레이로 사용하려는 인증받지 않은 IP 주소 보여주는 트리거
2.설정을 off로 해놓은 expand 명령을 사용하려는 시도를 보여주는 트리거
트리거를 정의하는 가장 좋은 방법은 /usr/bin/tail -f를 이용하여 로그를 관찰해서 필요한
항목을 뽑아내는 것이다. 실제 시스템에서 할수 없다면 트리거를 만들수 있는 연구 시스템을
찾자. 먼저 메일 릴레이를 사용하려는 인증받지 않은 사용자를 찾는 첫 번째 트리거를
만들자.
허가받지 않은 IP주소에서 당신의 메일서버를 릴레이로 사용해보자. /usr/bin/tail -f를
이용 /var/log.syslog의 로그 항목을 살펴보자. (Refer to Figure A).
moo.com에서 누군가가 스팸 가능성일수도 있는 이메일 릴레이를 시도하려한 메시지를 볼 수
있다. 이것이 허가받지 않은 메일 릴레이 트리거이다. 에러에 또한 IP 주소와 도메인이
있다는 것을 참고하자.
이제 허가받지 않은 expn 명령의 사용에 대한 두 번째 트리거를 만들자. SMTP 포트로 원격
로그인을 하여 expn을 실행하자. tail -f로 /var/log/syslog를 모니터링한다. (Refer to
Figure
B).
여기서 에러 메시지를 보면 moo.com의 누군가가 root 사용자 이름으로 expand를 시도한
내용이 나온다. 누군가가 “expn” 명령을 실행하려한 트리거이다. 에러에 또한 IP
주소와
도메인이 있다는 것을 참고하자.
이제 자동 로그 필터링 계획을 위한 세가지 단계를 마쳤다. 먼저 중요한 정보로 우리 메일
서버를 메일 릴레이로 사용하려는 허가받지 않은 시도와 expn 명령의 사용으로 정했다.
그러고나서 이러한 정보를 담고 있는 로그 파일이 /var/log/syslog 라는 것을 알았다.
마지막으로 각 사건에 대한 정보를 알려주는 트리거를 정했다. 이제 자동화된 필터를 만들
준비가
다 되었다.
SWATCH
스와치(SWATCH, “The Simple WATCHer and filter)”는 토드 아트킨스가 만든 펄
프로그램으로 로그를 실시간 모니터링한다. 스와치는 특정한 트리거에 대한 로그를
모니터링하는데
트리거에 해당하는 경우 미리 정해놓은 방식대로 정보를 알려준다. 우리의 경우 스와치에서
센드메일을 통해 정보를 알려주는 형태로 설정할 것이다.
프로그램은 설치하기 지극히 간단하다. 스와치는 모든 라이브러리, 맨 페이지, 펄 파일을
지정한
디렉토리에 복사해주는 유용한 설치 스트립트와 함께 구성되어 있다. 몇가지 펄 모듈을
컴파일하고 설치해야하는데 설치 스크립트가 이에 대해 알려준다. 설치를 마친 후 설정파일을
만들고 프로그램만 실행하면 된다. 스와치는 다음 사이트에서 다운받을 수 있다.
ftp://ftp.stanford.edu/general/security-tools/swatch.
(** 역자 참고 : 저의 경우 위 사이트에서 다운이 되지않았습니다. 그런데 레드햇 6.1 계열의
배포판에는 들어 있습니다.)
swatchrc라 불리는 설청 파일이 스와치 프로그램의 핵심이다. 이 텍스트 파일에 스와치가
모니터링할 로그와 트리거, 트리거가 발생할시 무엇을 할지 지정한다. 스와치는 swatchrc에서
정의한 트리거에 맞는 정규표현식을 이용 작업을 한다. /usr/bin/tail -f를 이용 실시간으로
파일을 모니터링한다.
이제 위에서 논의한 센드메일 로깅을 위한 swatchrc 파일을 만들자. 목표는 누군가가 우리
이메일 시스템에 접근하는 경우마다 메일로 자료를 보내는 것이다. 우리는 허가받지 않은
메일 릴레이와 expn 명령시도를 이미 정의했다. swatchrc 파일의 사용법은 다음과 같다.
네가지 필드로 구성되며 첫 번째 두 번째 필드는 반드시 필요하고 나머지 두 필드는
선택이다.
첫 번째 필드는 다으과 같다.
/pattern/pattern/
패턴은 스와치가 찾을 정규 표현식이다. 이것이 트리거이다. 두 번째 필드는 다음과 같다.
Action,action…
액션은 패턴이 일치하는 경우 무엇을 할 것인가이다. 액션에 다양한 옵션이 있는데 email,
paging, 선택한 파일 실행 등이 있다. 세 번째 필드인 ‘throttle’ (옵션)은 다음과 같이 시간
간격을 정의한다.
HH:MM:SS
HH 시간, MM 분 , SS 초를 나타낸다. 시간 간격은 계속 반복적으로 매칭되는 패턴을 기록하는
것을 생략하는 시간을 나타낸다. 예를 들어 5분으로 정의한 경우 어떤 일치하는 패턴이
20건 있다고 하더라도 그 시간동안에는 오직 한번만 알린다.
네 번째 필드(세 번째 필드를 사용하는 경우 필요) 타임스탬프로 시작:길이 형태로 정의한다.
이건 알림 메시지 타임스탬프의 위치와 길이를 정의한다.
센드메일 예에서 우리는 두가지 트리거에 맞는 패턴를 찾는 swatchrc 파일을 생성하길
원한다.
( Figure A 와 Figure B를 보자). 두가지 패턴에 맞는 것을 찾을때,
abuse at ourcompany.net
에게 이메일로 사실을 알리고 이메일안에 해당하는 패턴을
포함시킨다. 그렇지만 경고 메시지로 가득차지 않도록 조심해야한다. 예를 들어 누군가가
분당
1000개의 이메일을 릴레이하려는 시도를 한다면 알림 메시지로 가득차 버리게 될 것이다.
그래서 5분간의 시간 간견을 설정할 것이다. 5분동안 해당하는 패턴이 얼마나 많이 생기든
상관없이 우리는 오직 한가지의 경고 메시지만 받을 것이다. swatchrc 파일은 다음과 같다:
watchfor /Relaying denied|expn/
echo=normal
mail=abuse at
ourcompany.net,subject=— Sendmail Alert! —
throttle 5:00 0:16
첫 번째 필드는 “/Relaying denied|expn/” 이다. 스와치에서 정규표현식에 맞는
패턴을
발견하면 alert 경고 메시지를 보낸다. 첫 번째 패턴인 “Relaying denied” 는
트리거 #1 (Figure
A)에서 정의한 것으로 허가받지 않은 메일 릴레이를 시도하는 경우이다. 트리거 #2에 있는
“expn” 패턴 (Figure B)은 누군가가 expn 명령을 시도하는 경우이다. 위 두가지
트리거
표현은 이 주제의 처음에서 다루었다.
두 번째 필드는 “echo=normal,mail=abuse at company.net”
이다. 경고 메시지를
abuse at ourcompany.net
에게 보내고 해당 로그 항목을 콘솔에서 보여준다.
세 번째, 네 번째 항목(옵션임) “5:00 0:16” 이다. 5분동안 해당하는 패턴에 대해
경고 메시지를
반복하지 않는다. 마지막 필드는 타임스탬프의 위치와 길이를 말한다.
이에 swatch 파일을 적절히 설정하였다. 마지닥 단계는 스위치를 실행하는 것이다. 스위치는
여러 가지 다양한 옵션을 가지고 시작할 수 이다. 다음과 같다.
/usr/local/bin/swatch -c /var/log/syslogrc -t /var/log/syslog &
-c 옵션은 설정 파일을 가리키며 -t 옵션은 실시간으로 모니터링할 로그 파일을 가리킨다.
“&”은 스와치를 백그라운드로 실행한다. 실행되고나서 스와치는 자식
프로세스를 생성한다.
그러므로 스와치는 두 개의 프로세스로 운영된다. 자신이 만든 스크립트를 시작하고 멈추려면
두 개의 프로세스에 kill 신호를 보내야한다. 이제 모두 마쳤다. 센드메일 로그가 자동으로
필터링될 것이다. 누군가가 센드메일 시스템에 접근할 때마다 그 즉시 이메일로 알 수 있으며
로그에 포함된 해당 트리거도 알 수 있다. ( Figures A 과 Figure B를 보자).
결론
로그는 강력한 툴이다. 그렇지만 자료가 쉽게 늘어난다. 이러한 경우 이러한 자세에 대해
상세하게 볼 여유가 없어서 신경을 쓰지 않게 된다. 이러한 로그를 자동 필터링하여 문제를
해결할 수 있다. 자동 필터링은 무척 유용하며 우리에게 필요한 정보를 실시간으로 알려준다.
이
글이 어떻게 로그 파일을 자동으로 필터링할 것인지에 대해 좋은 제안이 되었으면
좋겠다.
Figure A
Trigger for anyone attempting un-authorized mail relay from your sendmail
server.
Oct 3 14:48:51 homer sendmail[6704]: OAA06704:
ruleset=check_rcpt,arg1=bsmith
at domain.com, relay=foo at
moo.com
[206.54.252.1],reject=550 root at
domain.com… Relaying
denied
Figure B
Trigger for anyone attempting to utilize the expn command on your sendmail
server.
Oct 2 20:28:37 homer sendmail[5453]: NOQUEUE: foo at moo.com[206.54.252.1]:
expn root [rejected]
저자 소개
Lance Spitzner 는 집에서 유닉스 시스템을 운영하는 법에 대해 배우는 것을 좋아한다. 그는
이전에 Officer in the Rapid Deployment Force 에 있었으며 여러 가지 일을 했다. 그에게
연락을 하려면 lance at
spitzner.net을 이용하면 된다.
** 역자 참고
/etc/syslog.conf 설정에서 같은 로그를 두군데로 설정하거나 원격으로 보내는 것도 좋은
방법이라 생각합니다. 물론 크래커가 침입해서 위 파일의 설정을 보면 다 알 수 있겠지만
여러군데로 나누어두면 약간이나마 크래킹시 지연시간을 가질 수 있지 않을까 생각됩니다.
또한
원격호스트로 로그를 보낼 수 있으므로 중간의 관리서버로 모든 로그를 보내어 그
호스트에서 분석을 할 수도 있습니다.
스와치 자체에 대해서 몇가지 설명을 더 하겠습니다. 저는 레드햇 6.1에서 rpm으로 설치를
하였습니다. 프로그램 시작시 위에서 말을 한 대로 -c -t 옵션만 사용해도 충분하며 설정
파일에 대한 것은 man 페이지를 참고하면 됩니다. 위 예에서는 설정파일을 여러 줄로
나누어서
사용했는데 기본은 한줄에 모두 다 적어주어야 합니다. 또한 주의할것. 반드시 각 필드는
“탭”으로 띄어야 합니다. 상당히 까다롭게 되어있지요. 저의 경우 세 번째 필드, 네
번째 필드에
대해서는 정확하게 이해가 가지 않습니다. 실제로 테스팅을 해 보아도요.
또한 중요한게 결국 로그 모니터링을 하려면 시스템 로그에 대해서 잘 알고 있어야 합니다.
메일서버, DNS, ftp, telnet, ssh 등등. 아래는 제가 테스팅하고 있는 내용인데 아직 고칠게
많습니다. DNS 로그등 잘못 설정된 부분이 있습니다. 스와치 자체를 쓰든 안쓰든 상관없지만
이번 기회에 각 서버 프로그램에서 어떻게 로그를 기록하는지 정상적인 메시지와
비정상적인 메시지에 대해 공부하는 것은 유용할 것 같습니다. 이글 정리하면서 저도
지금까지
잘못 설정된 것이 꽤 있다는 것을 많이 발견했습니다. 그러므로 아래 예는 그냥 이렇게 할
수도 있다고 생각하시고 절대 그대로 해서 사용하지는 마세요. 로그 분석과 관련해서 잘
아시는
분이 정리를 해주시면 고맙겠습니다.
기타 로그 관련툴은 다음과 같습니다. Logcheck 프로그램도 많이 사용하는 듯하며 이
프로그램은 cron을 이용합니다. 마지막. 제가 아는 사람에게 메일을 보내려고 했는데
아이디가
기억 나지 않아서 telnet 으로 SMTP 접속해서 위에서 말한 expn 명령을 이용 아이디를
알아냈지요. 쩝~
Log monitoring
Psionic Logcheck
colorlogs
WOTS
swatch
#
#
# swatch에 기본 들어있는 swatrc.personal을 변경한 내용
#
# 작성자 문태준. 2000.05.18 광주민중항쟁의 날.
# http://tunelinux.pe.kr http://taejun.pe.kr http://database.sarang.net
# taejun at
tunelinux.pe.kr
#
# swatch 참고 사이트
# http://www.enteract.com/~lspitz/swatch.html
#
#
# /etc/syslog.conf에서 가능한 모든 메시지를 messages에 기록하도록 설정
#
# 로그기록과 관련해서는 다음 사이트 참조
# http://tunelinux.pe.kr/bbs/read.php3?table=linuxinfo&no=22&page=1
# [강좌] 시스템 최적화 – 로그파일 분석 및 효율적으로 관리하기(문태준)
#
# http://mgt.kaist.ac.kr/~sakai/Docs/Security_document/Part3.html
# 시스템의 로그 관리 및 분석법(김휘강)
#
#
# 각 해킹사안별 로그기록은 항상 최신 보안 뉴스에서 참고해야할듯
#
# http://www.certcc.or.kr/paper/tr2000/2000-02/tr2000-02.html
# 해킹 피해시스템 분석 및 복구 절차 (이현우)
#
# Alert me of bad login attempts and find out who is on that system
/INVALID|REPEATED|INCOMPLETE/ echo=inverse,bell=3
# 실패와 관련된 내용
/failure|reject|failed/ echo=inverse
/REFUSED|refused|attack|ATTACK/ echo=normal
# Important program errors
#/LOGIN/ echo=inverse,bell=3 01:00 00:16
#/passwd/ echo=bold,bell=3
# inetd 로그
/inetd/&&/auth/&&/tcp/&&/bind/ ignore
# mail서버 : spam relay, telent 접근시도
/sendmail/&&/(Relaying denied)/ echo=normal
# mail서버 : spam relay, telent 접근시도
/sendmail/&&/(Relaying denied)/ echo=normal
/sendmail/&&/expn/ echo=normal
# 정상적인 메일 발송
/sendmail/&&/Sent/ ignore
/sendmail/&&/relay=/&&/from/ ignore
# pop3 제외
# 정상적인 pop3 가져가지
/ipop3d/&&/211.11.11/ ignore
# name server 제외
# 정상적인 네임서버 접속
/named/&&/Lame server/ ignore
/named/&&/MX/ ignore
# 통계정보 제외 USAGE , NSTATS, XSTATS
/named/&&/Clean/ ignore
/named/&&/USAGE/ ignore
/named/&&/NSTATS/ ignore
/named/&&/XSTATS/ ignore
# bind 8 dynamic update 기능 제외
#/named/&&/ns_forw/&&/query ignore
#/named/&&/XSTATS/ ignore
# ftp, telnet 접속시도
# ssh를 사용하고 ftp telnet은 막는게 좋음
#/telnet/ echo=bold,bell=3
#/ftp/ echo=bold,bell=3
# sshd 제외
# 정상적인 ssh 접속
/sshd/&&/211.11.11.11/&&/DNS/ ignore
# Kernel problems
# 시스템 붕괴
/panic|halt|shutdown/ echo=bold,bell
/file system full/ echo=bold,bell=3
/fingerd.*(root|[Tt]ip|guest)/ echo,bell=3
/su/ echo=inverse 01:00 00:16
# 그외 모든 로그 기록
/.*/ echo 01:30 00:16