Hlavní navigace

Antivirová ochrana na poštovní bráně

20. 8. 2002
Doba čtení: 9 minut

Sdílet

Antivirová ochrana počítačů i celých sítí je, anebo by měla být, naprostou samozřejmostí. Poslední masové útoky e-mailových červů Klez.H a Frethem.L jsou toho důkazem. Názory, jak koncipovat ochranu proti virům (a jinému nebezpečnému kódu), se jistě liší případ od případu v závislosti na zkušenostech a konkrétních potřebách správců nebo firem, a proto bych si dovolil popsat řešení, jak by bylo možné v této věci postupovat. Chtěl bych upozornit, že popisované řešení není jistě jediným možným, a věřím, že v diskusi pod článkem dospějeme k vyladění detailů do dokonalosti.

Pokud nebude explicitně uvedeno jinak, poštovní brána využívá operační systém Linux a jako poštovní server je nainstalován Postfix. Pošta je přijímána pro domény firma.cz a firma.com.
Uvedené řešení bylo zprovozněno na linuxových distribucích Debian 3.0 a RedHat 6.2, popis se však týká Debianu.

Celkový pohled

Ochrana by mohla být rozdělena do čtyřech stupňů:

  1. aplikování záplat na programové vybavení (nejčastěji prohlížeče a poštovní klienti, občas operační systém)
  2. antivirová ochrana koncové stanice
  3. kontrola potenciálně nebezpečného kódu uvnitř zprávy spolu s filtrováním přípon a jmen souborů na poštovním serveru
  4. kontrola obsahu elektronické pošty proti vzorům ve virových databázích (na poštovním serveru)

Aplikování záplat na programové vybavení

Tady je základ toho, proč má šíření takovou úspěšnost – nejčastějším důvodem je automatické spuštění e-mailové přílohy způsobené nekorektní MIME hlavičkou pomocí ActiveX nebo VB komponenty. Jistě se najdou i další způsoby. Způsob obrany – sledovat informace o odhalených chybách a aplikovat dostupné záplaty (v případě MSIE6.0 nejlépe tu nejčerstvější).

Antivirová ochrana koncové stanice

Antivirovou kontrolu pro viry nejčastěji napadanou platformu MS Windows zajistí celá řada produktů – AVG, AVAST, Norton Antivirus,

Mcafee Antivirus, NOD apod.

Kontrola potenciálně nebezpečného kódu zprávy spolu s filtrováním přípon a jmen souborů

Lze zajistit např. pomocí procmail sanitizeru, anebo vlastními skripty. Některá řešení poštovních serverů v sobě zahrnují definování znakových vzorů (jména souborů, názvy přípon), které jsou blokovány nebo přejmenovávány.

Kontrola obsahu elektronické pošty proti vzorům ve virových databázích

Pokud je poštovní server vybaven vlastností spolupráce s externím programem pro kontrolu obsahu průchozí zprávy (Postfix, Sendmail-libmilter, Exim), lze v určitém bodě zpracování zprávy zavolat sadu externích programů, které provedou kontrolu a podle nějakého návratového příznaku je zpráva buď odmítnuta, anebo dále zpracována.

Instalace, konfigurace

Postfix

SMTP poštovní brána je počítač se dvěma síťovými rozhraními, z nichž jedno je připojeno do Internetu a druhé do lokální sítě. V lokální síti je druhý, řekněme cílový SMTP server s libovolným programovým vybavením. Na linuxové SMTP poštovní bráně běží Postfix, emailový „analyzátor“ AMaViS a jako antivirový program je používán linuxový McAfee Antivirus.

Nastavení Postfixu pro režim SMTP brány je ve třech souborech (základ byl převzán z FAQ Postfixu):
(kvůli šířce mohou býtřádky zalomeny, při kopírování se však zlomy objeví tam, kde mají)

  1. /etc/postfix/ma­in.cf

    • přijímá poštu pro domény firma.cz (hlavní firemní doména) a firma.com

      myhostname = mail.firma.cz
      mydomain = firma.cz
      myorigin = $mydomain
      mydestination = $myhostname, localhost.$my­domain, $mydomain, firma.com

    • naslouchá na všech rozhraních

      inet_interfaces = all

    • má zakázáno doručovat poštu na lokální stroj

      local_transport = error:local
      mail delivery is disabled on this machine

    • povoluje relaying pro lokalní a vniřní rozhraní

      mynetworks = 127.0.0.0/8, 192.168.1.0/24
      relay_domains = $mydestination
      smtpd_recipien­t_restrictions = permit_mynetworks, reject_unauth_des­tination

    • definuje obsluhu filtru obsahu (musí být postfix-snaphot-20000529 a novější)

      content_filter = vscan:

    • definuje způsob předávání (směrování) pošty pro vybrané domény (zde firma.cz a firma.com)

      transport_maps = hash:/etc/pos­tfix/transport

    • omezuje velikost průchozí zprávy (zde 10MB – je to výsledná velikost hlavičky, těla a příloh)

      message_size_limit = 10240000

  2. /etc/postfix/mas­ter.cf

    • Přidání dvou řádků na konec souboru:

      vscan unix – n n – 10 pipe user=amavis argv=/usr/sbin/a­mavis ${sender} ${recipient}
      localhost:10025 inet n – n – – smtpd -o content_filter=

  3. /etc/postfix/tran­sport

    • firma.cz smtp:smtp.firma.cz
      firma.com smtp:smtp.firma.cz

    Poznámky:

    • smtp.firma.cz musí být přeloženo přes DNS (např. ve vnitřní síti), anebo musí být záznam v souboru /var/spool/pos­tfix/etc/hosts
    • po vytvoření textového souboru transport je třeba vytvořit hashovaný transport.db z textového transport, a to pomocí postmap /etc/pos­tfix/transport

Výše uvedené parametry nastaví Postfix do režimu, kdy je pošta na jednom rozhraní přijata, poté zkontrolována a nakonec odeslána dále přes druhé rozhraní k cíli.

Antivirový program

Nainstalujeme antivirový program, v našem případě řádkový McAfee Virus Scan pro Linux. Je dodáván v tgz formě, součástí je install skript. Standardně se nainstaluje do adresáře /usr/local/uvscan, kde jsou virové vzory, knihovny a samotný binární soubor, a vytvoří si linky v /usr/local/bin/ a /usr/local/lib/. Zde bych ještě upozornil (a je to i v manuálu k antivirovému programu), že pro běh je nutné mít nainstalovánu knihovnu libstdc++2.8.

Důvodem, proč jsem zvolil právě Virus Scan, byla dostupnost, jednoduchost instalace, podpora u řady antivirových řešení a docela rychlá reakce na nové viry (k aktualizaci dojde někdy i 5× denně).

Pokud by bylo nutné zrychlit přístup k virové databázi, je dobrou myšlenkou umístit tyto soubory na RAM disk.

AMaViS

A přichází na řadu AMaViS. Jedná se o e-mailový analyzátor, který zprávu rozdělí na jednotlivé části (hlavička, tělo, přílohy), za pomoci dekompresních programů získá skutečné podoby těla a příloh a spolupracující antivirový program provede kontrolu těchto dat. Pokud některá část obsahuje virus, antivir nastaví návratovou proměnnou a AMaViS vrátí do poštovního serveru vlastní zprávu s popisem akce. Na straně poštovního serveru musí být samozřejmě podpora pro kontrolu obsahu procházející zprávy (u Postfixu parametr content_filter). Pokud vás zajímají detaily, dovolil bych si vás odkázat na dokumentaci a zdrojové kódy.

Protože existují rpm

deb balíčky, není nutné AMaViS kompilovat ze zdrojových souborů (pokud nepožadujete poslední verzi). Výkonná část AMaViSu je perlový skript, proto je nutné mít Perl nainstalován a k tomu ještě další podpůrné moduly (informace o nich je na stránkách s balíčky uvedena). Rád bych upozornil, že při instalaci z balíčků je pracovním adresářem u distribuce Debian /var/lib/amavis, u RedHatu /var/amavis. Při instalaci je vytvořen uživatel a skupina amavis, jsou vytvořeny příslušné adresáře (/var/lib/amavis a /var/lib/amavis/vi­rusmails) a soubory (amavis a amavisd v /usr/sbin/, amavisd.conf v /etc, spuštěcí skript a příslušné linky na něho v jednotlivých rcX.d adresářích).

Vše proběhne jistě v pořádku a my upravíme konfigurační soubor /etc/amavisd.conf:

  • adresář, kde leží Virus Scan:

    # NAI AntiVirus (uvscan)
    $uvscan = "";

    změníme na

    $uvscan = „/usr/local/uv­scan/uvscan“;

  • rozhodneme se, zda využívat syslog, nebo záznamový soubor:

    # yes – syslog, no – file logging
    $DO_SYSLOG = „no“;

  • když ne syslog, tak kde záznamový soubor leží a jak se jmenuje:

    # Directory to put log entries (if not using syslog)
    $LOGDIR = „${prefix}/../var/lib/a­mavis“;
    $LOGFILE = „amavis.log“;

  • kolik nám AMaViS řekne o své činnosti:

    # 0: default – startup/exit/fa­ilure messages
    # 1: args passed from client
    # 2: virus scanner output
    # 3: server client
    # 4: decompose parts
    $log_level = 0;

  • komu se pošle pošta, když se něco zachytí – má smysl nechat posílat sobě jako adminovi a ostatní o tom neinformovat, protože odesílatel je ve většině případů stejně falešný (pokud nepoužijete adresu z Return-Path) a příjemce bude mít jednak zbytečné obavy a jednak je taková zpráva v naprosté většině případu pro něho nepotřebná

    # Notify admin/sender/re­cipient?
    $warnadmin = „yes“;
    $warnsender = „no“;
    $warnrecip = „no“;

  • kde bude adresář se zachycenými exempláři:

    # Location to put infected mail – empty for not quarantining
    $QUARANTINEDIR = „/var/lib/ama­vis/virusmail­s“;

  • hlášení o průchodu zprávy filtrem, které se vloží do hlavičky pošty:

    # Add X-Virus-Scanned line to mail?
    $X_HEADER_TAG = „X-Virus-Scanned“;
    # Leave empty to add no header
    $X_HEADER_LINE = „by AMaViS snapshot-XXXXXXXX“;

  • cesty k dekompresním programům:

    $arc = „/usr/bin/arc“;
    $bunzip = „/usr/bin/bunzip2“;
    $file = „/usr/bin/file“;
    $lha = „/usr/bin/lha“;
    $unarj = „/usr/bin/unarj“;
    $uncompress = „/bin/uncompress“;
    $unrar = „/usr/bin/unrar“;
    $zoo = „/usr/bin/zoo“;

  • port a adresa, kde se AMaViS spojuje s Postfixem:

    # postfix-specific
    $smtp_port = „10025“;
    $localhost_name = „localhost“;
    $localhost_ip = „127.0.0.1“;

Je vhodné zvolit omezení, aby nedošlo k vyčerpání zdrojů při „porcování“ procházející zprávy a také informovat příslušné uživatele.

  • kolik rekurzí při rozbalení/dekó­dování

    # The next three are resource limitations – exit with EX_TEMPFAIL if exceeded
    # Maximum recursion level for extraction/decoding
    $MAXLEVELS = 20;

  • kolik archivů v archivu

    # Maximum nesting level for compressing archive formats
    $MAX_ARCHIVE_NES­TING = 3;

  • maximum rozbalených souborů

    # Maximum number of extracted files
    $MAXFILES = 100;

  • od koho půjde zpráva o nalezení viru

    # Who reports are sent from
    $mailfrom = ‚postmaster‘;

  • komu poslat zprávu o nálezu viru

    # Where to send virus reports
    $mailto = ‚virusalert‘;

Ostatním proměnným ponecháme přednastavené hodnoty. Připomínám, že pošta na virusalert a postmaster by měla být doručitelná.

Aby byla zajištěna správná komunikace mezi AMaViSem a Postfixem, musí být:

  • AMaViS spuštěn ještě před Postfixem (to lze snadno zajistit pomocí vhodných jmen linků spouštěcích skriptů)
  • v pracovním adresáři (zde /var/lib/amavis) zajištěna správná přístupová práva (viz pozn.)
  • nalezen alespoň jeden podporovaný antivirový program (viz amavisd.conf)

Pozn.: Stane-li se, že ani „čisté“ zprávy neprocházejí přes poštovní server, zcela jistě bude v souboru mail.log u záznamů od Postfixu status deferred od doručovatele vscan. Je to nejčastěji z důvodu nesprávných práv v komunikačním adresáři (zdá se to být nejčastější téma v amavis-user konferenci). Tento problém jsem naštěstí neměl, instaloval jsem systém z balíčků. Mohl by ale vzniknout při kompilování a instalaci ze zdrojových kódů. Uvádím proto informace k souborům a adresářům při funkční instalaci:

Tabulka č. 315
Adresář nebo soubor Práva Uživatel Skupina
/var/lib/amavis drwxr-xr-x (40775) amavis root
/var/lib/amavis/vi­rusmails drwxr-xr-x (40775) amavis root
/var/lib/amavis/a­mavisd.sock srwx------ (100600) amavis nogroup
/usr/sbin/amavis -rwxr-xr-x (100755) root root
/usr/sbin/amavisd -rwxr-xr-x (100755) root root

Spuštění

Pokud máme vše nainstalováno, spustíme AMaViS a poté Postfix. V pracovním adresáři AMaViSu by měly vzniknout soubory amavisd.sock a amavis.log (pokud je v proměnné $DO_SYSLOG = „no“, jinak v syslogu). V logu bude záznam podobný tomuto:

Aug 13 16:00:56 mail amavisd[14916]: starting. amavisd snapshot-xxxxxxxx

Abychom ověřili funkčnost systému, sami sobě zkusíme poslat zazipovanou verzi neškodného testovacího viru

Eicar a prohlédneme si záznamy. Mělo by tam být zhruba toto:

Aug 13 16:03:10 mail amavisd[14918]: infected (EICAR test file), from=<xxx@fre­emailserver.xx>, to=<jmeno.prij­meni@firma.cz>, quarantine virus-20020813–160310–14918

Teď víme, že AMaViS je schopen zprávu rozdělit na části, zavolat unzip na příslušné přílohy, rozbalit je, zavolat antivirový program a zkontrolovat jednotlivé části. Na adresu virusalert@firma.cz je zaslána zpráva s informací o práci antiviru a s hlavičkou zavirované zprávy, odkud můžeme vysledovat původce. Celá zpráva je uložena v souboru /var/lib/amavis/vi­rusmails/virus-20020813–160310–14918.

Aby byl systém funkční i do budoucna, musí být antivirový program pravidelně aktualizován. U Virus Scanu jsem aktualizaci zajistil pomocí perlového skriptu uvupdate, který je spouštěn přes cron každou hodinu a kontroluje aktuální databázi virů i verzi jádra antivirového programu. Pokud je nová verze databáze (nebo i jádra), stáhne ji pomocí wget a zajistí rozbalení, MD5 kontrolu a instalaci. Můžete si nastavit i zaslání zprávy o aktualizaci.

CS24 tip temata

Závěr

Pokud probíhá vše tak, jak je výše popsáno, pak je systém funkční a vy máte zase o trochu více klidu. Osobně tento systém využívám více jak půl roku a díky jemu jsem přežil útoky virů Klez.H (ten hlavně vzhledem k jeho destrukční povaze) i Frethem.L beze ztráty kytičky. Pokud se zajímáte o výkon systému, tak jsem jej zatím neměřil a ani jsem nezkoušel jeho limity. Na počítači s CPU 1Ghz a 256MB RAM dokáže bez problémů zkontrolovat 250 zpráv (součet v obou směrech) za hodinu, ale myslím, že jeho možnosti jsou daleko větší, což se projevilo zejména v době, kdy byl aktivní e-mailový virus Frethem.L, kdy systém během půl hodiny zkontroloval přes 450 zpráv (zavirované i normální) a známky zátěže nejevil.

Přeji vám hodně štěstí úspěšný boj s viry.

Autor článku