디지문닷넷 - php-clamav로 웹서버를 바이러스/웹쉘로부터 지켜내자
BLOG main image
418824 Visitors up to today!
Today 41 hit, Yesterday 196 hit
전체 (297)
일상 (54)
유희 (20)
견문록 (26)
PC 탐구 (158)
축구 (28)
애니메이션 (10)

디지문 호스팅

리눅스데이타시스템

태터툴즈

이올린

올블로그

리눅스포털

SULinux

DNS Powered by DNSEver.com

너나우리

Serverchk.com

MRTG

Superuser Server Utility

rss

[디지문, 2012/01/21 23:45, PC 탐구/리눅스]
작성자: 주인장 디지문
(http://www.digimoon.net/)



참고링크:
http://khaidoan.wikidot.com/php-clamav
http://www.howtoforge.com/scan_viruses_with_php_clamavlib



오픈소스 안티바이러스 백신으로 유명한 ClamAV는 대개 sendmail, qmail 등의 메일서버 에이전트와의 연동을 통해 바이러스 첨부파일을 차단할 수 있는 용도로 널리 알려져 있다.
주로 메일서버와의 연동에 대한 정보만 널리 알려져 있을 뿐 다른 서비스와의 연동 방법은 좀처럼 많이 알려져 있지 않은 편이다.

ClamAV를 호출할 수 있는 API를 제공하는 C언어 기반으로 작성된 php extension이 있는데 php-clamav가 그것이다.
http://php-clamav.sourceforge.net/

php-clamav를 설치하면 php로 만들어진 홈페이지를 통해 업로드되는 모든 첨부파일을 ClamAV로 스캔한 뒤 파싱 처리할 수 있게 된다.

이는 실로 놀라운 방법이 아닐 수 없다. ClamAV의 DB만 뒷받침된다면 대부분의 바이러스, 백도어, 웹쉘 등을 php단에서 차단할 수 있게 되는 것이다. 제로보드4와 같이 보안이 취약한 php 게시판을 어쩔 수 없이 이용해야 하는 경우 좋은 대안이 될 수 있을 것이다.


php-clamav extension을 사용하려면 당연히 ClamAV가 설치되어 있어야 한다.
RHEL/CentOS의 경우 third party repository로 rpmforge를 추가해 두면 yum으로 간편하게 설치할 수 있다

아래 URL에서 자신의 OS에 맞는 rpmforge 저장소를 받아 설치 (rpm -ivh)
http://apt.sw.be/redhat/el5/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS//rpmforge-release-0.3.6-1.el5.rf.x86_64.rpm
http://apt.sw.be/redhat/el4/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.i386.rpm
http://apt.sw.be/redhat/el4/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el4.rf.x86_64.rpm
http://apt.sw.be/redhat/el3/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el3.rf.i386.rpm
http://apt.sw.be/redhat/el3/en/x86_64/rpmforge/RPMS/rpmforge-release-0.3.6-1.el3.rf.x86_64.rpm
http://apt.sw.be/redhat/el2.1/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.el2.rf.i386.rpm
http://apt.sw.be/redhat/9/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.rh9.rf.i386.rpm
http://apt.sw.be/redhat/8.0/en/i386/rpmforge/RPMS/rpmforge-release-0.3.6-1.rh7.rf.i386.rpm

yum 설치
[root@localhost ~]# yum -y install clamav clamav-devel clamav-db clamd

/etc/clamd.conf, /etc/freshclam.conf 설정
[root@localhost ~]# cat /etc/clamd.conf
LogFile /var/log/clamav/clamd.log
LogTime yes
LogSyslog yes
LogVerbose yes
PidFile /var/run/clamav/clamd.pid
TemporaryDirectory /var/tmp
DatabaseDirectory /var/clamav
LocalSocket /tmp/clamd.socket
FixStaleSocket yes
ScanMail yes
[root@localhost ~]# cat /etc/freshclam.conf
DatabaseDirectory /var/clamav
UpdateLogFile /var/log/clamav/freshclam.log
LogSyslog yes
PidFile /var/run/freshclam.pid
DatabaseOwner clamav
DatabaseMirror db.kr.clamav.net
DatabaseMirror db.local.clamav.net
NotifyClamd /etc/clamd.conf
[root@localhost ~]#

ClamAV 서비스 시작
[root@localhost ~]# /etc/rc.d/init.d/clamd start

freshclam 커맨드로 바이러스 DB 업데이트
[root@localhost ~]# freshclam
ClamAV update process started at Tue Jan 24 12:19:21 2012
main.cvd is up to date (version: 54, sigs: 1044387, f-level: 60, builder: sven)
Downloading daily-14343.cdiff [100%]
Downloading daily-14344.cdiff [100%]
Downloading daily-14345.cdiff [100%]
Downloading daily-14346.cdiff [100%]
daily.cld updated (version: 14346, sigs: 76235, f-level: 63, builder: guitar)
bytecode.cld is up to date (version: 163, sigs: 39, f-level: 63, builder: edwin)
Database updated (1120661 signatures) from db.kr.clamav.net (IP: 211.239.150.206)
Clamd successfully notified about the update.
[root@localhost ~]#



아래 URL에서 php-clamav extension 소스를 받는다.
http://sourceforge.net/projects/php-clamav/

컴파일 설치
[root@localhost ~]# tar xvzf php-clamav_0.15.6.tar.gz
[root@localhost ~]# cd php-clamav-0.15.6
[root@localhost php-clamav-0.15.6]# /usr/local/php/bin/phpize
[root@localhost php-clamav-0.15.6]# ./configure --with-clamav
[root@localhost php-clamav-0.15.6]# make
[root@localhost php-clamav-0.15.6]# make install

clamav.so 설치된 것 확인
[root@localhost ~]# ls /usr/local/php/lib/php/extensions/no-debug-non-zts-20060613 | grep clamav.so
clamav.so
[root@localhost ~]#

php.ini 아래와 같이 설정하고 아파치 리스타트
[PHP]
extension_dir = "/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613"

[clamav]
extension="clamav.so"
clamav.dbpath="/var/clamav"
clamav.keeptmp=0
clamav.load_db_on_startup=0
clamav.maxfiles=0
clamav.maxfilesize=0
clamav.maxreclevel=16
clamav.maxscansize=0
clamav.tmpdir="/var/tmp"

※ clamav.maxreclevel 값은 16이 default 수치이므로 임의로 0으로 설정해서는 안 된다.
0은 제한을 하지 않는다는 의미인데 바이러스 스캐닝 프로세스가 시스템의 모든 리소스를 차지할 위험이 있기 때문에 하드웨어 성능에 맞게끔 적절하게 수치 조정할 것을 권장한다.


phpinfo에서 아래와 같이 확인되어야 연동이 된 것이다.
사용자 삽입 이미지

아래 소스코드로 된 php 파일을 만들고 웹에서 출력 테스트
(출처: http://www.howtoforge.com/scan_viruses_with_php_clamavlib)
[root@localhost ~]# cat clamav.php
<?php
if(!extension_loaded('clamav')) {
        dl('clamav.' . PHP_SHLIB_SUFFIX);
}
$module = 'clamav';
$functions = get_extension_funcs($module);
echo "Functions available in the test extension:<br>\n";
foreach($functions as $func) {
    echo $func."<br>\n";
}
echo "<br>\n";
$function = 'confirm_' . $module . '_compiled';
if (extension_loaded($module)) {
        $str = $function($module);
} else {
        $str = "Module $module is not compiled into PHP";
}
echo "$str\n";
?>
[root@localhost ~]#


cl_info(), cl_scanfile(), cl_engine(), cl_pretcode(), cl_version(), cl_debug() 6가지 함수 기능 확인
(php-clamav-0.15.6 기준)
사용자 삽입 이미지
※ 맨 아래행 Fatar error 메시지는 무시해도 된다.
cl_setlimits() 함수는 2012년 1월 현재 최신 버전인 0.15.6에선 지원하지 않는다.


각 함수의 기능에 대해서는 아래 URL 참고
http://php-clamav.sourceforge.net/


 php-clamav는 ClamAV를 호출할 수 있는 php 함수 몇 가지를 추가 지원하게 해 주는 extension이다. php 코드상에 cl_scanfile() 등의 함수를 사용자가 직접 넣어 원하는 기능을 구현해야 한다. 그러므로 웹호스팅 환경과 같이 여러 홈페이지를 운영하는 서버엔 현실적으로 적용하기 어렵다는 점과 php에 대해 어느 정도 지식이 있어야 사용할 수 있다는 점을 단점으로 꼽을 수 있겠다.
 장점으론 최근 들어 상용백신 못지 않게 방대해진 바이러스 정의 DB로 발전을 거듭하고 있는 오픈소스 안티바이러스 백신인 ClamAV를 연동할 수 있다는 점일 것이다. clamscan 커맨드로 바이러스 스캐닝을 해 보니 2012년 1월 23일 ClamAV 0.97.3 기준으로 검출해 낼 수 있는 바이러스 패턴이 1119354가지에 달한다.

----------- SCAN SUMMARY -----------

Known viruses: 1119354

Engine version: 0.97.3

Scanned directories: 812

Scanned files: 5884

Infected files: 1

Data scanned: 433.91 MB

Data read: 499.26 MB (ratio 0.87:1)

Time: 62.578 sec (1 m 2 s)


2012/01/21 23:45 2012/01/21 23:45
Trackback Address :: http://www.digimoon.net/blog/trackback/379
Tracked from 좋은진호의 여유만만 | 2012/01/25 18:19 | DEL
무료 Antivirus툴인 ClamAV( http://clamav.net/ )은 sendmail + ClamAV 조합으로 수신되는 메일의 바이러스를 검사할 수도 있고, 윈도에서는 ClamAV 바이러스 엔진을 사용한 ClamWin( http://www.clamwin.com/ )으로 바이러스 검사를 할 수 있다. 바로 이 clamav의 php용 라이브러리인 php-clamavlib으로 php에서 바이러스를 검사하는 방법을 'How To Automatic..
[로그인][오픈아이디란?]
Name
Password
Homepage

Secret
*1 *2 *3 *4 *5 ... *297