Automatisierte Systemaufruf-Filterung für Serversicherheit
Ein neues System verbessert die Sicherheit, indem es unnötige Systemaufrufe in Serveranwendungen herausfiltert.
― 6 min Lesedauer
Inhaltsverzeichnis
Serveranwendungen kommunizieren mit dem Betriebssystem über Systemaufrufe, die Anfragen an das OS sind, um Aufgaben auszuführen. Im Laufe der Zeit ist die Anzahl dieser Aufrufe gewachsen, da Anwendungen komplexer geworden sind. Dieses Wachstum bringt Sicherheitsrisiken mit sich, da nicht privilegierte Anwendungen Schwachstellen in diesen Aufrufen ausnutzen können.
Um diese Risiken zu bekämpfen, zielen einige Strategien darauf ab, die Anzahl der Systemaufrufe, die eine Anwendung nutzen kann, basierend auf ihren Bedürfnissen zu begrenzen. Indem wir unnötige Aufrufe einschränken, können wir die Chancen auf Angriffe auf den Kernel reduzieren und die allgemeine Sicherheit verbessern.
Dieses Papier stellt ein automatisches Filtersystem vor, das für Serveranwendungen entwickelt wurde. Im Gegensatz zu früheren Methoden funktioniert dieses System, ohne dass der Quellcode der Anwendung benötigt wird, was bedeutet, dass es mit kompilierter Binärsoftware arbeiten kann. Das ist entscheidend für die Verbesserung der Serversicherheit, ohne Änderungen am ursprünglichen Anwendungscode vorzunehmen.
Das Problem mit Systemaufrufen
Jede Anwendung benötigt verschiedene Systemaufrufe, um richtig zu funktionieren. Viele dieser Aufrufe werden jedoch nach dem Start der Anwendung unnötig. Zum Beispiel könnte ein Webserver andere Berechtigungen benötigen, wenn er beginnt, Kundenanfragen zu bearbeiten, als beim Hochfahren.
Aktuelle Lösungen stützen sich oft darauf, diese Aufrufe in Phasen zu kategorisieren: Initialisierung und Bereitstellung. Diese Methoden erfordern jedoch häufig Zugriff auf den Quellcode der Anwendung, der nicht immer verfügbar ist. Diese Realität schränkt ihre Effektivität ein.
Ausserdem verlangen bestehende Methoden in der Regel, dass ein Benutzer manuell identifiziert, wann die Anwendung von einer Phase zur nächsten übergeht. Dieser Prozess kann fehleranfällig sein, was zu einem unvollständigen Verständnis darüber führt, welche Aufrufe zu einem bestimmten Zeitpunkt erlaubt sein sollten.
Unser Ansatz
Wir präsentieren ein neues System, das die Identifizierung der Phasen einer Serveranwendung automatisiert, ohne Zugriff auf den Quellcode zu benötigen. Unsere Lösung kombiniert statische und dynamische Analysen, um zu bestimmen, welche Systemaufrufe während der Bereitstellungsphase der Anwendung notwendig sind.
Zentrale Techniken
Phasenerkennung: Unser System erkennt automatisch die Bereitstellungsphase der Anwendung, indem es ihre Ausführungsmuster dynamisch beobachtet. Wir suchen nach bestimmten Schleifenstrukturen, die anzeigen, wo die Hauptarbeit der Anwendung stattfindet.
Statische Analyse: Wir analysieren den Binärcode, um ein Funktionsaufruf-Diagramm zu erstellen. Dieses Diagramm hilft uns zu erkennen, wie verschiedene Funktionen interagieren und welche Systemaufrufe sie möglicherweise aufrufen.
Dynamische Analyse: Während unsere statische Analyse einen guten Ausgangspunkt bietet, beobachten wir auch die tatsächlichen Anwendungsdurchläufe. Dies gibt uns Echtzeitdaten darüber, welche Aufrufe während der Bereitstellungsphase gemacht werden.
Automatisches Filtern: Sobald wir genügend Daten gesammelt haben, erstellen wir einen Filter, der sicherstellt, dass nur die notwendigen Systemaufrufe während der Bereitstellungsphase erlaubt sind. Dies hilft, potenzielle Exploits zu verhindern, indem die Fähigkeiten einer kompromittierten Anwendung eingeschränkt werden.
Bewertung
Wir haben unser Filtersystem mit beliebten Serveranwendungen auf x86-64 Linux getestet. Durch verschiedene Experimente haben wir gezeigt, dass unser System effektiv die Bereitstellungsphasen identifiziert, genaue Systemaufruffilter generiert und die Angriffsfläche für jede Anwendung reduziert.
Ergebnisse
Unsere Ergebnisse zeigten, dass:
- Unser System frühere auf Binärcode basierende Ansätze übertrifft.
- Es Ergebnisse erzielt, die mit Methoden vergleichbar sind, die auf Quellcode basieren.
- Unser Filter etwa 8,33 % mehr Systemaufrufe zulässt als Quellcode-Lösungen und in 88,23 % der Fälle sicherheitsrelevante Aufrufe herausfiltert.
Reduzierung der Angriffsfläche
Die Sicherheitserhöhungen waren in unseren Tests deutlich. Wir haben bewertet, wie viele bekannte Kernel-Schwachstellen ohne unser Filtering ausgenutzt werden könnten. Die Ergebnisse bestätigten, dass unser Filtering das Risiko signifikant reduziert, indem potenzielle Angriffe blockiert werden.
Umgang mit dynamischen Bibliotheken
Eine weitere Herausforderung beim Filtern besteht darin, mit dynamisch geladenen Bibliotheken umzugehen. Viele Anwendungen laden zur Laufzeit zusätzliche Komponenten, die eigene Systemaufrufe benötigen können. Unser System identifiziert diese Bibliotheken erfolgreich und löst ihre Abhängigkeiten auf, sodass sichergestellt ist, dass alle notwendigen Aufrufe berücksichtigt werden.
Bedeutung dynamischer Bibliotheken
Dynamische Bibliotheken bieten Anwendungen Flexibilität, komplizieren jedoch die Sicherheit. Wenn diese Bibliotheken nicht richtig gefiltert werden, kann das zu Schwachstellen führen.
Unsere Lösung
Unser Ansatz kombiniert sowohl statische Analysen, um vorherzusagen, welche Bibliotheken geladen werden könnten, als auch dynamische Analysen, um tatsächliche Aufrufe während der Ausführung zu verfolgen. Dieser hybride Ansatz ermöglicht es uns, die notwendigen Aufrufe effektiv zu filtern.
Methodik des Systemaufruf-Filters
Unsere Methode umfasst mehrere Schritte, um die Genauigkeit beim Filtern von Systemaufrufen sicherzustellen.
1. Konstruktion des Funktionsaufruf-Diagramms
Wir beginnen damit, ein Funktionsaufruf-Diagramm für die Anwendung zu erstellen. Dieses Diagramm stellt dar, wie verschiedene Funktionen verbunden sind und welche Aufrufe sie tätigen könnten.
2. Identifizierung erreichbarer Systemaufrufe
Als Nächstes bestimmen wir, welche Systemaufrufe vom zuvor identifizierten Übergangspunkt erreichbar sind. Dies beinhaltet das Verfolgen aller potenziellen Pfade im Funktionsaufruf-Diagramm, um zu sehen, welche Aufrufe gemacht werden können.
3. Filtergenerierung
Schliesslich erzeugen wir unter Verwendung der gesammelten Informationen einen Filter, der angibt, welche Systemaufrufe während der Bereitstellungsphase erlaubt sind. Dieser Filter wird dann in der Anwendung implementiert, um sicherzustellen, dass nur die notwendigen Aufrufe verwendet werden.
Sicherheitsevaluation
Wir haben eine gründliche Sicherheitsevaluation unseres Filtersystems durchgeführt, indem wir es gegen bekannte Schwachstellen und Angriffsstrategien getestet haben.
Blockierung von Exploits
In unseren Tests hat unser System einen erheblichen Prozentsatz von Exploit-Versuchen erfolgreich blockiert, indem es kritische Systemaufrufe herausgefiltert hat.
Schwachstellenminderung
Wir haben auch untersucht, wie gut unser Filtering bei der Minderung von Kernel-Schwachstellen hilft. Die Ergebnisse zeigten eine deutliche Verbesserung der Sicherheit, wobei unser System Exploits verhinderte, die unfiltrierte Systemaufrufe nutzen könnten.
Fazit
Unsere automatisierte Lösung zur Filterung von Systemaufrufen stellt einen bedeutenden Fortschritt bei der Sicherung von Serveranwendungen dar. Indem wir unnötige Systemaufrufe während der Bereitstellungsphase eliminieren und dynamisch geladene Bibliotheken richtig verwalten, bieten wir einen robusten Schutz gegen potenzielle Angriffe.
Dieser Ansatz verbessert nicht nur die Sicherheit, sondern vereinfacht auch den Prozess der Feinabstimmung von Anwendungserlaubnissen, was es Entwicklern erleichtert, ihre Software zu schützen, ohne den ursprünglichen Code ändern zu müssen.
Unsere Ergebnisse unterstreichen das Potenzial automatischer Filtersysteme in der Sicherheit von Serveranwendungen und legen den Grundstein für zukünftige Fortschritte in diesem wichtigen Bereich.
Titel: SYSPART: Automated Temporal System Call Filtering for Binaries
Zusammenfassung: Restricting the system calls available to applications reduces the attack surface of the kernel and limits the functionality available to compromised applications. Recent approaches automatically identify the system calls required by programs to block unneeded ones. For servers, they even consider different phases of execution to tighten restrictions after initialization completes. However, they require access to the source code for applications and libraries, depend on users identifying when the server transitions from initialization to serving clients, or do not account for dynamically-loaded libraries. This paper introduces SYSPART, an automatic system-call filtering system designed for binary-only server programs that addresses the above limitations. Using a novel algorithm that combines static and dynamic analysis, SYSPART identifies the serving phases of all working threads of a server. Static analysis is used to compute the system calls required during the various serving phases in a sound manner, and dynamic observations are only used to complement static resolution of dynamically-loaded libraries when necessary. We evaluated SYSPART using six popular servers on x86-64 Linux to demonstrate its effectiveness in automatically identifying serving phases, generating accurate system-call filters, and mitigating attacks. Our results show that SYSPART outperforms prior binary-only approaches and performs comparably to source-code approaches.
Autoren: Vidya Lakshmi Rajagopalan, Konstantinos Kleftogiorgos, Enes Göktaş, Jun Xu, Georgios Portokalidis
Letzte Aktualisierung: 2023-09-27 00:00:00
Sprache: English
Quell-URL: https://arxiv.org/abs/2309.05169
Quell-PDF: https://arxiv.org/pdf/2309.05169
Lizenz: https://creativecommons.org/licenses/by/4.0/
Änderungen: Diese Zusammenfassung wurde mit Unterstützung von AI erstellt und kann Ungenauigkeiten enthalten. Genaue Informationen entnehmen Sie bitte den hier verlinkten Originaldokumenten.
Vielen Dank an arxiv für die Nutzung seiner Open-Access-Interoperabilität.