Denial of Service
Eine Denial-of-Service-Instanz tritt auf, wenn der Zugriff auf einen bestimmten Dienst hätte gewährt werden sollen, tatsächlich aber nicht ordnungsgemäß abgelehnt wurde. Beispielsweise ist jeder Vorgang, den eine nicht privilegierte Anwendung ausführen kann, die dazu führt, dass das System unbrauchbar wird, effektiv eine Denial-of-Service-Funktion. Dies umfasst alle Vorgänge oder Sequenzen von Vorgängen, die:
Stürzt das System ab.
Bewirkt das vorzeitige Beenden von Threads oder Prozessen.
Erstellt eine Deadlockbedingung. Ein Deadlock tritt auf, wenn zwei oder mehr Threads beendet werden, die in einem dauerhaften Zustand des Stillstands warten. Jeder Thread wartet auf eine Ressource, die von einem der anderen Threads gehalten wird.
Erstellt eine Livesperrbedingung. Eine Livesperre kann auftreten, wenn zwei oder mehr Prozessoren nicht fortgesetzt werden können, weil sie auf den Abruf einer Ressource warten (in der Regel eine Sperre für eine Warteschlange), und der Thread, der diese Ressource besitzt, sich in einem ähnlichen, nicht fortlaufenden Zustand befindet.
Solche Probleme treten häufig innerhalb von Treibern auf, da sie latente Fehler enthalten, die von normalen Anwendungen ausgenutzt werden können. Exploits dieses Typs können einfach sein und sind schwer zu schützen. Häufige Ursachen für solche Probleme bei Treibern sind:
Ungültige Überprüfung des Benutzerpuffers.
Pufferüberlauf oder -unterlauf.
Bei Dateisystemen und Dateisystemfiltertreibern gibt es zahlreiche Fälle solcher Probleme. Beispielsweise wird der MAX_PATH Wert aus historischen Gründen im Win32-Subsystem als 260 definiert. Viele Treiberkomponenten gehen davon aus, dass dies die Größe des größten Pfads angibt. Leider ist dies nicht der Fall, da der maximale Pfad in einem NTFS-Dateisystem 32.767 Unicode-Zeichen (65.534 Bytes) beträgt. Wenn ein Filtertreiber eine MAX_PATH Längenannahme in seine Codebasis codieren würde, würde ein einfacher Denial-of-Service-Angriff durch eine Anwendung entstehen, die einen Pfad erstellt, der größer als dieser ist, innerhalb eines Pfads, der vom Filtertreiber verwaltet wird.
Ein weiteres häufiges Problem besteht darin, dass Anwendungen häufig Benutzermoduszeiger in private FSCTL-Anforderungen einbetten. Ein Dateisystem unterliegt drei allgemeinen Kategorien von Denial-of-Service-Angriffen:
Verbrauch des gesamten verfügbaren Speicherplatzes.
Verwenden der gesamten verfügbaren Datenträgerbandbreite.
Blockieren des Zugriffs auf Dateien, auf die Benutzer Zugriff haben sollen.
In der Regel gibt es wenig, was ein Dateisystementwickler tun kann, um diese Arten von Angriffen zu verhindern. Es gibt jedoch Schritte, die von Entwicklern ausgeführt werden können, damit Administratoren diese Arten von Denial-of-Service-Angriffen einschränken können.
Der einfachste Denial-of-Service-Angriff, der das Dateisystem einbezieht, besteht darin, den gesamten freien Speicherplatz zu belegen. Es ist einfach, eine Anwendung zu schreiben, um dies zu tun, und die Konsequenzen sind weitreichend. Viele Anwendungen und Dienste im System funktionieren nicht, wenn sie nicht mehr auf den Datenträger schreiben können. Die Minderungstechnologie sind Datenträgerkontingente, die einschränken können, wie viel Speicherplatz für Dateien im Besitz eines Benutzers verfügbar ist, wenn sie von Administratoren ordnungsgemäß verwendet wird. Daher ist es sinnvoll, bei der Entwicklung eines Dateisystems unterstützung für Datenträgerkontingente einzuschließen.
Eine böswillige oder schlecht geschriebene Anwendung kann auch versuchen, die gesamte Datenträgerbandbreite zu nutzen. Die Folgen für reguläre Benutzer, die dieser Art von Angriffen ausgesetzt sind, ist ein träges oder nicht reagierendes System. Derzeit verfügt das Betriebssystem nicht über einen Mechanismus zum Drosseln der von Anwendungen verbrauchten Bandbreite. Ein Dateisystem verbraucht auch Kernelspeicher für jedes geöffnete Dateiobjekt und Dateihandle. Eine böswillige Anwendung kann versuchen, eine große Anzahl von Dateien kontinuierlich zu öffnen und diese offen zu halten, bis der Arbeitsspeicher erschöpft ist. Die primäre Behandlungsmethode für diese Probleme ist die Überwachung und Protokollierung, damit ein Administrator den Computer auf Anwendungen überwachen kann, die eine große Menge an E/A ausführen oder große Mengen anderer Ressourcen verwenden. Auch hier wäre es für Dateisystem- und Dateisystemfiltertreiber sinnvoll, Überwachungsunterstützung einzuschließen, um diese Art von Denial-of-Service besser zu minimieren.
Eine böswillige Anwendung kann versuchen, andere Benutzer am Zugriff auf Dateien zu hindern, die für den normalen Gebrauch benötigt werden. Eine wichtige Strategie zur Minimierung dieser Probleme besteht darin, sicherzustellen, dass Sicherheitsinformationen, die dateiobjekten zugeordnet sind, bei der Entwicklung von Dateisystemen ordnungsgemäß implementiert werden.
Schließlich müssen sich alle Treiber Gedanken darüber machen, dass der gesamte verfügbare Arbeitsspeicher oder andere Ressourcen als Reaktion auf Anforderungen von einer böswilligen oder abwegigen Anwendung genutzt werden.