Details und Analyse
Mögliche Ciphermechanismen für Shellcodes
In bisher bekannten polymorphen Shellcodes werden zur Verschlüsselung
XOR Verknüpfungen mit ein oder mehr Byte Schlüssel und
diverse andere umkehrbare Operationen wie ADD, SUB, ROL, ROR, INCR,
DECR durchgeführt. Einen guten Ansatz dazu stellt die Mutation
Engine von CLET bereit. CLET generiert unterschiedliche Decipher
Routinen und deshalb wird kein Code zwischen den Instruktionen eingefügt,
da sich jedes Mal die verwendeten Register, die Abfolge der Instruktionen
und die Type der Instruktionen (ADD, XOR, ROR,...) ändert.
Eine alleinige Anwendung von XOR mit einer fixen Schlüssellänge
ist nicht genug.
Ein trainiertes neuronales Netzwerk kann mit einer äußerst
guten Erfolgsrate die Decipher Routinen von CLET erkennen. Unklar
ist allerdings bis jetzt ob auch der von CLET verschlüsselte
Shellcode erkannt werden kann (wird noch untersucht). Hier in dieser
Arbeit sollen andere mögliche Ciphermechanismen für Shellcodes
geprüft werden. Polymorphismus in CLET durch XOR, ADD und ROT
erzeugt soll hier durch einen einfachen Cipher Algorithmus erzeugt
werden. Es ist dadurch mit hoher Wahrscheinlichkeit sichergestellt,
dass der verschlüsselte Shellcode selbst nicht erkannt werden
kann. Die Herausforderung besteht darin, dass die Decipher Engine
des Shellcodes polymorph gestaltet wird um den Ansatzpunkt für
herkömmliche Erkennungsmechanismen zu nehmen.
Analyse von polymorphem
Shellcode und polymorphen Viren unter Win32
Windows basierte Shellcodes beinhalten verschiedene Module und
es gibt mehrere Möglichkeiten die benötigten Funktionen
umzusetzen. Durch die Verwendung von System calls muss ein Übergang
vom Usermode in den Kernelmode vollzogen werden. Deshalb wird zunächst
die kernel32.dll gesucht um die Symbol Adressen der verwendeten
Funktionen ausführen zu können bzw. nicht geladene DLL's
nachladen zu können. Für all diese Prozeduren gibt es
verschiedene Ansätze, wie PEB, SEH oder TOPSTACK.
Es sind bereits eine vielzahl von polymorphen Generatoren bei Viren
analysiert worden. Eine Kombination dort verwendeter Methoden scheinen
sich gut bei der Generierung von polymorphen Shellcode zu eigenen.
Generatoren von Viren verwenden polymorphe Compiler, Instruction
Substitution, zwei Layer Verschlüsselung, Einfügen von
fortgeschrittenen NOP Instruktionen. Ältere, wie die Trident
Polymorphic Engine wurden durch komplexe Generatoren ergänzt
sowie ersetzt.
Es steht hier auch zur Frage ob die Decipher Routine anderer Algorithmen
besser, bzw. anders, mutiert werden kann, so dass möglicherweise
das neuronale Netzwerk diese nicht mehr erkennen kann. Cipher Algorithmen
weisen mehr Instruktionen auf und bieten deshalb eine Vielzahl an
möglichen Mutationen.
Referenzen
[1] Phrack
P61-0x09 Polymorphic Shellcode Engine
[2] Phrack
P49-14 Smashing the stack for fun and profit
[3] The
Metasploit Project
[4] Advanced
Polymorphic Worms evading IDS by Blending in with Normal Traffic
[5] SNORT - The Open
Source Network Intrusion Detection System
[6] NOLogin
- Understanding Windows Shellcode
[7] The Shellcoder's Handbook: Discovering and Exploiting Security
Holes, Jack Koziol, David Litchfield et al, Wiley Publishing,
Inc., 2004
[8] A
shellcode mutation Engine (ADMmutate)
[9] VX Information
[10] VX Heavens |