stankovic ::Da se vratimo na temu ili barem ono što je ostalo od nje, ostavimo misteriozni Autorun virus po strani.
Našao sam odgovor na moje pitanje. Ne koriste se baš klasični regularni izrazi već se traže pattern-i na nivou bajtova.
http://en.wikipedia.org/wiki/Virus_signature#Self-modification
Sad, javlja se problem koji je po meni očigledan, kako naći pattern koji je jedinstven. Tj. kako biti siguran da takav pattern nema i neki potpuno čist program?
Ne samo to... Ako AV ima milione definicija, to znači da treba za svaki fajl da proverava jedan po jedan pattern?
Kada se pravi patern nekog virusa (fajl-infektora), onda ga pustis na test-sistemu da se replicira (inficira legitimne programe), pa onda potrazis sta je zajednicko za sve replike.
Kada se radi patern za trojance i ostale tipove koji su samostalni fajlovi, onda uspesnost paterna zavisi od umeca tipa koji je uradio analizu.
Problem nastaje recimo kod virusa (fajl-infektora) koji se menjaju izmedju replika (morphing):
http://en.wikipedia.org/wiki/Metamorphic_code
http://en.wikipedia.org/wiki/Polymorphic_code
http://en.wikipedia.org/wiki/Self-modifying_code
Kod samog ugradjivanja u legitiman program, virus moze da se doda na pocetak programa (prepender) ili na kraj programa (appender), i oni su relativno laki za ciscenje.
Problem je sa virusima koji ispresecaju program na mali milion delova, pa sebe ugrade kroz ceo originalni program (imas medju onim linkovima sa wikipedije link ka ZMistu).
Mozes da zamislis da on treba da proskenira ceo kod originalnog programa, da preformulise sve skokove u programu i da na kraju ponovo linkuje program sa sve injektovanim malicioznim kodom.
Ne znam koliko se ko razume u programiranje, ali ovo je posao za koji je potreban genije.
Patern je prilicno grub nacin za detekciju, posto male promene u paternu (morphing) cine sam patern neupotrebljivim.
Isto tako, FP-ovi su lako moguci.
Zamislite definiciju (patern):
"Ako se na adresi $12345 nalazi podatak $03 i na sledecoj poziciji se nalazi $78, onda je to XYZ trojanac".
Prvo, trebalo bi definisati na koje tipove fajlova se definicija odnosi.
Recimo da je to trojanac, znaci da je u pitanju izvrsni fajl (EXE, DLL).
Ako to ne bi bilo definisano, onda bi TXT fajl koji slucajno sadrzi te podatke na tim pozicijama u fajlu izazvao FP (sto me podseti na Kaspersky iz njegovih ranih dana).
Drugi nacin za paterne su hashevi (MD5, CRC32 itd):
"Ako je CRC32 hash skeniranog fajla, za adrese $1000 do $2000 jednak 345AC123, onda je to XYZ trojanac"
I ova metoda ima iste mane kao i gornja, s razlikom da je manja mogucnost za FP jer se ispituje veci opseg podataka, ali je zato sporija.
Ni jedna od gornjih metoda nije otprona na morphing, pa ni na wrappere (packeri, protektori itd.)
E sada, kada smo spomenuli wrappere, neki antivirusi ce da naprave posebne definicije za malware spakovan X wrapperom, pa Y wrapperom itd, dok ce neki drugi pokusati da skinu wrapper, pa da proskeniraju malware u izvornom obliku (cime gorespomenuti paterni ne gube na vaznosti jer su ponovo upotrebljivi).
Problem je sto neki wrapperi, zbog svoje konstrukcije, kod raspakovanja svog tovara raspakuju samo izvrsne sekcije programa bez headera, pa time cine nevazecim paterne kod kojih su offseti uradjeni u odnosu na apsolutni pocetak programa (sto podrazumeva MZ i PE headere itd.)
Komplikovano...
Taman neki AV napravi finu bazu definicija (paterna), kada se neko seti da napravi neki pomak zbog kojeg cela ta baza postane neupotrebljiva.
Za neke AV progame postoje cak i programi koji umeju da analiziraju njihove definicije i da u njima nadju patern za odredjeni malware.
Tako losi momci nalaze kako neki AV nalazi njihov malware, pa u svom malwareu promene samo toj deo koji se nasao u paternu tog AV programa.
|