MCSoft Security Solutions
 
Home
Projekte
Überblick

Netzwerk
Shellcodes

Details und Analyse
Detektierung


MCSoft Projekt - Polymorpher Shellcode unter Win32

Detektierung

Erzeugen von polymorphem Shellcode für Win32
Auf Basis der Ergebnisse aus Punkt 1 und Punkt 2 sollen verschiedene mögliche Ciphermechanismen für Shellcodes implementiert werden. In Anlehnung an CLET sollten hier ebenfalls vielfach unterschiedliche Decipher Routinen generiert werden. Zunächst ist dazu in der NOP Zone eine zufällige Abfolge von Instruktionen mit 1, 2, 3 Byte zu generieren. Dadurch, dass man nicht weiß wo man in dieser Zone landet, ist es wichtig, dass der erzeugte Code davon unabhängig ausführbar bleibt. Dann wird der Shellcode mit einer zufälligen Methode (mehr als nur XOR) verschlüsselt und die Decipher Routine wird zufällig generiert. Zwischen den Bytes der Decipher Routine sollten Instruktionen eingefügt werden, die irgendetwas tun, ohne jedoch die Entschlüsselung zu behindern. Dazu können beispielsweise die nicht verwendeten Register herangezogen werden. Es sind nicht notwendigerweise nur ein Byte Operationen. Es ist wichtig, dass sich jedes Mal bei der Generierung der Decipher Routine die verwendeten Register, die Abfolge der Instruktionen und die Type der Instruktionen (ADD, XOR, ROR,...) ändert. Eine lange Return Zone kann einfach durch beispielsweise Datamining Methoden gefunden werden. Um diese Erkennung einer langen Return Zone zu vermeiden kann man zwischen Shellcode und Return Zone Bytes hinzufügen. Diese Bytes werden entweder zufällig ausgewählt oder durch eine Analyse des normalen Netzwerkverkehrs ausgewählt. Zum Abschluss wird die Return Zone so wie in ADMmutate in den niedrig gewichteten Bits verändert.

Erkennung von polymorphem Shellcode unter Win32
Eine signaturbasierte Erkennung, wie sie bei nicht verschlüsselten Shellcodes angewendet werden kann für polymorphe Shellcodes nicht verwendet werden. Die Erkennung durch Signaturen wird durch den mutierenden Code verhindert. Allgemein besteht polymorpher Shellcode aus folgenden Bereichen: Komplexe NoOPeration Zone, DecypherRoutione, Encrypted Shellcode und Bytes aus der normalen Netzwerkkommunikation, und dem Return Bereich.
Für die Suche nach polymorphen Shellcodes kommen komplexe Mechanismen zum Einsatz. Dies bringt einen hohen Rechenaufwand mit sich, vor allem wenn der Transfer von Netzwerken mit großem Datenvolumen beobachtet werden soll. Hierfür kann ein sich bereits bewehrtes Multiphasen Detektierungssystem eingesetzt werden, dieses kombiniert Standardansätze mit maschinellem Lernen. Im Multiphasen Ansatz wird ein simpler Mechanismus in der ersten Phase angewendet und eliminiert dadurch schon mal einen großen Prozentsatz des Datenvolumens. Die Daten die aus der ersten Phase als suspekt hervorgehen werden in den nachfolgenden Phasen genauer überprüft.
Die polymorphe Shellcode Erkennung soll in einem Snort Plugin implementiert werden. Die Engine wird in C implementiert und soll verwendet werden um den zuvor generierten polymorphen Shellcode zu erkennen. Bei Snort handelt es sich um ein Open Source IDS, welches weit verbreitet ist.