AntiFuzzing: Sicherheit durch Dunkelheit !?

Bild

Warum Geld und Ressourcen für Sicherheit ausgeben? Warum sollte man sich die Mühe machen, einen Security Development Lifecycle (SDL) durchzuführen? Warum Fuzzing in den Entwicklungsprozess integrieren? Warum sich mit Wissen über verschiedene Fuzzers wie AFL, Libfuzz usw. beschäftigen? Schließlich können Sie die Suche nach Schwachstellen in Ihren Produkten „einfach“ in ständige Folter umwandeln und Forschern und Angreifern ein „süßes“ Leben ermöglichen. Möchten Sie wissen, wie das geht? Dann willkommen bei kat!

Haftungsausschluss: Dieser Artikel sollte mit einem gewissen Maß an Humor und Ironie aufgenommen werden!

In letzter Zeit haben sich immer mehr Arbeiten dem Thema AntiFuzzing gewidmet. AntiFuzzing ist eine Aktion, die die Effektivität und Verwendung von Fuzzing zur Suche nach Schwachstellen in den Lösungen eines Entwicklers verringert.

Dieser Artikel konzentriert sich auf das Fuzzing von in C \ C ++ geschriebenen Binäranwendungen, die lokal bereitgestellt werden können, und versucht, Schwachstellen im Zusammenhang mit Speicherbeschädigungen zu finden.

Heutzutage richtet sich eine große Anzahl von Aktionen gegen AFL Fuzzer, den auffälligsten, bekanntesten und renommiertesten Vertreter des Feedback-basierten Fuzzing-Ansatzes.

Nachdem wir das Problem untersucht hatten, identifizierten wir mögliche AntiFuzzing-Techniken:

  • Die Ergebnisse von Fuzzers Arbeit zu überladen, ist die exzentrischste Technik, die einige Entwickler anwenden, ohne es zu merken. Sie besteht darin, dass Sie dort weitere Fehler hinzufügen müssen, um das Programm sicherer zu machen ... Ja, wir können leider nicht antworten Die Frage ist, wie viele unserer Fehler bereits im Programm sind und wie gefährlich sie sind, aber wir können sie mit einer Reihe von Fehlern verwässern, die für den Angreifer nutzlos sind!
  • Das Erkennen eines Fuzzing-Prozesses erfolgt ausschließlich im Bereich von jailbreak_detect, root_detect. Die Anwendung stellt unabhängig fest (und der Entwickler schreibt eine Reihe von Überprüfungen), dass sie nicht nur funktioniert, sondern schrittweise ausgeführt wird und sich daher weigert, zu funktionieren. Die Informationssicherheitsbranche hat dies millionenfach durchgemacht. Dieser Code kann leicht durchsucht und aus der Anwendung ausgeschlossen werden, und die Technik führt zum Titel „der nutzloseste und unkomplizierteste“.
  • Verlangsamung des Fuzzing-Prozesses - in unserem Unternehmen nennen wir diese Dinge „Bugs in Overheads verstecken“. Selbst jetzt funktioniert einige Software nicht nur unter Fuzzing schlecht, so dass die Suche nach Schwachstellen darin für Forscher zu einer psychologisch schwierigen Aufgabe wird.
  • Die Schaffung von Blindspot-Zonen ist die interessanteste Richtung, die unserer Meinung nach die Entwicklung von Fuzzern vorantreiben wird. In der auf der BlackHat 2018 vorgestellten Arbeit wird das Problem der Kollisionen in shared_mem von AFL angesprochen, die es verwendet, um abgedeckte Codeabschnitte zu bestimmen. Das heißt, es werden Bereiche erstellt, in denen der Fuzzer während seines Betriebs nicht herunterfällt.

Somit hat AntiFuzzing sowohl offensichtliche Vor- als auch Nachteile:

  • "-" Vielleicht die Trübung des Geistes von Softwareentwicklern, die sich in einigen Aspekten der Informationssicherheit und des Fuzzing-Prozesses schlecht auskennen.
  • "+" Entwicklung von Fuzzern, die in Zukunft beginnen werden, die implementierten AntiFuzzing-Mechanismen zu überwinden, und erstens eine größere Abdeckung bieten werden, wenn AntiFuzzing-Mechanismen implementiert sind; zweitens, wenn die Software Elemente enthält, die AntiFuzzing-Funktionen simulieren.

Warum ist dieser Ansatz zur Gewährleistung der Sicherheit dumm und schädlich? Die Entwicklung eines hochwertigen AntiFuzzing-Ansatzes und dessen Anwendung auf echte Software ist in ihrer Komplexität vergleichbar mit der Entwicklung des Algorithmus selbst, um die Codeabdeckung durch Feedback-basiertes Fuzzing zu erhöhen. Die Schwierigkeit besteht darin, dass zusätzlich zum Einfügen von phasenhemmenden Strukturen an den richtigen Stellen sichergestellt werden muss, dass sie kein klares Muster aufweisen, das unterschieden und dann einfach ausgeschlossen werden kann. AntiFuzzing erhöht nicht die Sicherheit der Anwendung selbst ... Es ist gut, dass die Forschung von AntiFuzzing nur in einem akademischen Umfeld durchgeführt wird. Gleichzeitig gibt es Unternehmen, die sich im Gegenteil darauf konzentrieren, die Suche nach Fehlern zu vereinfachen. Zum Beispiel bietet Mozilla einen speziellen Build seines Browsers für dieses blog.mozilla.org/security/2018/07/19/introducing-the-asan-nightly-project !

Bild

Das wachsende Interesse an AntiFuzzing wurde hauptsächlich durch die DARPA Cyber ​​Grand Challenge 2016 verursacht. Dies ist ein Wettbewerb, bei dem Computer ohne menschliche Hilfe nach Schwachstellen suchten, diese ausnutzten und reparierten. Die meisten Suchsysteme basierten, wie Sie vielleicht vermutet haben, auf AFL Fuzzer, und alle Ziele im Wettbewerb waren binäre Anwendungen. All dies kann darauf abzielen, automatischen Systemen und nicht Menschen entgegenzuwirken.

Dieser Artikel basiert auf Arbeiten, die Sie selbst studieren können:

  1. „Dem Fuzz entkommen , Fuzzing-Techniken bewerten und mit AntiFuzzing täuschen“ , Masterarbeit in Computersystemen und Netzwerken
    2016
  2. Chaff Bugs: Abschreckung von Angreifern durch Making Software Buggier , 2018
  3. AFLs Blindspot und wie man AFL-Fuzzing für beliebige ELF- Binärdateien widersteht“ , BlackHat USA 2018
  4. Wir empfehlen Ihnen auch, den Artikel der Jungs von der NCC-Gruppe „Einführung in Anti-Fuzzing: Eine Verteidigung in der Tiefenhilfe“ aus dem Jahr 2014 zu lesen (die erste AFL-Veröffentlichung ist gerade erschienen und hat noch keine große Community-Liebe gewonnen, und zwei weitere Jahre vor dem DARPA CGC-Finale).

PS: Wir arbeiten häufig mit AFL (+ libfuzz) und seinen Modifikationen, wenn wir nach Software suchen und SDL für unsere Kunden implementieren. Daher werden wir in einem der folgenden Artikel mehr über das Fuzzing mit AFL sprechen und warum immer mehr Leute es in Testprogrammen verwenden und wie es das Niveau der Entwicklungssicherheit erhöht.

Source: https://habr.com/ru/post/de428067/


All Articles