- Exploit
-
Ein Exploit (englisch to exploit ‚ausnutzen‘) ist im EDV-Bereich eine systematische Möglichkeit die bei der Entwicklung eines Programms nicht berücksichtigt wurde und wobei mit Hilfe von Befehlsfolgen Sicherheitslücken und Fehlfunktionen von Programmen (oder ganzen Systemen) ausgenutzt werden. Das Ziel ist meist eine Manipulation um sich zu (weiteren) Ressourcen Zugang zu verschaffen oder Systeme zu beeinträchtigen. (DoS-Angriffe).
Inhaltsverzeichnis
Allgemeines
Ein Exploit wird oft auch nur zum Aufzeigen einer Sicherheitslücke geschrieben und dokumentiert. Damit soll erreicht werden, dass Softwarehersteller ihre Sicherheitslöcher schnell stopfen. Oft bezeichnet man die reine Beschreibung eines Exploits bereits als Exploit.
Exploits machen sich zum Beispiel die Tatsache zunutze, dass Computer mit Von-Neumann-Architektur, das sind nahezu alle Heim- und Bürorechner, nicht zwischen Programmcode und Nutzdaten unterscheiden. So wird zum Beispiel bei einem Pufferüberlauf der Code des Angreifers in einen nicht dafür vorgesehenen Speicherbereich geschrieben, wodurch die Ausführung der Anwendung manipuliert werden kann. Eine andere Möglichkeit sind Formatstring-Angriffe, bei denen ungefiltert Benutzereingaben an Formatierungsfunktionen wie
printf()
übergeben werden. Ein Angreifer kann oft eigenen Code zur Ausführung bringen, der ihm beispielsweise eine Shell mit den Privilegien der ausgenutzten Anwendung liefert.Man bezeichnet Exploits zumeist wie folgt:
- Lokale Exploits
- Remote-Exploits
- DoS-Exploits
- Command-Execution-Exploits
- SQL-Injection-Exploits
- Zero-Day-Exploits
Lokale Exploits können beim Öffnen an sich scheinbar völlig harmloser Dateien (zum Beispiel Bilddateien) aktiviert werden, sofern die dem Dateityp zugeordnete Anwendung durch fehlerhafte bzw. unsaubere Verarbeitung der Datei eine Sicherheitslücke aufweist.
Eine aktive Form des Exploits sind Angriffe aus dem Internet mittels manipulierter Datenpakete oder spezieller Datenströme auf Schwachstellen in Netzwerksoftware. Solche Exploits werden mitunter auch als Remote-Exploits bezeichnet.
Meist sind die ersten für eine bekanntgewordene Sicherheitslücke veröffentlichten Exploits sogenannte DoS-Exploits, die zwar die betroffene Anwendung überlasten, allerdings keine Ausführung von fremdem Programmcode und keine Privilegien-Eskalation beinhalten.
Command-Execution-Exploits kennzeichnen das Merkmal einer vom Angreifer steuerbaren Ausführung von Programmcode auf dem Zielsystem. Um ein solches Exploit erfolgreich zur Ausführung bringen zu können, muss der Programmierer über diverse Eigenheiten der Aufteilung des Speichers der Zielanwendung Bescheid wissen. Dieses Wissen bezieht er durch offene Quellen des Programmcodes oder durch bloßes Testen. Er muss seinen Code geschickt platzieren, um ihn zur Ausführung bringen zu können. Command-Execution-Exploits sind zumeist sehr gefährlich, da die betroffenen Anwendungen meist über erhebliche Rechte auf dem System verfügen und der Code des Angreifers mit eben diesen Rechten gestartet wird.
SQL-Injection-Exploits sind eine spezielle Art von Exploits und finden sich weitestgehend nur in Bezug auf Webanwendungen, die eine SQL-Datenbank nutzen.[1] Hierbei werden Anfragen in einer Schichtenarchitektur so gestellt, dass die fehlerhaft bzw. unsauber arbeitende Logikschicht Daten zurückliefert oder schreibt, die sie weder für den Lesezugriff oder den Schreibzugriff verfügbar machen sollte. Beispielsweise können Eingaben in einem Loginformular so gestaltet werden, dass die betroffene Anwendung einen ungültigen Benutzer dennoch erfolgreich einloggt.
Zero-Day-Exploit
Entdeckt eine Person eine Sicherheitslücke und meldet sie nicht dem Software-Hersteller, so wird die Schwachstelle der Software meist lange nach dem ersten Angriff bekannt.[2] Der Name des dabei genutzten Exploits leitet sich von dessen Alter ab: Die Entdeckung durch Entwickler oder Benutzer geschieht am oder meist nach dem „nullten Tag“ (englisch zero day). Entwickler haben damit effektiv keine Zeit, die Software und deren Nutzer zu schützen. Von Crackern werden Zero-Day-Exploits oft lange geheim gehalten, damit sie weiterhin ausgenutzt werden können. Unter der Hand werden Zero-Day-Exploits auch, je nach Komplexität, Umfang und Marktwert des betroffenen Systems unter Crackern gehandelt, bzw. den Herstellerfirmen zu hohen Summen angeboten.[3]
Ein Angriff über einen Zero-Day-Exploit wird als Zero-Day-Attacke bezeichnet. Zero-Day-Attacken sind effizient, weil sie schnell und oft großflächig, automatisiert eine neue Sicherheitslücke ausnutzen können, bevor für die betroffenen Systeme Patches bereitstehen.
Präventiv versuchen Experten mit verschiedenen Testmethoden, Sicherheitslücken im Voraus aufzuspüren und dem Software-Hersteller aufzuzeigen, dies wird aber in Fachkreisen meist heftig kritisierten, da sich die Tester oftmals nicht im legalen Rahmen bewegen oder gegen Richtlinien von Herstellern verstoßen.[4]
Gegenmaßnahmen
Es gibt keine technische Lösungen. Oftmals wird jedoch der Speicherschutz als eine solche genannt, das ist jedoch nicht korrekt, denn eingefrorene Speicher können mit unterschiedlichen Programmen ausgelesen werden. Ebenso kann mittels Intrusion Detection Systemen ein Angriff auf Basis bestehender Funktionalitäten festgestellt oder mittels Intrusion Prevention Systemen auch verhindert werden, jedoch schützt so ein System ebenso wenig gegen das Ausnutzen eines (systematischen, unbekannten) Fehlers in einer Software. Das Grundproblem ist stets unsaubere Programmierung bzw. ein systematisch, meist sehr komplexer Fehler in der Architektur des Programms oder eines ganzen Systems. Die einzige Lösung ist, die durch Verarbeitungsfehler entstehenden Sicherheitslücken schon bei der Entwicklung zu vermeiden, was bei heutigen Systemen aber praktisch fast nicht möglich ist. Auch Managed Code bietet einen gewissen Schutz, so werden zum Beispiel Pufferüberläufe effektiv verhindert. Dies ist aber, wie vorher schon erwähnt, nur ein Teil zur Lösung der Gesamtproblematik. Komplexe Systeme, von unterschiedlichen Herstellern und Sublieferanten, bestehend aus Hard- und Software erschweren die Fehlerfindung während der Entwicklung enorm. Hier wird dann meist noch im Betrieb, weit nach der Beta-Phase, die Fehlersuche fortgeführt, dies erfolgte auch bei extrem kritischen Systemen, wie dem Boardcomputer des Space-Shuttles[5]
Siehe auch
Einzelnachweise
- ↑ SQL Injection. PHP.net. Abgerufen am 19. August 2011.
- ↑ Zero-Day-Exploit. iruslist. Abgerufen am 18. November 2011.
- ↑ The legitimate vulnerability market. Independent Security Evaluators, Charles Miller, Ph.D. Abgerufen am 18. November 2011.
- ↑ Metasploit schreibt Kopfgeld auf Exploits aus. Heise. Abgerufen am 18. November 2011.
- ↑ Sicherheit und Zuverl¨assigkeit der Computersysteme des Space Shuttles. Malte Diehl. Abgerufen am 17. November 2011.
Wikimedia Foundation.