Download: LinuxUser_wirusy

Transkrypt

Download: LinuxUser_wirusy
LINUX USER
Wirusy
Osobisty filtr antywirusowy
Młot na wirusy
www.PhotoCase.de
W chwili pisania tego artykułu, po świecie krąży po około 20 wersji zwalczających się robaków Bagle i Netsky oraz niedobitki poprzednich epidemii.
JANUSZ A. URBANOWICZ
P
laga sieciowych wirusów komputerowych (robaków) nabiera rozmachu.
Codziennie kilkadziesiąt tysięcy użytkowników Microsoft Outlook Express klika
na załączniki w otrzymanych mailach, stając
się następnymi nosicielami zarazy. Nawał zakaźnych przesyłek zatyka serwery i utrudnia
pracę. Koniecznym, choć dość skomplikowanym rozwiązaniem, jest filtrowanie poczty za
pomocą programu antywirusowego.
Znakomitym programem antywirusowym
typu Open Source jest, stworzony przez polskiego programistę Tomasza Kojma, pakiet
ClamAV. Prowadzony przez zapaleńców na
całym świecie projekt utrzymuje się w czołówce, jeśli chodzi o tempo aktualizacji bazy danych wirusów. Integruje się z większością popularnych otwartych serwerów pocztowych
(MUA), rozpakowuje archiwa, weryfikuje podpisy kryptograficzne, potrafi też analizować
strumienie OLE.
Niestety, z ClamAV nie jest dostarczane
gramowania systemowego. Jednak potrzeba
jest matką wynalazków i takie rozwiązanie
(zresztą dość proste) udało mi się stworzyć.
Jego zaletą jest to, że można je wdrożyć w kilkanaście minut, wadą zaś jest brak skalowalności. Nie jest ono zbyt wydajne i nie powinno być stosowane dla więcej niż kilkunastu-kilkudziesięciu użytkowników. Dla większych grup należy zastosować dostarczane
z ClamAV rozwiązania pracujące na poziomie oprogramowania serwera pocztowego.
Do stworzenia osobistej ochrony antywirusowej potrzebne są:
■ Clam Antivirus [1]
■ procmail [2]
■ maszyna wirtualna języka Python [3]
Instalacja ClamAV
W idealnej sytuacji najnowsza wersja ClamAV jest dostępna w dystrybucji i jest zainstalowana domyślnie, bądź też można ją zainstalować poleceniem
Ramka 1: Uniwersalny plik
konfiguracyjny dla
clamd i freshclam
# apt-get install clamav
W przeciwnym wypadku trzeba zainstalować antywirusa samodzielnie.
Jeśli jest taka możliwość, optyUser clamav
malną
metodą używania ClamAV
LogSyslog
jest
korzystanie
z usług demona anFixStaleSocket
tywirusowego
clamd,
przez odwołaScanMail
nie
się
do
niego
programem
clamdTCPSocket 3310
scan.
Najlepiej
zaś
zainstalować
go
DatabaseMirror database.clamav.net
zakładajac
użytkownika
systemoDatabaseDirectory /var/local/lib/clamav
wego (oraz grupy) .clamav., z którego uprawnieniami pracować będzie
demon. Wymaga to jednak uprawnień użytżadne proste narzędzie, które może zaspokokownika „root”:
ić potrzeby pojedynczego użytkownika linuksowego konta pocztowego. Istnieją kombajny filtrujące pocztę dla całego serwera czy
#adduser --group clamav
domeny (i bardzo dobrze), ja jednak często
mam okazję pracować na serwerach, gdzie
#adduser --disable-password U
nie mogę, bądź nie chcę modyfikować opro--ingroup clamav --system clamav
100
Lipiec 2004
www.linux-magazine.pl
#configure --prefix=/usr/local U
--sysconfdir=/etc/clamav U
--enable-id-check
Jeśli ClamAV ma pracować z konta użytkownika, w wywołaniu configure należy podać inne katalogi oraz wyłączyć sprawdzanie
istnienia użytkownika clamav:
#configure --prefix=~/clamav U
--sysconfdir=~/.clamav U
--disable-clamav
Kompilacja i instalacja programu przebiega
standardowo poleceniami make i make install. Binaria ClamAV zostaną umieszczone
w katalogu wyspecyfikowanym jako prefix,
a wzorcowe pliki konfiguracyjne w katalogu
sysconfdir.
Domyślnie program używa dwóch plików
konfiguracyjnych przechowujących konfigurację dla programów odpowiedzialnych za
skanowanie antywirusowe (clamd, clamdscan i clamscan) oraz dla programu freshclam, służącego do aktualizowania bazy sygnatur wirusów. Jednak, ponieważ deklaracje w obu plikach nie kolidują ze sobą, a nawet się pokrywają, można umieścić całą potrzebną konfigurację w jednym pliku i wykonać odpowiednie dowiązanie symboliczne.
Uniwersalna konfiguracja dla demona pracującego z UID.clamav. znajduje się w Ramce 1. Przed jego użyciem należy stworzyć katalog /var/local/lib/clamav.
Jeśli demon ma być uruchamiany
z konta zwykłego użytkownika, plik konfiguracyjny należy zbudować w oparciu
o przykład z Ramki 2. Przed uruchomieniem procesu demona dobrze jest uzyskać
zgodę administratora systemu, na którym
będzie działał clamd.
Przed pierwszym uruchomieniem clamd
Wirusy
Ramka 2: Konfiguracja do
pracy z konta użytkownika
(~/.clamav/clamav.conf)
User <nazwa użytkownika>
FixStaleSocket
ScanMail
TCPSocket 3310
DatabaseMirror database.clamav.net
DatabaseDirectory ~/clamav
należy pobrać bazę sygnatur wirusów, dzięki
którym rozpoznaje on niebezpieczne treści.
Służy do tego polecenie freshclam. Aby baza
była aktualizowana regularnie, program ten
należy uruchamiać okresowo za pomocą
usługi cron. W crontabie użytkownika, z którego uprawnieniami będzie działał ClamAV,
należy umieścić stosowny wpis.
Proces demona powinien uruchamiać się
przy starcie systemu. Jeśli demon będzie pracował z uprawnieniami specjalnego użytkownika, można wykorzystać skrypty dostarczane z ClamAV, aby był on uruchamiany
przez proces init podczas startu systemu.
Jednak prostszym rozwiązaniem jest wykorzystanie usługi cron przez wpisanie do crontab odpowiedniego użytkownika dyrektywy.
Bezpośrednio po instalacji ClamAV i pobraniu bazy wirusów wystarczy uruchomić
demona przez wydanie komendy clamd.
Integracja z procmailem
AUTOR
Procmail może filtrować przesyłki, uruchamiając program filtrujący i podając przesyłkę na potok standardowego wejścia oraz
odbierając przesyłkę do dalszego przetwarzania ze strumienia standardowego wyjścia. Niestety, ClamAV nie dostarcza żadnego narzędzia pracującego w ten sposób.
Zarówno clamdscan, jak i clamscan po
wczytaniu pliku informują tylko o tym, czy
zawiera on wrogi kod. Dodatkowym problemem jest to, że narzędzia ClamAVa nie
pracują w prawdziwym trybie klienta-serwera i ignorują uniksowe konwencje (np. tę,
że program wywołany bez parametrów powinien czekać na dane ze strumienia stanJanusz A. Urbanowicz zajmuje się
Linuksem od 1996 roku. Pracuje
w Interdyscyplinarnym Centrum Modelowania Matematycznego i Komputerowego Uniwersytetu Warszawskiego. Specjalizuje się w zagadnieniach bezpieczeństwa sieci i zastosowań kryptografii.
dardowego wejścia), konieczne jest więc
napisanie „opakowania” (ang. wrappera), które usunie te niedogodności.
Dzięki nowoczesnemu językowi programowania, jakim jest Python, stworzenie takiego opakowania nie jest
skomplikowane.
Podstawowym zadaniem takiego opakowania jest praca w trybie filtra-gąbki:
pobranie ze strumienia wejścia treści
przesyłki, przeskanowanie jej za pomocą
clamdscan i, jeśli nie zawiera ona wrogiego kodu, przekazanie jej na standardowe
wyjście. Określenie „gąbka” oznacza zaś, że
zanim filtr przystąpi do przetwarzania, czeka
najpierw na całość danych. Całość kodu
„opakowania” obejrzeć można w Ramce 3.
Działanie „opakowania”, któremu nadałem nazwę clamailfilter, obejmuje dodatkowy krok – ponieważ poczta jest chyba najistotniejszą sieciową usługą komunikacyjną,
nie można dopuścić do przypadkowego ginięcia przesyłek w razie awarii programu antywirusowego. Dlatego też po przekazaniu
treści przesyłki do antywirusa sprawdzany
jest zwrócony kod błędu. Jeśli oznacza on
brak komunikacji z clamd, wówczas treść
przekazywana jest do strumienia wyjścia.
Przesyłka nie jest sprawdzona na obecność
zarazy, ale istotniejsze jest to, aby nie zaginęła bez wieści.
Jeśli nie można skorzystać z demona
clamd, wówczas drugą linię clamailfiltera
należy zmodyfikować następująco:
CLAMSCAN='/usr/local/bin/U
clamscan --detect-encrypted U
--mbox --quiet -'
Dzięki tej modyfikacji wykorzystywane
jest polecenie skanujące clamscan, które
nie odwołuje się do clamd. Niestety, takie
rozwiązanie powoduje gwałtowny spadek
wydajności. Przeskanowanie jednego pliku clamdscanem trwa ułamek sekundy,
clamscanem zaś kilka sekund, gdyż każde
wywołanie programu wiąże się z załadowaniem od nowa całej bazy sygnatur wirusów. Nie należy więc tego rozwiązania używać na wolniejszych serwerach ani też dla
więcej niż kilku (<10) użytkowników. Lepiej uzgodnić z administratorem systemu
instalację dostępnego dla wszystkich demona clamd.
Ostatnim etapem jest włączenie clamailfiltera w konfiguracji przetwarzania
poczty na koncie. Większość dystrybucji
domyślnie używa procmaila do dostarcza-
LINUX USER
Ramka 3: Program
clamailfilter
#! /usr/bin/env python
import sys,os
CLAMSCAN = '/usr/local/bin/clamdscan --mbox --quiet -'
input = sys.stdin.read()
stream = os.popen(CLAMSCAN,'w')
try:
stream.write(input)
except IOError:
sys.stdout.write(input)
sys.exit(2)
rc = stream.close()
if rc == None:
code = 0
else:
code = (rc & 65280)/ 256
if code == 0 or code == 2:
sys.stdout.write(input)
sys.exit(0)
sys.exit(1)
nia poczty do skrzynek, wystarczy wtedy
jako pierwszą regułę w ~/.procmailrc
wpisać poniższe trzy linie (ostatnia jest
pusta i jest konieczna do poprawnego
działania reguły):
:0f
|clamailfilter
< pusta linia >
Reguła ta oznacza, że wszystkie przetwarzane listy należy przekazać w całości na
wejście clamailfiltera. Jeśli przesyłka zawiera wirusy, clamailfilter nie zwróci jej
do dalszego przetwarzania.
Jeśli zaś procmail nie jest domyślnie używany przez system pocztowy, trzeba jeszcze
włączyć przetwarzanie dostarczanej poczty.
Robi się to przez umieszczenie w pliku
~/.forward reguły |procmail.
I to już wszystko. Gotowe.
■
INFO
[1] Clam AntiVirus: http://clamav.net/
[2] Procmail: http://procmail.org/
[3] Python: http://python.org/
www.linux-magazine.pl
Lipiec 2004
101

Podobne dokumenty