Kérdés:
Hogy vannak ilyen gyorsan az anti vírusok?
Harry
2017-11-12 04:41:58 UTC
view on stackexchange narkive permalink

A gyakori víruskereső (tudomásom szerint) egyfajta brute force típusú módszert alkalmaz, ahol megszerzik a fájl kivonatát, és összehasonlítják ezer ismert vírus hash-szal. Csak szupergyors SSD-vel rendelkező szervereik vannak, és feltöltik a hasheket erre, és nagyon gyorsan keresnek, vagy teljesen tévedek a működésük megértésével?

Mit gondolsz, miért lassú keresni a kivonatot egy ezres listán?Megfelelő adatszerkezettel egy modern számítógép másodpercenként milliószor végezhet ilyen kereséseket.A több ezer hash-lista könnyen elfér a memóriában, nincs szükség gyors SSD-re.
A hash keresése átlagosan * O (1) * (csak nagyon ritka esetekben működik * O (n) * -ban).Mindazonáltal a kivonat lényege a * szó szerinti összehasonlítás * elvégzése.Tehát ez azt jelentené, hogy egy hacker értelmetlen két bájtot adhat a vírushoz, és könnyen elkészítheti a fájl 65'536-os verzióit azáltal, hogy minden lehetséges értéket hozzárendel a két bájthoz.
Az AV szoftver továbbra is az egyik legnagyobb teljesítmény a PC-kben :) Olyan gyors itt a relatív ...
Érdekelheti [ez] (https://en.wikipedia.org/wiki/Aho%E2%80%93Corasick_algorithm), mint példa arra, hogyan lehet egyszerre sok alszöveget keresni egy fájlban.
Az AhoCorasick egy multi-regex, amely egyszerre képes sok ezer minta egyezésére;több gépet kibocsátó állapotgép.A regex első lépésével a fájlokat kiválasztják mélyebb vizsgálat céljából.Tudom, hogy így hajtottuk végre a tűzfalat és a behatolás észlelését vezetékes sebességgel;a Check Pointnál, amelynek szintén volt AV osztálya.
Ha igazán nagy készletben szeretné tesztelni a tagság tagságát, használjon virágszűrőt.Bár azt képzelném, hogy AhoCorasick relevánsabb a fő AV-detektálás szempontjából.A virágzási szűrő (valós példa) olyan készlet lenne, mint minden háznév, amely a válóperes ügyvédekhez kapcsolódik.Ez egy átlátszatlan bit struktúra, amely elrejti a benne rejlő elemeket, és hamis pozitívumokat adhat;főleg, mert nagyon megtelik.
A Hashes felkutatása nem a probléma, sokkal inkább a Hashes kiszámítása.De a tiszta aláíráson alapuló AV amúgy sem jó megoldás.(És a fejlettebb módszerek még igényesebbek)
Ők nem.Más folyamatokban elrejtik a teljesítménybüntetéseiket.
Feltételezed, hogy gyors - tapasztalataim szerint ez nem így van.Csak legtöbbször megnézik a fájlt, és gyorsan rájönnek, hogy ez egy fájl, amelyet már ellenőriztek.Innen származnak a hashok.Azt is gyanítom, hogy van táblázatuk a közös szoftverek kivonatáról.Még közel sem olyan gyorsan, amikor olyasmit ér el, amelyet még nem tisztítottak meg.
Három válaszokat:
George Y.
2017-11-12 09:51:54 UTC
view on stackexchange narkive permalink

Közzététel: Antivírus-szállítónál dolgozom.

Mivel a legtöbb vírusirtó motor a végpontok védelmében született, és még most is sokuk számára a végpontok védelme az üzleti tevékenység fő része, a modern A vírusirtó motorok a végpontok vizsgálatára vannak optimalizálva. Ez az optimalizálás sok mindent tartalmaz, például:

  • Nem ellenőrzi azokat a fájlokat, amelyek nem tartalmazhatnak olyan fertőzéseket, amelyek megfertőzhetik a számítógépét;

  • Ne feledje, hogy mely fájlokat vizsgálták, és ne vizsgálja meg őket újból, ha a fájlokat nem módosították;

  • Lehetőség szerint a fájltípusok vizsgálatának optimalizálása - például futtatható fájlok vizsgálatakor csak bizonyos egyes részeit be kell vizsgálni. Ez minimalizálja a lemezolvasást és javítja a teljesítményt.

Gyakori tévhit, hogy az AV motorok kivonatokat használnak. Három okból általában nem teszik ezt meg:

  1. Először is, hogy a hash-észlelés megkerülése nagyon egyszerű, és egyáltalán nem igényli a tényleges rosszindulatú kód módosítását;
  2. második az, hogy a kivonatok használata nem teszi lehetővé semmiféle proaktív védelem megvalósítását - csak olyan rosszindulatú programokat tud felismerni, amelyeket látott;
  3. a kivonat kiszámításához a teljes fájl elolvasása szükséges, míg egyesek számára fájlok (például futtatható fájlok), erre nincs szükség. És az egész fájl olvasása nem SSD merevlemezeken drága művelet - a legtöbb AV motornak egy nagy, tiszta futtatható fájlt kell gyorsabban beolvasnia, mint a kivonat kiszámítását rajta
a fájl tárolásakor egy futtatható fájlban az üzenet közepére helyezett véletlenszám azt eredményezi, hogy minden fájlnak más a kivonata.
Sokszor hallottam erről a "hash detektálásról".Köszönöm, hogy megerősítette, hogy nincs értelme.
Nem hiszem, hogy ez a válasz teljes mértékben foglalkozik azzal a fő kérdéssel, hogy miként érik el a teljesítményt.Különösen úgy tűnik, hogy "a legtöbb AV motornak egy nagy, tiszta futtatható fájlt kell gyorsabban beolvasnia, mint a kivonat kiszámítását", ez csak az OP kérdését állítja fenn.Pontosan hogyan lehet egy nagy fájlt gyorsabban beolvasni, mintsem kivonatot / ellenőrző összeget számolni belőle?Úgy tűnik, hogy mindkét művelet `O (n) '.
@aroth Mivel "például a futtatható fájlok beolvasásakor csak annak egyes részeit kell ellenőrizni. Ez minimalizálja a lemezolvasást és javítja a teljesítményt."
Továbbra is kérdés, hogyan észleli, hogy a lemezen lévő fájl megváltozott-e az utolsó vizsgálat után.Triviális a fájlmódosítás dátumának visszaállítása, tehát ez nem mutató;és egy kifinomult fertőzés elképzelhető módon változatlanul hagyhatja a fájlméretet.Ez csak egy kivonatot hagy kritériumként.
@PeterA.Schneider Az írási műveletek nem ellenőrizhetők jobb híján?
Egy másik ok, amiért a fájl hamisítása nem lenne megfelelő, az, hogy triviálisan könnyű lenne felforgatni, mivel a legtöbb fájltípus, beleértve a futtatható fájlokat is, tolerálja a fájl végén véletlenszerű bájtok hozzáadását, a fájl működésének változása nélkül.Vagy a fájl elején, a ZIP / JAR / stb.
@PeterA.Schneider igaz, hogy egy fájlt lehet módosítani anélkül, hogy megváltoztatnák a méretet és a módosítási időt vissza nem állítják.A víruskeresőknek rendszeres időközönként (még ha nem is mindig) át kell vizsgálniuk a fájlokat.Nem a teljes futtatható fájlt kellene ellenőrizni.
@PeterA.Schneider sokféle lehetőség létezik.Például, mivel a legtöbb vírusirtó már tartalmazza a fájlrendszer-illesztőprogramot, amely elfogja a fájlműveleteket, az ilyen illesztőprogram egyszerűen visszaállíthatja a már beolvasott fájlok belső adatbázisában található jelzőt.
Azt mondod, hogy a fájl HDD-ről történő olvasása drága művelet lenne.De hogyan lehet beolvasni egy futtatható fájlt anélkül, hogy elolvassa volna?
@GeorgeY.Tehát, ha egy felhasználó rövid időre deaktiválja AV alkalmazását, akkor az AV megállapítja, hogy minden fájlt újra kell keresni (vagy hash-val ellenőrizni kell) ...vagy végül is aláássa a hosszú távú biztonságot, hagyva, hogy a legtöbb AV úgy gondolja, hogy a fájloknak továbbra is ugyanazoknak kell lenniük, ha már nem azok?
@aroth Két művelet lehet O (n), de az egyik mégis 100-szor gyorsabb lehet, mint a másik.
miért van szükség egy rosszindulatú program-szkennerre, mint például a Malware Bytes?miért nem veszik bele az AV-gyártók a víruskeresésbe?vagy nem?És miért van szükség külön ransomware-re?
@ycomp nem szükséges.Minden nagyobb AV-gyártó reklám-, kém- és egyéb rosszindulatú programokat észlel - nemcsak vírusokat.És külön vírusirtó program sem szükséges.
@GeorgeY.de mi történik, ha az AV-gyártónak külön ransomware-ellenes eszköze van (a bitdefender av-t használom)?akkor megnyomorítják az ingyenes av-t a ransomware felismerés tekintetében?
Az @TomášZato segítségével a legtöbb tiszta futtatható fájlt beolvashatja anélkül, hogy a ** teljes ** fájlt leolvasná lemezről.Nyilvánvalóan el kell olvasnia ** néhány ** adatot.
@ycomp Különbség van a ransomware bináris fájlok észlelése (ezt az AV motor teszi) és a ransomware fájlok titkosításának megakadályozása között (ez egy további összetevő lehet).
tehát a ransomware eltávolítása az AV szférába esik?vagy a ransomware-ellenes szoftver szféra általában?nem akadályozza meg a titkosítást, csak távolítsa el, miután észlelte, mielőtt még megpróbálhatta volna a titkosítást
@aroth Ez egyike lehet azoknak az eseteknek, amikor a big-O jelölés fontos állandó tényezőket rejt ...
Mivel néhány ember a futtatható fájlok szkennelésével és a rajtuk levő hash ellenőrzésével kapcsolatban kérdezett: A fájl kivonatának kiszámításához el kell olvasnia * a teljes fájlt *;A megfelelő futtatható vizsgálatnak azonban nem kell elolvasnia a teljes fájlt, csak a legfontosabb részeket.Ha 100 + MB futtatható fájlja van, ez azt jelentheti, hogy különbség van 2 MB vagy 100 + MB olvasása között - szorozva azt, hogy akármennyire is sok nagy futtatható fájl él egy rendszeren, és látnia kell, hogy hol teljesítjavulás származik.
LSerni
2017-11-12 05:27:14 UTC
view on stackexchange narkive permalink

A gyakori víruskereső (tudomásom szerint) egyfajta brute force típusú módszert alkalmaz, ahol megszerzik a fájl kivonatát, és összehasonlítják ezer ismert vírus hash-szal. Csak szupergyors SSD-vel rendelkező szervereik vannak, és feltöltik a hashokat erre, és nagyon gyorsan keresnek, vagy teljesen tévedek a működésük megértésével.

Szerintem ön figyelembe véve azokat az online "antivírusokat", amelyek csak hasítanak, és meglehetősen gyengék az említett (sokkal hatékonyabb és fejlettebb) heurisztikus és szabályokon alapuló vírusellenes SmokeDispenser-hez képest. erős> az egy felhasználási eset ahol egy vírusfájlt küldtek sok embernek azonosak nak, és az Ön által használt AV motor olyan gyakran frissül, hogy a kivonatot korábban megkapja és tárolja találkozik a vírussal. Ebben az esetben például azonnal megjelölheti az e-mail mellékleteket vírus / adathalászat / ransomware / trójai programként, és ezt megteheti minimális számítási költséggel. Ha mindenképpen el kell olvasnia a teljes fájlt, és jó a kapcsolata (mindkét dolog azért, mert pl. levelezőszerver vagy), akkor a további I / O költség elhanyagolható .

Mivel ez az összes felhasználási eset kisebbsége, a (jó) antivírusok nem (csak) használnak kivonatokat.

A kivonat keresése azonban nagyon-nagyon gyors . Egyáltalán nincs szüksége SSD-kre vagy bármilyen kifinomult hardverre.

Képzelje el (még akkor is, ha nem éppen így működik ), hogy rendelkezik hexadecimális kivonattal, például 'baadc0debaadbaad' és ellenőrizni akarják, hogy van-e benne egy százmilliárd ot tartalmazó archívumban.

Az archívum létrehozásakor kétszázötvenhat könyvtárat hozott létre egy merevlemezen, és '00'-tól' ff'-ig (0 és 255 között tizedesjegyig) nevezte el őket. Mindegyikben létrehozott 256 könyvtárat, amelyek neve ismét „00” és „ff” között változott. És mindegyikbe ezek be ismét 256 könyvtárat tesz fel, és az AB / CD / EF forma minden harmadik szintű könyvtárába az összes abchdef kezdetű hash-t 256 fájlba osztva "00.txt" - "ff.txt".

Tehát a 'baadc0debaadbaad' hash egy "C: /ba/ad/c0/de.txt" fájlba kerül, amelynek szövege a következő:

  ... baadc0de81f872ac Ebola virusbaadc0debaadbaad Dark Avenger virusbaadc0debf31fe11 ismert tiszta fájl ...  

Hány kivonat található ebben a fájlban? Ha a kivonatok egyenletesen oszlanak el, osszon el százmilliárdot a fájlok számával. 256 mappa van, 256 almappával, 256 almappával, 256 fájllal, tehát a fájlok száma 256 * 256 * 256 * 256 = 4294967296. Ennyi várhatóan átlagosan sok kivonat található ebben az egy fájlban.

Tehát ha kaptál egy kivonatot, és megkérted, hogy keresse meg a százmilliárd hash között kézzel erős >, akkor csak rá kell kattintania a megfelelő első szintű mappára, a másodikra, a harmadikra, megnyitni a megfelelő fájlt és elolvasni huszonnégy hash-t. Valószínűleg kevesebb, mint harminc másodperc alatt végez, és "látszólag" megvizsgálta hárommilliárd hasht másodpercenként . Kézzel. Magadtól. Lehetetlennek tűnik, csak jó adatszervezés.

A számítógép ugyanezt még hatékonyabban tudja megtenni.

Szabályalapú vizsgálat

Egy bonyolultabb eset hogyan lehet ismert és elemzett vírust keresni egy olyan fájl belsejében, amelyről (kezdetben) semmit sem tud.

Ebben az esetben az a tény segít, hogy az operatív rendszernek végre kell hajtania a vírust, így a vírus nem lehet csak bárhol - ott kell lennie, ahol az operatív rendszer aktívan meg fogja keresni. Jellemzően a vírus megfertőz egy futtatható fájlt azáltal, hogy elrejti valahová (pl. Egy adatterületen), és a futtatható terület elejét behívja magának. Ez azt jelenti, hogy a legtöbb esetben csak a futtatható területet kell átkutatnia, és gondoskodnia kell annak tisztaságáról (természetesen a vírusok állandóan előkerülnek a valószínűtlen helyeken való rejtőzés okos módjaival, így a valóság egy kicsit bonyolultabb mint az imént mondtam).

Az antivírus ugyanarra a helyre néz, és ebben az esetben szabályalapú elemzést végez a fájlon. Ez hasonló a hash kereséshez: megnézi az első bájtot, amellyel az érzékeny területen találkozik, és annak értéke alapján megnéz egy másik bájtot valahol máshol. Az ilyen műveletet végrehajtó algoritmust néha automatának hívják. Például annak megnézésére, hogy a szöveges karaktersorozat "Hello, Világ!" vagy "Támadás hajnalban", akkor ellenőrizze az első betűt; ha H lenne, akkor figyelmen kívül hagyná az "Attack at dawn" összes ellenőrzését. , 2 + 2 és 2 * 2) ugyanazt az eredményt adhatja, ezért további ellenőrzésekre van szükség ("Ha az első szó Hello, Howdy vagy Good ...") annak megállapításához, hogy találtál egy változatot a rettegő vírus Üdvözlet, Kozmosz! . Az öntitkos kódhoz valószínűleg vagy meg kell találnia egy algoritmust a kód megszakítására (ha ez nagyon rövid idő alatt megvalósítható), vagy pedig az ön-visszafejtési rutin felismerésére kell koncentrálnia, amely nélkül a vírus nem képes magát futtathatóvá tenni a rendszer által.

A választási fa gondos kiválasztásával azonban gyorsan konvergálhat akár egyetlen lehetőségre (a vírus neve), akár arra a bizalomra, hogy nincs ismert vírus.

Heurisztika

Ez a legbonyolultabb (és leglassabb) elemzésfajta, de a legerősebb is, mert lehetővé teszi, hogy erősen gyanakodjon egy eddig ismeretlen vírus jelenlétére. Gondolhat a heurisztika, mint sok kis szabályalapú felismerő; kicsi létszám esetén a sebesség növelése kompenzálja sokaságukat. Minden felismerő azonosít egy olyan műveletet végrehajtó kóddarabot, mint például a kód visszafejtése, a rendszer privilégiumainak megszerzése, a fájlok megnyitása és fájlba írása, a rendszerhívások összekapcsolása, a kód memóriába történő átírása, az operációs rendszerbe való behatolás és így tovább. Sok törvényes program elvégzi ezeket a dolgokat egy vagy több, vagy úgy tűnik, hogy ezt meg is teszi (például a visszafejtés és a a dekompresszió nagyon hasonlítanak egymásra. Néhány program titkosítva is van a szellemi tulajdon védelme és a rosszindulatú kódok elrejtése érdekében). Minden művelethez "pontszámot" állít be, és egy bizonyos küszöbérték fölötti futtatható kód gyanúsnak tekinthető.

A heurisztikus motorok pontos részletei természetesen ennél sokkal bonyolultabbak; egyensúlyba kell hozniuk a sebességet, a megbízhatóságot (amikor azt mondják, hogy gyanús, annak gyanúsnak kell lennie) és az érzékenységet (ha gyanús, akkor képesnek kell lenniük arra, hogy azt mondják, hogy gyanús).

Valójában Elég bonyolultak ahhoz, hogy általában a vírusirtó vállalatok szigorúan őrzött titkai, és gyakran „intelligensként” emlegetik egészen a „mesterséges intelligenciákig”.

A szabályok folyamatos frissítésének szükségessége (nincs értelme tíz évvel ezelőtt kihalt vírust keresni), és kevésbé sürgősen, de nem kevésbé fontos a heurisztika hangolása, ez az oka annak, hogy az antivírus alapvető paramétere "a minőség a frissítések gyakorisága (még akkor is, ha egy kiemelkedő heurisztikus motor lehetővé teszi a ritkább frissítéseket, és egy lehetetlenül tökéletes heurisztikus motorhoz egyáltalán nincs szükség).

Optimization

Ha víruskereső vagy, és képes olyan mértékben betölteni az operációs rendszer kerneljébe, hogy bármilyen lemezírási műveletet lehallgass, és biztosan tudod, hogy erre nincs az operációs rendszer indítása a kód aktiválása nélkül (azaz nem lehet blue-pilled ), akkor igaz, hogy a lemezen egyetlen fájl sem módosítható az ismereteid et. Ezen a ponton nyomon követheti, hogy mely fájlokat vizsgálták és találták tisztának, és csak azokat a fájlokat szkennelheti, amelyek a legutóbbi átvizsgálás óta módosultak, ami a teljes összeg nagyon kis hányada (és lehet figyelmen kívül hagyja a nem fertőzött folyamatok által végrehajtott lemezírásokat; mindaddig, amíg megengedi, hogy vannak olyan módszerek, amelyeken a pl. Javascriptben írt vírus képes lehet arra kérni egy másik folyamatot, például a WSCRIPT, hogy írjon a lemezre a nevében) .

A 256 könyvtárról és 256 alkönyvtárról stb., Stb. Szóló magyarázatában milyen típusú adatstruktúra ez?Például nem bináris fa, de fa, igaz?Ez csak egy könyvtárfa?Kiváló válasz.Meglep, hogy ez nem váltott ki újabb vitát.Köszönjük, hogy időt szán ilyen minőségi tartalom biztosítására.
@harperville ez egy N-fa, igen.Itt természetesen N = 256.Egy bináris fa N = 2.Ezt megteheti könyvtárak használatával (ha nincs könyvtárhossz-korlátozás), a hash bináris fájlban.* Ezután * a * könyvtár is * faként valósul meg - szerintem általában B-fának, ami N változójú N-változó. Ha csak ott töltené be a fákat, ahol hash van, akkor egy B-fához jutna.És ha a * könyvtárat * valóban B-faként valósították meg, és nem voltak más hiányosságok (** vannak! **), akkor az összes fájlt egyetlen könyvtárban tarthatja a gyorsabb hozzáférés érdekében.
Tobi Nary
2017-11-12 04:57:20 UTC
view on stackexchange narkive permalink

Noha az anti-vírus szoftverek mintákat tölthetnek fel elemzés céljából (lásd alább), az észlelés nem így működik.

Emellett az aláíráson alapuló rendszerek is egyre ritkábban fordulnak elő (mivel ezek könnyen elkerülhetők). Nem is úgy működnek, ahogy elvárják tőlük.

Az aláírások egy adott régióra vagy egy bináris részre épülnek. Ha a hely nem ismert, az aláírási ablak „csúszik” a binárison. Tehát ez bonyolultabb és sokkal több mintát generál, mint azt köztes termékként gondolná.

Ennek ellenére az aláírások keresése nem lassú, de nem is éppen gyors; a víruskereső használata gyakran figyelemre méltó késéssel fordul elő.

Ennek ellenére ez nem igényel hatalmas mennyiségű lemezt vagy RAM-ot (bár vannak ilyenek) - sokkal több történik, amikor egy 4K-os videót dekódolunk megjelenítéshez.

Az aláírások mellett vannak heurisztikák és viselkedéselemzések is, így a szóban forgó bináris fájl homokozóba kerül, és annak viselkedését elemzik. Ha a végrehajtott műveletek gyanúsak, az ilyen bináris fájlok blokkolva lehetnek - ezek az idők, amikor a mintákat további elemzés céljából elküldhetik az AV szolgáltatónak.

Végezetül:

Ez nem olyan gyors . De a műveletek nem annyira bonyolultak, hogy szerverekre lenne szükségük, és egy munkaállomás önmagában nem tudná elvégezni őket.

Egyébként egy ilyen kiszolgáló infrastruktúrának hatalmasnak kell lennie. Ha a munka nehéz lenne egy munkaállomás számára, az azt jelentené, hogy egy erős szerver esetleg kiszolgálna néhány ügyfelet, és egy eladónak esetleg 300 millió példány maradna, hogy több millió kiszolgálót fizessen és üzemeltessen.

Az egyetlen pont, amin átgondolkodnék, a végpont: szerver erőforrás arány 2 vagy 3: 1 ... Akár mobilról, akár laptopról vagy akár üzleti asztali számítógépről beszél, az aránynak jóval magasabbnak kell lennie.A munkahelyünkön használt alapszámítási kiszolgáló 96 mag és 1 TB RAM 12 SSD-vel és 24 forgó lemezzel.Ez egyenértékű lenne több tucat-száz végponttal.
@Basic Ez teljesen függ a használt szerver típusától, ez így van.Szerkesztem ezt a bekezdést, hogy lazább legyen.


Ezt a kérdést és választ automatikusan lefordították angol nyelvről.Az eredeti tartalom elérhető a stackexchange oldalon, amelyet köszönünk az cc by-sa 3.0 licencért, amely alatt terjesztik.
Loading...