Serverless.com Security
Last updated
Last updated
Lerne & übe AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lerne & übe GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Eine Organisation ist die höchste Ebene innerhalb des Serverless Framework-Ökosystems. Sie repräsentiert eine kollektive Gruppe, wie ein Unternehmen, eine Abteilung oder eine große Einheit, die mehrere Projekte, Teams und Anwendungen umfasst.
Das Team sind die Benutzer mit Zugang innerhalb der Organisation. Teams helfen dabei, Mitglieder basierend auf Rollen zu organisieren. Mitarbeiter
können bestehende Apps anzeigen und bereitstellen, während Administratoren
neue Apps erstellen und die Einstellungen der Organisation verwalten können.
Eine App ist eine logische Gruppierung verwandter Dienste innerhalb einer Organisation. Sie repräsentiert eine vollständige Anwendung, die aus mehreren serverlosen Diensten besteht, die zusammenarbeiten, um eine kohärente Funktionalität bereitzustellen.
Ein Dienst ist die zentrale Komponente einer serverlosen Anwendung. Er repräsentiert dein gesamtes serverloses Projekt und kapselt alle Funktionen, Konfigurationen und Ressourcen, die benötigt werden. Er wird typischerweise in einer serverless.yml
-Datei definiert, ein Dienst umfasst Metadaten wie den Dienstnamen, Anbieter-Konfigurationen, Funktionen, Ereignisse, Ressourcen, Plugins und benutzerdefinierte Variablen.
Dies ist eine Zusammenfassung des offiziellen Tutorials aus den Dokumenten:
Erstellen Sie ein AWS-Konto (Serverless.com startet in der AWS-Infrastruktur)
Erstellen Sie ein Konto bei serverless.com
Erstellen Sie eine App:
Dies sollte eine App namens tutorialapp
erstellt haben, die Sie in serverless.com überprüfen können, sowie einen Ordner namens Tutorial
mit der Datei handler.js
, die einige JS-Code mit einem helloworld
-Code enthält, und die Datei serverless.yml
, die diese Funktion deklariert:
Erstellen Sie einen AWS-Anbieter, indem Sie im Dashboard zu https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws
gehen.
Um serverless.com
Zugriff auf AWS zu gewähren, wird es aufgefordert, einen CloudFormation-Stack mit dieser Konfigurationsdatei auszuführen (zum Zeitpunkt dieses Schreibens): https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml
Diese Vorlage generiert eine Rolle mit dem Namen SFRole-<ID>
mit arn:aws:iam::aws:policy/AdministratorAccess
über das Konto mit einer Vertrauensidentität, die dem Serverless.com
AWS-Konto den Zugriff auf die Rolle ermöglicht.
Das Tutorial fordert dazu auf, die Datei createCustomer.js
zu erstellen, die im Grunde einen neuen API-Endpunkt erstellt, der von der neuen JS-Datei verarbeitet wird, und fordert dazu auf, die Datei serverless.yml
zu ändern, um eine neue DynamoDB-Tabelle zu generieren, eine Umgebungsvariable zu definieren und die Rolle, die die generierten Lambdas verwenden wird.
Bereitstellen mit serverless deploy
Die Bereitstellung erfolgt über einen CloudFormation-Stack
Beachten Sie, dass die Lambdas über das API-Gateway exponiert sind und nicht über direkte URLs
Testen
Der vorherige Schritt gibt die URLs aus, unter denen Ihre API-Endpunkt-Lambda-Funktionen bereitgestellt wurden
Übermäßig permissive IAM-Rollen können unbefugten Zugriff auf Cloud-Ressourcen gewähren, was zu Datenverletzungen oder Ressourcenmanipulation führen kann.
Prinzip der geringsten Privilegien: Weisen Sie jeder Funktion nur die notwendigen Berechtigungen zu.
Verwenden Sie separate Rollen: Unterscheiden Sie Rollen basierend auf den Anforderungen der Funktion.
Das Speichern sensibler Informationen (z. B. API-Schlüssel, Datenbankanmeldeinformationen) direkt in serverless.yml
oder Code kann zu einer Offenlegung führen, wenn Repositories kompromittiert werden oder der Zugriff auf AWS gefährdet ist, da sie aus den Lambda-Konfigurationen lesbar sind.
Umgebungsvariablen: Injizieren Sie Geheimnisse zur Laufzeit, ohne sie hart zu codieren.
Integration des Secrets Managers: Verwenden Sie Dienste wie AWS Secrets Manager, Azure Key Vault oder HashiCorp Vault.
Verschlüsselte Variablen: Nutzen Sie die Verschlüsselungsfunktionen des Serverless Frameworks für sensible Daten.
Zugriffskontrollen: Beschränken Sie den Zugriff auf Geheimnisse basierend auf Rollen.
Vermeiden Sie das Protokollieren von Geheimnissen: Stellen Sie sicher, dass Geheimnisse nicht in Protokollen oder Fehlermeldungen exponiert werden.
Veraltete oder unsichere Abhängigkeiten können Schwachstellen einführen, während unsachgemäße Eingabeverarbeitung zu Code-Injection-Angriffen führen kann.
Abhängigkeitsmanagement: Aktualisieren Sie regelmäßig Abhängigkeiten und scannen Sie auf Schwachstellen.
Eingangsvalidierung: Implementieren Sie strenge Validierung und Sanitärung aller Eingaben.
Code-Überprüfungen: Führen Sie gründliche Überprüfungen durch, um Sicherheitsanfälligkeiten zu identifizieren.
Statische Analyse: Verwenden Sie Tools, um Schwachstellen im Code zu erkennen.
Ohne angemessenes Protokollieren und Überwachen können böswillige Aktivitäten unentdeckt bleiben, was die Reaktion auf Vorfälle verzögert.
Zentralisiertes Protokollieren: Aggregieren Sie Protokolle mit Diensten wie AWS CloudWatch oder Datadog.
Aktivieren Sie detailliertes Protokollieren: Erfassen Sie wesentliche Informationen, ohne sensible Daten offenzulegen.
Richten Sie Alarme ein: Konfigurieren Sie Alarme für verdächtige Aktivitäten oder Anomalien.
Regelmäßige Überwachung: Überwachen Sie kontinuierlich Protokolle und Metriken auf potenzielle Sicherheitsvorfälle.
Offene oder unsachgemäß gesicherte APIs können für unbefugten Zugriff, Denial-of-Service (DoS)-Angriffe oder Cross-Site-Angriffe ausgenutzt werden.
Authentifizierung und Autorisierung: Implementieren Sie robuste Mechanismen wie OAuth, API-Schlüssel oder JWT.
Ratenbegrenzung und Drosselung: Verhindern Sie Missbrauch, indem Sie die Anforderungsraten begrenzen.
Sichere CORS-Konfiguration: Beschränken Sie erlaubte Ursprünge, Methoden und Header.
Verwenden Sie Web Application Firewalls (WAF): Filtern und überwachen Sie HTTP-Anfragen auf bösartige Muster.
Geteilte Ressourcen und unzureichende Isolation können zu Privilegieneskalationen oder unbeabsichtigten Interaktionen zwischen Funktionen führen.
Funktionen isolieren: Weisen Sie unterschiedliche Ressourcen und IAM-Rollen zu, um einen unabhängigen Betrieb sicherzustellen.
Ressourcenteilung: Verwenden Sie separate Datenbanken oder Speicherorte für verschiedene Funktionen.
Verwenden Sie VPCs: Stellen Sie Funktionen innerhalb von Virtual Private Clouds für verbesserte Netzisolierung bereit.
Berechtigungen der Funktionen einschränken: Stellen Sie sicher, dass Funktionen nicht auf die Ressourcen anderer Funktionen zugreifen oder diese beeinträchtigen können, es sei denn, dies ist ausdrücklich erforderlich.
Unverschlüsselte Daten im Ruhezustand oder während der Übertragung können exponiert werden, was zu Datenverletzungen oder Manipulation führen kann.
Daten im Ruhezustand verschlüsseln: Nutzen Sie die Verschlüsselungsfunktionen des Cloud-Dienstes.
Daten während der Übertragung verschlüsseln: Verwenden Sie HTTPS/TLS für alle Datenübertragungen.
Sichere API-Kommunikation: Erzwingen Sie Verschlüsselungsprotokolle und validieren Sie Zertifikate.
Verwalten Sie Verschlüsselungsschlüssel sicher: Verwenden Sie verwaltete Schlüsseldienste und rotieren Sie Schlüssel regelmäßig.
Detaillierte Fehlermeldungen können sensible Informationen über die Infrastruktur oder den Code offenlegen, während nicht behandelte Ausnahmen zu Anwendungsabstürzen führen können.
Allgemeine Fehlermeldungen: Vermeiden Sie die Offenlegung interner Details in Fehlermeldungen.
Zentralisierte Fehlerbehandlung: Verwalten und sanitieren Sie Fehler konsistent über alle Funktionen hinweg.
Überwachen und Protokollieren von Fehlern: Verfolgen und analysieren Sie Fehler intern, ohne Details für Endbenutzer offenzulegen.
Exponierte Bereitstellungskonfigurationen oder unbefugter Zugriff auf CI/CD-Pipelines können zu böswilligen Codebereitstellungen oder Fehlkonfigurationen führen.
Sichere CI/CD-Pipelines: Implementieren Sie strenge Zugriffskontrollen, Multi-Faktor-Authentifizierung (MFA) und regelmäßige Audits.
Konfiguration sicher speichern: Halten Sie Bereitstellungsdateien frei von hartcodierten Geheimnissen und sensiblen Daten.
Verwenden Sie Sicherheitswerkzeuge für Infrastruktur als Code (IaC): Setzen Sie Tools wie Checkov oder Terraform Sentinel ein, um Sicherheitsrichtlinien durchzusetzen.
Unveränderliche Bereitstellungen: Verhindern Sie unbefugte Änderungen nach der Bereitstellung, indem Sie Praktiken für unveränderliche Infrastruktur anwenden.
Die Verwendung von nicht geprüften oder bösartigen Drittanbieter-Plugins kann Schwachstellen in Ihren serverlosen Anwendungen einführen.
Plugins gründlich prüfen: Bewerten Sie die Sicherheit von Plugins vor der Integration und bevorzugen Sie solche aus seriösen Quellen.
Verwendung von Plugins einschränken: Verwenden Sie nur notwendige Plugins, um die Angriffsfläche zu minimieren.
Überwachen Sie Plugin-Updates: Halten Sie Plugins auf dem neuesten Stand, um von Sicherheitsupdates zu profitieren.
Isolieren Sie Plugin-Umgebungen: Führen Sie Plugins in isolierten Umgebungen aus, um potenzielle Kompromisse einzudämmen.
Öffentlich zugängliche Funktionen oder uneingeschränkte APIs können für unbefugte Operationen ausgenutzt werden.
Zugriff auf Funktionen einschränken: Verwenden Sie VPCs, Sicherheitsgruppen und Firewall-Regeln, um den Zugriff auf vertrauenswürdige Quellen zu beschränken.
Robuste Authentifizierung implementieren: Stellen Sie sicher, dass alle exponierten Endpunkte eine ordnungsgemäße Authentifizierung und Autorisierung erfordern.
API-Gateways sicher verwenden: Konfigurieren Sie API-Gateways, um Sicherheitsrichtlinien durchzusetzen, einschließlich Eingangsvalidierung und Ratenbegrenzung.
Deaktivieren Sie ungenutzte Endpunkte: Überprüfen Sie regelmäßig und deaktivieren Sie alle Endpunkte, die nicht mehr verwendet werden.
Das Gewähren übermäßiger Berechtigungen an Teammitglieder und externe Mitarbeiter kann zu unbefugtem Zugriff, Datenverletzungen und Missbrauch von Ressourcen führen. Dieses Risiko ist in Umgebungen erhöht, in denen mehrere Personen unterschiedliche Zugriffsrechte haben, was die Angriffsfläche und das Potenzial für Insider-Bedrohungen erhöht.
Prinzip der geringsten Privilegien: Stellen Sie sicher, dass Teammitglieder und Mitarbeiter nur die Berechtigungen haben, die erforderlich sind, um ihre Aufgaben auszuführen.
Zugriffsschlüssel und Lizenzschlüssel sind kritische Anmeldeinformationen, die zur Authentifizierung und Autorisierung von Interaktionen mit der Serverless Framework CLI verwendet werden.
Lizenzschlüssel: Sie sind eindeutige Identifikatoren, die für die Authentifizierung des Zugriffs auf die Serverless Framework Version 4 erforderlich sind, die eine Anmeldung über die CLI ermöglicht.
Zugriffsschlüssel: Anmeldeinformationen, die es der Serverless Framework CLI ermöglichen, sich beim Serverless Framework Dashboard zu authentifizieren. Bei der Anmeldung mit serverless
cli wird ein Zugriffsschlüssel generiert und auf dem Laptop gespeichert. Sie können ihn auch als Umgebungsvariable mit dem Namen SERVERLESS_ACCESS_KEY
festlegen.
Offenlegung durch Code-Repositories:
Das Hartcodieren oder versehentliche Committen von Zugriffsschlüsseln und Lizenzschlüsseln in Versionskontrollsysteme kann zu unbefugtem Zugriff führen.
Unsichere Speicherung:
Das Speichern von Schlüsseln im Klartext innerhalb von Umgebungsvariablen oder Konfigurationsdateien ohne angemessene Verschlüsselung erhöht die Wahrscheinlichkeit einer Offenlegung.
Unsachgemäße Verteilung:
Das Teilen von Schlüsseln über unsichere Kanäle (z. B. E-Mail, Chat) kann zu einer Abfangung durch böswillige Akteure führen.
Mangelnde Rotation:
Das regelmäßige Rotieren von Schlüsseln verlängert die Expositionszeit, wenn Schlüssel kompromittiert werden.
Übermäßige Berechtigungen:
Schlüssel mit breiten Berechtigungen können ausgenutzt werden, um unbefugte Aktionen über mehrere Ressourcen hinweg durchzuführen.
Lernen & üben Sie AWS-Hacking:HackTricks Training AWS Red Team Expert (ARTE) Lernen & üben Sie GCP-Hacking: HackTricks Training GCP Red Team Expert (GRTE)