강좌
클라우드/리눅스에 관한 강좌입니다.
해킹&보안 분류

clamav를 이용한 바이러스 메일 필터링

작성자 정보

  • 구돌 작성
  • 작성일

컨텐츠 정보

본문

clamav를 이용한 바이러스 메일 필터링



 

최근에는 바이러스가 웜(worm)의 성격을 띠면서 단순히 클라이언트 PC를 감염시키는 것 뿐만 아니라 특정 사이트에 대한 서비스거부/분산서비스거부 공격을 하는 경우도 자주 있다.

 

또한 심각한 바이러스의 경우 스팸 성격을 띠어 동시에 수백 통의 메일이 발송되어 메일 박스를 가득 채울 때도 있는데, 모든 일반 유저(클라이언트)PC에 백신 프로그램을 설치 운영한다 하더라도 모든 유저가 늘 최신 백신으로 업데이트 하는 것도 쉬운 일이 아닐 뿐더러 일단 PC로 전송되어 들어오는 바이러스 메일들을 받지 않을 수는 없기 때문에 여간 번거로운 일이 아닐 수 없다.

 

따라서 클라이언트가 아니라 사용자에게 메일이 전달되기 전에 아예 서버 차원에서 바이러스 메일을 걸러낸다면 매우 효율적일 것이다.


 

이를 위해 메일 서버에 직접 plugin 형태로 백신을 설치하여 사용하는 방법을 살펴보고, 다음 절에서는 별도의 전용 서버에 백신 프로그램을 설치하여 도메인의 MX를 변경함으로써 메일서버로 전송되기 전에 바이러스월(Virus Wall)을 먼저 거치도록 구성하는 방법에 대해 각각 알아보도록 하자


두 방식 모두 일장일단이 있으므로 각자의 환경에 따라 적합한 방식으로 이용하기 바란다.

 

참고로 PC 기반이든 서버기반이든 관계없이 대부분의 백신 프로그램에서는 바이러스 메일을 거의 100% 정확하게 인식하므로 정상적인 메일이 바이러스로 인식되어 차단될 가능성은 없다.

 

여기에서는 오픈소스 기반의 가장 대중적인 백신 프로그램인 clamavsendmail이나 qmail등 기존의 MTA와 연동하여 SMTP를 통해 들어오거나(incoming) 나가는(outgoing) 메일의 바이러스 감염 여부를 체크하여 필터링하는 형태로서 별도의 비용이나 제한없이 자유롭게 이용 가능하다.

 

clamav 홈페이지 : http://clamav.net/

131860d18729e5f40dd7612df19c0010_1663051343_4509.png
 

[그림] clamav 홈페이지

 

 

 

 

3.4.1 clamav 기능 및 장점

 

* GNU 라이센스이므로 기능의 제한 없이 자유롭게 이용이 가능하다.

* 많은 바이러스와 웜 등을 빠르고 정확하게 인식할 수 있어 많은 상용프로그램에서 clamavDB를 이용하고 있으며 최근에는 피싱 메일도 탐지하는 기능을 가지고 있다.

 

 

* 윈도우 버전의 경우 clamwin이라는 이름으로 제공 되는 등 많은 third party 응용 프로그램이 개발되어 제공되고 있다.

 

* 수신되는 메일 뿐만 아니라 송신되는 메일의 바이러스 체크도 가능하다.

* 설치 및 설정방법이 매우 쉽다.

* 실시간으로 바이러스 정보가 업데이트 가능하다.

 

3.4.2 clamav 설치 및 설정 방법

 

clamav가 작동하기 위해서는 먼저 zlibzlib-devel 패키지 그리고 gcc 컴파일러가 설치되어 있어야 한다.

 

대부분 시스템에 기본적으로 설치되어 있으므로 별도로 설치하지 않아도 될 것이다.

 

그리고 여러 가지 설치 방법이 있는데, 가장 쉬우면서도 편하게 설치할 수 있는 방법은 기존의 sendmaillibmilter형태로 설치하는 것이다.

 

이를 위해서는 sendmail 뿐만 아니라 버전에 맞는 sendmail-develsendmail-cf 패키지도 설치되어 있어야 한다.

 

만약 설치되어 있지 않으면 아래 명령어로 설치하기 바란다.

 

 

 

# yum -y install sendmail-cf*

# yum -y install sendmail-devel*

 

아울러 sendmail에서 MILTER기능이 지원되는지 확인하기 위해 아래와 같이 실행시

MILTER가 보여야 하는데 최근 버전은 기본적으로 지원한다.

 

결과는 버전에 따라 다소 다를 수 있는데, MILTER만 보이면 된다.

 

 

# sendmail -d0.10 < /dev/null | grep MILTER

MATCHGECOS MILTER MIME7TO8 MIME8TO7 NAMED_BIND NETINET NETINET6

 

이후 홈페이지에서 최신버전의 clamav를 다운로드하여 설치하도록 한다.

 

특히 clamav는 특정 버전에서 보안 취약성을 가지고 있으므로 최신 정보를 유지하는 것이 좋다.

 

# tar zxvfp clamav-0.9x.x.tar.gz

 

다음으로는 clamav가 작동하게 될 user를 생성한다.

 

별도로 인증을 하지 않으므로 clamav

의 암호는 설정할 필요는 없다.

 

 

# adduser clamav

 

소스가 설치된 디렉토리에서 아래와 같이 현재 시스템에 맞도록 configure 한다.

 

 

# ./configure --enable-milter --prefix=/usr/local/clamav

위와 같이 실행하면 /usr/local/clamav 디렉토리에 설치하되 milter 기능을 활성화하여 설

정하겠다는 의미이다.

 

특별히 에러가 없으면 문제없이 진행될 것이므로 컴파일하고 설치하도록 한다.

 

 

# make; make install

 

이제 /usr/local/clamav/디렉토리에 관련파일들이 설치된 것을 확인할 수 있을 것이다.

 

이제 sendmail과 연동하기 위해 clamav-milter를 설정하도록 하자. clamav-milter

sendmail을 위해 개발된 빠른 속도의 e-mail scanner로서 아래와 같이 간단하게 설정할 수 있다.

 

sendmail.cf 파일에 직접 추가 시에는 아래와 같이 추가하면 된다.

 

 

 

O InputMailFilters=clmilter

Xclmilter, S=local:/var/run/clamav/clmilter.sock,F=,T=S:4m;R:4m

 

만약 sendmail.mc파일에 추가할 경우에는 아래와 같이 추가하도록 한다.

 

 

 

INPUT_MAIL_FILTER(`clmilter',`S=local:/var/run/clamav/clmilter.sock,F=,

T=S:4m;R:4m')dnl

define(`confINPUT_MAIL_FILTERS', `clmilter')

 

이후에는 m4sendmail.cf를 다시 생성하도록 한다.

 

 

# m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf

 

아울러, 다음과 같이 clamav 디렉토리를 생성하도록 하자.

# mkdir /var/run/clamav

# chown clamav.clamav /var/run/clamav

 

만약 소켓 파일이 생성되는 /var/run/clamav 디렉토리에 위와 같이 적당한 소유권과 퍼미션이 없을 경우에는 clamav-milter 실행 시 아래와 같은 에러가 나면서 작동하지 않게 되므로 주의하기 바란다.

 

 

Aug 14 14:00:37 virus clamav-milter: ClamAv: Unable to bind to port

/var/run/clamav/clmilter.sock: 허가 거부됨

Aug 14 14:00:37 virus clamav-milter: ClamAv: Unable to create listening socket

on conn /var/run/clamav/clmilter.sock

 

 

3.4.3 clamav 자동 업데이트 설정하기

 

앞에서도 언급한 바와 같이 anti-virus 솔루션의 핵심은 바이러스 정보에 대한 빠른 업데이트라고 할 수 있다.

 

따라서 clamav에서는 바이러스에 대한 정보를 업데이트하기 위해 freshclam이라는 별도의 프로그램과 freshclam.conf라는 설정 파일을 제공하고 있는데, 이 프로그램은 사전에 정해진 시각에 db에 접속하여 서버에 설치된 바이러스 정보와 비교 후 업데이트 여부를 체크하게 된다.

 

여기에서는 관련 설정 파일인

/usr/local/clamav/etc/freshclam.conf를 열어 상단에 있는 Example부분에 주석(#)을 추가하도록 한다.

 

이외 다른 설정은 변경할 내용 없이 아래의 옵션만 설정해 주면 된다.

 

 

- #Example

사용을 위해서는 이 부분을 주석처리 하여야 한다.

 

 

-.DatabaseMirror db.kr.clamav.net

바이러스 정보를 업데이트 할 데이터베이스의 주소를 지정하는 것인데, 한국에서는 db.kr.clamav.net로 설정해 두면 좀 더 빠르게 업데이트가 가능하다. 주석을 지우고 위와 같이 설정하면 된다.

 

이외의 설정은 기본 값을 사용해도 되며 나머지는 주석을 참고하기 바란다.

 

 

이후 아무런 설정 없이 freshclam을 실행하면 아래와 같이 바이러스 정보를 최신 정보로 업데이트하게 되며, 관련 db 파일은 /usr/local/clamav/share/clamav 디렉토리에 daily.cvdmain.cvd 파일로 저장된다.

 

 

ClamAV update process started at Sat Oct 7 07:16:10 2006

Downloading main.cvd [*]

main.cvd updated (version: 40, sigs: 64138, f-level: 8, builder: tkojm)

Downloading daily.cvd [*]

daily.cvd updated (version: 2001, sigs: 7388, f-level: 8, builder: ccordes)

Database updated (71526 signatures) from db.kr.clamav.net (IP: 211.239.150.206)

 

바이러스 정보를 자동으로 업데이트하도록 하기 위해서는 freshclam를 별도의 데몬 형태로 실행하거나 /etc/cron.hourly/ 디렉토리에 다음과 같은 스크립트 파일을 실행하면 되며 매 시간 업데이트 하게 된다.

 

cron을 이용한 후자의 방법을 권장한다.

 

 

#!/bin/sh

/usr/local/clamav/bin/freshclam --quiet

 

만약, 업데이트에 대한 로그를 남기고자 한다면 아래와 같이 로그 파일을 미리 생성해 두고, 다음과 같이 실행하면 된다.

 

 

# touch /var/log/clam-update.log

# chmod 600 /var/log/clam-update.log

# chown clamav /var/log/clam-update.log

 

/usr/local/clamav/bin/freshclam --log=/var/log/clam-update.log

 

참고로, clamav는 기본적으로 current.cvd.clamav.net.에 대한 TXT 레코드값을 보고 버전 업데이트 여부를 결정하게 된다.

 

 

# dig current.cvd.clamav.net txt

current.cvd.clamav.net. 300 IN TXT "0.92.1:45:6006:1204093741:1"

 

그리고 clamav는 현재 수십만개 이상의 바이러스를 인식할 수 있는데, 만약 바이러스DB에 있는 바이러스명을 조회하고자 한다면 아래와 같이 실행하면 된다.

 

 

# /usr/local/clamav/bin/sigtool --list-sigs

Trojan.Downloader.VB-102

Trojan.Optix.04

Trojan.Spy.Banker-2034

Flooder.Denyo

Trojan.Downloader.Dluca-18

Trojan.Pcclient-49

Trojan.Rootodor-1

Trojan.SdBot-1927

Trojan.Spy.Montp.O

Trojan.Optix.04-2

Trojan.Dropper.Joiner.AJ-15

Trojan.Downloader.Livup-2

Trojan.Mybot-6564

Trojan.Hupigon-85

Trojan.Clicker.VB-21

.............................

 

3.4.4 clamd.conf 설정하기

 

다음으로는 clamd.conf 파일의 설정에 대해 살펴보자


이 파일 역시 대부분 기본 값을 그대로 사용하면 되며 크게 변경할 내용은 없다.

 

몇 가지만 살펴보도록 하자.

 

- #Example

사용을 위해서는 이 부분을 주석처리 하여야 한다.

 

 

- LogSyslog yes

clamav에 대한 로그를 syslog를 통해 기존의 파일에 남기도록 한다.

 

/var/log/messages에는 clamav-milter에 대한 상세 로그를 보여주며 /var/log/maillog에는 송수신되는 메일의 바이러스 감염 여부에 대한 정보를 남기게 된다.

 

maillog예는 잠시 후에 살펴보도록 하자.

 

/var/log/messages

Feb 27 16:28:26 vwall2 clamav-milter[17205]:/tmp/clamav-6eea2bbbf7920189fb9b519df3c0dc99/msg.CZT5GM:Worm.Bagle.GV FOUND

Feb 27 16:28:26 vwall2 clamav-milter[17205]: m1R7SQdm017204: /tmp/clamav-6eea2bbbf7920189fb9b519df3c0dc99/msg.CZT5GM: Worm.Bagle.GV Intercepted virus from "Dsc" <dsc4943@hanmail.net> to antihong@gmail.com

 

- StreamMaxLength 100M

이곳에서 지정한 데이터 사이즈가 초과 시 connection을 끊게 된다.

 

너무 적게 설정할

경우 정상 메일도 수신이 불가할 수 있으므로 적당한 값을 설정하도록 한다.

 

 

- User clamav

clamd가 작동할 유저를 지정한다.

 

 

 

- PhishingSignatures no

PhishingScanURLs no

최근 버전에서는 피싱등의 메일도 탐지하여 차단하는 기능을 가지고 있다.

 

그러나 정상메 일도 일부 피싱으로 오인될 수 있는 만큼 이 기능은 no로 설정하는 것이 좋다.

 

- ArchiveMaxFileSize 1M

바이러스 검사를 체크할 파일의 사이즈를 지정하는 것으로 일반적으로 바이러스 메일의 경우 사이즈가 그리 크지 않으므로 이 값을 1M 정도로 설정하는 것이 좋다.

 

기타 설정 파일의 하단에는 Clamuko라는 기능이 설정되어 있는데, 이는 일종의 실시간감시 기능으로서 아직은 실험단계이므로 이 기능은 설정하지 않는 것이 좋다.

 


3.4.5 clamav-milter 설정하기

 

다음으로는 clamav-milter에 대해 살펴보도록 하자. clamav-milter --help를 실행하면 clamav-milter의 설정 가능한 옵션과 자세한 설명을 보여주는데 중요한 몇 가지만 살펴보도록 하자.

 

- --noreject 또는 -N

  

clamav는 기본적으로 바이러스 메일을 확인 후 해당 메일의 발신자에게 반송을 하게 되는데, 발신자의 메일 주소는 위조되어 사실상 의미가 없으므로 이 기능은 서버의 부하만 유발할 뿐 불필요하다


따라서 이 옵션을 사용하면 바이러스 메일을 확인 후 해당 메일의 발신자에게 반송을 하지 않는다.

 

- --dont-log-clean 또는 -C


위에서 살펴본 바와 같이 clamav는 메일을 스캔 후 로그에 남기는데, 만약 이 옵션을 사용하면 바이러스가 아닌 정상 메일의 경우에는 Clean이라는 부분을 로그에 남기지 않게 된다.

 

 

 

- --noxheader 또는 -n


이 옵션을 사용하면 메일의 헤더에 X-Virus-ScannedX-Virus-Status 를 추가하지 않는다.

 

- --quarantine=USER 또는 -Q EMAIL


바이러스 메일이 확인되었을 경우, 해당 메일을 삭제하지 않고 특정한 유저에게 포워딩하고자 할 때 사용하는 옵션이다.

 

필자의 경우 아래의 옵션으로 서비스를 가동한다.

 

여기에서 동시에 스캔할 childen의 개수인 -m은 서버의 부하 및 평상시 메일 수신 양을 보아 적절히 설정하기 바란다.

 

그리고 바이러스메일을 수신할 유저를 서버 내 clamav가 아닌 원격의 메일주소인 경우 -Q뒤에 id@server.com과 같이 지정해 주면 된다.

 

 

/usr/local/clamav/sbin/clamav-milter -q -N -m 30 -Q clamav

/var/run/clamav/clmilter.sock

 

이후 netstat -lnp를 실행시 아래와 같이 소켓형태로 clamav-milter로 보이면 설치는 정상적으로 된 것이라 보면 된다.

 

 

 

unix 2 [ ACC] STREAM LISTENING 282731 24398/clamav-milter

/var/run/clamav/clmilter.sock

 

이제 sendmail도 재가동하면 설정이 끝나게 되는데 clamav를 설정 후 메일 송수신을 하게 되면 다음과 같은 로그가 보이게 될 것이다.

 

 

# tail -f /var/log/maillog

Feb 27 16:02:01 vwall2 sendmail[11015]: m1R74udm011015: Milter add: header: X-Virus-Scanned: ClamAV 0.92.1/6006/Wed Feb 27 10:03:40 2008 on vwall2.sevrer.com

Feb 27 16:02:01 vwall2 sendmail[11015]: m1R74udm011015: Milter add: header: X-Virus-Status: Clean

 

Feb 27 16:03:17 vwall2 sendmail[21218]: m1R0mG9t021218: Milter add: header: X-Virus-Status: Infected with Worm.Bagle.GV

 


위 예의 경우 첫 번째 메일은 정상메일이어서 X-Virus-StatusClean으로 보이며 두 번째 메일의 경우 Worm.Bagle.GV라는 바이러스 메일로 확인되었으며 관련 내용이 로그에 보이는 것을 알 수 있다.

 

만약 바이러스 메일이 도착하기까지 기다리기가 어려우면 http://www.eicar.org/anti_virus_test_file.htm 에서 샘플을 다운로드하여 테스트하면 된다.

 

 

현재 설정은, 바이러스메일의 경우 clamav 계정에 쌓이도록 되어 있으므로 바이러스메일은 /var/spool/mail/clamav 파일에 순차적으로 쌓이게 된다.

 

따라서 /etc/logrotate.conf에 다음과 같이 설정하여 정기적으로 로테이션 하도록 하는 것이 좋다.

 

/var/spool/mail/clamav {

daily

rotate 10

}

 

아래와 같이 실행하면 바이러스메일들이 차곡차곡 쌓인 것을 알 수 있다.

 

# mail -f /var/spool/mail/clamav

"/var/spool/mail/clamav": 87 messages 87 new

N 1 newsen@newsen.com Wed Feb 27 00:11 1003/75305 "[Virus] Worm.Mytob.Crypt.Gen"

N 2 steve@hanmir.com Wed Feb 27 00:18 999/74954 "[Virus] Worm.Mytob.Crypt.Gen"

N 3 ysichoi@hanmail.net Wed Feb 27 00:28 1001/75143 "[Virus] Worm.Mytob.Crypt.Gen"

N 4 jrsng@hanmail.net Wed Feb 27 00:44 1004/75315 "[Virus] Worm.Mytob.Crypt.Gen"

N 5 997seqra@jovino.com Wed Feb 27 00:58 347/211839 "[Virus] Worm.Bagz.C"

N 6 clopmen@gobiernodeca Wed Feb 27 03:03 612/42267 "[Virus] Exploit.HTML.IFrame"

N 7 www.venus@venus.ca Wed Feb 27 07:35 849/60480 "[Virus] Worm.Bagle.GV"

N 8 ij2262@hananet.net Wed Feb 27 08:17 849/60450 "[Virus] Worm.Bagle.GV"

N 9 jpy33@hanmail.net Wed Feb 27 08:31 1001/75133 "[Virus] Worm.Mytob.Crypt.Gen"

N 10 meguro-yoshiko@itoch Wed Feb 27 08:48 334/206027 "[Virus] Worm.Bagz.C"

N 11 hyuneekim@dongwon.co Wed Feb 27 08:50 705/47786 "[Virus] Worm.SomeFool.AM"

 

아래는 clamav와 관련된 사이트인데, 많은 관련 정보를 참고할 수 있을 것이다.

 

http://clamav.net/

 

: clamav 홈페이지로서 많은 관련 프로그램과 문서를 참고할 수 있다.

 

최신 정보에 대해서는 메일링리스트를 참고하는 것도 좋다.

 

http://sourceforge.net/


: sourceforge에서 clamav로 검색해 보면 바이러스 로그분석 프로그램 및 다양한 활용이 가능한 관련 프로그램을 이용할 수 있다.

 

 

 

http://www.clamwin.com/


: 윈도우 버전의 clamav로서 v3등 일반 백신과 같이 바이러스 검색기능과 스케줄링, 아웃룩과 연동하여 바이러스 자동차단 등의 기능이 있으나 인터넷 실시간 감시와 같은 기능은 없다

관련자료

댓글 0
등록된 댓글이 없습니다.

공지사항


뉴스광장


  • 현재 회원수 :  60,038 명
  • 현재 강좌수 :  35,813 개
  • 현재 접속자 :  163 명