AWS - EC2 Privesc
EC2
Für mehr Informationen über EC2 siehe:
AWS - EC2, EBS, ELB, SSM, VPC & VPN Enumiam:PassRole
, ec2:RunInstances
iam:PassRole
, ec2:RunInstances
Ein Angreifer könnte eine Instanz erstellen, die eine IAM-Rolle anfügt, und dann auf die Instanz zugreifen, um die IAM-Rollenanmeldeinformationen vom Metadaten-Endpunkt zu stehlen.
Zugriff über SSH
Starte eine neue Instanz mit einem erstellten SSH-Schlüssel (--key-name
) und ssh dann hinein (wenn du einen neuen erstellen möchtest, benötigst du möglicherweise die Berechtigung ec2:CreateKeyPair
).
Zugriff über rev shell in Benutzerdaten
Sie können eine neue Instanz mit Benutzerdaten (--user-data
) starten, die Ihnen eine rev shell sendet. Auf diese Weise müssen Sie keine Sicherheitsgruppe angeben.
Sei vorsichtig mit GuardDuty, wenn du die Anmeldeinformationen der IAM-Rolle außerhalb der Instanz verwendest:
AWS - GuardDuty EnumPotenzielle Auswirkungen: Direkte Privilegieneskalation zu einer beliebigen EC2-Rolle, die an vorhandene Instanzprofile angehängt ist.
Privilegieneskalation zu ECS
Mit diesem Berechtigungsset könntest du auch eine EC2-Instanz erstellen und sie in einem ECS-Cluster registrieren. Auf diese Weise werden ECS Dienste in der EC2-Instanz ausgeführt, auf die du Zugriff hast, und dann kannst du in diese Dienste (Docker-Container) eindringen und ihre angehängten ECS-Rollen stehlen.
Um zu lernen, wie man ECS-Dienste dazu zwingt, auf dieser neuen EC2-Instanz ausgeführt zu werden, siehe:
AWS - ECS PrivescWenn Sie keine neue Instanz erstellen können, aber die Berechtigung ecs:RegisterContainerInstance
haben, könnten Sie in der Lage sein, die Instanz im Cluster zu registrieren und den kommentierten Angriff durchzuführen.
Potenzielle Auswirkungen: Direkter Privesc zu ECS-Rollen, die an Aufgaben angehängt sind.
iam:PassRole
, iam:AddRoleToInstanceProfile
iam:PassRole
, iam:AddRoleToInstanceProfile
Ähnlich wie im vorherigen Szenario könnte ein Angreifer mit diesen Berechtigungen die IAM-Rolle einer kompromittierten Instanz ändern, um neue Anmeldeinformationen zu stehlen.
Da ein Instanzprofil nur 1 Rolle haben kann, müssen Sie auch iam:RemoveRoleFromInstanceProfile
haben, wenn das Instanzprofil bereits eine Rolle hat (häufiger Fall).
Wenn das Instanzprofil eine Rolle hat und der Angreifer diese nicht entfernen kann, gibt es einen anderen Workaround. Er könnte ein Instanzprofil ohne Rolle finden oder ein neues erstellen (iam:CreateInstanceProfile
), die Rolle zu diesem Instanzprofil hinzufügen (wie zuvor besprochen) und das Instanzprofil mit einer kompromittierten Instanz verknüpfen:
Wenn die Instanz kein Instanzprofil hat (
ec2:AssociateIamInstanceProfile
) *
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen bestimmten Instanzprofilstatus besitzen).
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)
iam:PassRole
(( ec2:AssociateIamInstanceProfile
& ec2:DisassociateIamInstanceProfile
) || ec2:ReplaceIamInstanceProfileAssociation
)Mit diesen Berechtigungen ist es möglich, das Instanzprofil, das mit einer Instanz verbunden ist, zu ändern. Wenn der Angriff bereits Zugriff auf eine Instanz hatte, kann er Anmeldeinformationen für weitere Instanzprofilrollen stehlen, indem er das damit verbundene ändert.
Wenn es ein Instanzprofil hat, können Sie das Instanzprofil entfernen (
ec2:DisassociateIamInstanceProfile
) und es assoziieren *
oder ersetzen Sie das Instanzprofil der kompromittierten Instanz (
ec2:ReplaceIamInstanceProfileAssociation
). *
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu einer anderen EC2-Rolle (Sie müssen eine AWS EC2-Instanz kompromittiert haben und einige zusätzliche Berechtigungen oder einen bestimmten Instanzprofilstatus haben).
ec2:RequestSpotInstances
,iam:PassRole
ec2:RequestSpotInstances
,iam:PassRole
Ein Angreifer mit den Berechtigungen ec2:RequestSpotInstances
undiam:PassRole
kann eine Spot-Instanz mit einer angehängten EC2-Rolle und einer rev shell in den Benutzerdaten anfordern.
Sobald die Instanz ausgeführt wird, kann er die IAM-Rolle stehlen.
ec2:ModifyInstanceAttribute
ec2:ModifyInstanceAttribute
Ein Angreifer mit der ec2:ModifyInstanceAttribute
kann die Attribute der Instanzen ändern. Unter ihnen kann er die Benutzerdaten ändern, was bedeutet, dass er die Instanz beliebige Daten ausführen lassen kann. Dies kann verwendet werden, um eine Rev Shell zur EC2-Instanz zu erhalten.
Beachten Sie, dass die Attribute nur geändert werden können, während die Instanz gestoppt ist, daher die Berechtigungen ec2:StopInstances
und ec2:StartInstances
.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu jeder EC2 IAM-Rolle, die an einer erstellten Instanz angehängt ist.
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
,ec2:ModifyLaunchTemplate
Ein Angreifer mit den Berechtigungen ec2:CreateLaunchTemplateVersion
,ec2:CreateLaunchTemplate
und ec2:ModifyLaunchTemplate
kann eine neue Launch-Template-Version mit einer rev shell in den Benutzerdaten und jeder EC2 IAM-Rolle darauf erstellen, die Standardversion ändern, und jede Autoscaler-Gruppe, die dieses Launch-Template verwendet und so konfiguriert ist, dass sie die neueste oder die Standardversion verwendet, wird die Instanzen mit diesem Template erneut starten und die rev shell ausführen.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu einer anderen EC2-Rolle.
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
autoscaling:CreateLaunchConfiguration
, autoscaling:CreateAutoScalingGroup
, iam:PassRole
Ein Angreifer mit den Berechtigungen autoscaling:CreateLaunchConfiguration
,autoscaling:CreateAutoScalingGroup
,iam:PassRole
kann eine Launch-Konfiguration erstellen mit einer IAM-Rolle und einer rev shell im Benutzerdaten, dann eine Autoscaling-Gruppe aus dieser Konfiguration erstellen und auf die rev shell warten, um die IAM-Rolle zu stehlen.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu einer anderen EC2-Rolle.
!autoscaling
!autoscaling
Die Berechtigungen ec2:CreateLaunchTemplate
und autoscaling:CreateAutoScalingGroup
reichen nicht aus, um Privilegien auf eine IAM-Rolle zu eskalieren, da Sie zur Anfügung der in der Launch-Konfiguration oder im Launch-Template angegebenen Rolle die Berechtigungen iam:PassRole
und ec2:RunInstances
benötigen (was eine bekannte Privilegieneskalation ist).
ec2-instance-connect:SendSSHPublicKey
ec2-instance-connect:SendSSHPublicKey
Ein Angreifer mit der Berechtigung ec2-instance-connect:SendSSHPublicKey
kann einen SSH-Schlüssel zu einem Benutzer hinzufügen und ihn verwenden, um darauf zuzugreifen (wenn er SSH-Zugriff auf die Instanz hat) oder um Privilegien zu eskalieren.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu den EC2 IAM-Rollen, die an laufende Instanzen angehängt sind.
ec2-instance-connect:SendSerialConsoleSSHPublicKey
ec2-instance-connect:SendSerialConsoleSSHPublicKey
Ein Angreifer mit der Berechtigung ec2-instance-connect:SendSerialConsoleSSHPublicKey
kann einen SSH-Schlüssel zu einer seriellen Verbindung hinzufügen. Wenn die serielle Verbindung nicht aktiviert ist, benötigt der Angreifer die Berechtigung ec2:EnableSerialConsoleAccess
, um sie zu aktivieren.
Um sich mit dem seriellen Port zu verbinden, müssen Sie auch den Benutzernamen und das Passwort eines Benutzers innerhalb der Maschine kennen.
Dieser Weg ist nicht sehr nützlich für privesc, da man einen Benutzernamen und ein Passwort kennen muss, um ihn auszunutzen.
Potenzielle Auswirkungen: (Hochgradig unbewiesen) Direkter privesc zu den EC2 IAM-Rollen, die an laufende Instanzen angehängt sind.
describe-launch-templates
,describe-launch-template-versions
describe-launch-templates
,describe-launch-template-versions
Da Launch-Templates versioniert sind, könnte ein Angreifer mit ec2:describe-launch-templates
und ec2:describe-launch-template-versions
Berechtigungen diese ausnutzen, um sensible Informationen zu entdecken, wie z.B. Anmeldeinformationen, die in Benutzerdaten vorhanden sind. Um dies zu erreichen, durchläuft das folgende Skript alle Versionen der verfügbaren Launch-Templates:
In den obigen Befehlen, obwohl wir bestimmte Muster (aws_|password|token|api
) angeben, können Sie einen anderen Regex verwenden, um nach anderen Arten von sensiblen Informationen zu suchen.
Angenommen, wir finden aws_access_key_id
und aws_secret_access_key
, können wir diese Anmeldeinformationen verwenden, um uns bei AWS zu authentifizieren.
Potenzielle Auswirkungen: Direkte Privilegieneskalation zu IAM-Benutzer(n).
Referenzen
Last updated