Egg Hunting
Egg Hunting bezeichnet die Suche nach einer zuvor festgelegten Zeichenfolge im Adressbereich eines Prozesses, um die Ausführung von Shellcode (Befehle, um einen Prozess oder ein System zu manipulieren) an der Speicheradresse der Zeichenfolge zu starten.
Der Begriff des Egg Hunting ist in der Fachliteratur nicht einheitlich definiert. Alle Definitionen enthalten jedoch, dass ein Shellcode aufgrund dessen Größe nicht vollständig im Speicherbereich eines Prozesses vollständig unterzubringen ist. So sind mindestens zwei Shellcodes im Adressbereich eines Prozesses zu platzieren. Zuerst ist der umfangreichere Shellcode mit dem Erkennungsmerkmal der Zeichenfolge (das "Egg") zu platzieren, um anschließend durch einen weiteren Shellcode die Ausführung des umfangreicheren Shellcodes an der Speicheradresse des "Egg" zu veranlassen.
Implementation des Shellcodes in zwei Schritten
Die direkte Ausführung eines Shellcodes ist in der Praxis häufig nicht möglich, da der vom Betriebssystem zugewiesene Adressbereich eines Prozesses entweder zu klein ist, um den gesamten Shellcode unterzubringen, oder dem Angreifer die vom Betriebssystem reservierten Speicheradressen eines Prozesses nicht bekannt sind. Für den Angreifer bedeutet das, den Angriff auf den Prozess mit wenigen Daten sehr effizient und in mindestens zwei Schritten mit verschiedenen Shellcodes auszuführen.
Im ersten Schritt wird versucht, den umfangreichen Shellcode mit den tatsächlichen Befehlen, um Zugriff auf das System zu erlangen, im Adressbereich des Prozesses zu platzieren. Dieser Shellcode wird zu diesem Zeitpunkt nicht ausgeführt, enthält aber als Erkennungsmerkmal eine definierte eindeutige Zeichenfolge, die als "Egg" bezeichnet wird.
Im nächsten Schritt wird versucht, einen weiteren Shellcode mit geringem Funktionsumfang im Adressbereich des Prozesses einzuschleusen. Dieser Shellcode durchsucht lediglich die zugewiesenen Speicheradressen des Prozesses nach der Zeichenfolge des "Egg" mittels Systemaufrufe[1] des Betriebssystems, die als Rückgabewert den Inhalt der jeweiligen Speicheradresse liefern.[2] Entspricht der Rückgabewert der Zeichenfolge des "Egg", so ist die Speicheradresse des Shellcodes aus dem ersten Schritt gefunden.[3] Somit kann der umfangreiche Shellcode aus dem ersten Schritt über das Prozessorregister EIP[4] durch die ermittelte Speicheradresse aufgerufen werden.[5] Dieser Suchvorgang wird als "Egg Hunting" bezeichnet. War auch die zweite Stufe des Angriffs erfolgreich, besitzt der Angreifer Zugriff auf das System.
Grundlage des Egg Hunting: Buffer Overflow
Egg Hunting nutzt die Prinzipien des Buffer Overflow, um bei einem Prozeduraufruf über Eingabeparameter gezielt auf den Speicherbereich einer Variablen (dem Puffer) zuzugreifen und diesen mit nicht vorhergesehenen Daten zu überschreiben.[6] Dabei wird auch versucht, die Rücksprungadresse des Prozeduraufrufs zu überschreiben, um die Ausführung des Shellcodes an der Speicheradresse des "Egg" zu veranlassen.[7] So kann ein Prozess in einen nicht vorgesehenen Zustand des Prozesses versetzt werden, was dem Angreifer schließlich Zugang zum System im Benutzerkontext des Prozesses ermöglicht.
Um die Angriffsmöglichkeiten des Buffer Overflows nutzen zu können, wird ein Prozess im Arbeitsspeicher benötigt, der das Ausführen von Befehlen mittels Shellcode aufgrund einer Sicherheitslücke von Prozess oder Betriebssystem zulässt. Als angreifbare Prozesse kommen häufig Prozesse in Betracht, die über ein Netzwerk erreichbar sind (z. B. FTP- und Web-Server [8] [9] ).
Abwehrmaßnahmen zu Egg Hunting
Die Methodik des Egg Hunting basiert auf dem Angriffsmuster des Buffer Overflows, d. h. der Möglichkeit, in einen Puffer bzw. Speicherbereich Daten zu schreiben. Zur Vermeidung von Egg Hunting kommen daher die Schutzmechanismen in Betracht, die auch Buffer Overflows abmildern. Diese sind beispielsweise:[10]
- Address Space Layout Randomization (ASLR)
Speicheradressen werden bei dem Start des Betriebssystems zufällig vergeben. Identifizierte Speicheradressen sind nur bis zum nächsten Neustart des Systems gültig. - Stack Canaries
Zur Erkennung eines Buffer Overflows wird eine Zufallszahl beim Funktionsaufruf am Stack zwischen lokalen Variablen und der Rücksprungadresse eingefügt. Bevor der Rücksprung in die aufrufende Funktion erfolgt, wird der Wert der Zufallszahl überprüft. Ist der Wert der Zufallszahl verändert, fand ein Buffer Overflow statt und das Betriebssystem kann Gegenmaßnahmen ergreifen. - Data Execution Prevention (DEP)
Ist DEP betriebssystemseitig aktiviert, werden Programme bei der Ausführung überwacht, um sicherzustellen, dass sie nur den vorgesehenen Speicherbereich verwenden. Erfolgt der Zugriff auf eine nicht zulässige Speicheradresse, so wird der Zugriff vom Betriebssystem blockiert.[11]
Egg Hunting in der Praxis
Tools für die Ausführung von Penetration Tests bieten meist vorgefertigte Funktionalitäten für den Angriff bestimmter Systeme an, die lediglich die Angabe von IP-Adresse und Port des anzugreifenden Systems benötigen. Ein Beispiel für den zweistufigen Angriff ist die Verwendung der Module windows/meterpreter/reverse_tcp für den Verbindungsaufbau zum System des Angreifers (Reverse Shell) und windows/meterpreter_reverse_tcp zum Starten einer Shell auf dem angegriffenen System.[12]
Die auszuführenden Befehle des Shellcodes und die Zeichenfolge des "Egg" werden häufig mit Skriptsprachen wie Perl oder Python zusammengestellt. Damit die Zeichenfolge möglichst individuell ausfällt, wird ein Begriff gewählt, i. d. R. doppelt eingefügt und mit zufälligen Werten im Hexadezimalformat versehen.
Perl:
$shellcode = "UniqueEggUniqueEgg\x40\x40\x40\x40";
Python:
shellcode = ("UniqueEggUniqueEgg\x40\x40\x40\x40")
Literatur
- Eckert, Claudia: IT-Sicherheit. Konzepte - Verfahren - Protokolle. 10. Auflage. De Gruyter Studium, Berlin 2018, ISBN 978-3-11-055158-7.
- Kofler, Michael et. al: Hacking & Security. Das umfassende Handbuch. Rheinwerk Verlag, Bonn 2018, ISBN 978-3-8362-4548-7.
- Messner, Michael: Hacking mit Metasploit. Das umfassende Handbuch zu Penetration Testing und Metasploit. 3. Auflage. dpunkt.verlag, Heidelberg 2018, ISBN 978-3-86490-253-0.
Weblinks
- https://blog.rapid7.com/2015/03/25/stageless-meterpreter-payloads/
- https://www.corelan.be/index.php/2010/01/09/exploit-writing-tutorial-part-8-win32-egg-hunting/
- https://www.exploit-db.com/docs/english/18482-egg-hunter---a-twist-in-buffer-overflow.pdf
- https://medium.com/@notsoshant/windows-exploitation-egg-hunting-117828020595
- https://www.secpod.com/blog/hunting-the-egg-egg-hunter/
- http://www.securitysift.com/windows-exploit-development-part-5-locating-shellcode-egghunting/
- https://www.lowlevel.eu/wiki/X86#Instruktionsregister
- http://www.winfaq.de/faq_html/Content/tip2000/onlinefaq.php?h=tip2323.htm
Einzelnachweise
- ↑ Ansari, Ashfaq: Egg Hunter; https://www.exploit-db.com/docs/english/18482-egg-hunter---a-twist-in-buffer-overflow.pdf Abgerufen am 21.06.2020.
- ↑ Kumar, Prashant: Windows Exploitation: Egg Hunting; https://medium.com/@notsoshant/windows-exploitation-egg-hunting-117828020595, abgerufen am 21.06.2020.
- ↑ Messner, Michael: Hacking mit Metasploit. Das umfassende Handbuch zu Penetration Testing und Metasploit. 3. Auflage. dpunkt.verlag, Heidelberg 2018, ISBN 978-3-86490-253-0, S. 419.
- ↑ Ohne Verfasser: X86. Instruktionsregister; https://www.lowlevel.eu/wiki/X86#Instruktionsregister, abgerufen am 21.06.2020.
- ↑ Czumak, Mike: Windows Exploit Development – Part 5: Locating Shellcode With Egghunting; http://www.securitysift.com/windows-exploit-development-part-5-locating-shellcode-egghunting/ bgerufen am 21.06.2020.
- ↑ Kiran, Shashi: Hunting the Egg: Egg Hunter; https://www.secpod.com/blog/hunting-the-egg-egg-hunter/, abgerufen am 21.06.2020.
- ↑ Eckert, Claudia: IT-Sicherheit. Konzepte - Verfahren - Protokolle. 10. Auflage. De Gruyter Studium, Berlin 2018, ISBN 978-3-11-055158-7, S. 49.
- ↑ Vgl. 1.
- ↑ Vgl. 2.
- ↑ Kofler, Michael et. al: Hacking & Security. Das umfassende Handbuch. Rheinwerk Verlag, Bonn 2018, ISBN 978-3-8362-4548-7, S. 825.
- ↑ Ullrich, Frank: Datenausführungs-Verhinderung (DEP); http://www.winfaq.de/faq_html/Content/tip2000/onlinefaq.php?h=tip2323.htm, abgerufen am 21.06.2020.
- ↑ Reeves, OJ: Deep Dive Into Stageless Meterpreter Payloads; https://blog.rapid7.com/2015/03/25/stageless-meterpreter-payloads, abgerufen am 21.06.2020.