Cloudsplaining ist ein AWS IAM Security Assessment Tool, das Verstöße gegen das Least-Privilege-Prinzip identifiziert und einen risikopriorisierten Bericht erstellt.
Cloudsplaining ist ein AWS IAM-Sicherheitsbewertungstool, das Verstöße gegen das Least-Privilege-Prinzip identifiziert und einen nach Risiko priorisierten HTML-Bericht erstellt.
Die vollständige Dokumentation finden Sie auf dem Projekt auf ReadTheDocs.
Cloudsplaining identifiziert Verstöße gegen das Least-Privilege-Prinzip in AWS IAM-Richtlinien und erstellt einen ansprechenden HTML-Bericht. Es kann alle Richtlinien in Ihrem AWS-Konto, über mehrere AWS-Konten hinweg oder eine einzelne Richtliniendatei scannen.
Es hilft, IAM-Aktionen zu identifizieren, die keine Ressourceneinschränkungen nutzen. Es unterstützt auch die Priorisierung des Behebungsprozesses, indem es IAM-Richtlinien kennzeichnet, die die folgenden Risiken für das betreffende AWS-Konto ohne Einschränkung darstellen:
s3:GetObject, ssm:GetParameter, secretsmanager:GetSecretValue)Cloudsplaining identifiziert auch IAM-Rollen, die von AWS-Computing-Diensten (wie EC2, ECS, EKS oder Lambda) übernommen werden können, da sie ein größeres Risiko darstellen können als benutzerdefinierte Rollen – insbesondere wenn der AWS-Computing-Dienst auf einer Instanz ausgeführt wird, die direkt oder indirekt mit dem Internet verbunden ist. Die Kennzeichnung dieser Rollen ist für Penetrationstester (oder Angreifer) unter bestimmten Szenarien besonders nützlich. Wenn ein Angreifer beispielsweise Berechtigungen zur Ausführung von ssm:SendCommand erlangt und privilegierte EC2-Instanzen mit installiertem SSM-Agenten vorhanden sind, kann er effektiv über die Berechtigungen dieser EC2-Instanzen verfügen. Remote Code Execution über AWS Systems Manager Agent war bereits ein bekannter Eskalations-/Ausnutzungspfad, aber Cloudsplaining kann die Identifizierung dieser Fälle erleichtern. Beispiele finden Sie im Beispielbericht.
Sie können auch eine benutzerdefinierte Ausschlussdatei angeben, um Ergebnisse zu filtern, die aus verschiedenen Gründen False Positives sind. Beispielsweise sind Benutzerrichtlinien von Natur aus freizügig, während Systemrollen im Allgemeinen restriktiver sind. Möglicherweise haben Sie auch Ausschlüsse, die für die Multi-Account-Strategie Ihrer Organisation oder die AWS-Anwendungsarchitektur spezifisch sind.
Policy Sentry hat uns gezeigt, dass es möglich ist, IAM-Richtlinien endlich in skalierbarer Weise nach dem Least-Privilege-Prinzip zu erstellen. Vor der Veröffentlichung von Policy Sentry war es zu einfach, IAM-Richtliniendokumente zu finden, denen Ressourceneinschränkungen fehlten. Betrachten Sie die folgende Richtlinie, die es dem IAM-Principal (einer Rolle oder einem Benutzer) erlaubt, s3:PutObject auf einem beliebigen S3-Bucket im AWS-Konto auszuführen:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:PutObject"
],
"Resource": "*"
}
]
}
Das ist schlecht. Idealerweise sollte der Zugriff gemäß den Ressourcen-ARNs eingeschränkt werden, wie folgt:```json
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"s3:GetObject"
],
"Resource": "arn:aws:s3:::my-bucket/*"
}
]
}
Policy Sentry macht es wirklich einfach, dies zu tun. Sobald Infrastructure-as-Code-Entwickler oder AWS-Administratoren mit dem Tool vertraut werden (das recht einfach zu bedienen ist), haben wir festgestellt, dass die Adoption sehr schnell beginnt. Allerdings, wenn Sie AWS bereits nutzen, gibt es wahrscheinlich einen sehr großen Rückstand an IAM-Richtlinien, die einer Verbesserung bedürfen. Wenn Sie Hunderte von AWS-Konten mit Dutzenden von Richtlinien in jedem haben, wie können wir diese AWS-Konten absichern, indem wir programmatisch die Richtlinien identifizieren, die korrigiert werden sollten?
Deshalb haben wir Cloudsplaining geschrieben.
Cloudsplaining identifiziert Verstöße gegen das Prinzip der minimalen Rechte in AWS-IAM-Richtlinien und erstellt einen ansprechenden HTML-Bericht. Es kann alle Richtlinien in Ihrem AWS-Konto, über mehrere AWS-Konten hinweg oder eine einzelne Richtliniendatei scannen.
brew tap salesforce/cloudsplaining https://github.com/salesforce/cloudsplaining brew install cloudsplaining
#### Pip3```bash
pip3 install --user cloudsplaining
cloudsplaining von der Kommandozeile aus ausführen können, indem Sie cloudsplaining --help eingeben.Um die Bash-Vervollständigung zu aktivieren, fügen Sie Folgendes in Ihre .bashrc ein:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=bash_source cloudsplaining)"
Um die ZSH-Vervollständigung zu aktivieren, fügen Sie dies in Ihre .zshrc ein:```bash
eval "$(_CLOUDSPLAINING_COMPLETE=zsh_source cloudsplaining)"
Sie können auch eine einzelne Richtliniendatei scannen, um Risiken zu identifizieren, anstatt eines gesamten Kontos.```bash cloudsplaining scan-policy-file --input-file examples/policies/explicit-actions.json
Die Ausgabe wird eine Beschreibung des Fundes sowie eine Liste der IAM-Aktionen enthalten, die keine Ressourceneinschränkungen nutzen.
Die Ausgabe wird wie folgt aussehen:```console
Issue found: Data Exfiltration
Actions: s3:GetObject
Issue found: Resource Exposure
Actions: ecr:DeleteRepositoryPolicy, ecr:SetRepositoryPolicy, s3:BypassGovernanceRetention, s3:DeleteAccessPointPolicy, s3:DeleteBucketPolicy, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccessPointPolicy, s3:PutAccountPublicAccessBlock, s3:PutBucketAcl, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutObjectAcl, s3:PutObjectVersionAcl
Issue found: Unrestricted Infrastructure Modification
Actions: ecr:BatchDeleteImage, ecr:CompleteLayerUpload, ecr:CreateRepository, ecr:DeleteLifecyclePolicy, ecr:DeleteRepository, ecr:DeleteRepositoryPolicy, ecr:InitiateLayerUpload, ecr:PutImage, ecr:PutImageScanningConfiguration, ecr:PutImageTagMutability, ecr:PutLifecyclePolicy, ecr:SetRepositoryPolicy, ecr:StartImageScan, ecr:StartLifecyclePolicyPreview, ecr:TagResource, ecr:UntagResource, ecr:UploadLayerPart, s3:AbortMultipartUpload, s3:BypassGovernanceRetention, s3:CreateAccessPoint, s3:CreateBucket, s3:DeleteAccessPoint, s3:DeleteAccessPointPolicy, s3:DeleteBucket, s3:DeleteBucketPolicy, s3:DeleteBucketWebsite, s3:DeleteObject, s3:DeleteObjectTagging, s3:DeleteObjectVersion, s3:DeleteObjectVersionTagging, s3:GetObject, s3:ObjectOwnerOverrideToBucketOwner, s3:PutAccelerateConfiguration, s3:PutAccessPointPolicy, s3:PutAnalyticsConfiguration, s3:PutBucketAcl, s3:PutBucketCORS, s3:PutBucketLogging, s3:PutBucketNotification, s3:PutBucketObjectLockConfiguration, s3:PutBucketPolicy, s3:PutBucketPublicAccessBlock, s3:PutBucketRequestPayment, s3:PutBucketTagging, s3:PutBucketVersioning, s3:PutBucketWebsite, s3:PutEncryptionConfiguration, s3:PutInventoryConfiguration, s3:PutLifecycleConfiguration, s3:PutMetricsConfiguration, s3:PutObject, s3:PutObjectAcl, s3:PutObjectLegalHold, s3:PutObjectRetention, s3:PutObjectTagging, s3:PutObjectVersionAcl, s3:PutObjectVersionTagging, s3:PutReplicationConfiguration, s3:ReplicateDelete, s3:ReplicateObject, s3:ReplicateTags, s3:RestoreObject, s3:UpdateJobPriority, s3:UpdateJobStatus
Wir können ein gesamtes AWS-Konto scannen und Berichte erstellen. Dazu nutzen wir den AWS IAM get-account-authorization-details API-Aufruf, der eine große JSON-Datei (ca. 100KB pro Konto) herunterlädt, die alle IAM-Details des Kontos enthält. Dies umfasst Daten zu Benutzern, Gruppen, Rollen, kundenverwalteten Richtlinien und AWS-verwalteten Richtlinien.
Sie müssen AWS-Anmeldeinformationen konfiguriert haben, die von der CLI verwendet werden können.
Sie müssen über die Berechtigungen verfügen, um iam:GetAccountAuthorizationDetails auszuführen. Die Richtlinie arn:aws:iam::aws:policy/SecurityAudit beinhaltet dies, ebenso wie viele andere, die Lesezugriff auf den IAM-Dienst erlauben.
Um die Konto-Autorisierungsdetails herunterzuladen, stellen Sie sicher, dass Sie bei AWS authentifiziert sind, und führen Sie dann den download-Befehl von cloudsplaining aus:```bash
cloudsplaining download
* Wenn Sie es vorziehen, Ihre Datei `~/.aws/credentials` anstelle von Umgebungsvariablen zu verwenden, können Sie den Profilnamen angeben:```bash
cloudsplaining download --profile myprofile
Es wird eine JSON-Datei in Ihrem aktuellen Verzeichnis herunterladen, die Ihre Kontoberechtigungsdetails enthält.
Das Cloudsplaining-Tool versucht nicht, den Kontext hinter allem in Ihrem AWS-Konto zu verstehen. Es ist möglich, den Kontext hinter einigen dieser Dinge programmatisch zu verstehen – ob die Richtlinie auf ein Instanzprofil angewendet wird, ob die Richtlinie angehängt ist, ob Inline-IAM-Richtlinien verwendet werden und ob AWS Managed Policies verwendet werden. Nur Sie kennen den Kontext hinter dem Design Ihrer AWS-Infrastruktur und der IAM-Strategie.
Daher ist es wichtig, kontextabhängige Fehlalarme zu eliminieren. Dies können Sie mit einer Exclusions-Datei tun. Wir haben einen Befehl beigefügt, der eine Exclusions-Datei für Sie generiert, damit Sie sich das erforderliche Format nicht merken müssen.
Sie können eine Exclusions-Vorlage mit dem folgenden Befehl erstellen:```bash cloudsplaining create-exclusions-file
Dies wird eine Datei mit dem Namen `exclusions.yml` in Ihrem aktuellen Verzeichnis erstellen. Wenn Sie nun den Befehl `scan` ausführen, können Sie die Ausschlussdatei wie folgt verwenden:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
Weitere Informationen zur Struktur der Ausschlussdatei finden Sie unter Filtern von Falschmeldungen
Nachdem wir die Kontoautorisierungsdatei heruntergeladen haben, können wir alle AWS IAM-Richtlinien mit cloudsplaining scannen.
Führen Sie den folgenden Befehl aus:```bash cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
Es wird einen HTML-Bericht wie [diesen](https://opensource.salesforce.com/cloudsplaining/) erstellen:
> 
Es wird auch eine rohe JSON-Datendatei erstellen:
* `default-iam-results.json`: Diese Datei enthält die rohe JSON-Ausgabe des Berichts. Sie können diese Datendatei für verschiedene Zwecke mit den Scan-Ergebnissen verwenden. Beispielsweise könnten Sie ein Python-Skript schreiben, das diese Daten parst und automatisch JIRA-Issues oder Salesforce-Arbeitselemente erstellt. Ein Beispiel-Eintrag wird unten gezeigt. Das vollständige Beispiel kann unter [examples/files/iam-results-example.json](https://github.com/salesforce/cloudsplaining/blob/master/examples/files/iam-results-example.json) eingesehen werden.```json
{
"example-authz-details": [
{
"AccountID": "012345678901",
"ManagedBy": "Customer",
"PolicyName": "InsecureUserPolicy",
"Arn": "arn:aws:iam::012345678901:user/userwithlotsofpermissions",
"ActionsCount": 2,
"ServicesCount": 1,
"Actions": [
"s3:PutObject",
"s3:PutObjectAcl"
],
"Services": [
"s3"
]
}
]
}
See the examples/files folder for sample output.
Ressourcenbeschränkungen sind bewährte Praxis – insbesondere für Systemrollen/Instanzprofile – aber manchmal sind diese absichtlich. Betrachten Sie beispielsweise eine Situation, in der eine benutzerdefinierte IAM-Richtlinie für ein Instanzprofil einer EC2-Instanz verwendet wird, die Terraform bereitstellt. In diesem Fall sind umfangreiche Berechtigungen Designanforderungen – daher möchten wir diese nicht in die Ergebnisse aufnehmen.
Sie können eine Ausschlussvorlage mit dem folgenden Befehl erstellen:```bash cloudsplaining create-exclusions-file
Dies wird eine Datei mit dem Namen `exclusions.yml` in Ihrem aktuellen Verzeichnis erstellen.
Die Standard-Ausschlussdatei sieht wie folgt aus:```yaml
# Policy names to exclude from evaluation
# Suggestion: Add policies here that are known to be overly permissive by design, after you run the initial report.
policies:
- "AWSServiceRoleFor*"
- "*ServiceRolePolicy"
- "*ServiceLinkedRolePolicy"
- "AdministratorAccess" # Otherwise, this will take a long time
- "service-role*"
- "aws-service-role*"
# Don't evaluate these roles, users, or groups as part of the evaluation
roles:
- "service-role*"
- "aws-service-role*"
users:
- ""
groups:
- ""
# Read-only actions to include in the results, such as s3:GetObject
# By default, it includes Actions that could lead to Data Exfiltration
include-actions:
- "s3:GetObject"
- "ssm:GetParameter"
- "ssm:GetParameters"
- "ssm:GetParametersByPath"
- "secretsmanager:GetSecretValue"
# Write actions to include from the results, such as kms:Decrypt
exclude-actions:
- ""
policies den Pfad der Policy-Namen an, die Sie ausschließen möchten.MyRole ausschließen möchten, listen Sie MyRole oder MyR* in der roles-Liste auf.users- und groups-Liste verwenden.Wenn Sie nun den Befehl scan ausführen, können Sie die Ausschlussdatei wie folgt verwenden:```bash
cloudsplaining scan --exclusions-file exclusions.yml --input-file examples/files/example.json --output examples/files/
### Scannen mehrerer AWS-Konten
Wenn Ihr IAM-Benutzer oder Ihre IAM-Rolle über `sts:AssumeRole`-Berechtigungen für eine gemeinsame IAM-Rolle in mehreren AWS-Konten verfügt, können Sie den Befehl `scan-multi-account` verwenden.
Dieses Diagramm zeigt, wie der Prozess funktioniert:

> Hinweis: Wenn Sie neu in der Einrichtung von kontenübergreifendem Zugriff sind, lesen Sie [das offizielle AWS-Tutorial zum Delegieren von Zugriff über AWS-Konten hinweg mithilfe von IAM-Rollen](https://docs.aws.amazon.com/IAM/latest/UserGuide/tutorial_cross-account-with-roles.html). Dies kann Ihnen beim Einrichten der obigen Architektur helfen.
* Zuerst müssen Sie die Konfigurationsdatei für mehrere Konten erstellen. Führen Sie den folgenden Befehl aus:```bash
cloudsplaining create-multi-account-config-file \
-o multi-account-config.yml
multi-account-config.yml mit dem folgenden Inhalt erstellt:```yaml
accounts:
default_account: 123456789012
prod: 123456789013
test: 123456789014> Hinweis: Beachten Sie, dass das Format der obigen Datei `account_name: accountID` enthält. Bearbeiten Sie den Dateiinhalt, um Ihren gewünschten Kontonamen und Ihre Kontonummer anzupassen. Fügen Sie so viele Kontonummern hinzu, wie Sie möchten.
Für den nächsten Schritt nehmen wir an, dass:
* Wir eine Rolle in den Zielkonten mit dem Namen `CommonSecurityRole` haben.
* Die Anmeldedaten für Ihren IAM-Benutzer befinden sich unter dem AWS-Anmeldedatenprofil mit dem Namen `scanning-user`.
* Dieser Benutzer hat `sts:AssumeRole`-Berechtigungen, um die `CommonSecurityRole` in allen Ihren Zielkonten zu übernehmen, die Sie in der zuvor erstellten YAML-Datei angegeben haben.
* Sie möchten die Ausgabe in einem S3-Bucket mit dem Namen `my-results-bucket` speichern.
Mit den obigen Daten können Sie den folgenden Befehl ausführen:```bash
cloudsplaining scan-multi-account \
-c multi-account-config.yml \
--profile scanning-user \
--role-name CommonSecurityRole \
--output-bucket my-results-bucket
Beachten Sie, dass wenn Sie das Obige ohne das
--profile-Flag ausführen, es in der standardmäßigen AWS Credentials Reihenfolge der Priorität ausgeführt wird (d.h. Umgebungsvariablen, Anmeldeinformationsprofile, ECS-Container-Anmeldeinformationen, dann schließlich EC2-Instance-Profile-Anmeldeinformationen).
Cloudsplaining unterstützt die Anpassung der Abschnitte „Anleitungen“ und „Anhänge“ des HTML-Berichts, um organisationsspezifische Sicherheitsempfehlungen und Dokumentation einzufügen.
Platzieren Sie HTML-Dateien in Ihrem Projektstammverzeichnis:
custom-guidance.html - Benutzerdefinierter Sicherheitsanleitungsinhaltcustom-appendices.html - Benutzerdefinierter Anhängeinhaltecho '
Follow these organization-specific steps:
echo '
Additional company resources:
cloudsplaining download
cloudsplaining download --profile someprofile
cloudsplaining scan --input-file default.json
cloudsplaining scan --input-file default.json --exclusions-file exclusions.yml
cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json cloudsplaining scan-policy-file --input-file examples/policies/wildcards.json --exclusions-file examples/example-exclusions.yml
cloudsplaining create-multi-account-config-file -o accounts.yml cloudsplaining scan-multi-account -c accounts.yml -r TargetRole --output-directory ./
## FAQ
**Scannt es standardmäßig alle Richtlinien?**
Nein, es scannt nur Richtlinien, die an IAM-Prinzipale angehängt sind.
**Wird der Download-Befehl alle Richtlinienversionen herunterladen?**
Nicht standardmäßig. Wenn Sie dies tun möchten, geben Sie das Flag `--include-non-default-policy-versions` an. Beachten Sie, dass das `scan`-Tool derzeit nicht mit nicht standardmäßigen Versionen arbeitet.
**Ich habe die Installationsanweisungen befolgt, kann das Programm aber überhaupt nicht über die Befehlszeile ausführen. Was tun?**
Dies ist wahrscheinlich ein Problem mit Ihrem PATH. Ihre PATH-Umgebungsvariable berücksichtigt nicht die von `pip3` installierten Binärpakete. Auf einem Mac können Sie dies wahrscheinlich beheben, indem Sie den folgenden Befehl eingeben, abhängig von den installierten Versionen. YMMV.```bash
export PATH=$HOME/Library/Python/3.7/bin/:$PATH
Ich habe die Installationsanweisungen befolgt, erhalte aber einen ModuleNotFoundError, der besagt: No module named policy_sentry.analysis.expand. Was soll ich tun?
Versuchen Sie, auf die neueste Version von Cloudsplaining zu aktualisieren. Dieser Fehler wurde in Version 0.0.10 behoben.