[+]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