
Ist deine Website in Gefahr? Finde heraus, warum veraltete Bibliotheken eine Zeitbombe sind.
Celia CatalánAktie
Verwundbare und veraltete Komponenten
Einführung
Moderne Webanwendungen folgen Architekturen mit mehreren Softwarekomponenten wie Datenbanken, APIs (Application Programming Interface), Bibliotheken, Frameworks, Betriebssystemen usw. Das Management und die Inventarisierung der Softwarekomponenten stellen eine grundlegende und notwendige Aufgabe für Organisationen dar, angesichts ihrer Bedeutung für die Gewährleistung der Sicherheit, die Aufrechterhaltung der Kompatibilität, die Optimierung der Leistung, die Reduzierung operativer Risiken und die Sicherstellung der Einhaltung geltender Vorschriften und Lizenzen wie ISO oder GDPR.
"Als Folge der mangelnden Wartung der Softwarekomponenten bestehen Risiken wie die Verwundbarkeit von verwundbaren und veralteten Komponenten, die eine der Hauptsicherheitsbedrohungen darstellt, die im OWASP Top Ten von 2021 identifiziert wurden, eingestuft auf dem sechsten Platz."
Verwundbare Komponenten vs Veraltete Komponenten
Die verwundbaren Komponenten sind diejenigen, die über Sicherheitsanfälligkeiten verfügen, die Angreifer ausnutzen können, um auf sensible Informationen zuzugreifen oder Zugang zum System zu erhalten.
Auf der anderen Seite beziehen sich die veralteten Komponenten auf die Verwendung von Softwarekomponenten, die keine Sicherheitsupdates mehr erhalten und daher keine Sicherheitspatches zur Behebung bestehender Schwachstellen haben.
Auswirkungen
Einige der Schwachstellen, die die anfälligen oder veralteten Komponenten betreffen und von böswilligen Benutzern ausgenutzt werden können, sind die folgenden:
- Code-Injection: Sicherheitsanfälligkeit, die es einem Angreifer ermöglicht, schädlichen Code in eine Anwendung einzufügen (in der Regel über nicht validierte oder schlecht bereinigte Benutzereingaben), der von der Anwendung ausgeführt wird und es dem Angreifer ermöglicht, nicht autorisierte Aktionen durchzuführen.
- Bufferüberlauf: Bufferüberläufe treten auf, wenn die zugewiesene Speicherkapazität überschritten wird, wodurch Angreifer Daten im benachbarten Speicher ändern und beschädigen können. Dies kann zur Ausführung von schädlichem Code führen, der Systemabstürze verursacht, Sicherheitskontrollen verändert oder eine Erhöhung der Berechtigungen ermöglicht.
- Cross Site Scripting: Cross-Site Scripting ist ein kritisches Risiko für moderne Webanwendungen, da es Angreifern ermöglicht, bösartige Skripte in vertrauenswürdige Seiten einzufügen. Ein gängiger Ansatz ist das gespeicherte XSS, bei dem Angreifer Skripte in anfällige Komponenten von Drittanbietern einfügen, indem sie die fehlenden Updates und Sicherheitsüberprüfungen ausnutzen, was zu anhaltenden Bedrohungen führen kann, die mehrere Benutzer und Systeme betreffen.
Verwundbare und veraltete Komponenten identifizieren
Der erste Schritt zur Erkennung von verwundbaren Komponenten besteht darin, die vorhandenen Softwareprodukte in der Anwendung oder im System sowie deren Versionen zu identifizieren. Die Identifizierung dieser Versionen kann verschiedene Ansätze, Werkzeuge und Techniken erfordern, wie die im Folgenden beschriebenen:
- Quellcode: Der Code ist das Rückgrat jeder Software und wenn er Sicherheitsfehler enthält, kann er ausgenutzt werden, um die Integrität, Vertraulichkeit und Verfügbarkeit eines Systems zu gefährden. Sicherheitsanfälligkeiten im Code entstehen häufig durch schlechte Programmierpraktiken oder durch die Integration veralteter Drittanbieterbibliotheken.
Die statische Codeanalyse (SAST) ist eine Technik, die es ermöglicht, den Quellcode einer Anwendung zu überprüfen, ohne ihn auszuführen, mit dem Ziel, Muster zu identifizieren, die Sicherheitsanfälligkeiten darstellen. Diese Analyse erfolgt durch automatisierte Werkzeuge, die schlechte Praktiken, Verstöße gegen Standards für sichere Programmierung und die Verwendung kritischer Funktionen erkennen.
- Darstellung von Versionen im Frontend: Es ist häufig anzutreffen, dass in Webanwendungen Versionen der in der öffentlichen Benutzeroberfläche verwendeten Komponenten vorhanden sind.
- HTTP-Header: Einige Webanwendungen und Server geben die Versionen der Software in den HTTP-Headern der Antworten an. Diese Header können Details wie den verwendeten Webserver (Apache, Nginx, IIS), Versionen von PHP, Python, ASP.NET oder sogar Informationen über Frameworks wie zum Beispiel Django oder Ruby on Rails enthalten.
- Server: Gibt den Typ und die Version des Webservers an.
- Beispiel: Server: Apache/2.4.49 (Ubuntu)
- X-Powered-By: Gibt die verwendete Programmiersprache oder das verwendete Framework an.
- Beispiel: X-Powered-By: PHP/7.4.3 oder X-Powered-By: ASP.NET
- Via: Kann Details zu verwendeten Proxys oder Gateways offenbaren.
- Beispiel: Via: 1.1 vegur
- X-AspNet-Version: Anwendungs-spezifisch für ASP.NET.
- Beispiel: X-AspNet-Version: 4.0.30319
- X-Drupal-Cache: In Drupal-basierten Systemen.
- Beispiel: X-Drupal-Cache: HIT
- Fehler provozieren: Die Praxis, ein System, eine Anwendung oder Software Situationen auszusetzen, die unerwartete Verhaltensweisen, Fehler oder ungewöhnliche Antworten auslösen, kann einige der verwendeten Technologien offenbaren.
- Banner Grabbing: Banner Grabbing ist eine weit verbreitete Technik, um Informationen über die Versionen von Diensten zu erhalten, die auf einem Server ausgeführt werden. Viele Dienste, wie Webserver, FTP, SSH oder SMTP, geben beim Verbinden Banner zurück, die den Namen der Software, ihre Version und manchmal zusätzliche Informationen enthalten.
- Tools zur Schwachstellenscannung und Dienstenumerierung: Schwachstellenscan-Tools identifizieren häufig Versionen von Komponenten basierend auf den Antworten, die Server oder Dienste auf bestimmte Anfragen oder Merkmale geben.
- Interaktion mit APIs: Viele Webanwendungen stellen APIs zur Verfügung, die Details über die Software, einschließlich Versionen, bereitstellen. Einige APIs geben diese Informationen in HTTP-Headern oder JSON-Antworten zurück.
Einige interessante Werkzeuge
Nmap
Nessus / OpenVAS
Niemand
WhatWeb
Wappalyzer
Ruhestand.js
Minderung/Remedierung
- Ein Inventar der verwendeten Technologien führen (Bibliotheken, Frameworks, Softwarekomponenten, die in der Anwendung oder im System verwendet werden, einschließlich Details wie die spezifischen Versionen jeder Komponente und deren Herkunft, was es ermöglicht, schnell diejenigen zu identifizieren, die veraltet oder anfällig sind.
- Aktuell bleiben: Es ist entscheidend, über Sicherheitsupdates und neu entdeckte Schwachstellen, die die verwendeten Softwarekomponenten betreffen, informiert zu sein. Dies beinhaltet das Abonnieren von Sicherheitsbulletins, das Verfolgen von Datenbanken mit bekannten Schwachstellen (wie CVE), die Verwendung automatischer Werkzeuge zur Erkennung von veralteten und anfälligen Versionen und das aktive Überwachen von Warnungen der Anbieter der eingesetzten Technologien. Entwickler sollten gute Sicherheitspraktiken in den entwickelten Anwendungen beibehalten, um zukünftige Probleme zu vermeiden.
- Gute Entwicklungspraktiken. Es wird empfohlen, beim Entwickeln von Webanwendungen die Verwendung von Bibliotheken, Frameworks oder Tools zu vermeiden, die keine regelmäßigen Updates erhalten oder die keine aktive Community haben, die auf Sicherheitsanfälligkeiten und Verbesserungsbedürfnisse reagieren kann.