AWS - KMS Enum

Lernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

KMS - Schlüsselverwaltungsdienst

Der AWS Key Management Service (AWS KMS) wird als verwalteter Dienst präsentiert, der es Benutzern vereinfacht, Kundenhauptschlüssel (CMKs) zu erstellen und zu verwalten. Diese CMKs sind integral für die Verschlüsselung von Benutzerdaten. Ein bemerkenswertes Merkmal von AWS KMS ist, dass CMKs hauptsächlich durch Hardware-Sicherheitsmodule (HSMs) geschützt sind, was den Schutz der Verschlüsselungsschlüssel erhöht.

KMS verwendet symmetrische Verschlüsselung. Diese wird verwendet, um Informationen im Ruhezustand zu verschlüsseln (zum Beispiel, innerhalb eines S3). Wenn Sie Informationen im Transit verschlüsseln müssen, müssen Sie etwas wie TLS verwenden.

KMS ist ein regionsbezogener Dienst.

Administratoren bei Amazon haben keinen Zugriff auf Ihre Schlüssel. Sie können Ihre Schlüssel nicht wiederherstellen und sie helfen Ihnen nicht bei der Verschlüsselung Ihrer Schlüssel. AWS verwaltet lediglich das Betriebssystem und die zugrunde liegende Anwendung, es liegt an uns, unsere Verschlüsselungsschlüssel zu verwalten und zu bestimmen, wie diese Schlüssel verwendet werden.

Kundenhauptschlüssel (CMK): Können Daten bis zu einer Größe von 4 KB verschlüsseln. Sie werden in der Regel verwendet, um die DEKs (Data Encryption Keys) zu erstellen, zu verschlüsseln und zu entschlüsseln. Anschließend werden die DEKs verwendet, um die Daten zu verschlüsseln.

Ein Kundenhauptschlüssel (CMK) ist eine logische Darstellung eines Hauptschlüssels in AWS KMS. Neben den Identifikatoren des Hauptschlüssels und anderen Metadaten, einschließlich seines Erstellungsdatums, der Beschreibung und des Schlüsselzustands, enthält ein CMK das Schlüsselmaterial, das zur Verschlüsselung und Entschlüsselung von Daten verwendet wird. Wenn Sie einen CMK erstellen, generiert AWS KMS standardmäßig das Schlüsselmaterial für diesen CMK. Sie können jedoch wählen, einen CMK ohne Schlüsselmaterial zu erstellen und dann Ihr eigenes Schlüsselmaterial in diesen CMK zu importieren.

Es gibt 2 Arten von Hauptschlüsseln:

  • Von AWS verwaltete CMKs: Werden von anderen Diensten zur Verschlüsselung von Daten verwendet. Sie werden vom Dienst erstellt, der sie in einer Region erstellt hat. Sie werden alle 3 Jahre rotiert und es ist nicht möglich, sie zu ändern.

  • Kundenverwaltete CMKs: Flexibilität, Rotation, konfigurierbarer Zugriff und Schlüsselrichtlinie. Aktivieren und deaktivieren von Schlüsseln.

Umschlagverschlüsselung im Kontext des Key Management Service (KMS): Zweistufiges Hierarchiesystem, um Daten mit einem Datenkey zu verschlüsseln und dann den Datenkey mit einem Hauptschlüssel zu verschlüsseln.

Schlüsselrichtlinien

Diese definieren, wer einen Schlüssel in KMS verwenden und darauf zugreifen kann.

Standardmäßig:

  • Es gibt dem AWS-Konto, dem der KMS-Schlüssel gehört, uneingeschränkten Zugriff auf den KMS-Schlüssel.

Anders als bei anderen AWS-Richtlinien für Ressourcen gibt eine AWS KMS-Schlüsselrichtlinie nicht automatisch Berechtigungen für das Konto oder seine Benutzer. Um Kontoadministratoren Berechtigungen zu erteilen, muss die Schlüsselrichtlinie eine explizite Aussage enthalten, die diese Berechtigung erteilt, wie diese hier.

  • Ohne die Erlaubnis des Kontos ("AWS": "arn:aws:iam::111122223333:root") funktionieren IAM-Berechtigungen nicht.

  • Es ermöglicht dem Konto, IAM-Richtlinien zu verwenden, um den Zugriff auf den KMS-Schlüssel zu erlauben, zusätzlich zur Schlüsselrichtlinie.

Ohne diese Berechtigung sind IAM-Richtlinien, die den Zugriff auf den Schlüssel erlauben, unwirksam, obwohl IAM-Richtlinien, die den Zugriff auf den Schlüssel verweigern, weiterhin wirksam sind.

  • Es verringert das Risiko, dass der Schlüssel unverwaltbar wird, indem Zugriffskontrollberechtigungen an die Kontoadministratoren, einschließlich des Kontowurzelbenutzers, vergeben werden, der nicht gelöscht werden kann.

Beispiel für Standardrichtlinie:

{
"Sid": "Enable IAM policies",
"Effect": "Allow",
"Principal": {
"AWS": "arn:aws:iam::111122223333:root"
},
"Action": "kms:*",
"Resource": "*"
}

Wenn das Konto zugelassen ist ("arn:aws:iam::111122223333:root"), wird ein Hauptbenutzer aus dem Konto immer noch IAM-Berechtigungen benötigen, um den KMS-Schlüssel zu verwenden. Wenn jedoch die ARN einer Rolle beispielsweise in der Schlüsselpolitik ausdrücklich zugelassen ist, benötigt diese Rolle keine IAM-Berechtigungen.

Richtliniendetails

Eigenschaften einer Richtlinie:

  • Dokument basierend auf JSON

  • Ressource --> Betroffene Ressourcen (kann "*" sein)

  • Aktion --> kms:Encrypt, kms:Decrypt, kms:CreateGrant ... (Berechtigungen)

  • Effekt --> Erlauben/Verweigern

  • Hauptbenutzer --> betroffene ARN

  • Bedingungen (optional) --> Bedingung zur Erteilung der Berechtigungen

Genehmigungen:

  • Erlauben, Ihre Berechtigungen an einen anderen AWS-Hauptbenutzer innerhalb Ihres AWS-Kontos zu delegieren. Sie müssen sie mithilfe der AWS KMS-APIs erstellen. Es kann der CMK-Identifier, der begünstigte Hauptbenutzer und das erforderliche Betriebsniveau (Decrypt, Encrypt, GenerateDataKey...) angegeben werden.

  • Nachdem die Genehmigung erstellt wurde, werden ein GrantToken und eine GrantID ausgestellt.

Zugriff:

  • Über Schlüsselpolitik -- Wenn diese existiert, hat diese Vorrang vor der IAM-Richtlinie.

  • Über IAM-Richtlinie

  • Über Genehmigungen

Schlüsseladministratoren

Schlüsseladministrator standardmäßig:

  • Haben Zugriff auf das Verwalten von KMS, jedoch nicht auf das Verschlüsseln oder Entschlüsseln von Daten

  • Nur IAM-Benutzer und -Rollen können der Liste der Schlüsseladministratoren hinzugefügt werden (nicht Gruppen)

  • Wenn ein externer CMK verwendet wird, haben Schlüsseladministratoren die Berechtigung, Schlüsselmaterial zu importieren

Rotation von CMKs

  • Je länger derselbe Schlüssel an Ort und Stelle bleibt, desto mehr Daten werden mit diesem Schlüssel verschlüsselt, und wenn dieser Schlüssel kompromittiert wird, desto größer ist die Gefahr für die Daten. Zusätzlich dazu steigt mit der Aktivität des Schlüssels die Wahrscheinlichkeit, dass er kompromittiert wird.

  • KMS rotiert Kundenschlüssel alle 365 Tage (oder Sie können den Vorgang manuell durchführen, wann immer Sie möchten) und von AWS verwaltete Schlüssel alle 3 Jahre und diese Zeit kann nicht geändert werden.

  • Ältere Schlüssel werden beibehalten, um Daten zu entschlüsseln, die vor der Rotation verschlüsselt wurden.

  • Bei einem Bruch wird das Drehen des Schlüssels die Bedrohung nicht beseitigen, da es möglich sein wird, alle Daten zu entschlüsseln, die mit dem kompromittierten Schlüssel verschlüsselt wurden. Jedoch werden die neuen Daten mit dem neuen Schlüssel verschlüsselt.

  • Wenn der CMK im Zustand deaktiviert oder ausstehende Löschung ist, wird KMS keine Schlüsselrotation durchführen, bis der CMK wieder aktiviert oder die Löschung abgebrochen wird.

Manuelle Rotation

  • Ein neuer CMK muss erstellt werden, dann wird eine neue CMK-ID erstellt, sodass Sie alle Anwendungen aktualisieren müssen, um auf die neue CMK-ID zu verweisen.

  • Um diesen Prozess zu vereinfachen, können Sie Aliasnamen verwenden, um auf eine Schlüssel-ID zu verweisen, und dann einfach den Schlüssel aktualisieren, auf den sich der Alias bezieht.

  • Sie müssen alte Schlüssel behalten, um alte Dateien zu entschlüsseln, die damit verschlüsselt wurden.

Sie können Schlüssel aus Ihrer lokalen Schlüsselinfrastruktur importieren.

Weitere relevante KMS-Informationen

KMS wird pro Anzahl der Verschlüsselungs-/Entschlüsselungsanforderungen abgerechnet, die von allen Diensten pro Monat empfangen werden.

KMS verfügt über eine vollständige Audit- und Compliance-Integration mit CloudTrail; hier können Sie alle Änderungen überwachen, die an KMS vorgenommen wurden.

Mit der KMS-Richtlinie können Sie folgendes tun:

  • Begrenzen, wer Datenkeys erstellen kann und welche Dienste Zugriff haben, um diese Schlüssel zu verwenden

  • Begrenzen Sie den Systemzugriff auf nur Verschlüsseln, nur Entschlüsseln oder beides

  • Definieren, um Systemen den Zugriff auf Schlüssel in verschiedenen Regionen zu ermöglichen (obwohl es nicht empfohlen wird, da ein Ausfall in der Region, die KMS hostet, die Verfügbarkeit von Systemen in anderen Regionen beeinträchtigen wird).

Sie können keine Schlüssel zwischen Regionen synchronisieren oder verschieben/kopieren; Sie können nur Regeln definieren, um den Zugriff zwischen Regionen zu ermöglichen.

Enumeration

aws kms list-keys
aws kms list-key-policies --key-id <id>
aws kms list-grants --key-id <id>
aws kms describe-key --key-id <id>
aws kms get-key-policy --key-id <id> --policy-name <name> # Default policy name is "default"
aws kms describe-custom-key-stores

Privilege Escalation

pageAWS - KMS Privesc

Post Exploitation

pageAWS - KMS Post Exploitation

Persistence

pageAWS - KMS Persistence

References

Erlernen Sie AWS-Hacking von Null auf Held mit htARTE (HackTricks AWS Red Team Expert)!

Andere Möglichkeiten, HackTricks zu unterstützen:

Last updated