CLAM ANTIVIRUS – TURKISH DOCUMENT by yavuz kaya and İbrahim erken Email: edukanka at yahoo dot com 1. Giriş 1.1 Özellikler 1.2 E-posta listeleri 1.3 Virüs bildirimleri 2. Kurulum 2.1 İhtiyaçlar 2.2 Desteklenen platformlar 2.3 Güncel versiyonlar 2.4 Binary paketleri 2.5 Kurulum 2.6 Düzenleme 2.7 Test 2.8 Güncel Clam (Freshclam): Otomatik güncelleme 2.9 FreshClam: Mirror’lar ve mirrors.txt 3. Kullanma 3.1 Clam daemon 3.2 Clamuko 3.3 Arşivler ve sıkıştırılmış dosyalar 3.4 Çıktı formatı 4. Uygun Yazılım 4.1 clamav-milter 4.2 mod clamav 4.3 TrashScan 4.4 AMaViS - ”Next Generation”(Yeni Nesil) 4.5 amavisd-new(yeni) 4.6 Qmail-Scanner 4.7 Sagator 4.8 ClamdMail 4.9 BlackHole 4.10 MailScanner 4.11 MIMEDefang 4.12 Exiscan 5. LibClamAV 5.1 API 6. Problem Çözme 6.1 Return kodları 7. Teknik kısım 7.1 Güvenlik 7.2 Scan engine 1. GİRİŞ Clam AntiVirüs UNIX’te kullanılabilen bir anti virüs programıdır.Bu yazılımın oluşturulmasındaki temel amaç e-posta sunucularıdır.(Attachment taraması için).Bu paket kullanıcılara esnek,çok kullanımlı ve internet üzerinden otomatik güncelleştirme yapılabilen bir yazılım sunuyor.Programlar Clam AntiVirüs paketi tarafından dağıtılmış ortak bir kütüphaneyi temel alırlar. Yazılıma ait virüstabanı bilgileri OpenAntiVirus.org sitesinden alır fakat extra virüs tanımlamaları da içerir.(Popüler polimorf virüsleri için de tanımlamalar içerir) 1.1 Özellikler * GNU GPL v2 lisansı * POSIX kullanışlı , taşınabilir * Güvenli * Çok hızlı * Çok kullanımlı * Kullanımı kolay * On-access tarama (Sadece linux’ta) * 7000’in üzerinde virüs,worm ve trojan tanıyabilir * Sıkıştırılmış dosya ve arşivleri destekler * RAR(2.0),zip,Gzip,Bzip2 desteler 1.2 E-posta listeleri 3 e-posta listesi mevcut. * announce@clamav.elektrapro.com – yeni sürümler hakkında bilgi için ( Ayrıca yeni Debian paketlerini duyurmak için) , * users@clamav.elektrapro.com – kullanıcı soruları için * devel@clamav.elektrapro.com - geliştirmek için * virusdb@clamav.elektrapro.com – veritabanı güncelleştirme bilgileri için listname-subscribe@clamav.elektrapro.com adresine boş bir e-posta atarak veya http://clamav.elektrapro.com/ml sitesi aracılığı ile sizde ClamAv ile ilgili bilgiler alabilirsiniz. Boş e-posta attıktan sonra size gelen özel mesajı cevaplamanız gerekmektedir. Mail listeleri ; http://archive.elektrapro.com/clamav.elektrapro.com/users/ http://archive.elektrapro.com/clamav.elektrapro.com/devel/ 1.3 Virüs bildirimleri Son güncelleştirilmiş hali ile ClamAV yazılımının tespit edemediği virüsleri virus@clamav.elektrapro.com adresine bildiriniz veya virüsü bir ek gibi yollayınız.Eğer sisteminiz buna izin vermezse virüsü “virus” şifresi ile bir zip arşivine saklayınız. 2. KURULUM 2.1 İhtiyaçlar zlib ve zlib-devel paketlerine ve the gcc derleyicisine (2.9x ve 3.x desteklenmiştir) ihtiyaç vardır.Bunun için bzip2 kütüphanesini kurabilirsin fakat bu gerekli değildir. 2.2 Desteklenen platformlar Clam AntiVirus aşağıdaki işletim sistemleri ve mimarileri için hazırlanmıştır.(Test edilen platformlar parantez içinde belirtilmiştir. * GNU/Linux 2.2/2.4 (Hepsinde, Intel/SPARC/Alpha/zSeries/S/390) * Solaris 2.6/7/8/9 (Intel/SPARC) * _ FreeBSD 4.5/6/7 5.0 (Intel/Alpha) * _ OpenBSD 3.0/1/2 (Intel) * _ AIX 4.1/4.2/4.3/5.1 (RISC 6000) * HPUX 11.0 * _ SCO UNIX * _ Mac OS X * _ BeOS * _ Cobalt MIPS boxes (RAQ1, RAQ2, QUBE2) * _ Windows/Cygwin Bazı özellikler işletim sisteminizde çalışmayabilir. Eğer ClamAV yazılımını yukarıdaki işletim sistemleri dışında bir sistemde kullanıyorsanız lütfen bizi haberdar ediniz. 2.3 Güncel versiyonlar Clam AntiVirüs http://clamav.elektrapro.com sitesinden ücretsiz olarak elde edilebilir.Bu siteye ElektraPro.com tarafından sponsorluk desteği verilmektedir. 2.4 Binary paketleri Linux için yüksek kalitede rpm ve deb paketi vardır. Debian paketi Magnus Ekdahl tarafından idare edilmektedir ve ona http://www.debian.org adresinden ulaşabilirsiniz. RPM paketi ise Arkadiusz Miskiewicz tarafından idare edilirken Polish(ed) Linux Distribution tarafından dağıtılmaktadır(ftp://ftp.pld.org.pl). Ayrıca Mandrake için Oden Eriksson tarafından idare edilen RPM paketi mevcuttur.Bu pakete de Mandrake mirrorlarından ulaşabilirsiniz. AIX için binary paketlerine de AIX PDSLIB, UCLA http://aixpdslib.seas.ucla.edu/packages/clamav.html adreslerinden ulaşabilirsiniz.Resmi FreeBSD portu Masahiro Teramoto tarafından idare edilmektedir. OpenBSD (Flin Mueller tarafından) portu ise http://www.activeintra.net/openbsd/article.php?id=5 adresinde mevcuttur. 2.5 Kurulum Lütfen README dosyasını okuyunuz , çünkü bazı önemli bilgiler içermektedir. Eğer Clam AV yazılımını ilk defa yüklüyorsanız , sisteminize yeni bir kullanıcı ve grup eklemeleisiniz. # groupadd clamav # useradd -g clamav -s /bin/false -c "Clam AntiVirus" clamav Yukarıdaki method Linux ve Solaris üzerinde çalışır.Eğer sistem yöneticisi değilseniz veya clamscan işlemini superuser modunda yapmayacaksınız bu basamağı –disable-clamav passed to the configure scripti kulanarak atlayabilirsiniz. $ ./configure --disable-clamav Bu script clamav user ve grup için olan testi geçersizleştirir.Clamscan hala clamav’a superuser modu için ihtiyaç duyar.Lütfen bu hesap için bir şifre düzenlemeyin , sadece /etc/passwd or /etc/shadow içinde”!” ile kilitli kalmasını sağlayın.Bu hesap normal,ayrıcalıklı bir user olmalıdır. Onu hiçbir ek gruba eklemeyin.clamav user/grup oluştuktan sonra ; $ zcat clamav-x.yz.tar.gz | tar xvf -$ cd clamav-x.yz Varsayalım ki dosyayı /etc içine yüklediniz , o zaman paketi şu şekilde düzenlemelisiniz. $ ./configure --sysconfdir=/etc Halen gcc derleyici için gerekli.Diğer derleyiciler için gerekli desteğin yakın zamanda ekleneceğini umuyoruz. $ make $ su -c "make install" En son olarak yazılımı /usr/local dizini içinde yüklüdür ve düzenleme dosyası da ve /etc içindedir. UYARI : Asla Clam AntiVirus programlarında SUID/SGID bit düzenlemesi yapmayın. 2.6 Düzenleme Daemon’ı kullanacaksanız , aşağıdaki düzenlemeleri yapmalısınız. $ clamd ERROR: Please edit the example config file /etc/clamav.conf. Şimdi düzenleme dosyanızın nerede olduğunu biliyorsunuz ;). Dosya ile ilgili format ve seçenekler clamav.conf dosyası içinde tanımlanmıştır.clamd düzenlemesi nispeten daha kolaydır , düzenleme dostası iyi açıklanmıştır. “Example” talimatını silmeyi unutmayınız. Bir başka önemli özelliği , Dazuko modülüne dayanan , on-access tarama yapabilmesidir (http://dazuko.org sitesinde mevcuttur) Bu modül clamd’i çalıştırmak için gerekli değildir ayrıca Dazuko modülünü imalat sistemlerinde çalıştırmamanız tavsiye edilir. Clamd’ın bir başka özelliği de “Clamuko.(Dazuko’nun komik bir ismi , fakat ne anlama geldiğini bilmiyorum)” diye çağırılan Dazuko ile iletişim kumak için güvenilir olmasıdır. Calmuko Linux 2.2 ve 2.4’te desteklenmiştir. Kurulum için ; $ tar zxpvf dazuko-a.b.c.tar.gz $ cd dazuko-a.b.c $ make dazuko or $ make dazuko-smp (for smp kernels) $ su # insmod dazuko.o # cp dazuko.o /lib/modules/‘uname -r‘/misc # depmod –a Linux dağıtımınıza bağlı olarak , “dazuko”’yu /etc/modules veya modprobe dazuko aşağıdaki çizgiye eklemeniz gerekmektedir , böylece dazuko’yu boot zamanında load edebilirsiniz.Ayrıca /dev/dazuko aygıtını oluşturmanız gerekmektedir: $ cat /proc/devices | grep dazuko 254 dazuko $ su -c "mknod -m 600 /dev/dazuko c 254 0" Şimdi clamav.conf dosyası içinde Clamuko’yu düzenlemelisiniz. 3.2 bölümünden bakabilirsiniz. 2.7 Test Pekala , şimdi biraz test yapalım ve aşağıdaki dizini tarama yapmaya çalışalım: $ clamscan -r -l scan.txt clamav-x.yz clamav-x.yz/test dizinlerinde virüsler bulmalı.Bu durumu oluşturulan log dosyasından kontrol edebilirsiniz.-scan.txt. clamscan seçenekleri hakkında daha fazla bilgiyi clamscan(1) manual içinde bulabilirsiniz. Clamd’ı test edebilmek için öncelikle clamdscan’i kullanmamız gerekmektedir.(Ayrıca clamd’a direkt olarak bağlanabilir ve SCAN komutunu kullanarak çalıştırabilirsiniz.) $ clamdscan -l scan.txt clamav-x.yz 2.8 Güncel Clam (Freshclam): Otomatik güncelleme freshclam Clam AntiVirüs için varsayılan otomatik güncelleştiricidir. 2 şekilde çalışır. * İnteraftif –from command line * Daemon gibi – yalnız,sessizce çalışır. Eğer superuser modunda çalışırsa bazı ayrıcalıklara sahip olunur, varsayılan olarak clamav olarak çalışır.freshclam veritabanını Clam AntiVirüs’ün ana sayfasından alır ve MD5 toplamı kullanarak tutarlılığını kontrol eder. freshclam’ı ( root gibi) parametresiz kullanırsanız doğru çalışıp çalışmadığını kontrol edebilirsiniz. Eğer her şey olumluysa log dosyasını /var/log içinde oluşturabilirsiniz : # touch /var/log/clam-update.log # chmod 600 /var/log/clam-update.log # chown clamav /var/log/clam-update.log Şimdi freshclam’i bir daemon olarak çalıştırabilirsiniz. # freshclam -d -c 2 -l /var/log/clam-update.log Yukarudaki başlangıç scriptini eklerseniz , iki günde bir yeni bir bilgi için veritabanını kontrol eder. Bir benzer kodu root yada clamav bölümlerine eklemelisiniz : 0 8 * * * /usr/local/bin/freshclam --quiet -l /var/log/clam - update.log Sisteminizde Proxy desteği varsa aşağıdaki komut ile her gün saat 8:00 ‘de yeni bir bilgi için veritabanını kontrol ettirebilirsiniz. $http_ proxy, eg. İle çevre değişkenlerini ayarlayabilirsiniz. export http_proxy="my.proxy.server:8080" bunun dışında –http-proxy ve –proxy-user seçenekleri de mevcuttur. 2.9 FreshClam: Mirror’lar ve mirrors.txt Ana sunucu clamav.elektrapro.com ve aşağıdaki mirrorlar mevcut; * clamav.ozforces.com – elle güncelleştirilen veritabanı mirror’ı * clamav.essentkabel.com – otomatik olarak güncelleştirilen ana siteye ait mirror * clamav.linux-sxs.org – veritabanı mirror’ı (ozforces’dan rsnyc’e) Veritabanı dizininde freshclam’in güncelleştirmeler için her seferinde okuduğu mirror.txt dosyasını bulacaksınız. Önceki sunucu uygun değilse , dosyayı birinci sunucu için kullanacak ve bir diğeri ile değiştirecek (ve bazı zamanlar için bu pozisyonu hatırlayacak).Eğer daha hızlı bir mirror bulursanız dosyayı değiştirebilirsiniz fakat bazı sakıncaları olabilir. 3. Kullanma 3.1 Clam daemon clamd libclamav’a dayanan çok kullanımlı bir iş parçacığıdır.Aşağıdaki soketlerden herhangi biri ile çalışabilir ; * Unix (yerel) soketler * TCP soketleri Daemon clamav.conf dosyası ile düzenlenir.Bununla ilgili açıklamaları clamav.conf(5) içinde bulabilirsiniz. Clamd aşağıdaki komutları tanır. * PING “PONG” komutu ile cevaplanır.Sunucunun bulunduğu eyaleti,ülkeyi kontrol eder. * VERSION Versiyon ile ilgili bilgileri verir. * RELOAD Veritabanını yeniden yükler. * QUIT Temiz bir çıkış yapar. * SCAN dosya/dizin Arşiv desteği ile birlikte bir dosya veya dizin üzerinde tarama yapar. Bütün yol gereklidir. * RAWSCAN dosya/dizin Arşiv desteği olmadan bir dosya veya dizin üzerinde tarama yapar. Bütün yol gereklidir. * CONTSCAN Arşiv desteği ile birlikte bir dosya veya dizin üzerinde tarama yapar. Bir virüs bulunduğu zaman da taramaya devam eder. Bütün yol gereklidir. * STREAM Bu komut ile clamd “PORT numarası” verir. Bu porta bağlantı kurabilir ve üzerinde tarama yapılması için bir dosya gönderebilirsiniz. Dahili iş parçacıkları dışarıdan gelen sinyalleri yok sayar (clamuko hariç) . Ana iş parçacığı SIGTERM VE SIGINT sinyallerini kullanır ve bunlardan biri sıkıştığı zaman uygun bir çıkış gerçekleştirir. 3.2 Clamuko Clamuko clamd’da Linux altında on-access taraması gerçekleştirebilen özel bir iş parçacığıdır.İstemci (clamuko) ve sunucu (clamd) modeli Dazuko tarafından halen desteklenmemektedir.Mevcut durumun bazı yararları vardır – clamuko clamd ile birlikte ortak bir veritabanını paylaşır ve RELOAD komutu ile birlikte güncelleştiriliyor. Clamuko’yu kullanırken aşağıdaki prensiplere uymanız gerekmektedir. * Daemon’u QUIT komutu veya SIGTERM sinyali ile durdurun.Aksi takdirde bilgisayar yeniden başlatıldığında korumalı dosyalara erişimi kaybedebilirsiniz. * E-posta tarayıcının ekleri açmak için kullandığı dizini asla koruma altına almayın.Çünkü virüslü dosyalara erişim bloklanabilir ve tarayıcı virüsleri tespit edemeyebilir.Virüslü mailler adreslere teslim edilebilir. clamav.conf dosyasından clamuko’yu aktif hale getirmelisiniz.Dizini /home korumak için aşağıdaki seçeneği kullanın : ClamukoIncludePath /home Bütün sistemi korumak için : ClamukoIncludePath / ClamukoExcludePath /proc ClamukoExcludePath /tempdir/of/mail/scanner Clamuko’yu Samba/Netatalk üzerindeki dosya erişimini korumak için kullanabilirsiniz.NFS desteklenmemektedir (Dazuko NFS erişim çağrıları ile kesişmemektedir).Bir diğer fikir- bazı popüler davranışların işaretlerini ihtiva eden bir veritabanı inşa etmektir.Bu sizi script-kiddies’e karşı koruyacaktır. 3.3 Arşivler ve sıkıştırılmış dosyalar Clam AntiVirüs LibClamAv’a bağlıdır. Aşağıdaki formatlar için destek verir : * Zip * Gzip * RAR(sadece 2.0 için) Zlib kütüphanesine Zip/Gzip desteği için ihtiyaç vardır. Zip arşivleri Guido Draheim ve Tomi Ollila tarafından hazırlana zziplib kütüphanesi ile iletişim halindedir. RAR desteği ise Christian Scheurer ve Johannes Winkelmann tarafından hazırlanan UniquE RAR dosya kütüphanesine bağlıdır.İkisi de clamav kaynaklarına biraz değiştirilerek eklenmiştir. Unrarlib sadece RAR 2.0 arşivine destek verir ve Christian’a göre yeni format ( WinRAR 3.0’da sunulmaktadır) desteklenmemektedir. Daemon sadece libclamav tarafından desteklenen arşivleri tarar.Clamscan kodlarla inşa edilmiş bir arşivi taramaya çalışır fakat başarısız olur , çünkü harici unpacker’la uyuşamaz. $ clamscan --unrar rarfail.rar /home/zolw/Clam/test/rarfail.rar: RAR module failure. UNRAR 3.00 freeware Copyright (c) 1993-2002 Eugene Roshal Extracting from /home/zolw/Clam/test/rarfail.rar Extracting test1 OK All OK /tmp/44694f5b2665d2f4/test1: ClamAV-Test-Signature FOUND /home/zolw/Clam/test/rarfail.rar: Infected Archive FOUND clamscan birçok popüler sıkıştırma programı ile uyumludur - her format için harici programları kullanır.Eğer tarayıcı superuser modunda çalıştırılırsa clamav sayesinde işlem daha çok güvenli gerçekleşir.Ayrıca clamav kullanıcıları bütün taranmış olan sıkıştırılmış dosyaları okuyabilir,kullanabilir.Eğer bütün dizinleri alt dizinleri ile birlikte taramak istiyorsanız , süzgeç taramasını –r (-recursive) seçeneğini kullanarak aktifleştirebilirsiniz , ayrıca arşivlerin içindeki alt arşivlerde taramaya tabi tutulur.Eğer arşivlerin içindeki dosyalar virüslü ise sadec korumak için arşivin kendisi taranır (arşiv olmayabilir) Lütfen aşağıdaki seçeneklere bakınız.Her seçenek kendine ait bir değişkene sahiptir.Eğer $PATH içinde bulunamıyorsa lütfen ekleyin.Çünkü Clam AntiVirüs GNU seçenek formatına sahiptir. “=” işaretini değişken ve seçenek arasında kullanmayı unutmayınız.Örnek olarak –unzip=/path/to/unzip. -unzip : Bu seçeneğe ihtiyacınız yok çünkü Zip libclamav tarafından desteklenmektedir.Eğer libclamav bazı dosyaları unzip etmekte başarısız olursa,bu olay faydalı olabilir.clamscan UnZip 5.41 of 16 April 2000, by Info-ZIP tarafından test edilmiştir. -unrar : UNRAR 3.0 ile test edilmiştir. -unace : UNACE v1.2’in halk versiyonu tarafından desteklenen seçenekleri kullanır, test edilmemiştir fakat çalışmaktadır. -arj : arj 3.10b tarafından test edilmiştir. -zoo : zoo 2.1 tarafından test edilmiştir. -lha : LHa for Unix V 1.14e tarafından test edilmiştir. -jar : CA jar dosyaları için unzip’i kullanır. UnZip 5.41 of 16 April 2000 tarihinde info-ZIP tarafından test edilmiştir. -tar : Bu seçenek sıkıştırılmamış dosyaları destekler. GNU tar 1.13.17. tarafından test edilmiştir. -deb : Bu seçenek debian binary paketleri tarafından desteklenir. GNU ar 2.12.90.0.14. tarafından test edilmiştir.-tgz’yi beraberinde getirir ve –tgz=FULLPATH ile uyuşur. -tgz :Bu seçnek .tar.gz ve tgz formatlarını destekler.Linux olmayan bir sistemde muhtemelen gtar olarak bilinmektedir.Eğer $PATH içinde ise sadece kullanın yada bütün yolu bir değişken olarak bu seçneğe ekleyin. 3.4 Çıktı formatı clamd clamscan ile çıktı formatında uyum gösterir. zolw@Wierszokleta:˜$ telnet localhost 3310 Trying 127.0.0.1... Connected to localhost. Escape character is ’ˆ]’. SCAN /home/zolw/infected /home/zolw/infected/sobre.com: W32/Magistr.B FOUND Connection closed by foreign host. SCAN modunda ilk virüs bulunduğu zaman bağlantıyı keser.Arşivin durumuna göre çıktı normal dosyalarla aynı olur. SCAN /home/zolw/Clam/test/test2.zip /home/zolw/Clam/test/test2.zip: ClamAV-Test-Signature FOUND CONTSCAN bulunmuş olan bütün virüslü dosyaları görüntüler.Hata mesajları aşağıdaki formatta yayınlanır. SCAN /no/such/file /no/such/file: Can’t stat() the file ERROR ve onlar kolayca ayrıştırılır. clamscan bütün mesajları stderr’e yazar.(sadece yardom varsayılan olarak stdout içine yazılır.) Bazı durumlarda –stdout komutu ile onu yeniden stdout’a yönlendirmek isteyebilirsiniz. stdout stdderr’nin arabelleğine zıttır.bu yüzden clamscan her mesajdan sonra bu ara belleği çıktıda oluşabilecek hatalara karşı korunmak için temizler. Tarama yaparken aşağıdaki gibi çıktılar oluşur. /TEST/test: OK /TEST/Makefile: OK /TEST/getopt.c: OK /TEST/virfile: Phantom #1 FOUND Bir virüs bulunduğu zaman onun ismi bulunduğu dosya ile birlikte yazılır.Eğer virüs bir arşivin içinde bulunursa Infected Archive olarak mimlenir. Bu arşiv virüslü dosya olarak sayılmaz sadece bu tür dosyalar o arşivin içinde yer alır.Bu durumu internal unarchiving ile karıştırmayın çünkü bu libclamav tarafından gerçekleştirilir , clamscan virüslü dosyanın arşivin içinde olup olmadığını bilemez. 4. Uygun Yazılım Aşağıdaki yazılım ClamAV.ı desteklemektedir.ClamAV. desteklenen elemanları belirtmiştir. Eğer program Clamd’ı desteklemezse Clamdscan yerine Clamscan’ı kullanabileceğinizi lütfen unutmayın 4.1 clamav-milter Erişim: clamav paketinde bulunur. Destekleyen: clamd clamav-milter Nigel Horne tarafından yazılmıştır ve mail yollamak için dizayn edilmiş çok hızlı bir e-mail tarayıcısıdır.”C” dilinde yazılmıştır .(Nigel tarafından) ClamAV mail tarayıcısını kullanır. Yükleme: bir tane libmilter gelişmiş dosyasına ihtiyacınız var. İlk önce ClamAV’ı ; $ ./configure --enable-milter 16 ile configüre edin ve yeniden derleyin. program /usr/local/sbin/clamav-milter üzerine yüklenir. Aşağıdaki açıklamalar Nigel’in INSTALL dosyasından alınmıştır: /etc/mail/sendmail.mc:’e Ekleyin. INPUT_MAIL_FILTER(‘clmilter’,‘S=local:/var/run/clmilter.sock, F=, T=S:4m;R:4m’)dnl define(‘confINPUT_MAIL_FILTERS’, ‘clmilter’) Girdileri formun clamav.conf bölümünde kontrol edin: LocalSocket /var/run/clamd.sock ScanMail SaveStreamToDisk Clamav-milter’ı başlatın: /usr/local/sbin/clamav-milter -blo /var/run/clmilter.sock ve sendmaili yeniden başlatın. 4.2 mod clamav Erişim: http://software.othello.ch/mod\_clamav Destekleyen: libclamav, clamd mod clamav bir Apache virus tarama filtresidir. Andreas Mller tarafından yazılmış ve geliştiril- miştir. Proje çok iyi dökümanlaştırılmıştır ve çok kolay yüklenir. 4.3 TrashScan Erişim: clamav-sources/support/trashscan Destekleyen: clamscan procmail tabanlı gerçekten yüklemesi kolay bir tarayıcıdır .Ama sadece basit kullanıcılar içindir. MTA tabanlı tarayıcılar için yeterli değildir. 17 4.4 AMaViS - ”Next Generation”(Yeni Nesil) Erişim: http://sourceforge.net/projects/amavis Destekleyen: clamscan AMaViS amavis-perl/amavisd ınyeniden yazılmış daha modüler versiyonudur.Hilko Bengen tarafından geliştirilmiştir. Yükleme: Lütfen yeni versiyonunu yükleyiniz(en az 0.1.4). yüklemeden sonra(çok kolay ve hızlıdır), lütfen aşağıdaki satırı amavis.conf a uncomment edin virus-scanner = CLAM ve en sonunda [CLAM] bölümündeki clamscana giden yolu değiştirin: [CLAM] clamscan = /usr/local/bin/clamscan 4.5 amavisd-new(yeni) Erişim: http://www.ijs.si/software/amavisd Destekleyen: clamd, clamscan amavisd-new Mark Martinec tarafından geliştirilen amavisin yeniden yazılmış versiyonudur. Yükleme: Eğer amavisd-new başlatma zamanında clamscan binary bulunursa clamscan otomatik olarak erişilebilir. clamd girdileri @av scannerslist, file /etc/amavisd.conf. adresinde uncomment edilerek aktive edilir. 4.6 Qmail-Scanner Erişim: http://qmail-scanner.sf.net Destekleyen: clamscan Softlimit değerini yükseltmelisiniz yada daemon desteği için beklemelisiniz. 4.7 Sagator Erişim: http://www.salstar.sk/sagator Destekleyen: clamscan, clamd, libclamav 18 Bu program bir e-mail antivirüs/antispam gatewayidir. postfixe (yada başka bir smtpd) bir arayüzdür,antivirus ve/veye spamchecker programlarını çalıştırır. Modular mimarisi herhangi bir antivirüs/spamchecker programının konfigürasyonu için kullanılabilir. 4.8 ClamdMail Erişim: http://clamdmail.sf.net Destekleyen: clamd ClamAV. İçin bir mail işlemci clientidir.küçüktür ve yüklemesi hızlıdır. 4.9 BlackHole Erişim: http://www.groovy.org/blackhole.shtml Destekleyen: clamscan, clamd BlackHole Qmail, Postfix, Sendmail, Exim, Courier (Chris Kennedy tarafından yazılmış). İçin yazılan gelişmiş bir antivirüs filtresidir .genelde gelişmiş administrator ler içindir.(yüklenmesi zordur) 4.10 MailScanner Erişm: http://www.mailscanner.info Destekleyen: clamscan MailScanner bütün e-mailleri virüs ve spam için tarar ve güvenlik açıklarını kollar.herhangi bir virüs tarayıcısına bağlı değildir.Ama 14 değişik virüs tarayıcısı kombinasyonuyla kullanılabilir. “best of breed” virüs scannerini seçmeniz tavsiye edilir. 4.11 MIMEDefang Erişm: http://www.roaringpenguin.com/mimedefang Destekleyen: clamscan, clamd Sendmail/milter için yeterli bir mail tarayıcısıdır. 4.12 Exiscan Erişim: http://duncanthrax.net/exiscan Destekleyen: clamscan, clamd Exiscan Exim versiyon 4’ün yamasıdır.Exim tarafından iletilen e-mail mesajlarına yeterli tarama desteği sağlar.Dört değişik tarama imkanı desteklenir:antivirüs,antispam,düzenli ifadeler ve dosya uzantıları. 5. LibClamAV LibClamAV yazılımınıza virüs koruması eklemek için kullanılabilir.kütüphanesi thread-safe dir. Otomatik olarak arşivleri tanır ve tarar.tarama işlemi oldukça hızlıdır.çoğu zaman farkına bile varamazsınız. 5.1 API libclamav kullanan her program clamav.h başlık dosyasını içermelidir: #include İlk adım makine yüklemesidir,aşağıda erişilebilen üç fonksiyon bulunmaktadır: int cl_loaddb(const char *filename, struct cl_node **root, int *virnum); int cl_loaddbdir(const char *dirname, struct cl_node **root, int *virnum); char *cl_retdbdir(void); cl loaddb() birim zamanda bir veri tabanı oluşturur, cl loaddbdir() bütün.db ve .db2 dosyalarını dizinden yükler dirname. cl retdbdir() hardcoded veritabanı dizini yoluna döner. Veritabanı root altında kaydedilecektir ve yüklenen signature sayısı virnum a eklenir. tree structure a (trie, bak 7.2) giden pointer son olarak NULL değerini point eder.eğer üçüncü argüman olarak NULL değeri yüklenen signatureların sayısını kaydetmezsen cl loaddb fonksiyonu 0 a döner ve diğer değerler de hata verir (failure). struct cl_node *root = NULL; int ret; ret = cl_loaddbdir(cl_retdbdir(), &root, NULL); 20 libclamav’ın hata kodlarını print etmenin kolay bir yolu vardır: char *cl_perror(int clerror); cl perror() string açıklamalı clerror koda dön: if(ret) { printf("cl_loaddbdir() error: %s\n", cl_perror(ret)); exit(1); } Veritabanı yüklendiğinde, propertrie ıaşağıdaki kodlarla oluşturmalısınz: void cl_buildtrie(struct cl_node *root); Örneğimizde: cl_buildtrie(root); Tamam,şimdi bir buffer, descriptor yada dosyayı aşağıdaki kodlarla scan edebilirsiniz: int cl_scanbuff(const char *buffer, unsigned int length, char **virname, const struct cl_node *root); int cl_scandesc(int desc, char **virname, unsigned long int *scanned, const struct cl_node *root, const struct cl_limits *limits, int options); int cl_scanfile(const char *filename, char **virname, unsigned long int *scanned, const struct cl_node *root, const struct cl_limits *limits, int options); Bütün fonksiyonlar virüs adlarını adresini virname pointerının altına kaydeder. cl scandesc()Ve cl scanfile() taranan verinin değerini CL COUNT PRECISION ünitesinde arttırabilirler.Ayrıca arşiv limitlerini de desteklerler: struct cl_limits { int maxreclevel; int maxfiles; long int maxfilesize; }; 21 Son argüman scan engineni koknfigüre eder. Daha sonra CL ARCHIVE(arşiv taramasına erişebilir), CL RAW(arşiv taramasına erişemez) ve CL MAIL(mbox ve Maildir taramasına erişebilir ) ile destek sağlar. Eğer virüs yoksa fonksiyon 0 a döner(CL CLEAN) CL VIRUS ;Eğer virüs bulunursa yada herangi bir değer bozuksa. struct cl_limits limits; char *virname; /* maximal number of files in archive */; limits.maxfiles = 100 /* maximal archived file size == 10 Mb */ limits.maxfilesize = 10 * 1048576; /* maximal recursion level */ limits.maxreclevel = 8; if((ret = cl_scanfile("/home/zolw/test", &virname, NULL, root, &limits, CL_ARCHIVE)) == CL_VIRUS) { printf("Detected %s virus.\n", virname); } else { printf("No virus detected.\n"); if(ret != CL_CLEAN) printf("Error: %s\n", cl_perror(ret)); } Birden fazla dosyayı scan etmek istiyorsanız trie aşağıdaki kodla relased edilmelidir: void cl_freetrie(struct cl_node *root); Calamav kaynaklarından birkaç örnek bulacaksınız. Libclamavtı kullanan her program ona link olmalıdır: gcc -Wall ex1.c -o ex1 -lclamav Başarılar ! 22 6. Problem Çözme 6.1 Return kodları Return kodları çok kullanışlıdır, özellikle sistem scriptlerinde.Return kodlarını clamscan ‘dan aşağıdaki kodlarla kontrol edebilirsiniz : $ echo $? İşte size clamscan return kodlarının bir listesi: 0: Virüs bulunamadı . 1: Virüs(ler) bulundu. 40: Bilinmeyen opsiyon clamscan e geçti.lütfen yardımı kontrol edin. 50: Virüs veritabanı yüklemesinde hata oluştu.Default ayarlarından kaynaklanmıyor yada yanlış bir dosya veritabanına geçmiş olabilir. 51: Yanlış sayıda threads –threads e geçti.Doğal sayı 0 52: Desteklenmeyen Dosya tipi. tarayıcı düzenli dosyaları, dizinleri ve symlinksleri destekler. 53: Dizini açamıyor 54: Dosyayı açamıyor.5 55: Dosya okuması hatası okunan medium kırılmış olabilir. 5 56: Giriş dosyasını ve dizinini başlatamıyor.Taramak istediğiniz dosya / dizin mevcut değil. 58: I/O hatası. Lütfen dosya sisteminizi kontrol edin. 59: Kullanıcı bilgileri alınamıyor (clamscan çalışırken). 60: kullanıcı clamavından yeterli bilgi alınamıyor (önceliği olmayan kulanıcı) /etc/passwd de yok. 5 sadece bir dosya modunda ( recursive modda bu hatalar düzeltilir) 23 61:Fork edemiyor,yeni işlem yapamıyor.Lütfen limitinizi kontrol edin 63: Geçici dizin yad dosya oluşturamıyor.Lütfen haklarınızı kontrol edin. 64: Geçici dizin yazmıyor lütfen başka bir tane bildirin 70: Hafızayı ayırıp,temizleyemiyor,bu kritik bir hata lütfen sisteminizi kontrol edin. 71: hafızayı ayıramıyor. 7. Teknik kısım 7.1 Güvenlik Clam Antivirüs programı öncelikle güvenliği düşünür. Tehlikeli işlemler clamscande (geçici dosya oluşturma yada unlink() işlemleri gibi) clamav.ayrıcalığı ile yapılır. Ama bilirsiniz ki hatasız program yoktur. Bu daha çok yeni bir çalışma ve her şey mümkündür. Bazı yerlerde snprintf() fonksiyonu kullanılır, Bazı eski sistemler(C kütüphanesi) bu fonksiyonu kontrol etmezler.Bu örnek gösterir ki yapmanız gereken ilk şey sisteminizi kontrol etmek olmalıdır.Hiçbir zaman Clam AntiVirus uygulamasına SUID/SGID bitlerini kurmayın.EğerSUID bit kurulursa sistemdeki tüm dosyalar –log özelliğiyle modifiye olabilir. Normal kulanıcılar clamscan ı kendi şahsi dosyalarını taramak için kullanırlar,diğer dosyalar onları alakadar etmez .Clam AntiVirus Daemon güvenlikl düşüncesi ile yazılmıştır,dış saldırılara izin vermez ve birkaç extra korumaya sahiptir. 7.2 Scan engine Clam AntiVirüs ün yeni versiyonunda Aho-Corasick model eşleştirme algoritması kullanılmaktadır.Bu algoritma sonlu sabit model eşleştirme automatonunu kulanır[1]. Algoritmanın kendisi Knuth-Morris-Pratt algoritmasının genellemesidir.Veri tip tanımlaması için lütfen matcher.h ye bakınız. automaton trie ile yeniden sunulmuştur. Trie spesifik özellikleri olan köklü bir ağaç gibidir [2].triedeki her bir nod automatonun bir parçasıdır.Tanımlamada node aşağıdaki gibi tanımlanmıştır: struct node { int islast; struct patt *list; int maxpatlen; struct node *next[NUM_CHILDS], *trans[NUM_CHILDS], *fail;};