Hlavní navigace

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: Další dva kanály nabídnou HbbTV

Další dva kanály nabídnou HbbTV

Lupa.cz: E-shopy: jen sleva už nestačí

E-shopy: jen sleva už nestačí

Vitalia.cz: Jak koupit Mikuláše a nenaletět

Jak koupit Mikuláše a nenaletět

Podnikatel.cz: Přehledná titulka, průvodci, responzivita

Přehledná titulka, průvodci, responzivita

Vitalia.cz: Vláknina: Rozpustná, nebo nerozpustná?

Vláknina: Rozpustná, nebo nerozpustná?

Vitalia.cz: Jsou čajové sáčky toxické?

Jsou čajové sáčky toxické?

Podnikatel.cz: K EET. Štamgast už peníze na stole nenechá

K EET. Štamgast už peníze na stole nenechá

DigiZone.cz: Recenze Westworld: zavraždit a...

Recenze Westworld: zavraždit a...

DigiZone.cz: Sony KD-55XD8005 s Android 6.0

Sony KD-55XD8005 s Android 6.0

Měšec.cz: Finančním poradcům hrozí vracení provizí

Finančním poradcům hrozí vracení provizí

Lupa.cz: Proč firmy málo chrání data? Chovají se logicky

Proč firmy málo chrání data? Chovají se logicky

Lupa.cz: Google měl výpadek, nejel Gmail ani YouTube

Google měl výpadek, nejel Gmail ani YouTube

Vitalia.cz: Chtějí si léčit kvasinky. Lék je jen v Německu

Chtějí si léčit kvasinky. Lék je jen v Německu

Vitalia.cz: Baletky propagují zdravotní superpostel

Baletky propagují zdravotní superpostel

Podnikatel.cz: Prodává přes internet. Kdy platí zdravotko?

Prodává přes internet. Kdy platí zdravotko?

Podnikatel.cz: Víme první výsledky doby odezvy #EET

Víme první výsledky doby odezvy #EET

DigiZone.cz: Flix TV má set-top box s HEVC

Flix TV má set-top box s HEVC

Root.cz: Vypadl Google a rozbilo se toho hodně

Vypadl Google a rozbilo se toho hodně

Lupa.cz: UX přestává pro firmy být magie

UX přestává pro firmy být magie

Vitalia.cz: Paštiky plné masa ho zatím neuživí

Paštiky plné masa ho zatím neuživí