[+]Topic: Paper [+]Von: Perforin [+]Return: Paper
DaRk-CoDeZDaRk-CoDeZDaRk-CoDeZDaRk-CoDeZ DaRk- DaRk- Trust my Technolust! :) CoDeZ Perl Viren Coding II CoDeZ DaRk- by Perforin DaRk- www.vx.perforin.de.vu CoDeZ CoDeZ www.DarK-CodeZ.com DaRk-CoDeZDaRk-CoDeZDaRk-CoDeZDaRk-CoDeZ C:\> dir /W [Intro] [Whitelisting] [Outro] [AV_Umgehen] [Code_obscuring] [Metamorphismus] C:\> perl Intro/Intro.pl Hallo und Willkommen in meinem zweitem Teil, übers Perl Viren coden. Diesmal werde ich mehr auf die Theorie eingehen als euch einfach nur Codes in die Hände zu drücken.Hier lernt ihr was über "Whitelisting", "AV´s umgehen", "Code obscuring" sowie "Metamorphismus".Ich hoffe euch wird dieses Fortsetzung gefallen, auch wenn sie wohl n00b- unfreundlicher ausfällt ;) Greetings Perforin C:\> perl Whitelisting/whitelisting.pl Das schöne am whitelisting ist, dass wir es für unsere Zwecke benutzen können :) Also, im groben ist whitelisting eine Liste (Array, Hash) mit voreingestellten Werten.Diese Werte können alles mögliche sein.So können diese Werte zum Beispiel, URLS sein, Ordnernamen, etc.Alles wovon wir wissen dass es auf dem Zielsystem oder im Internet gibt.Klingt erstmal etwas verwirrend, doch benutze ich bei meinem Wurm "Epidemus" auch whitelisting.In meiner dort gebrauchten Whitelist, befinden sich Adressen zu exploitbaren Hosts, um das HiFriend Header Injection Exploit auszuführen. Der Vorteil dabei ist folgender, dass die Werte in der Whitelist von uns getestet wurden und auch aufrufbar oder in unserem Fall, exploitbar sind. @whitelist = ("opfer.org","opfer2.com","opfer3.com","opfer4.com"); @whitelist1 = ("C:\","C:\WINDOWS","C:\Programme","D:\"); Whitelisting kann also dazu beisteuern dass zum Beispiel ein Wurm sich schneller verbreiten kann, also ohne.Dies hängt natürlch auch von der Grösse unserer Whitelist ab.So kann diese aus einigen Zeilen in nem Array bestehen oder sogar eine ganze Datenbank umfassen. Dabei sind eurer Kreativität keine Grenzen gesetzt! Man kann davon ausgehen dass ein Wurm, mit einer ordentlichen Whitelist sich 5x schneller verbreiten könnte.Dies ist dann doch schon ein ganz gewaltiger Anstieg.Wenn die Whitelist abgegrast ist,so müssen wir danach auf anderem Wege, unsere Opfer infizieren. Ich habs so geregelt, dass zuerst die Whitelist gebraucht wird um das Exploit auszuführen um Emails mit meinem Wurm drin zu verschicken.Wenn die Hosts in der Whitelist nichtmehr exploitbar sind, erst dann kommt die Google Engine zum Einsatz. Denkt daran, dass eine verbugte Überprüfung der Whitelist oder Unsinnige Werte in der Whitelist selber, euren Wurm, Bot, Virus zu Nichte machen kann. Doch normalerweise kann man bei sowas kaum Fehler machen... C:\> perl AV_Umgehen/av_umgehen.pl Heutzutage sind die AntiViren Softwares nicht mehr nur auf Signaturdatenbanken angeweisen, nein sie können etwas als Malware klassifizieren, allein durch das Verhalten der Software.Tja, doch auch hier gibt es eine Umgehungsmöglichkeit, die einfacher nicht sein könnte.Kennt ihr beim AV auch die Option, Ordner nicht abscannen zu lassen? :D Genau das, machen wir uns zu nutze!Als gutes Beispiel nehm ich hier mal Avira Antivir.Avira speichert die Exception Liste, Klartext in einer Datei namens AVWIN.INI. Diese finden wir im Ordner: %ALLUSERSPROFILE%\Anwendungsdaten\Avira\AntiVir PersonalEdition Classic Ganz am Schluss dieser Datei finden wir zum Beispiel folgendes: . . . [SKIPFILES] Path0=C:\Dokumente und Einstellungen\Besitzer\Desktop\Tools Wir brauchen also nichts weiter zu tun, als diesen Pfad zu kopieren um diesen anschliessend als Abladestelle für unsere Malware zu benutzen.Sicherheitshalber sollte man den Pfad noch abchecken, dass dieser nicht der Desktop ist, da dies eine Art Honeypot sein könnte.Auch wenn nicht, würde sich eine weitere Datei auf dem Desktop, die der User nicht kennt, doch etwas auffallen. Man sollte die Datei bei jedem Bootvorgang überprüfen, könnte ja sein, dass sich der Pfad im Laufe der Zeit mal ändert, und wenn bis dahin eure Malware irgendwie detected sein sollte, ist unser schöner Plan futsch ;) Wir können das natürlich auch so drehen, dass wir in die Datei einen weiteren Pfad hineinschreiben.AntiVir meckert da kein bisschen wenn wir daran rumfummeln! Die weiteren Einträge müssen nur weitergehend numeriert werden... . . . [SKIPFILES] Path0=C:\Dokumente und Einstellungen\Besitzer\Desktop\Tools Path1=C:\Programme Path2=C:\WINDOWS\system32 Path3=D:\ Leichter kann man uns das garnicht machen =) Wo andere AV´s diese Ausnahmen speichern, findet ihr am besten mit RegMon & FileMon raus.So hab ichs auch mit Avira gemacht.Jedoch solltet ihr zuerst immer im %ProgramFiles% Ordner des AV´s nachsehen und bei den Anwendungsdaten.Dort findet ihr oft viele interessante Dateien ;) C:\> perl Code_obscuring/code_obscuring.pl Da wir Perl Malware schreiben wollen und es nunmal eine Skriptsprache ist, ist der Source somit immer einsehbar, ausser vielleicht bei perl2exe oder dem PAR Modul.. obwohl die die Dateien meistens auch nur droppen... naja, aufjedenfall wollen wir das so nicht.Zwar kann man den Source einsehen, aber wir können unsere Malware auch so schreiben, dass sie nicht mit dem menschlichen Auge lesbar ist.Wir könnten so zum Beispiel Verschlüsselung einsetzen, oder einfach nur Perl schreiben dass man anfangs einfach nicht versteht was die einzelnen Zeilen machen.Code obscuring finden wir sehr oft bei JavaScript Code, die einen iframe zu Mpack, Neopack oder irgendwelchen anderen Exploit Tools öffnen. Ich zeig euch hier mal ein Ausschnitt aus meinem Wurm, wo er nen Ordner erstellen soll. . . ($virii,$xswyaq) = (basename($0),$ENV{'windir'}); mkdir("$xswyaq".chr(hex('5C')).chr(hex('73')).chr(hex('79')).chr(hex('73')).chr(hex('74')).chr(hex('65')).chr(hex('6D')).chr(hex('33')).chr(hex('32')).chr(hex('5C')).chr(hex('4D')).chr(hex('69')).chr(hex('63')).chr(hex('72')).chr(hex('6F')).chr(hex('73')).chr(hex('6F')).chr(hex('66')).chr(hex('74')).chr(hex('7B')).chr(hex('43')).chr(hex('6F')).chr(hex('72')).chr(hex('65')).chr(hex('7D')).chr(hex('5C')),0777); . . Jioa, also wer das einfach so lesen kann, dem kann ich nur gratulieren.Leider ist diese Methode nur nicht so sicher wie sie vielleicht aussieht.Jemand der nur etwas von Perl versteht, wird einfach das ganze wie folgt mit print ausgeben und dann zu folgender Ausgabe gelangen: print "Ausgabe: "."$xswyaq".chr(hex('5C')).chr(hex('73')).chr(hex('79')).chr(hex('73')).chr(hex('74')).chr(hex('65')).chr(hex('6D')).chr(hex('33')).chr(hex('32')).chr(hex('5C')).chr(hex('4D')).chr(hex('69')).chr(hex('63')).chr(hex('72')).chr(hex('6F')).chr(hex('73')).chr(hex('6F')).chr(hex('66')).chr(hex('74')).chr(hex('7B')).chr(hex('43')).chr(hex('6F')).chr(hex('72')).chr(hex('65')).chr(hex('7D')).chr(hex('5C'))"; Ausgabe: C:\WINDOWS\system32\Microsoft{Core} Trotzdem kann diese Methode die meisten Möchtegerns und Otto Normal Benutzer einfach schon überfordern!Der Kreativität sind bei den Methoden keine Grenzen gesetzt. C:\> perl Metamorphismus/metamorphismus.pl Laut Wikipedia gilt folgende Definition: "Dieser Computervirentyp verändert bei einer Ausführung die eigene formale Grammatik. Im Gegensatz zu polymorphen Viren, die nur die Gestalt des Codes (durch variable Verschlüsselung oder Permutation) ändern, wird bei dieser Technik der Virus temporär in eine Metasprache umgeschrieben (daher der Name), welche verändert wird, und danach wieder kompiliert wird. Diese Technik ist möglich, da die Assemblersprache für einen Befehl verschiede Möglichkeiten bietet, diesen auszuführen. Zum Beispiel kann der Befehl mov eax, 0x0 in xor eax, eax oder sub eax, eax umgewandelt werden. Da eine Mutation eine Veränderung der eigenen Grammatik bedeutet, kann man jede neue Generation als neuen polymorphen Virus ansehen. Daher sind metamorphe Viren viel schwerer zu erkennen als polymorphe. Beispiele sind Win32.ZMist, Win32.MetaPHOR oder Win32.SK. Obwohl diese Viren hochkomplex sind und vielen Antiviren Herstellern Probleme bereitet haben, sind sie vom theoretischen Standpunkt aus gesehen noch trivial." Wie gut dass es in Perl auch viele verschiedene Lösungen gibt um ein Ziel zu erreichen :D Doch das ganze ist nicht leicht zu coden obwohl es gegenüber ASM wohl wien Witz wirkt... Also, meine Idee war folgender, dass wir zum beispiel Schleifen beliebig ändern können, wieso haben wir wohl all diese Möglichkeiten? Das könnte etwa so aussehen: Primärer Source: for($count = 0;$count eq 20;$count++) { CODEBLOCK } Nach dem 1 Lauf: $count = 0; do { $count++; CODEBLOCK } until($count eq 20); Nach dem 2 Lauf: $count = 0; while ($count <= 20) { $count++; CODEBLOCK } Und so weiter.Bei der foreach Schleife müssten wir beispielsweise einen Array mit 20 Zeichen füllen und dann diese durchgehen.Wann welche Schleife gewählt wird, müsste man raten lassen per random() funktion. Das ganze erfordert aber schon ne Menge Erfahrung mit Perl um das ganze durch eine jeweils neue Schleife ersetzen zu lassen.Dazu könnten wir die Variabeln auch, bei jedem Lauf neu setzen lassen. Wie ihr seht, seht ihr nix!Ich hatte bis jetzt nur diese Überlegung und kann euch dafür auch keinen Code zeigen der metamorph ist... Auch könnten wir das Wichtige vom Virii in Subroutinen packen.Mit denen könnten wir nun folgendes machen, zuerst einmal den Namen der Subroutine bei jedem Lauf ändern lassen, sowie die Platzierung ändern. In etwa so: Primärer Source: &Code; &Code1; &Code2; sub Code { CODEBLOCK } sub Code1 { CODEBLOCK } sub Code2 { CODEBLOCK } Nach dem 1 Lauf: &qzwdn123; &oedue356; &lpoiw764; sub lpoiw764 { CODEBLOCK } sub oedue356 { CODEBLOCK } sub qzwdn123 { CODEBLOCK } Nach dem 2 Lauf: &456uerif; &039mbjuo; &007fhfds; sub 007fhfds { CODEBLOCK } sub 456uerif { CODEBLOCK } sub 039mbjuo { CODEBLOCK } Dabei gilt folgendes: +-------+----------+----------+ | Prim. | Lauf1 | Lauf2 | +-------+----------+----------+ |&Code |&qzwdn123 |&456uerif | |&Code1 |&oedue356 |&039mbjuo | |&Code2 |&lpoiw764 |&007fhfds | +-------+----------+----------+ Der Inhalt der Subroutinen bleibt der gleiche, doch verändert sich der Aufrufname sowie die Platzierung im Source selber nach jedem Lauf.Das ganze ist also eine verschmelzung von Polymorphismus sowie Metamoprhismus.Ich werde zusehen dass ich mal ein PoC schreibe und es dann veröffentliche.Jeder der Metamorphismus hinkriegt, dem kann ich nur Respekt zollen! Es gibt wohl noch sehr viele weitere Arten, die man benutzen kann um seinen Code meta/poly morph zu halten, aber dieses hier wollte ich euch schonmal so unterbreiten ;) C:\> perl Outro/Outro.pl Das wars auch schon wieder mit meinem Paper übers Perl Virii Coding. Ich hoffe dass ich euch hiermit einen Anstoss gegeben habe, selber neue Techniken zu entdecken und/oder diese hier in euren Codes zu verbauen.Vielleicht gibt es noch ein drittes Paper zum Thema, ich werd mal schaun was die Zeit so bringt... Ich wünsche euch allen noch viel Spass beim coden und lesen! Greetings to: SkyOut Sph1nX Neo2k8 ringwrath-4 SCUD JackT Und alle anderen! ############################## # Und dann sah ich von allen # Schöpfungen den Grausamsten # und Grässlichsten aller, # den Herrn über sie alle, # und ich wusste dass ich # Tod war! ############################## Written by Perforin | DarK-CodeZ.org | Welcome to the dark side of coding! C:\> exit