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. |