Schlagwort-Archive: gRPC

Unsichere gRPC-Implementierungen können APIs gefährden

Originalartikel von David Fiser, Security Researcher

Unternehmen setzen immer häufiger Microservice-Architekturen für ihre Anwendungen ein, weil diese Dienste ein effizientes Infrastrukturmanagement ermöglichen, Updates und Verbesserungen können einfacher bereitgestellt und Anwendungen auf Wunsch skaliert werden. Im Zuge dieses Architekturwechsels entsteht auch die Notwendigkeit einer effizienten Kommunikation zwischen den Microservices. Diese kritische und komplexe Kommunikation zwischen Client- und Server-Anwendungen lässt sich mit gRPC, einem universellen Remote Procedure Call (RPC)-Framework, bewerkstelligen. Obwohl es noch recht neu ist (2015 von Google entwickelt), hat das Framework schnell an Popularität gewonnen. Doch können noch Sicherheitsfragen entstehen, wenn Entwickler gRPC in ihre Projekte aufnehmen. Und da gRPC APIs eine wichtige Rolle für die allgemeine Anwendungssicherheit spielen, liefert Trend Micro auch Empfehlungen für den Schutz von gRPC-Implementierungen.

gRPC kann für das Design neuer Protokolle verwendet werden, die Genauigkeit, Effizienz und Sprachunabhängigkeit erfordern, denn das Framework unterstützt mehrere Sprachen sowohl für Server als auch für Clients. Es handelt sich um ein Cloud Native Computing (CNCF)-Projekt und wird in grossen Unternehmen wie Netflix, dem Finanzdienstleister Square und der Platform-as-a-Service (PaaS) Docker eingesetzt.

gRPC lässt sich mit anderen RPC Frameworks wie SOAP und REST vergleichen. Obwohl RESTful-APIs weit verbreitet sind und typischerweise HTTP verwenden, um Informationen zwischen Anwendungen oder Diensten und dem JavaScript Object Notation (JSON)-Datenformat auszutauschen, haben gibt es Einschränkungen hinsichtlich Leistung und textbasierter Ausrichtung. Viele Unternehmen haben ihre APIs von REST auf gRPC migriert, um die Vorteile des Binärprotokolls von gRPC zu nutzen. gRPC verwendet standardmässig als darunterliegende Schicht HTTP/2, ein binärbasiertes Protokoll. HTTP/2 unterstützt mehrere Streams und Anfragen innerhalb einer TCP-Verbindung. Weitere Einzelheiten bietet der Originalbeitrag.

Bild 1. Arbeitsweise des gRPC Framework in einer Online Shopanwendung mit Produkt- und Bezahlservices, die über ein API interagieren

Mögliche Bedrohungen und Risiken für gRPC

Sicherheitslücken

gRPC unterstützt mehrere Programmiersprachen. Es gibt zwei Arten von Implementierungen, die innerhalb der unterstützten Sprachen verwendet werden: Implementierungen, die die Sprache selbst verwenden, und Wrapper um den von gRPC geschriebenen C-Code.  Diese Wrapper ermöglichen die Übersetzung von in verschiedenen unterstützten Sprachen geschriebenen Aufrufen in C-Aufrufe. Die Wahrscheinlichkeit, dass ein Entwickler eine Schwachstelle in das System einführt, ist hoch, da mehr Funktionen zusammen mit Memory-Managementfunktionen implementiert werden müssen. Auf der anderen Seite verringert die Verwendung von Sprachen wie Java oder Go, die bereits viele Funktionalitäten implementiert haben und sich auch um Fragen der Speicherverwaltung kümmern, die Wahrscheinlichkeit von potenziellen Fehlern. Insbesondere die Bedeutung der Auswahl geeigneter Sprachen könnte eine wichtige Rolle bei der Erhöhung der Sicherheit von Systemen spielen. Eine Übersicht im Originalbeitrag.

Unsichere Datenübertragungskanäle und Zugangsdaten dafür

Es ist sehr wahrscheinlich, dass bei einem Remote Procedure Call Daten zum Zielserver übertragen werden. Deshalb sollten Entwickler auf die Einrichtung sicherer Kanäle für die Datenübertragung achten. Dadurch werden nicht nur Datenlecks verhindert, sondern auch Man-in-the-Middle (MiTM)-Angriffe, über die Angreifer Servicedaten leaken könnten. Ein Data Leak kann Implementierungsdetails zum Service oder zur Infrastruktur öffentlich machen und somit weitere Angriffe ermöglichen oder zur Kompromittierung der Infrastruktur oder des Service führen.

Es liegt in der Verantwortung des Entwicklers, eine sichere Implementierung unter den verschiedenen Authentifizierungsmechanisem zu wählen. Das Kopieren und Einfügen von Patterns mit Schlüsselwörtern wie „InsecureChannelCredentials“ sollte vermieden werden. Eine Code-Suche auf Github.com nach dem Schlüsselwort „InsecureChannelCredentials“ und C++ (für gRPC üblich) gab über 11.000 Code-Ergebnisse. Wahrscheinlich sind diese vielen Suchvorgänge mit Demos und Beispielen verbunden. Dennoch gibt es immer noch einige Projekte, die diese verwenden.

Probleme bei der Procedure-Implementierung

Die grösste Schwachstellenfläche befindet sich innerhalb der Remote Procedure-Implementierung. Für nicht sehr erfahrene Entwickler empfiehlt es sich, Memory-sichere Sprachen zu verwenden, um Fehler in der Speicherverwaltung wie Buffer Overflows oder UaF-Fehler Used After Free) zu vermeiden, die zu einer Remote Code Execution führen. Doch durch diese Massnahme werden logische Fehler, die im Code auftauchen könnten, nicht vermieden. Dafür müssen Entwickler einen hohen Standard in Entwicklungsprozesse setzen, den Best Practices für sichere Softwareentwicklung folgen und proaktive Kontrollmechanismen installieren, gemäss den OWASP Top 10 Proactive Controls-Empfehlungen in den OWASP Secure Coding Practices.

Ein zentralisierter Authentifizierungsmechanismus für kritische Teile des Systems wird auch innerhalb isolierter Netzwerke oder privater Clouds dringend empfohlen. Im Fall von Fehlkonfigurationen kann die Ausnutzung von Schwachstellen innerhalb der Umgebung als Einstiegspunkt für einen unberechtigten Zugriff dienen, der den gRPC-Dienst erheblich beeinträchtigen könnte.

Die Fachleute raten auch davon ab, gRPC-Authentifizierungsdetails in Supply-Chain-Management-Systemen (SCM), insbesondere in öffentlich zugänglichen Systemen, hart zu codieren oder sie dort vorzuhalten. Sie sollten an einem sicheren Ort gespeichert und nur bei Bedarf abgerufen werden.

Denial-of-Service-Angriffe

gRPC lässt sich sowohl als „versteckter“ Messaging Service in einer isolierten Umgebung als auch als API-Ersatz in der Öffentlichkeit zugewandten REST API-Services einsetzen. Es gibt einen bereits bekannten und dennoch nicht gefixten Bug, der Service-Aufrufe ablehnt, bis der Service neu gestartet wird. Der Fehler wird angestossen, wenn eine höhere Zahl von Verbindungen in kurzer Zeit geöffnet werden. Weitere technische Details und Empfehlungen für einen Workaround bietet der Originalbeitrag.

Sicherheitsempfehlungen für gRPC

gRPC bietet einen umfassenden Leitfaden zu den unterstützten Authentifizierungsmechanismen, die mit dem Protokoll arbeiten, so etwa SSL/TLS mit und ohne Google Token-basierter Authentifizierung. Entwickler können auch ihr eigenes Authentifizierungssystem über das Credentials Plugin-API anschliessen.

Auch sollten Sicherheitslösungen zum Einsatz kommen, die Inhalte prüfen, sodass keine bösartige Payload das System über die Nachrichten, die vom Client auf den Server und umgekehrt gehen, infiltrieren kann. Die Lösungen müssen dafür sorgen, dass kritische Daten in Transit sicher sind, den Status eines Service im Auge behalten und Authentifizierung und Autorisierung durchsetzen.

Trend Micro-Lösungen

Die Service-Plattform Trend Micro Cloud One™ , die Trend Micro™ Hybrid Cloud Security unterstützt, ermöglicht es Entwicklern, Anwendungen auf ihre Art zu entwickeln und zu betreiben. Sie umfasst Mechanismen, die über vorhandene Infrastruktur, Tool-Ketten und Anforderungen hinweg arbeiten.

Application Security von Cloud One liefert diagnostische Einzelheiten zu Code-Schwachstellen sowie Schutz vor automatisierten Angriffen über Bedrohungen wie SQL Injection und RCE zur Laufzeit. Darüber hinaus gibt es eine vollständige Abdeckung und Berichterstattung über jede Angriffsinstanz sowie Einblicke in die Identität eines Angreifers und die Angriffsmethodik.

Cloud One bietet ausserdem die folgenden Cloud-Sicherheitstechnologien an: