mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-01-01 07:25:51 -08:00
Translated ['src/banners/hacktricks-training.md', 'src/pentesting-ci-cd/
This commit is contained in:
@@ -2,15 +2,15 @@
|
||||
|
||||
{{#include ../banners/hacktricks-training.md}}
|
||||
|
||||
## Grundlegende Informationen
|
||||
## Grundinformationen
|
||||
|
||||
### Organisation
|
||||
|
||||
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 andere große Einheit, die mehrere Projekte, Teams und Anwendungen umfasst.
|
||||
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.
|
||||
|
||||
### Team
|
||||
|
||||
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 Organisationseinstellungen verwalten können.
|
||||
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.
|
||||
|
||||
### Anwendung
|
||||
|
||||
@@ -34,7 +34,7 @@ handler: handler.hello
|
||||
|
||||
Eine **Funktion** stellt eine einzelne serverlose Funktion dar, wie z.B. eine AWS Lambda-Funktion. Sie enthält den Code, der als Reaktion auf Ereignisse ausgeführt wird.
|
||||
|
||||
Sie ist im Abschnitt `functions` in `serverless.yml` definiert und gibt den Handler, die Laufzeit, Ereignisse, Umgebungsvariablen und andere Einstellungen an.
|
||||
Sie wird im Abschnitt `functions` in `serverless.yml` definiert, wobei der Handler, die Laufzeit, Ereignisse, Umgebungsvariablen und andere Einstellungen angegeben werden.
|
||||
```yaml
|
||||
functions:
|
||||
hello:
|
||||
@@ -128,7 +128,7 @@ region: us-west-2
|
||||
|
||||
<summary>Plugins</summary>
|
||||
|
||||
**Plugins** erweitern die Funktionalität des Serverless Frameworks, indem sie neue Funktionen hinzufügen oder mit anderen Tools und Diensten integriert werden. Sie werden im Abschnitt `plugins` definiert und über npm installiert.
|
||||
**Plugins** erweitern die Funktionalität des Serverless Frameworks, indem sie neue Funktionen hinzufügen oder mit anderen Tools und Diensten integriert werden. Sie sind im Abschnitt `plugins` definiert und werden über npm installiert.
|
||||
```yaml
|
||||
plugins:
|
||||
- serverless-offline
|
||||
@@ -157,7 +157,7 @@ layers:
|
||||
|
||||
<summary>Variablen und benutzerdefinierte Variablen</summary>
|
||||
|
||||
**Variablen** ermöglichen eine dynamische Konfiguration, indem sie die Verwendung von Platzhaltern erlauben, die zur Deploy-Zeit aufgelöst werden.
|
||||
**Variablen** ermöglichen eine dynamische Konfiguration, indem sie die Verwendung von Platzhaltern erlauben, die zur Zeit der Bereitstellung aufgelöst werden.
|
||||
|
||||
- **Syntax:** `${variable}`-Syntax kann auf Umgebungsvariablen, Dateiinhalte oder andere Konfigurationsparameter verweisen.
|
||||
|
||||
@@ -183,7 +183,7 @@ stage: ${opt:stage, 'dev'}
|
||||
|
||||
<summary>Ausgaben</summary>
|
||||
|
||||
**Ausgaben** definieren die Werte, die nach der Bereitstellung eines Dienstes zurückgegeben werden, wie z. B. Ressourcen-ARNs, Endpunkte oder andere nützliche Informationen. Sie werden im Abschnitt `outputs` angegeben und häufig verwendet, um Informationen an andere Dienste weiterzugeben oder den einfachen Zugriff nach der Bereitstellung zu ermöglichen.
|
||||
**Ausgaben** definieren die Werte, die nach der Bereitstellung eines Dienstes zurückgegeben werden, wie z.B. Ressourcen-ARNs, Endpunkte oder andere nützliche Informationen. Sie werden im Abschnitt `outputs` angegeben und häufig verwendet, um Informationen an andere Dienste weiterzugeben oder um einen einfachen Zugriff nach der Bereitstellung zu ermöglichen.
|
||||
```yaml
|
||||
¡outputs:
|
||||
ApiEndpoint:
|
||||
@@ -204,7 +204,7 @@ Fn::Join:
|
||||
|
||||
<summary>IAM-Rollen und Berechtigungen</summary>
|
||||
|
||||
**IAM-Rollen und Berechtigungen** definieren die Sicherheitsanmeldeinformationen und Zugriffsrechte für Ihre Funktionen und andere Ressourcen. Sie werden unter den `provider`- oder individuellen Funktionseinstellungen verwaltet, um die erforderlichen Berechtigungen anzugeben.
|
||||
**IAM-Rollen und Berechtigungen** definieren die Sicherheitsanmeldeinformationen und Zugriffsrechte für Ihre Funktionen und andere Ressourcen. Sie werden unter den `provider` oder den Einstellungen der einzelnen Funktionen verwaltet, um die erforderlichen Berechtigungen festzulegen.
|
||||
```yaml
|
||||
provider:
|
||||
[...]
|
||||
@@ -226,7 +226,7 @@ Resource: arn:aws:dynamodb:${aws:region}:${aws:accountId}:table/${self:service}-
|
||||
|
||||
<summary>Umgebungsvariablen</summary>
|
||||
|
||||
**Variablen** ermöglichen es Ihnen, Konfigurationseinstellungen und Geheimnisse an Ihre Funktionen zu übergeben, ohne sie hart zu codieren. Sie werden im Abschnitt `environment` für entweder den Anbieter oder einzelne Funktionen definiert.
|
||||
**Variablen** ermöglichen es Ihnen, Konfigurationseinstellungen und Geheimnisse an Ihre Funktionen zu übergeben, ohne sie fest einzugeben. Sie werden im Abschnitt `environment` für entweder den Anbieter oder einzelne Funktionen definiert.
|
||||
```yaml
|
||||
provider:
|
||||
environment:
|
||||
@@ -284,7 +284,7 @@ serverless #Choose first one (AWS / Node.js / HTTP API)
|
||||
## Create A New App
|
||||
## Indicate a name like "tutorialapp)
|
||||
```
|
||||
Dies sollte eine **App** namens `tutorialapp` erstellt haben, die Sie in [serverless.com](serverless.com-security.md) ü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:
|
||||
Dies sollte eine **App** namens `tutorialapp` erstellt haben, die Sie in [serverless.com](serverless.com-security.md) ü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 der Datei **`serverless.yml`**, die diese Funktion deklariert:
|
||||
|
||||
{{#tabs }}
|
||||
{{#tab name="handler.js" }}
|
||||
@@ -324,7 +324,7 @@ method: get
|
||||
{{#endtabs }}
|
||||
|
||||
4. Erstellen Sie einen AWS-Anbieter, indem Sie im **Dashboard** zu `https://app.serverless.com/<org name>/settings/providers?providerId=new&provider=aws` gehen.
|
||||
1. 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](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
|
||||
1. Um `serverless.com` Zugriff auf AWS zu gewähren, wird es aufgefordert, einen CloudFormation-Stack mit dieser Konfigurationsdatei auszuführen (zum Zeitpunkt des Schreibens): [https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml](https://serverless-framework-template.s3.amazonaws.com/roleTemplate.yml)
|
||||
2. 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.
|
||||
|
||||
<details>
|
||||
@@ -482,8 +482,8 @@ TableName: ${self:service}-customerTable-${sls:stage}
|
||||
{{#endtabs }}
|
||||
|
||||
6. Bereitstellung mit **`serverless deploy`**
|
||||
1. Die Bereitstellung erfolgt über einen CloudFormation-Stack
|
||||
2. Beachten Sie, dass die **Lambdas über das API-Gateway exponiert sind** und nicht über direkte URLs
|
||||
1. Die Bereitstellung erfolgt über einen CloudFormation Stack
|
||||
2. Beachten Sie, dass die **lambdas über API Gateway exponiert sind** und nicht über direkte URLs
|
||||
7. **Testen Sie es**
|
||||
1. Der vorherige Schritt gibt die **URLs** aus, unter denen Ihre API-Endpunkt-Lambda-Funktionen bereitgestellt wurden
|
||||
|
||||
@@ -556,7 +556,7 @@ Das Speichern sensibler Informationen (z. B. API-Schlüssel, Datenbankanmeldeinf
|
||||
Die **empfohlene** Methode zum Speichern von Umgebungsvariablen in der **`serverless.yml`**-Datei von serverless.com (zum Zeitpunkt dieses Schreibens) besteht darin, die `ssm`- oder `s3`-Provider zu verwenden, die es ermöglichen, die **Umgebungswerte aus diesen Quellen zur Bereitstellungszeit abzurufen** und die **Umgebungsvariablen der **lambdas** mit dem **Text ohne die Werte** zu konfigurieren!
|
||||
|
||||
> [!CAUTION]
|
||||
> Daher kann jeder, der Berechtigungen zum Lesen der Konfiguration der lambdas innerhalb von AWS hat, **auf alle diese Umgebungsvariablen im Klartext zugreifen!**
|
||||
> Daher kann jeder mit Berechtigungen zum Lesen der Konfiguration der lambdas innerhalb von AWS **auf alle diese Umgebungsvariablen im Klartext zugreifen!**
|
||||
|
||||
Zum Beispiel wird das folgende Beispiel SSM verwenden, um eine Umgebungsvariable abzurufen:
|
||||
```yaml
|
||||
@@ -564,14 +564,14 @@ provider:
|
||||
environment:
|
||||
DB_PASSWORD: ${ssm:/aws/reference/secretsmanager/my-db-password~true}
|
||||
```
|
||||
Und selbst wenn dies das Hardcoding des Wertes der Umgebungsvariablen in der **`serverless.yml`**-Datei verhindert, wird der Wert zur Zeit der Bereitstellung abgerufen und wird **im Klartext in der Lambda-Umgebungsvariablen hinzugefügt**.
|
||||
Und selbst wenn dies das Hardcoding des Wertes der Umgebungsvariable in der **`serverless.yml`**-Datei verhindert, wird der Wert zur Zeit der Bereitstellung abgerufen und wird **im Klartext in der Lambda-Umgebungsvariable hinzugefügt**.
|
||||
|
||||
> [!TIP]
|
||||
> Der empfohlene Weg, Umgebungsvariablen mit serveless.com zu speichern, wäre, **es in einem AWS-Geheimnis zu speichern** und nur den geheimen Namen in der Umgebungsvariablen zu speichern, und der **Lambda-Code sollte es abrufen**.
|
||||
> Der empfohlene Weg, Umgebungsvariablen mit serveless.com zu speichern, wäre, **sie in einem AWS-Geheimnis zu speichern** und nur den geheimen Namen in der Umgebungsvariable zu speichern, und der **Lambda-Code sollte es abrufen**.
|
||||
|
||||
#### **Minderungsstrategien**
|
||||
|
||||
- **Secrets Manager-Integration:** Verwenden Sie Dienste wie **AWS Secrets Manager.**
|
||||
- **Secrets Manager Integration:** Verwenden Sie Dienste wie **AWS Secrets Manager.**
|
||||
- **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.
|
||||
|
||||
@@ -583,7 +583,7 @@ Veraltete oder unsichere Abhängigkeiten können Schwachstellen einführen, wäh
|
||||
|
||||
#### **Minderungsstrategien**
|
||||
|
||||
- **Abhängigkeitsmanagement:** Aktualisieren Sie regelmäßig Abhängigkeiten und scannen Sie auf Schwachstellen.
|
||||
- **Abhängigkeitsmanagement:** Aktualisieren Sie regelmäßig Abhängigkeiten und scannen Sie nach Schwachstellen.
|
||||
|
||||
```yaml
|
||||
plugins:
|
||||
@@ -592,7 +592,7 @@ plugins:
|
||||
```
|
||||
|
||||
- **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.
|
||||
- **Code-Überprüfungen:** Führen Sie gründliche Überprüfungen durch, um Sicherheitsfehler zu identifizieren.
|
||||
- **Statische Analyse:** Verwenden Sie Tools, um Schwachstellen im Code zu erkennen.
|
||||
|
||||
---
|
||||
@@ -610,8 +610,8 @@ plugins:
|
||||
- serverless-plugin-datadog
|
||||
```
|
||||
|
||||
- **Detailliertes Logging aktivieren:** Erfassen Sie wesentliche Informationen, ohne sensible Daten offenzulegen.
|
||||
- **Alarme einrichten:** Konfigurieren Sie Alarme für verdächtige Aktivitäten oder Anomalien.
|
||||
- **Aktivieren Sie detailliertes Logging:** Erfassen Sie wesentliche Informationen, ohne sensible Daten offenzulegen.
|
||||
- **Einrichten von Warnungen:** Konfigurieren Sie Warnungen für verdächtige Aktivitäten oder Anomalien.
|
||||
- **Regelmäßige Überwachung:** Überwachen Sie kontinuierlich Protokolle und Metriken auf potenzielle Sicherheitsvorfälle.
|
||||
|
||||
---
|
||||
@@ -672,7 +672,7 @@ Geteilte Ressourcen und unzureichende Isolation können zu Privilegieneskalation
|
||||
#### **Minderungsstrategien**
|
||||
|
||||
- **Funktionen isolieren:** Weisen Sie unterschiedliche Ressourcen und IAM-Rollen zu, um einen unabhängigen Betrieb sicherzustellen.
|
||||
- **Ressourcenpartitionierung:** Verwenden Sie separate Datenbanken oder Speicherorte für verschiedene Funktionen.
|
||||
- **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.
|
||||
|
||||
```yaml
|
||||
@@ -708,7 +708,7 @@ SSEEnabled: true
|
||||
|
||||
- **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.
|
||||
- **Verschlüsselungsschlüssel sicher verwalten:** Verwenden Sie verwaltete Schlüsseldienste und rotieren Sie Schlüssel regelmäßig.
|
||||
- **Verwalten Sie Verschlüsselungsschlüssel sicher:** Verwenden Sie verwaltete Schlüsseldienste und rotieren Sie Schlüssel regelmäßig.
|
||||
|
||||
---
|
||||
|
||||
@@ -736,11 +736,11 @@ body: JSON.stringify({ message: 'Interner Serverfehler' }),
|
||||
```
|
||||
|
||||
- **Zentralisierte Fehlerbehandlung:** Verwalten und sanitieren Sie Fehler konsistent über alle Funktionen hinweg.
|
||||
- **Fehler überwachen und protokollieren:** Verfolgen und analysieren Sie Fehler intern, ohne Details an Endbenutzer offenzulegen.
|
||||
- **Überwachen und Protokollieren von Fehlern:** Verfolgen und analysieren Sie Fehler intern, ohne Details für Endbenutzer offenzulegen.
|
||||
|
||||
---
|
||||
|
||||
### **Unsichere Bereitstellungsmethoden**
|
||||
### **Unsichere Bereitstellung Praktiken**
|
||||
|
||||
Offengelegte Bereitstellungskonfigurationen oder unbefugter Zugriff auf CI/CD-Pipelines können zu böswilligen Codebereitstellungen oder Fehlkonfigurationen führen.
|
||||
|
||||
@@ -748,8 +748,8 @@ Offengelegte Bereitstellungskonfigurationen oder unbefugter Zugriff auf CI/CD-Pi
|
||||
|
||||
- **Sichere CI/CD-Pipelines:** Implementieren Sie strenge Zugriffskontrollen, Multi-Faktor-Authentifizierung (MFA) und regelmäßige Audits.
|
||||
- **Konfiguration sicher speichern:** Halten Sie Bereitstellungsdateien frei von hardcodierten Geheimnissen und sensiblen Daten.
|
||||
- **Verwenden Sie Sicherheitswerkzeuge für Infrastructure as 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 der unveränderlichen Infrastruktur übernehmen.
|
||||
- **Verwenden Sie Sicherheitswerkzeuge für Infrastruktur als Code (IaC):** Verwenden Sie Tools wie **Checkov** oder **Terraform Sentinel**, um Sicherheitsrichtlinien durchzusetzen.
|
||||
- **Unveränderliche Bereitstellungen:** Verhindern Sie unbefugte Änderungen nach der Bereitstellung, indem Sie Praktiken für unveränderliche Infrastruktur übernehmen.
|
||||
|
||||
---
|
||||
|
||||
@@ -761,8 +761,8 @@ Die Verwendung von nicht geprüften oder bösartigen Drittanbieter-Plugins kann
|
||||
|
||||
- **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.
|
||||
- **Plugin-Updates überwachen:** Halten Sie Plugins auf dem neuesten Stand, um von Sicherheitsupdates zu profitieren.
|
||||
- **Plugin-Umgebungen isolieren:** Führen Sie Plugins in isolierten Umgebungen aus, um potenzielle Kompromisse einzudämmen.
|
||||
- **Ü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.
|
||||
|
||||
---
|
||||
|
||||
@@ -775,7 +775,7 @@ Die Verwendung von nicht geprüften oder bösartigen Drittanbieter-Plugins kann
|
||||
- **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.
|
||||
- **Nicht verwendete Endpunkte deaktivieren:** Überprüfen Sie regelmäßig und deaktivieren Sie alle Endpunkte, die nicht mehr verwendet werden.
|
||||
- **Deaktivieren Sie ungenutzte Endpunkte:** Überprüfen Sie regelmäßig und deaktivieren Sie alle Endpunkte, die nicht mehr verwendet werden.
|
||||
|
||||
---
|
||||
|
||||
@@ -794,14 +794,14 @@ Das Gewähren übermäßiger Berechtigungen an Teammitglieder und externe Mitarb
|
||||
**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 der `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.
|
||||
- **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.
|
||||
|
||||
#### **Sicherheitsrisiken**
|
||||
|
||||
1. **Offenlegung durch Code-Repositories:**
|
||||
- Hardcoding oder versehentliches Committen von Zugriffsschlüsseln und Lizenzschlüsseln in Versionskontrollsysteme kann zu unbefugtem Zugriff führen.
|
||||
2. **Unsichere Speicherung:**
|
||||
- Das Speichern von Schlüsseln im Klartext innerhalb von Umgebungsvariablen oder Konfigurationsdateien ohne angemessene Verschlüsselung erhöht die Wahrscheinlichkeit einer Offenlegung.
|
||||
- Das Speichern von Schlüsseln im Klartext innerhalb von Umgebungsvariablen oder Konfigurationsdateien ohne angemessene Verschlüsselung erhöht die Wahrscheinlichkeit eines Lecks.
|
||||
3. **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.
|
||||
4. **Mangelnde Rotation:**
|
||||
|
||||
Reference in New Issue
Block a user