Clam AntiVirus 를이용한메일서버바이러스차단 KISA는본문서에서언급한 Clam AntiVirus 와어떠한관계도없으며, 국내메일서버로유입되는웜, 바이러스에의한피해예방을위해공개바이러스차단소프트웨어 Clam AntiVirus를보안참고용으로소개합니다. 2006. 4. 6 () 본보고서의전부나일부를인용시반드시 [ 자료 : 한국정보보호진흥원 (KISA)] 룰명시하여주시기바랍니다. - 1 -
1. 개요 기업 기관의인터넷사용자가이메일을이용하는방법은주요웹메일사이트및 ISP가제공하는메일서비스를이용하는방법과기업 기관내전산담당자가구축한자체메일서버를이용하는방법이있다. 주요웹메일사이트및 ISP가운용하는메일서비스는스팸차단솔루션및이메일로전파되는악성코드를차단하고더이상의확산을방지하기위한기능을어느정도적용하고있다. 물론기업 기관역시바이러스월등의솔루션도입으로이메일로전파되는악성코드를사전에차단하고있다. 하지만대다수의기업 기관은이러한솔루션의도입이미진한상태이다. 최근발견되는악성코드의전파경로는네트워크를통한전파, 메일의첨부화일형태로의전파, 기타사용자를악성코드가은닉된사이트로유도하여감염및피해를발생시키는방식등으로다양해지고있다. 하지만이메일을통해전파되는악성코드의비중은아직도가장큰비중을차지하고있다. 이에따라본고에서는국내에자체적으로메일서버를운용하는업체등을이메일로전파되는악성코드로부터보호하기위하여메일서버용공개바이러스차단소프트웨어를소개하고자한다. Clam AntiVirus(ClamAV) 는주로이메일로전파되는악성코드를관문에서차단하기위해개발된소프트웨어이다. ClamAV는 Tomasz Kojm에의해 2001년에시작된오픈소스프로젝트의결과이다. 시에는 OpenAntiVirus 프로젝트가있었는데설치하고사용하기가어려웠고온라인업데이트기능등을제대로지원하지않아기능을보완하기위해만들었던것이 ClamAV의시작이었다. ClamAV는 GNU GPL 라이센스버전2를따르며, 메일서버와연동해서사용되는것을주목적으로하고있다. Electric Mail와같은메일서비스제공업체가 ClamAV를채택하여사용하고있다. ClamAV를활용하는여러 3rd party의노력으로 ClamAV에서제공하는엔진을이용해개인사용자를위한단독백신 (ClamWin) 으로활용하거나 Web Proxy, FTP Proxy 등과함께사용되어웹사이트, FTP 서버를통해전파되는바이러스를차단하는수단으로도개발, 배포되고있다. ClamAV 의주요특징은다음과같다. o 오픈소스기반 - Snort 등과같이 ClamAV는오픈소스를기반으로한다. - 오픈소스이기에유연성이있으며 www.sanesecurity.com/clamav에서는비공식 Phishing 시그너처도제공하고있다. o 45,000개이상의패턴 - 2006년 3월현재 45,000개이상의탐지패턴을보유하고있다. o 온라인패턴업데이트 - ClamAV 탐지패턴은하루에도여러번업데이트되고있다. - 사용자는인터넷을통해쉽게업데이트된탐지패턴을적용할수있다. o 다양한압축포맷지원 - Zip, RAR, Tar, Gzip, Bzip2, MS OLE2, MS Cabinet Files, MS CHM, MS SZDD 등의파일압축포맷을지원. - 실행압축포맷인 UPX, FSG, Petite 등을지원. - 2 -
본고에서는메일서버를통해전파되는바이러스를효율적으로차단하기위한수단으로 ClamAV를중점적으로살펴본다. 2. ClamAV 설치 ClamAV는기존메일서버에설치되어사용될수있으며, 별도의 ClamAV 메일서버를구성하여사용할수있다. 전자는필요한호스트수를하나줄일수있지만, 기존메일서버가 ClamAV에의해지원되지않는메일서버라면사용할수없다는단점이있다. 후자는기존메일서버를어떤것을사용하더라도구성이가능하다는장점이있지만호스트가하나더필요하다. ( 그림 1) 기존메일서버에 ClamAV 를추가한사례 ( 그림 2) ClamAV 를설치한메일서버를별도로구성한사례 ClamAV는 Qmail, Postfix, Sendmail 등의메일서버를지원한다. 본고에서는이중에서 Sendmail에설치되는경우를다룬다. Sendmail에설치될때는메일서버인 Sendmail, 안티바이러스인 ClamAV 외에이둘을연동하기위한 Clamav-milter, 이세개로구성되는것이보통이다. - 3 -
구성요소 설명 Sendmail MTA(Mail Transfer Agent) 로서메일송수신을담당한다. ClamAV 웜, 바이러스스캐닝을하기위한안티바이러스엔진이다. Clamav-milter MTA와안티바이러스엔진을연동하는역할을한다. Sendmail 의 Milter 지원여부확인 ClamAV를이용하여메일서버에유입되는메일을검사하기위해서기본적으로 Sendmail이 Milter 기능을지원해야한다. Milter 기능이란 Sendmail이외부프로그램과소켓기반으로통신할수있도록하는것으로 Sendmail 8.12부터공식적으로지원한다. Milter는외부프로그램과연동하여메일의내용을검사하고필요에따라서는내용을수정할수있도록하며, 여러가지용도로사용될수있지만특히바이러스및스팸차단과같이이메일보안을위한기능으로주로사용된다. Sendmail이 Milter를지원하기위해서는컴파일시에옵션으로 Milter 기능을포함하여야한다. 현재시스템에설치된 Sendmail이 Milter 기능을지원하는지확인하는방법은다음과같다. prompt# sendmail -bt -d0.4 < /dev/null Version 8.13.6 Compiled with: DNSMAP LOG MATCHGECOS MILTER MIME7TO8 MIME8TO7 만약설치된 Sendmail이 Milter를지원하지않는다면 Milter 기능을사용하기위해다시컴파일해야한다. 혹은 Milter 기능을지원하도록컴파일된바이너리패키지를설치하는방법도있지만각운영체제및버전, 배포본종류등에따라불가능한경우도있다. Sendmail 설치 Sendmail을컴파일하기위해서는우선소스코드를다운로드해야한다. Sendmail 소스코드는 www.sendmail.org에서다운로드할수있다. 2006년 3월 31일기준으로가장최신안정화버전은 8.13.6이다. 1 다운로드한파일은다음과같은명령어로적당한디렉토리에압축해제한다. prompt# tar xvfz sendmail.8.13.6.tar.gz 2 sendmail 프로세스소유주로 smmsp 사용자계정을생성한다. prompt# groupadd smmsp prompt# useradd -g smmsp smmsp - 4 -
3 Sendmail 압축을해제한디렉토리로이동하여 site.config.m4.sample 파일을 /etc/mail/site.config.m4 로복사한다. [user@clamav ~]# cd sendmail-8.13.6/ [user@clamav sendmail-8.13.6]# cp devtools/site/site.config.m4.sample /etc/mail/site.config.m4 4 /etc/mail/site.config.m4 파일을편집기로열어다음과같은설정을확인하여추가한다. 해당라인은 Milter 기능을활성화하고 Milter를 root 권한으로실행하는것을방지하는설정이다. APPENDDEF(`confENVDEF', `-DMILTER') APPENDDEF(`conf_libmilter_ENVDEF', `-D_FFR_MILTER_ROOT_UNSAFE') 그외사이트설정에따라필요한내용이있다면 /etc/mail/site.config.m4 파일에추가한다. 5 sendmail 디렉토리로이동하여컴파일한다. [user@clamav sendmail-8.13.6]# cd sendmail [user@clamav sendmail]# sh Build -c -f /etc/mail/site.config.m4 6 sendmail-8.13.6/cf/cf/ 디렉토리로이동하면 *.mc 템플릿이각운영체제등의환경별로있는데 Sendmail이설치될환경에가장적합한 *.mc 파일을 sendmail.mc로복사한다. [user@clamav sendmail]# cd../cf/cf/ [user@clamav cf]# cp generic-linux.mc sendmail.mc 7 sendmail.mc 파일을편집기로열어서다음과같은라인을추가한다. 이설정은 Clamav-milter 사용을위한설정이다. INPUT_MAIL_FILTER(`clmilter', `S=local:/var/run/clamav/clmilter.sock, F=, T=S:4m;R:4m')dnl define(`confinput_mail_filters',`clmilter') 그외사이트설정에따라필요한내용이있다면 sendmail.mc 파일에추가한다. 8 다음명령을실행하여 /etc/mail/sendmail.cf, /etc/mail/submit.cf 를생성한다. [user@clamav cf]# sh Build sendmail.cf Using M4=/usr/bin/m4 rm -f sendmail.cf... - 5 -
[user@clamav cf]# sh Build install-cf Using M4=/usr/bin/m4../../devtools/bin/install.sh -c -o root -g bin -m 0444 sendmail.cf /etc/mail/sendmail.cf../../devtools/bin/install.sh -c -o root -g bin -m 0444 submit.cf /etc/mail/submit.cf 9 sendmail-8.13.6/sendmail/ 디렉토리로이동하여다음과같이빌드한결과를설치한다. [user@clamav cf]# cd../../sendmail/ [user@clamav sendmail]# sh Build install 10 성공적으로설치가끝나면 "Sendmail의 Milter 지원여부확인 " 에서와같이확인하여 Milter 지원기능이활성화되었는지살펴본다. Libmilter 의설치여부확인 다음과같이 libmilter 라이브러리가설치되어있는지확인한다. libmilter 라이브러리가확인되지않는다면해당라이브러리도설치해야한다. [user@clamav sendmail-8.13.6]# whereis libmilter libmilter: /usr/lib/libmilter.a /usr/include/libmilter Libmilter 설치 Libmilter는 sendmail 소스코드압축을해제하였던디렉토리하단의 libmilter에서빌드하고설치할수있다. [user@clamav libmilter]# sh Build... [user@clamav libmilter]# sh Build install ClamAV 의설치 ClamAV는 www.clamav.net에서다운로드할수있다. 2006년 3월 31일기준으로가장최신안정화버전은 0.88이다. 1 ClamAV 를다운로드하여다음과같이적당한디렉토리에압축해제한다. [user@clamav ~]# tar xvfz clamav-0.88.tar.gz 2 ClamAV 가실행되기위한권한을가진사용자를다음과같이생성한다. - 6 -
[user@clamav ~]# groupadd clamav [user@clamav ~]# useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav 3 ClamAV 압축해제한디렉토리로이동하여 ClamAV 를컴파일하고설치한다. [user@clamav ~]# cd clamav-0.88 [user@clamav clamav-0.88]#./configure --sysconfdir=/etc --enable-milter... [user@clamav clamav-0.88]# make... [user@clamav clamav-0.88]# make install ClamAV 설정파일 (clamd.conf, freshclam.conf) 은 configure 명령의 --sysconfdir 옵션에서지정된 /etc 디렉토리에위치하게되고바이너리는 /usr/local 디렉토리에저장된다. 3 설치가성공적으로이루어졌는지확인하기위해 clamscan 명령어를실행하면현재디렉토리에있는파일들에대한바이러스점검결과를확인할수있다. [user@clamav ~]# clamscan /user/install.log: OK /user/.autorun.lck: Empty file /user/install.log.syslog: OK /user/.tcshrc: OK /user/.cshrc: OK... 3. ClamAV 설정및실행 ClamAV 의설정 1 소켓파일이저장될디렉토리를 /var/run/clamav에생성하고소유자는 clamav 사용자로한정한다. prompt# mkdir /var/run/clamav prompt# chmod 600 /var/run/clamav prompt# chown clamav:clamav /var/run/clamav 2 /etc/clamd.conf 파일을환경에맞게편집한다. - 7 -
LocalSocket을수정하고보안을위해 clamd 프로세스의소유자를 clamav로한정한다. 또한 LogFile을지정하여로그를저장한다. 그밖의설정은 man clamd.conf 명령어를통해 clamd.conf 맨페이지를참고하여필요에따라설정한다. LocalSocket /var/run/clamav/clamd.sock User clamav LogFile /var/log/clamd.log /etc/clamd.conf 에서다음과같이 Example 이라는라인을주석처리해야한다. # Comment or remove the line below. # Example 3 로그파일을생성하고소유자를 clamav 로한정한다. prompt# touch /var/log/clamd.log prompt# chmod 600 /var/log/clamd.log prompt# chown clamav:clamav /var/log/clamd.log ClamAV 의실행 1 clamd 를다음과같이실행한다. [user@clamav ~]# /usr/local/sbin/clamd clamd는대몬으로실행되며다음과같이현재프로세스목록을확인하면 clamd를확인할수있다. [user@clamav ~]# ps -ef grep clamd clamav 7277 1 0 16:20? 00:00:00 /usr/local/sbin/clamd 2 clamav-milter 를실행한다. [user@clamav ~]# /usr/local/sbin/clamav-milter -lo /var/run/clamav/clmilter.sock --external clamav-milter 역시대몬으로실행되어 ps 명령어로프로세스내역을확인할수있다. [user@clamav ~]# ps -ef grep clamav-milter clamav 7312 1 0 16:27? 00:00:00 /usr/local/sbin/clamav-milter -lo /var/run/clamav/clmilter.sock --external - 8 -
3 sendmail 프로세스를재시작한다. 프로세스가정상적으로실행된다면설치는완료되었다. 4 설치된 ClamAV 과 Sendmail 과연동하여문제없이동작하는지확인한다. 구성된 ClamAV 메일서버를통해 Eicar에서제공하는테스트를위한샘플바이러스를포함해서메일을발송한다. Eicar에서제공하는샘플바이러스는악성행위를하는바이러스는아니며, 안티바이러스가제대로동작하는지를시험하기위해제공하는표준시그너처이다. 다운로드사이트 : www.eicar.org/anti_virus_test_file.htm 다음은해당메일을발송했을때 ClamAV 에의해바이러스로탐지되고반송된화면이다. ( 그림 3) ClamAV 에의한바이러스탐지화면 또한, /var/log/clamd.log 파일에서다음과같은탐지로그를확인할수있다. /tmp/clamav-311cd8c9c0dcd132/msg.tn3dwq: Eicar-Test-Signature FOUND 바이러스가포함되지않은메일이 ClamAV를통해보내졌을경우에는해당메일의헤더에서다음과같이 ClamAV로점검되었음을확인할수있다. ( 그림 4) 메일헤더를통한 ClamAV 점검확인 - 9 -
freshclam을이용한온라인업데이트 ClamAV는바이러스시그너처에대한온라인업데이트를지원한다. freshclam 명령어를실행하면된다. 업데이트를위해서는 1 /etc/freshclam.conf 파일을환경에맞게편집한다. 업데이트과정을로그로남기기위해다음과같이설정한다. UpdateLogFile /var/log/freshclam.log 3 로그파일을생성하고소유자를 clamav 로한정한다. prompt# touch /var/log/freshclam.log prompt# chmod 600 /var/log/freshclam.log prompt# chown clamav:clamav /var/log/freshclam.log /etc/freshclam.conf 에서다음과같이 Example 이라는라인을주석처리해야한다. # Comment or remove the line below. # Example 4 freshclam 을이용하여온라인업데이트를수행한다. prompt]# freshclam ClamAV update process started at Tue Apr 4 17:42:14 2006 Downloading main.cvd [*] main.cvd updated (version: 37, sigs: 46700, f-level: 7, builder: ccordes) Downloading daily.cvd [*] daily.cvd updated (version: 1374, sigs: 2136, f-level: 7, builder: sven) Database updated (48836 signatures) from database.clamav.net (IP: 218.189.210.14) root나 clamav 사용자의 crontab으로다음과같이해당작업을등록하여정기적인업데이트를하도록할수있다. N * * * * /usr/local/bin/freshclam --quiet 또는 "freshclam -d" 명령을이용해대몬으로실행할수있다. - 10 -
4. 결론 본고에서는이메일기반바이러스차단공개소프트웨어 ClamAV에대해살펴보았다. ClamAV 는오픈소스안티바이러스로활발한시그너처업데이트와오픈소스의특성과많은 3rd party의지원을살려서다양한환경을지원한다. 또한 IRC나메일링리스트등을통한무료기술지원창구는물론, ClamAV에대한상용기술지원을제공하는업체들도있다. 단점으로는탐지율이상용제품에비해서낮은편이며사용자를위한 GUI 환경의프론트엔드가거의존재하지않아관리자입장에서관리가불편하다는것을들수있다. 하지만프로젝트가계속하여활발히진행되고있기때문에이점도개선될것으로보이며, 네트워크관문에서의악성코드차단에효과적인역할을할수있을것으로기대한다. - 11 -