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í.

Ohodnoťte jako ve škole:

Průměrná známka 3,63

Našli jste v článku chybu?
Zasílat nově přidané názory e-mailem
Vitalia.cz: 7 nemocí očí, které musíte léčit včas

7 nemocí očí, které musíte léčit včas

120na80.cz: Co jí dělá? Sklerotizaci

Co jí dělá? Sklerotizaci

120na80.cz: Tady se vaří padělané léky

Tady se vaří padělané léky

Root.cz: Cenzura internetu prošla, i přes pochyby senátorů

Cenzura internetu prošla, i přes pochyby senátorů

Podnikatel.cz: Vyzkoušejte k propagaci výrobku Microsites

Vyzkoušejte k propagaci výrobku Microsites

DigiZone.cz: Šlágr TV: pokuta 100 tisíc za on-line

Šlágr TV: pokuta 100 tisíc za on-line

Vitalia.cz: Dnešní patolog o mrtvolu téměř nezavadí

Dnešní patolog o mrtvolu téměř nezavadí

Podnikatel.cz: Konečně vývar. Skoro jako od Steva Jobse

Konečně vývar. Skoro jako od Steva Jobse

DigiZone.cz: Kolik lidí sleduje hokej na webu ČT?

Kolik lidí sleduje hokej na webu ČT?

DigiZone.cz: Panasonic v Praze uvedl TV pro rok 2016

Panasonic v Praze uvedl TV pro rok 2016

Vitalia.cz: Tetanus v USA – i po odřeninách

Tetanus v USA – i po odřeninách

Podnikatel.cz: Přechod z OSVČ na firmu? Totální šok!

Přechod z OSVČ na firmu? Totální šok!

DigiZone.cz: Šlágr TV dostala pokutu 100 000 Kč

Šlágr TV dostala pokutu 100 000 Kč

DigiZone.cz: HD kanály ČT 24 a ČT:D budou později

HD kanály ČT 24 a ČT:D budou později

120na80.cz: Zjistěte, zda je vaše klíště infikované

Zjistěte, zda je vaše klíště infikované

DigiZone.cz: Konec geoblokace? Ani náhodou…

Konec geoblokace? Ani náhodou…

Vitalia.cz: Falšovaný salám v Kauflandu

Falšovaný salám v Kauflandu

DigiZone.cz: Stream představil souboj žroutů

Stream představil souboj žroutů

Podnikatel.cz: Různé podoby lahve Coca–Coly. Úchvatné

Různé podoby lahve Coca–Coly. Úchvatné

Lupa.cz: Schváleno: Rockaway může převzít Heureku

Schváleno: Rockaway může převzít Heureku