Sagator (3): Skenery

David Zejda 15. 4. 2005

Toho, co jsou skenery zač, jsme se trochu dotkli již minule. Protože zaujímají klíčové místo v architektuře Sagatoru, trochu si je dnes popíšeme a rozdělíme, abychom se tím nemuseli zdržovat příště, kdy přijde na řadu konkrétní konfigurace. Ano, možná vás trochu zklamu, ale dnešní díl bude teoretičtější...

Předně bych rád zdůraznil, že Sagator je snadné používat. Pro většinu běžných nastavení stačí v distribučním konfiguračním souboru povolit příslušné sekce, vše je navíc detailně popsáno v komentářích okolo. Tento díl a díly následující jsou pro ty, kdo chtějí proniknout trochu hlouběji, případně využívat Sagator nějak alespoň trochu nestandardně.

Tak tedy – co je to skener? Skenerem může být cokoliv, co vezme zprávu a něco provede – ať již se zprávou samou, anebo cosi kamsi uloží, někde něco nastaví, zaznamená a tak podobně. Klasické antivirové skenery jsou pouze jedním typem skenerů v terminologii Sagatoru.

Skenery mají také jednu klíčovou vlastnost – můžete je řetězit. Co z jednoho skeneru vypadne, stává se potravou dalšího, a to tak hluboko, jak se vám zachce.. prostě jako v přírodě. U každého skeneru může dojít k chybě při zpracování, čímž je (nečekaně) navozen chybový návratový stav.

Typy skenerů podle zpracovávaných dat

Skener proudu (streamscanner)

Vstupem mu je datový proud, data se předávají v paměti, což je podstatně rychlejší než skenování souborů. Pokud potřebujete aplikovat proudový skener na soubor, pomůže speciální skener file2stream().

Skener souboru (filescanner)

Vezme soubor a ten prozkoumá. Je sice pomalejší, ale v některých případech není vyhnutí – například pokud potřebujete prohánět zprávy nějakým externím nástrojem, který to neumí jinak – typicky antivirem či antispamem. Proud do souboru snadno zhmotníte skenerem stream2file().

Kombinovaný skener

Je, jak asi tušíte, kombinací proudového a souborového skeneru. Například na vstupu přijímá soubor, ale vystupuje z něj proud, nebo naopak, případně podporuje oba typy dat na vstupu a/nebo na výstupu.

Při řetězení skenerů je třeba pamatovat na kompatibilitu předávaných dat – je zřejmé, že nelze napojit skener, který produkuje soubor, na skener, který na vstupu požaduje proud. Proto

parsemail(string_scan(...))

je v pořádku, zatímco

parsemail(decompress(...))

použít nelze. V takových případech přijdou vhod již zmíněné převodní skenery, tedy např. parsemail(file2stre­am(decompress(…))).

Typy skenerů podle funkce

Skutečný skener (realscanner)

Skenuje zprávu a informuje o výsledku. Kromě vlastní zprávy nastavuje návratovou hodnotu – buďto prázdný řetězec, což lze interpretovat tak, že zpráva je z pohledu skeneru čistá (neškodný ham), nebo název identifikovaného viru či slovo „SPAM“, což se myslím vysvětluje samo.

Skenovací rozhraní (interscanner)

Tvoří rozhraní mezi základním skenovacím strojem a skutečnými skenery. I ta mohou být všemožně řetězena. Příkladem může být skenování s využitím knihovny antiviru ClamAV. Předtím je provedena analýza MIME, převod z proudu do souboru a dekomprimace:

SCANNERS=[
  parsemail(
    stream2file(
      decompress(
        libclam()
      )
    )
  )
]

Nebudu opakovat autora Sagatoru tím, že bych uváděl kompletní přehled skenerů – ten najdete na stránkách projektu.

Operátory a řídící skenery

Kromě skenerů zná Sagator také hrst operátorů, kterými můžete skenery ještě důmyslněji kombinovat. Kompletní přehled operátorů (+ – * / & ~ < > = <= >= !=) a jejich význam najdete opět na stránkách projektu v tabulce, někde ve druhé třetině odkazovaného dokumentu. Kromě operátorů můžete použít také speciální řídící skenery. Dva z nich ještě dnes zmíníme.

Alternativní skenery

Dejme tomu, že používáte ClamD démona, se kterým Sagator spolupracuje při detekci virů. Co když ale z nějakého důvodu ClamD zkolabuje? Sagator může v takovém případě volit řádkové skenovací rozhraní stejného antiviru, případně nějaký úplně jiný postup. K definici takových alternativ poslouží alternatives():

SCANNERS=[
  alternatives(
    clamd(['localhost',3310]),
    stream2mbox(clamscan([
         '/usr/bin/clamscan',
         '--stdout','--infected',
         '--disable-summary',
         '-r','--mbox']))
  )
]

Vynucené použití více skenerů

Většinou bude vhodnější zastavit provádění řetězce skenerů na prvním pozitivním výsledku – pokud je zpráva zavirována jednou, je již vcelku jedno, že je zavirována ještě třikrát a že má také některé rysy spamu.. V určitých případech může být užitečné označit zprávu za škodlivou až poté, co se na pozitivní diagnóze shodne skenerů více. Typicky se může takový postup hodit u antispamů, které pracují podstatně více s pouhými pravděpodobnostmi než antiviry. Poslouží vám match_all():

SCANNERS=[
  match_all(
    skener1(...),
    skener2(...),
    ...
  )
]

Příště

Snad vás dnešní trochu teoretický díl neodradil – příště se již vrhneme na konkrétní konfiguraci. Napíšeme jednoduchou třídu, která se nám bude hodit při práci se spamy, a také zlokalizujeme nějaké to hlášení.

Našli jste v článku chybu?
DigiZone.cz: Kauza technik: oficiální vyjádření Novy

Kauza technik: oficiální vyjádření Novy

Měšec.cz: Banky umí platby na kartu, jen to neříkají

Banky umí platby na kartu, jen to neříkají

Lupa.cz: eIDAS: Nepřehnali jsme to s výjimkami?

eIDAS: Nepřehnali jsme to s výjimkami?

Měšec.cz: MyUniCard: recenze předplacenky

MyUniCard: recenze předplacenky

120na80.cz: Tipy pro odvodnění organismu

Tipy pro odvodnění organismu

Měšec.cz: Dodavatele energií porovnáte snáz

Dodavatele energií porovnáte snáz

Měšec.cz: Zelená karta – kde neplatí povinné ručení?

Zelená karta – kde neplatí povinné ručení?

120na80.cz: Jaké plavecké pomůcky vaše dítě ochrání?

Jaké plavecké pomůcky vaše dítě ochrání?

Podnikatel.cz: Fotogalerie: Jesenka už má skoro 50 let

Fotogalerie: Jesenka už má skoro 50 let

Vitalia.cz: Strečink podle internetu? Raději ne

Strečink podle internetu? Raději ne

Vitalia.cz: Petr Koukal: Až rakovina mi zkvalitnila život

Petr Koukal: Až rakovina mi zkvalitnila život

DigiZone.cz: Přechod na DVB-T2? Kolem miliardy...

Přechod na DVB-T2? Kolem miliardy...

Měšec.cz: Do ostravské MHD bez jízdenky. Stačí vaše karta

Do ostravské MHD bez jízdenky. Stačí vaše karta

Podnikatel.cz: Český zákazník nakupuje v čínských e-shopech

Český zákazník nakupuje v čínských e-shopech

Měšec.cz: Platíme NFC mobilem. Konečně to funguje!

Platíme NFC mobilem. Konečně to funguje!

Vitalia.cz: Tohle je Břicháč Tom, co zhubnul 27 kg

Tohle je Břicháč Tom, co zhubnul 27 kg

Vitalia.cz: Za zánět močových cest mohou plavky

Za zánět močových cest mohou plavky

DigiZone.cz: Hra o trůny: natáčení 7. řady posunuto

Hra o trůny: natáčení 7. řady posunuto

Měšec.cz: Kurzy platebních karet: vyplatí se platit? (TEST)

Kurzy platebních karet: vyplatí se platit? (TEST)

Měšec.cz: Investice do drahých kovů - znáte základní chyby?

Investice do drahých kovů - znáte základní chyby?