Was ist Fuzzing?

Was ist fuzzing

Einleitung: Was ist Fuzzing?

2014 chinesische Hacker in Community Health Systems gehackt, eine gewinnorientierte US-Krankenhauskette, und stahl die Daten von 4.5 Millionen Patienten. Die Hacker nutzten einen Fehler namens Heartbleed aus, der einige Monate vor dem Hack in der OpenSSL-Kryptografiebibliothek entdeckt wurde.

Heartbleed ist ein Beispiel für eine Klasse von Angriffsvektoren, die es Angreifern ermöglichen, auf ein Ziel zuzugreifen, indem sie falsch formatierte Anfragen senden, die gültig genug sind, um vorläufige Prüfungen zu bestehen. Während Fachleute, die an verschiedenen Teilen einer App arbeiten, ihr Bestes geben, um ihre Sicherheit zu gewährleisten, ist es unmöglich, an alle Eckfälle zu denken, die eine App beschädigen oder während der Entwicklung anfällig machen könnten.

Hier kommt das „Fuzzing“ ins Spiel.

Was ist ein Fuzzing-Angriff?

Fuzzing, Fuzz-Testing oder ein Fuzzing-Angriff ist eine automatisierte Software-Testtechnik, die verwendet wird, um zufällige, unerwartete oder ungültige Daten (als Fuzz bezeichnet) in ein Programm einzuspeisen. Das Programm wird auf ungewöhnliches oder unerwartetes Verhalten wie Pufferüberläufe, Abstürze, Speicherlecks, Thread-Hängen und Lese-/Schreibzugriffsverletzungen überwacht. Das Fuzzing-Tool oder der Fuzzer wird dann verwendet, um die Ursache des ungewöhnlichen Verhaltens aufzudecken.

Fuzzing basiert auf der Annahme, dass alle Systeme Fehler enthalten, die darauf warten, entdeckt zu werden, und dass ihnen genügend Zeit und Ressourcen dafür gegeben werden können. Die meisten Systeme haben sehr gute Parser oder verhindern die Eingabevalidierung Cyber-Kriminelle davon abhalten, hypothetische Fehler in einem Programm auszunutzen. Wie bereits erwähnt, ist es jedoch schwierig, alle Eckfälle während der Entwicklung abzudecken.

Fuzzer werden in Programmen verwendet, die strukturierte Eingaben entgegennehmen oder eine Art Vertrauensgrenze haben. Beispielsweise würde ein Programm, das PDF-Dateien akzeptiert, eine gewisse Validierung haben, um sicherzustellen, dass die Datei eine .pdf-Erweiterung und einen Parser zum Verarbeiten der PDF-Datei hat.

Ein effektiver Fuzzer kann Eingaben erzeugen, die gültig genug sind, um diese Grenzen zu überschreiten, aber ungültig genug sind, um ein unerwartetes Verhalten weiter unten im Programm zu verursachen. Dies ist wichtig, da es nicht viel bedeutet, nur an den Validierungen vorbeizukommen, wenn kein weiterer Schaden verursacht wird.

Fuzzer entdecken Angriffsvektoren, die SQL-Injection, Cross-Site-Scripting, Buffer Overflow und Denial-of-Service-Angriffen sehr ähnlich sind und solche umfassen. Alle diese Angriffe sind das Ergebnis der Einspeisung unerwarteter, ungültiger oder zufälliger Daten in ein System. 

 

Arten von Fuzzern

Fuzzer können anhand einiger Merkmale klassifiziert werden:

  1. Ziele angreifen
  2. Fuzz-Erstellungsmethode
  3. Bewusstsein für die Eingabestruktur
  4. Kenntnis der Programmstruktur

1. Ziele angreifen

Diese Klassifizierung basiert auf der Art der Plattform, die der Fuzzer zum Testen verwendet. Fuzzer werden üblicherweise mit Netzwerkprotokollen und Softwareanwendungen verwendet. Jede Plattform hat eine bestimmte Art von Eingaben, die sie empfängt, und erfordert daher unterschiedliche Arten von Fuzzern.

Wenn es beispielsweise um Anwendungen geht, finden alle Fuzzing-Versuche an den verschiedenen Eingabekanälen der Anwendung statt, wie z. B. der Benutzeroberfläche, dem Befehlszeilenterminal, Formularen/Texteingaben und Datei-Uploads. Daher müssen alle vom Fuzzer erzeugten Eingänge zu diesen Kanälen passen.

Fuzzer, die sich mit Kommunikationsprotokollen befassen, müssen sich mit Paketen befassen. Fuzzer, die auf diese Plattform abzielen, können gefälschte Pakete generieren oder sogar als Proxys fungieren, um abgefangene Pakete zu modifizieren und sie wiederzugeben.

2. Fuzz-Erzeugungsmethode

Fuzzer können auch danach klassifiziert werden, wie sie Daten zum Fuzzen erstellen. Früher erzeugten Fuzzer Fuzz, indem sie zufällige Daten von Grund auf neu generierten. So hat es Professor Barton Miller, der Initiator dieser Technik, ursprünglich gemacht. Diese Art von Fuzzer wird als a bezeichnet Generationsbasierter Fuzzer.

Obwohl man theoretisch Daten generieren könnte, die eine Vertrauensgrenze umgehen, würde dies jedoch viel Zeit und Ressourcen erfordern. Daher wird diese Methode normalerweise für Systeme mit einfachen Eingabestrukturen verwendet.

Eine Lösung für dieses Problem besteht darin, Daten zu mutieren, von denen bekannt ist, dass sie gültig sind, um Daten zu erzeugen, die gültig genug sind, um eine Vertrauensgrenze zu passieren, die jedoch ungültig genug sind, um Probleme zu verursachen. Ein gutes Beispiel dafür ist a DNS-Fuzzer der einen Domänennamen nimmt und dann eine große Liste von Domänennamen generiert, um potenziell bösartige Domänen zu erkennen, die auf den Besitzer der angegebenen Domäne abzielen.

Dieser Ansatz ist intelligenter als der vorherige und schränkt die möglichen Permutationen erheblich ein. Fuzzer, die diese Methode verwenden, werden aufgerufen Mutationsbasierte Fuzzer

Es gibt eine dritte neuere Methode, die genetische Algorithmen verwendet, um die optimalen Fuzz-Daten zu konvergieren, die zum Ausmerzen von Schwachstellen erforderlich sind. Es funktioniert, indem es seine Fuzz-Daten kontinuierlich verfeinert und dabei die Leistung der einzelnen Testdaten berücksichtigt, wenn sie in ein Programm eingespeist werden. 

Die Datensätze mit der schlechtesten Leistung werden aus dem Datenpool entfernt, während die besten mutiert und/oder kombiniert werden. Die neue Datengeneration wird dann erneut für den Fuzz-Test verwendet. Diese Fuzzer werden als bezeichnet evolutionäre mutationsbasierte Fuzzer.

3. Bewusstsein der Eingabestruktur

Diese Klassifizierung basiert darauf, ob ein Fuzzer die Eingangsstruktur eines Programms kennt und aktiv verwendet, um Fuzz-Daten zu erzeugen. EIN dummer Fuzzer (ein Fuzzer, der sich der Eingabestruktur eines Programms nicht bewusst ist) erzeugt Fuzz auf meist zufällige Weise. Dies könnte sowohl generations- als auch mutationsbasierte Fuzzer umfassen. 


Sollte ein Fuzzer mit dem Eingabemodell eines Programms bereitgestellt werden, kann der Fuzzer dann versuchen, Daten so zu erzeugen oder zu mutieren, dass sie mit dem bereitgestellten Eingabemodell übereinstimmen. Dieser Ansatz reduziert weiter die Menge an Ressourcen, die für die Generierung ungültiger Daten aufgewendet werden. Ein solcher Fuzzer wird a genannt intelligenter Fuzzer.

4. Kenntnis der Programmstruktur

Fuzzer können auch danach klassifiziert werden, ob sie sich der internen Funktionsweise des Programms bewusst sind, das sie fuzzen, und dieses Wissen nutzen, um die Fuzz-Datengenerierung zu unterstützen. Wenn Fuzzer verwendet werden, um ein Programm zu testen, ohne seine interne Struktur zu verstehen, spricht man von Black-Box-Tests. 

Bei Black-Box-Tests generierte Fuzz-Daten sind in der Regel zufällig, es sei denn, der Fuzzer ist ein auf evolutionären Mutationen basierender Fuzzer, bei dem er „lernt“, indem er die Wirkung seines Fuzzings überwacht und diese nutzt Information um seinen Fuzz-Datensatz zu verfeinern.

White-Box-Tests hingegen verwenden ein Modell der internen Struktur des Programms, um Fuzz-Daten zu generieren. Dieser Ansatz ermöglicht es einem Fuzzer, an kritische Stellen in einem Programm zu gelangen und es zu testen. 

Beliebte Fuzzing-Tools

Es gibt viele Fuzzing Werkzeuge Es gibt sie, die von Penetrationstestern verwendet werden. Einige der beliebtesten sind:

Einschränkungen des Fuzzing

Obwohl Fuzzing eine wirklich nützliche Pen-Testing-Technik ist, ist es nicht ohne Fehler. Einige davon sind:

  • Es dauert ziemlich lange zu laufen.
  • Abstürze und andere unerwartete Verhaltensweisen, die beim Blackbox-Testen eines Programms festgestellt werden, können schwierig, wenn nicht sogar unmöglich zu analysieren oder zu debuggen sein.
  • Das Erstellen von Mutationsvorlagen für intelligente mutationsbasierte Fuzzer kann zeitaufwändig sein. Manchmal ist dies möglicherweise nicht einmal möglich, da das Eingabemodell proprietär oder unbekannt ist.

 

Trotzdem ist es ein ziemlich nützliches und notwendiges Werkzeug für alle, die Fehler vor den Bösewichten entdecken wollen.

Zusammenfassung

Fuzzing ist eine leistungsstarke Pen-Testing-Technik, die verwendet werden kann, um Schwachstellen in Software aufzudecken. Es gibt viele verschiedene Arten von Fuzzern, und ständig werden neue Fuzzer entwickelt. Obwohl Fuzzing ein unglaublich nützliches Werkzeug ist, hat es seine Grenzen. Beispielsweise können Fuzzer nur eine begrenzte Anzahl von Schwachstellen finden und sie können sehr ressourcenintensiv sein. Wenn Sie diese erstaunliche Technik jedoch selbst ausprobieren möchten, haben wir eine kostenlose DNS-Fuzzer-API, die Sie auf unserer Plattform verwenden können. 

Also, worauf wartest Du? 

Beginnen Sie noch heute mit dem Fuzzing!

Google und der Inkognito-Mythos

Google und der Inkognito-Mythos

Google und der Inkognito-Mythos Am 1. April 2024 stimmte Google zu, einen Rechtsstreit durch die Vernichtung von Milliarden von im Inkognito-Modus gesammelten Datensätzen beizulegen.

Mehr lesen »