Virensignaturen

Hallo !
Ich hab mal ein paar Fragen zu Virensignaturen bzw. der Funktionsweise von Virenscannern.

(siehe Wikipedia Virensignaturen)

Zunächst also ein kleines Zitat auf das ich mich beziehen möchte:

Um eine Virensignatur zu erstellen, werden mehrere Exemplare eines Virus nach Mustern und Regelmäßigkeiten durchsucht, die speziell auf dieses Virus zutreffend sind. Das Prüfen mehrerer Exemplare ist nötig, da Viren häufig so programmiert sind, dass sie gewissermaßen mutieren können, ohne jedoch den eigentlichen Code zu verändern.


Meine Frage dazu ist wie diese Regelmäßigen Muster aussehen. Angenommen ich habe hier den Quellcode eines Virus der problemlos von meinem Virenscanner erkannt wird. Reicht es dann aus wenn ich sämtliche Bezeichner von sämtlichen Funktionen, Prozeduren, Variablen & Konstanten verändere, sodass dies vom Virenscanner nicht mehr erkannt wird, da es ja im wesentlichen eine Mutation ist.

Allerdings sieht der Virenscanner ja den Quellcode der exe nicht - sondern tut das vielleicht auf Assembly-Ebene (ist jetzt nur ne Mutmaßung). Wirkt sich diese Veränderung auch darauf aus, oder bleiben die grundlegenden Verhaltensmuster immer noch erkennbar ?

Ich nehme einfach mal an das meine Idee zu einfach wäre, darum hier mal gleich die Frage: Was macht eine nicht erkennbare Mutation aus ?
(Das könnte man vielleicht gut an Pseudo-Code erklären...)

Naja ich hoffe/bin mir sicher hier gibt es einige die mehr darüber wissen.
Bis dann,
freue mich auf Antworten.
 
Code:
Reicht es dann aus wenn ich sämtliche Bezeichner von sämtlichen Funktionen, Prozeduren, Variablen & Konstanten verändere, sodass dies vom Virenscanner nicht mehr erkannt wird, da es ja im wesentlichen eine Mutation ist.
nope, es ist keine Mutation, denn dem Compiler ist es egal, wie die einzelnen Variablen oder Prozeduren heißen - in einer Binary haben die keinen Namen, sondern bloß eine Adresse und die Programmlogik ändert sich auch nicht - ergo kommt derselbe Code raus. Und in der Regel liegen die Viren doch als Binarys vor. (Es sei denn, wir sprechen von Scriptviren - dann kann man diese natürlich schon durch Umbenennen von Variablen "mutieren" lassen ;) )
http://wiki.hackerboard.de/index.php/Kompiler
Zu den Mustern: manche Routinen sind "Plicht" und immer gleich, deswegen kommen sie 1) auch in anderer Malware vor und 2)werden sie bei der Mutation nicht verändert (z.B der "Mutieralgoritmus" an sich - hängt aber von dem Programmierer ab) . Man versucht also möglichst viele solche einzigartigen Routingen zu "isolieren", die bei jeder Infektion gleich bleiben um eine Infektion zuverlässig erkennen zu können. Kommen dann in einer Datei genug solcher Muster vor (Schwellwert ? k.A ob das benutzt wird, da die meisten AVs leider nicht Open Source sind ;) ), gilt sie als infiziert.

Mit Mutation ist imho auch eher gemeint, dass das Virus ohne eine neukompilierung (eher: assemblierung ;) ) sich verändert.
Und da haben Virenscanner immer noch ihre Probleme:
http://www.heise.de/newsticker/meldung/72459
http://www.heise.de/security/news/foren/go.shtml?read=1&msg_id=10326572&forum_id=96831

Wobei die "Definition" dieses Begriffs nicht eindeutig ist - am häufigsten steckt aber hinter einer "Mutation" eine Änderung im Quelltext und die nachfolgende Neukompiliereung/Assemblierung.

Was macht eine nicht erkennbare Mutation aus ?
Am besten eine umstrukturierung des Programmflüsses - damit könnte man gegen Heuristik ankommen und möglichst keine Regelmäßigkeiten. Da es aber nicht so einfach wäre, versucht man die nötigen, "gleichbleibenden" Codes möglichst klein und "allgemein" zu halten - denn ist die Bytefolge kurz und allgmein genug, besteht eine erhöhte Chance, dass sie auch in anderen, "normalen" Programmen vorkommt - und das wiederum macht die Signatur wertlos (wenn es zuviele Falschalarme gibt).

Als Beispiel: es gab mal einen Virus, welcher sich selbst mit irgendeinem Verfahren verschlüsselte (Algo kenne ich nicht mehr, könnte aber irgendwas "offizielles" mit einem sehr schwachem Schlüssel gewesen sein)).Und zwar mit einem Zufallspasswort und ohne es zu speichern. Beim Start entschlüsselte er sich (per Bruteforce) selbst. Das ganze war so gewählt, dass es nur paar Sekunden dauerte. Es ist zwar keine "wirkliche" Mutation", allerdings wird der größte Teil des Codes dadurch praktisch für die Signaturenerstellung nicht zu erfassen, so dass sich der Autor nur noch um die Mutation des Bruteforce-Codes kümmern musste (und das sind gar nicht so viele Befehle, wenn man es geschickt anstellt).
Ein anderer Ansatzt für Mutation: Junkkode. Es gibt bestimmte Befehle, die nichts machen, z.B XCHG EAX,EAX (vertausche Register mit sich selbst), einfache Sprünge, NOP (No opreations) und eigentlich eine Reihe mehr. Wenn man diese großzügig im eigenen Code verteilt, kann man bei der Mutation sie einfach vertauschen oder durch andere ersetzten - da sich nichts am Programmflüss ändert. Dadurch ändert sie die Bytefolge und letzendlich die Signatur. Die Kust hier ist es, die relevanten Codeblöcke möglichst klein zu halten ;)


Soviel ist mir zumindest eingefallen ;) (Achtung: es ist weder aktuell noch vollständig. Auch ist mir unbekannt, wie in den heutigen Zeiten die AV ihre Signaturen erstellen bzw . diese genutzt werden.Also diese Information nur mit Vorsicht "genießen". )
 
wow ! Danke, das war schon viel mehr als ich mir erhofft hatte.
Btw. find ich den Einfall vom gecrypteten Virus der sich selbst brute-forced genial^^
 
Zurück
Oben