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?
Měšec.cz: Platíme NFC mobilem. Konečně to funguje!

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

Vitalia.cz: Očkování je nutné, říká homeopatka

Očkování je nutné, říká homeopatka

120na80.cz: Víte, co je svobodná menstruace?

Víte, co je svobodná menstruace?

Vitalia.cz: „Sjíždět“ porno není bez rizika

„Sjíždět“ porno není bez rizika

Lupa.cz: Olympiáda zakázala GIFy. Moc to nepomáhá

Olympiáda zakázala GIFy. Moc to nepomáhá

Podnikatel.cz: Pozor na vykuky, imitují služby České pošty

Pozor na vykuky, imitují služby České pošty

Lupa.cz: Měřičům síly hesla se nedá věřit. Víte proč?

Měřičům síly hesla se nedá věřit. Víte proč?

Lupa.cz: Elektronika tajemství zbavená. Jak s ní začít?

Elektronika tajemství zbavená. Jak s ní začít?

Měšec.cz: Se stavebkem k soudu už (většinou) nemusíte

Se stavebkem k soudu už (většinou) nemusíte

Měšec.cz: Co když na dovolené přijdete o kartu?

Co když na dovolené přijdete o kartu?

DigiZone.cz: Jetelín končí. Prima ho vyřadila

Jetelín končí. Prima ho vyřadila

Měšec.cz: Na návštěvě na exekutorském úřadě

Na návštěvě na exekutorském úřadě

Vitalia.cz: Ženy, které milují příliš, jsou neštěstí

Ženy, které milují příliš, jsou neštěstí

Lupa.cz: Co vzal čas: internetové kavárny a herny

Co vzal čas: internetové kavárny a herny

Podnikatel.cz: OSA zdraží, ale taky přidá nový poplatek

OSA zdraží, ale taky přidá nový poplatek

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

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

DigiZone.cz: ČTÚ červenec: rušení trochu vzrostlo

ČTÚ červenec: rušení trochu vzrostlo

DigiZone.cz: AXN u FreeSatu měsíc zdarma

AXN u FreeSatu měsíc zdarma

Vitalia.cz: Musí moudrák opravdu ven?

Musí moudrák opravdu ven?

Lupa.cz: Nechcete datacentrum? Jsou na prodej

Nechcete datacentrum? Jsou na prodej