Archiv verlassen und diese Seite im Standarddesign anzeigen : Heuristik
Hi..
ich bin seit einigen Tagen mit dem Thema Computerviren infiziert. Ich finde Viren einfach unheimlich faszinierend (was jetzt nicht heißt, dass ich vorhabe Viren zu schreiben)
Aber ist es heutzutage, wo ja die Techniken den AV-Firmen bekannt sind und via Heuristik bekämpft werden, die vx szene tot sein soll und der Trend laut diversen Internetseiten angeblich in Richtung Wurm geht überhaupt noch möglich einen Virus zu schreiben, der sich schön verbreitet... oder ist sowas extrem schwierig?!
Viele Grüße, Grandma
Hi grandma,
also ich würd nicht sagen, dass die VX Scene tot ist. Sie ist vielleicht nicht mehr so aktiv und groß, aber es gibt noch einige gute Crews.
Ich könnt dir jetzt hier so einiges schreiben, aber ich mach es mir etwas einfacher ;) Hier ist ein guter Artikel dazu. [1] Der dritte Artikel von oben dürfte dich interessieren ;)
Weiß jetzt nicht, ob das dort drin steht, aber die Heuristik ist so ein ding. Klar ist die gut, aber der Trend geht eher in die Verhaltenserkennung. Sprich was macht ein Programm? Öffnet es Ports, schreibt es sich in den Autostart, Greift es auf Systemdatein zu, kopiert es sich in Systemorder,... Das ganze ist zwar recht neu und noch in den Kinderschuhen, aber vieleicht wird ja was draus.
Was imho sehr gefährlich ist, ist Maleware die auf Virtualisierungstechniken basiert, bzw. sich diese zu nutzen macht. Diese Maleware zu erkennen ist nicht ganz so einfach, wenn man sie erstmal hat.
Viel Spass beim lesen und willkommen am Board ;)
neon
---
[1] http://hakin9.org/prt/view/pdf-artikel.html
Danke für die PDF :) hab mir grad alles durchgelsen.
Da bin ich ja beruhigt, dass es noch ein paar Vx'er gibt!
Solange man keine destruktiven Payloads in nem Virus implementiert ist ja ein Virus durch und durch ne tolle Sache ;)
Weiß jetzt nicht, ob das dort drin steht, aber die Heuristik ist so ein ding. Klar ist die gut, aber der Trend geht eher in die Verhaltenserkennung. Sprich was macht ein Programm? Öffnet es Ports, schreibt es sich in den Autostart, Greift es auf Systemdatein zu, kopiert es sich in Systemorder,... Das ganze ist zwar recht neu und noch in den Kinderschuhen, aber vieleicht wird ja was draus.
Also der Code wird jetzt nicht analysiert und erkannt, dass zum Beispiel int 21h (ok, dass ist inziwschen überkommen) gehookt wird.. gut man muss ja auch nicht unbedingt genau das programmieren, was dann der heuristik direkt in die Tasche spielt ne ;)
Ich dachte halt, dass die Heuristik inzwischen so gut geworden ist, dass die VX'er das Handtuch geworfen haben und lieber ka. was machen...
gruß grandma
Ich dachte halt, dass die Heuristik inzwischen so gut geworden ist,
das widerspricht aber irgendwie der Tatsache, dass die Kids auch noch heutzutage nur(!) mit einem Hexeditor ihren Shark oder Bifrost "undetected" machen können. Ok, inzwischen müssen sie auf solch hochkomplizierten Handlungen wie EP Verschiebung mittels Debugger und PE Editor umsteigen, was natürlich erstmal nach zig Videotuts schreit ;). Trifft man in einschlägigen Foren zur Hauf - und auch "Erfolgsberichte" oder Scanergebnisse.
Allerdings wird die von neon erwähnte "behavior" Taktik einem VX'er erstmal Kopfschmerzen bereiten, denn einige Grundfunktion muss man nutzen - oder wirklich kreativ sein.
Hi Danke für die Antworten :)
mmmmhh... ganz ehrlich, wie man mit einem PE-Editor umgeht weiß ich jetzt erhlich gesagt auch nicht, weil ich absoluter Neuling bin. Über die PE-Header will ich mich auf jeden Fall noch informieren.. aber ich lerne gerade fleißig assembler (nasm).. bin total gefesselt ;)
Allerdings wird die von neon erwähnte "behavior" Taktik einem VX'er erstmal Kopfschmerzen bereiten, denn einige Grundfunktion muss man nutzen - oder wirklich kreativ sein.
Meinst du damit Beispielsweise auch api hooking..
Also wenn man beispielsweise GetFileSize hookt um infizierte Dateien zu verschleiern, schreit dann gleich jeder mittelmäßig Virenscanner los?
Welchen assembler würdet ihr mir empfehlen? Um auf die Win Api zuzugreifen, wäre doch der masm32 am besten geeignet?
Gruß Grandma
PS: Sorry.. ich komm ein wenig vom Thema ab, aber ich will nicht extra nen neuen Thread aufmachen.
Meinst du damit Beispielsweise auch api hooking.. Naja, viel einfacher - wenn man FindFirst/NextFile zum durchsuchen nutzt und CreateFile/WriteFile zum schreiben ;). Wobei aber ich zugegebenermaßen eher an Trojaner dachte - es ist schon verdächtig, wenn ein Programm OpenProcess/WriteProcess/CreateRemoteThread aufruft.
Ansonten: NASM bietet eine bessere Kontrolle über das Ergebnis, MASM wiederum hat imho bessere API Unterstützung.
Ansonten: NASM bietet eine bessere Kontrolle über das Ergebnis, MASM wiederum hat imho bessere API Unterstützung.
Und FASM [1] versucht IMO beides zu verbinden, was meiner Meinung nach auch gelungen ist. :)
[1] http://flatassembler.net/
mmmh.. so ich hab jetzt dieses NASM Tutorial http://de.wikibooks.org/wiki/Assembler_%2880x86_Prozessor%29-Programmierung durch und verstanden...
Mein Ziel mit der Assemblerprogrammierung ist meine erkennbare Absicht (nein ich habe keine gefährliche scheiße vor!), sowie meine grundlegenden Kentnisse zu erweitern.
Ich seh mich einfach insgesamt mit einer riesen Wissenschaft für sich konfrontiert, die ich irgendwie schaffen muss...
Den Flat Assembler hab ich mir mal ein wenig angesehen und weiß jetzt beim besten willen nicht für was ich mich nun entscheiden soll (also mit welchem ich mehr lernen will)
Wie sollte ich jetzt am besten weitermachen? Erst mal selber irgendwelche mageren Dos Rumprobier Progrämmchen schreiben oder könnt ihr mir irgendein gutes Tutorial zu einem der beiden Assembler empfehlen...
Beratet mich ;)
Danke schonmal.. Grandma
PS: Ich hoff, dass ich hier nicht zu arg rumn00be, aber jeder fängt mal irgendwie an ne ;)
Zwischen den einzelnen Assembler-"Geschmäckern" gibt es eigentlich wenig Unterschiede. Man kann, wenn man eins drauf hat nahezu problemlos umsteigen.
Die feinen Unterschiede in der Syntax und Macro-capabilities sind einfach gewöhnungssache und jeder hat da seine Präferenz. NASM kriegt natürlich Pluspunkte bei Portability, aber wenn man erstmal mit der Win32 Programmierung anfangen möchte ist es Wurscht, bzw. eigentlich günstiger mit MASM oder FASM anzufangen.
Mach dir darum erstmal keine Sorgen. ;)
Wie gesagt, vermute ich mal du möchtest in Richtung Win32 Programmierung anfangen.
In diesem Falle empfehle ich "Iczelions Win32Asm Tutorials". Dazu gibt es von Joachim Rohde eine gute Übersetzung [1].
Auch kann ich das Buch von ihm empfehlen "Assembler - Grundlagen der Programmierung" [2]. Dort wird zwar noch auf das veraltete TASM eingegangen, parallel dazu aber auch MASM behandelt. Angefangen wird mit der klassischen DOS Programmierung und man lernt dort beispielsweise Interrupts kennen. Dann geht es aber schon recht schnell zu der Win32 Programmierung. Dort wird dann auch detailliert auf die Win32-API eingegangen.
Das Buch bietet meiner Meinung nach einen soliden Einstieg, welches dir als Sprungbrett dienen kann um weitere Assembler Ressourcen und Tutorials im Internet mit Leichtigkeit verstehen zu könnnen.
[1] http://www.joachimrohde.com/cms/xoops/modules/articles/index.php?cat_id=2
[2]
http://www.amazon.de/Assembler-Grundlagen-Programmierung-Joachim-Rohde/dp/3826614690
mmmh.. so ich hab jetzt dieses NASM Tutorial http://de.wikibooks.org/wiki/Assembl...Programmierung durch und verstanden...
(Tut mir Leid wenn ich jetzt wieder anfange etwas zu texten.
Mein Geschwafel bezieht sich auch nicht unbedingt nur auf dich. Bitte nicht auf den Schlips getreten fühlen.)
Hach..so war ich früher auch mal. ;)
(Ich möchte
Möglichst viele Tutorials auf einmal schnell verschlingen.
Nur irgendwie blieb ich mit vielen Halbweisheiten kleben, ich wusste viel und konnte nichts, oder konnte viel und wusste nichts?
"Wie werde ich zum Autodidakt?". Diese Frage habe ich mir, meiner Meinung nach viel zu spät gestellt. Ich habe einen langen Weg beschritten, bis ich es geschafft habe mir selbst etwas effektiv und nachhaltig beizubringen.
Ich habe mir eigene Lernregeln erstellt. Dazu gehört auch, nicht zuviel Input an einem Tag. Denke selber einige Schritte weiter. Was kann ich logisch konkludieren? Was habe ich heute gelernt, und kann ich es morgen wieder ohne Wissenslücken anwenden?
Immer häufiger liest man in Foren Hilferufe "Wie soll ich weitermachen? Was soll ich lernen und wie soll ich es lernen?". Das klingt wie ein Ruf nach dem Lehrer, dem Tutor oder Mentor, der einem alles breibringen soll, helfen soll.
Meiner Meinung nach kommt das von unserer Schule, bzw. eigentlich kann ich nur meine Erfahrungen hier reflektieren. Eigenständigkeit im Lernen wurde uns nie so wirklich beigebracht, zumindest hatte ich nicht das Gefühl, dass es so sein sollte. Obwohl es doch zu einer der Doktrinen des Gymnasiums gehört (?!). Jedenfalls musste ich mir erstmal selbst beibringen, wie ich mir selbst was beibringen kann. Nicht gerade trivial, wie ich finde. Aber es geht doch! Fühle mich für das kommende Studium so gerüstet wie nie zuvor, natürlich auch mit Respekt vor möglichen schwierigen und zermürbenden Phasen, die wohl einfach dazugehören.
Das wars schon. ;)
morpheus
19.02.2008, 22:39
Auf dem Gebiet der Malwareerkennung tut sich zwar immer wieder viel (zumindest lassen dies einen die AV-Hersteller glauben), allerdings gibt es bis heute keine wirklich gut funktionierende AV-Technologie. Heuristiken haben zwar grundsaetzlich viel Potenzial (Norton verwendet AFAIK zum Teil neurale Netze fuer Heuristiken), allerdings kann man diese einfach nicht als zuverlaessig bezeichnen.
ngeblich in Richtung Wurm geht überhaupt noch möglich einen Virus zu schreiben, der sich schön verbreitet... oder ist sowas extrem schwierig?!
Sehr einfach gesagt: Viren verbreiten sich nicht. Sie duplizieren sich und bleiben idR auf demselben Rechner - ausser sie werden aus Versehen auf ein anderes System kopiert. Wuermer verbreiten sich hingegen aktiv. Ihr Ziel ist es sich moeglichst effizient und rasch auf so vielen Rechnern wie moeglich einzunisten.
Passt jetzt zwar nicht ganz zum Thema aber "Rootkit Guru: AntiVirus Makes Me Do I"
https://www.buha.info/board/showthread.php?t=50880
vikingspirit
20.02.2008, 17:02
Heutzutage verlässt sich der Großteil der Virenscanner (leider) immernoch auf Signaturbasierte Verfahren.
Das heißt man "schaut" sich ein Virenstück an:
5B pop ebx
8D4B42 lea ecx, [ebx + 42h]
51 push ecx
50 push eax
50 push eax
0F014C24FE sidt[esp-02h]
und erzeugt aus den Opcodes eine "Signatur": 5B 8D 4B 42 51 50 50 0F 01 4C 24 FE
so... und dann sucht man in der Binary nach dieser Signatur. Das is simpelstes Stringmatching. Bei einem Treffer ist das Ding ein Virus sonst nicht. Wenn jetzt jemand hergeht und da einfach in seine Binary an der richtigen Stelle ein paar 90er (nop) einfügt. Wird der Virus von einem primitiven Scanner nicht mehr erkannt. Die Scanner-Hersteller sind ja auch nicht bescheuert, also gibt es fehlertolerante Suchstrategien, ausgefeiltere Patternmatchingalgorithmen etc. um sowas zu verhindern.
Problem: Die Suche darf auch nicht zu unscharf werden, sonst hat man zu viele falsche Positive.
Deswegen ist es meistens keine große Sache so lange an dem Code rumzuspielen bis er eben nicht mehr erkannt wird.
Ein völlig anderer Ansatz ist etwas von dem ich vor ein paar Wochen in einem Seminar gehört habe. Schlagwort: "Semantic Malware Detection".
Die Idee dabei ist:
- Man erstellt eine Spezifikation von schädlichem Verhalten (in einer Temporallogik)
- Man erzeugt aus dem Code einen Kontrollflussgraphen
Man benutzt Model-Checking um zu überprüfen, ob der Graph die Spezifikation erfüllt. Tut er das, ist es ein Virus.
Diese Herangehensweise ist viel mächtiger als Patternmatching und liefert sogar schon im akademischen Test sehr gute Resultate.
Nachteil des ganzen:
Es dauert länger als Stringmatching und es wird noch daran geforscht
-> noch nicht ganz Praxistauglich.
Näheres siehe z.B. hier:
Detecting Malicious Code by Model Checking (http://www7.in.tum.de/~katzenbe/download/mcode.ps.gz)
mfg vikingspirit
Ich bin inzwischen beim NASM hängen geblieben, nachdem ich eine
win32n.inc gefunden habe und schlag mich nun mit der WinApi rum.
wobei die ja mit einer guten Dokumentation recht einfach und
ziemlich praktisch ist... ich werde schon fast von Windows
indoktriniert oO
@Atho Bezüglich lernen ;)
Ich weiß was du meinst und fühle mich auch nicht auf den Schlips
getreten^^ geb dir da völlig recht!
Ich kann dich aber beruhigen.. Ich habe mir ein wenig Zeit gelassen und
jeden Tag nur 1 bis 2 Kapitel davon durchgelesen, sonst kann man
sich beim Assembler wirklich gar nichts merken...
@morpheus:
Der Unterschied zwischen Viren und Würmern ist mir durchaus bewusst
nur habe ich mich halt ungeschickt ausgedrückt ;)
@vikingspirit:
Klingt interessant, muss mir aber erst noch einen
Postscriptviewer installieren.
Das Polymorphzeuchs, von dem du da gesprochen hast ist einer der Gründe,
warum ich Assembler lerne.. ich finde es einfach faszinierend...
Danke für die vielen Antworten :)
Gruß Grandma
PS: Ganz n00bige Frage am Rande, aber wie zu Teufel kann man mit nasm die Länge
eines String erfahren. Ich schreib gerade eine IntToStr Prozedur^^
PS: Ganz n00bige Frage am Rande, aber wie zu Teufel kann man mit nasm die Länge
eines String erfahren. Ich schreib gerade eine IntToStr Prozedur^^
Der String endet mit 00. Wie man das dann implementiert, bleibt der eigenen Fantasie überlassen
mov edi,offset string
dec edi
xor eax,eax
LOOP_:
add edi,1
mov al,byte ptr[edi]
xor al,ah
jnz LOOP_
->in edi ist die länge
Damit es nicht ganz so OT ist:
API Hashs und Scans:
http://grn.0x33.de/board/viewtopic.php?t=1008&highlight=api+hash
http://grn.0x33.de/board/viewtopic.php?t=525&highlight=hash
der Vorteil: es lässt sich schwerlich vorhersagen, welche APIs aufgerufen werden. Für einen AV sollte es nur über eine Sandbox (Hooks usw) feststellbar sein.
PS: wegen Polymorphie: Es gab mal ein paar interessante Überlegungen seitens Chris Kaspersky diesbezüglich. Und wenn man seine Ausführung sich durch den Kopf gehen lässt und sich überlegt, was z.B in der "Softwareprotection" Branche zur Zeit passiert (Codevirtualisierung samt Virtual Machines), so kann man ruhig sagen, dass die ITW Viren selten über das "primitivste" aller Polymorphiestadien hinauswachsen - aber auch schon das bereitet den AVs doch große Probleme:
(eine größere Ausschweifung von mir: )
https://www.buha.info/board/showpost.php?p=373637&postcount=17
Und paar Heise links
https://www.buha.info/board/redirector.php?url=http%3A%2F%2Fwww.heise.de%2Fnew sticker%2Fmeldung%2F72459
https://www.buha.info/board/redirector.php?url=http%3A%2F%2Fwww.heise.de%2Fsec urity%2Fnews%2Fforen%2Fgo.shtml%3Fread%3D1%26msg_i d%3D10326572%26forum_id%3D96831
vikingspirit: ich hab mal einen seminarvortrag gehört zum thema scannen mittels modelchecking genau auch am Lehrstuhl vom Katzenbeisser gehört: Das Problem bei den Scannern ist (bzw. war vor 2-3 jahren), dass die ne Minute pro Datei brauchen... das ist imo nicht nur nicht "noch nicht ganz praxistauglich" sondern so.. gar nicht praxistauglich. Und schneller wird die erstellung des kontrollflussgraphen auch nur durch schnellere rechner...
vikingspirit
22.02.2008, 14:03
Also zu den Zeiten...
die Tabelle die er uns gezeigt hat sagt zumindest, dass die Laufzeiten sich im Bereich von ner halben Sekunde bis 2 Minuten bewegen. (Die Vortragsfolien sind etwa 2 Jahre alt)
Prinzipiell gilt auch:
- CTL Modelchecking ist PSPACE vollständig
- Algorithmus ist exponentiell in der Länge der Spezifikation
aber nur linear in der Größe des Modells
Dr. Katzenbeisser hat aber auch gemeint, dass das ganze Projekt etwas eingeschlafen sei in den letzten 2 Jahren aber sie es anscheinend jetzt wiederbeleben wollen. (mal schaun ob das was wird - er selber hat ja ab April eine Professur in Darmstadt)
mfg vikingspirit
Ich mag jetzt aber nochmal bei der Erkennung von Polymorphen Viren nachhaken..
Mein Virenscanner zumindest (Nod32) scannt auch den Arbeitsspeicher.. wenn nun der Virus entschlüsselt und Speicherresident irgendwo
im virtuellen Speicher eines Prozesses rumhängt, dann kann der Virus doch ganz leicht entdeckt werden!
Oder lieg ich da falsch..
Der Virus müsste sich doch dann immer wieder selbst ver-/entschlüsseln wenn er durch eine gehookte Api Funktion ausgeführt wird..
Aber dann fällt er ja auf, weil der Rechner deutlich langsamer werden müsste?!
Oder sind die Virenscanner einfach zu vorsinnflutlich?!
Gruß Grandma
Polymorph eher in dem Sinne, dass die Befehle/Opcodes dauerhaft umgestellt und umgeformt werden. Bei Protectoren wird das CodeMorphing und CodeVirtualizing genannt. D.h z.B dass bei einer Infektion eine andere Form aus den gegebenen Befehlen generiert wird.
Vielleicht interessiert es den einen oder anderen User hier:
Legendäre Gruppe von Virenprogrammierern aufgelöst (http://www.heise.de/newsticker/meldung/104797/from/atom10)
Gruß,
neon
Wenig Code - große Wirkung.
Jeder muß für sich selbst entscheiden, ob das an die öffentlichkeit MUß.
Leider werden die Verursacher jünger und die Einstellung dementsprechend.
Ich bin wohl zu alt für diesen Scheiß.
mmmhh..
ich finde es einfach faszinierend. Außerdem lernt man eine Menge dabei.
Ob man seine Codes veröffentlicht muss wirklich jeder für sich entscheiden...
Und von Trojanern, Keyloggern, dem Storm Worm o.Ä. scheiß, bei denen es nur ums illegale Geld beschaffen geht halte ich übrigens gar nichts. Da geht es ja nur noch ums Geld!
Grüße Grandma