Dlaczego twój antywirus działa powoli?

Przeciętny użytkownik komputera może nie wiedzieć w jaki sposób działa ochraniający go program antywirusowy. Generalnie jednak skarży się na jego powolne działanie. Dlaczego tak się dzieje?

Większość użytkowników zwraca uwagę na czas potrzebny do uruchomienia komputera. Każdy program, który ma go aktywnie chronić musi ładować się w tym momencie.

Dzieje się tak ze względu na ryzyko, że na komputerze mogą znajdować się rzeczy, które właśnie zostały zidentyfikowane jako niebezpieczne. Zagrożeniem może być np. wygaszacz ekranu, który pobrany został tydzień wcześniej, lecz dopiero teraz firma tworząca program antywirusowy zauważyła, że jest on groźny. Może też być tak, że w momencie, gdy był wyłączony, pojawiło się na komputerze jakieś złośliwe oprogramowanie. Istnieje też ryzyko, gdy korzystamy z dwóch systemów. Np. podczas pracy z Linuksem pobrany został jakiś wirus atakujący system Windows.

Typowe działanie (AV) polega na sprawdzaniu każdego pliku na komputerze i określeniu, czy jest niebezpieczny. W wielu programach proces sprawdzania pojedynczego pliku jest źle przemyślany. Wielu dostawców opiera się na technice, która polega na porównywaniu kryptograficznych sygnatur wirusów, ale podchodzą oni do tego w nieinteligentny sposób, co bardzo spowalnia cały proces.

Czym są "sygnatury"?

Dostawcy programów AV chcieliby dokładnie dopasować pliki znajdujące się na komputerze z bazą wirusów i móc powiedzieć: "Ten plik wygląda dokładnie jak cyfrowa kopia szkodliwego pliku, który namierzyliśmy wczoraj".

Jednak nie mogą umieścić każdego szkodliwego programu, który wpadł w ich ręce na komputerze użytkownika - to po prostu niemożliwe. Zamiast tego korzystają z kryptografii, której efektem działania na danym pliku jest uzyskanie zestawu składającego się z bardzo wielu cyfr o ustalonym rozmiarze. Ten algorytm pozwala producentom AV na stwierdzenie, że Jeżeli kryptograficzna sygnatura to 267,947,292,070,674,700,781,823,225,417,604,638,969, plik jest zły.

Teraz musi on przechowywać tylko ten numer, a nie cały plik. Twórcy wirusów mogą próbować stworzyć program dający taki sam rezultat jak popularne dobre oprogramowanie (np. takie, które będzie cechowało się taką samą sygnaturą jak któraś z wersji Microsoft Worda) mając nadzieję, że utrudnią w ten sposób działanie dostawców AV poprzez fakt, że ich antywirus będzie wszczynał wiele fałszywych alarmów.

Na szczęście uzyskanie przez piszącego złośliwe oprogramowanie odpowiedniej sygnatury jest wręcz niemożliwe. Pozostaje mu więc liczyć na szczęśliwy przypadek i mieć nadzieję, że wśród napisanych przez niego programów znajdzie się taki, który da identyczny wynik jak jakiś legalny plik.

Dlaczego komputer potrzebuje czasu na przetwarzanie sygnatur?

Twórcy programów antywirusowych określają kryptograficzną sygnaturę sprawdzanego pliku i porównują ze swoją bazą danych, czy nie jest niebezpieczny. W rzeczywistości znane są algorytmy pozwalające, aby tego rodzaju wyszukiwanie było natychmiastowe. Powinno ono przebiegać szybciej niż określanie kryptograficznej sygnatury sprawdzanego pliku.

Jak długo trzeba czekać na wyliczenie sygnatury? W zasadzie czas ten zależy od tego jak szybko przebiega odczyt pliku z dysku twardego. Najszybsze obecnie "twardziele" potrafią odczytywać dane z prędkością około 125 MB/s. Jeżeli więc program AV rozpoczyna skanowanie np. 40 GB plików, trzeba spędzić (w idealnych warunkach) blisko pięć minut czasu czekając aż dysk "zasili" system antywirusowy. Oczywiście w momencie gdy inne programy próbują uzyskać dostęp do dysku cały proces trwa dłużej.

Jeżeli więc chcemy przeskanować cały system, co oznacza wyliczenie sygnatury dla każdego pliku, musimy się liczyć z tym, że proces ten może przebiegać bardzo wolno.

Jednak w przypadku niektórych systemów AV sprawa ma się znacznie gorzej, ponieważ wykonują one dodatkową pracę podczas skanowania każdego z plików. Zamiast po prostu umieć odpowiedzieć na pytanie, "Czy sygnatura przetwarzanego obecnie pliku znajduje się w bazie?" i otrzymać natychmiastową odpowiedź proces przebiega mniej więcej tak:

Załóżmy, że nasz AV właśnie przetwarza plik, którego sygnatura jest następująca:

267,947,292,070,674,700,781,823,225,417,604,638,969 - nazwijmy ją S.

Czy S jest równe 221,813,778,319,841,458,802,559,260,686,979,204,948?

Jeżeli tak, plik jest złośliwym oprogramowaniem.

Czy S jest równe 251,101,867,517,644,804,202,829,601,749,226,265,414?

Jeżeli tak, plik jest złośliwym oprogramowaniem.

Czy S jest równe 311,677,264,076,308,212,862,459,632,720,079,837,243?

Jeżeli tak, plik jest złośliwym oprogramowaniem.

...

Czy S jest równe 11,701,885,383,227,023,807,765,753,397,431,618,256?

Jeżeli tak, plik jest złośliwym oprogramowaniem.

W źle zoptymalizowanych systemach pytanie zadawane jest dla każdego złośliwego programu posiadającego określoną kryptograficzną sygnaturę.

Takie podejście nie jest odpowiednie w przypadku dzisiejszego problemu z niebezpiecznym oprogramowaniem. Zobaczmy dlaczego.