AWS - STS Privesc
Reading time: 5 minutes
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.
STS
sts:AssumeRole
모든 역할은 역할 신뢰 정책으로 생성되며, 이 정책은 누가 생성된 역할을 맡을 수 있는지를 나타냅니다. 같은 계정의 역할이 다른 계정이 이를 맡을 수 있다고 말하면, 해당 계정은 역할에 접근할 수 있게 됩니다 (그리고 잠재적으로 privesc를 할 수 있습니다).
예를 들어, 다음 역할 신뢰 정책은 누구나 이를 맡을 수 있음을 나타내므로, 모든 사용자가 해당 역할과 관련된 권한으로 privesc를 할 수 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"AWS": "*"
},
"Action": "sts:AssumeRole"
}
]
}
당신은 다음 역할을 가장할 수 있습니다:
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
잠재적 영향: 역할에 대한 권한 상승.
caution
이 경우 권한 sts:AssumeRole
은 악용할 역할에 명시되어야 하며 공격자의 정책에는 명시되지 않아야 합니다.
한 가지 예외를 제외하고, 다른 계정의 역할을 가정하기 위해 공격자 계정은 역할에 대해 sts:AssumeRole
권한이 필요합니다.
sts:GetFederationToken
이 권한을 사용하면 모든 사용자를 가장하기 위한 자격 증명을 생성할 수 있습니다:
aws sts get-federation-token --name <username>
이 권한을 다른 사용자를 가장할 수 있는 접근 권한을 주지 않고 안전하게 부여하는 방법은 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": "sts:GetFederationToken",
"Resource": "arn:aws:sts::947247140022:federated-user/${aws:username}"
}
]
}
sts:AssumeRoleWithSAML
이 역할에 대한 신뢰 정책은 SAML을 통해 인증된 사용자에게 역할을 가장할 수 있는 권한을 부여합니다.
이 권한이 포함된 신뢰 정책의 예는 다음과 같습니다:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "OneLogin",
"Effect": "Allow",
"Principal": {
"Federated": "arn:aws:iam::290594632123:saml-provider/OneLogin"
},
"Action": "sts:AssumeRoleWithSAML",
"Condition": {
"StringEquals": {
"SAML:aud": "https://signin.aws.amazon.com/saml"
}
}
}
]
}
역할을 가장하기 위한 자격 증명을 생성하려면 일반적으로 다음과 같은 방법을 사용할 수 있습니다:
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
하지만 제공자는 이를 더 쉽게 만들기 위해 자신의 도구를 가질 수 있습니다, 예를 들어 onelogin-aws-assume-role:
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
잠재적 영향: 역할에 대한 권한 상승.
sts:AssumeRoleWithWebIdentity
이 권한은 **모바일, 웹 애플리케이션, EKS...**에서 웹 아이덴티티 공급자를 통해 인증된 사용자에 대한 임시 보안 자격 증명 세트를 얻을 수 있는 권한을 부여합니다. 여기에서 자세히 알아보세요.
예를 들어, EKS 서비스 계정이 IAM 역할을 가장할 수 있어야 하는 경우, **/var/run/secrets/eks.amazonaws.com/serviceaccount/token
**에 토큰이 있으며, 역할을 가정하고 자격 증명을 얻을 수 있습니다.
aws sts assume-role-with-web-identity --role-arn arn:aws:iam::123456789098:role/<role_name> --role-session-name something --web-identity-token file:///var/run/secrets/eks.amazonaws.com/serviceaccount/token
# The role name can be found in the metadata of the configuration of the pod
Federation Abuse
IAM Roles Anywhere Privesc
AWS IAM RolesAnywhere는 AWS 외부의 워크로드가 X.509 인증서를 사용하여 IAM 역할을 가정할 수 있도록 합니다. 그러나 신뢰 정책이 적절하게 범위가 지정되지 않으면 권한 상승을 위해 악용될 수 있습니다.
이 정책은 허용되는 신뢰 앵커 또는 인증서 속성에 대한 제한이 없습니다. 결과적으로, 계정의 모든 신뢰 앵커에 연결된 모든 인증서를 사용하여 이 역할을 가정할 수 있습니다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}
프라이빗 에스컬레이션을 위해 aws_signing_helper
가 필요합니다. https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html
그런 다음 유효한 인증서를 사용하여 공격자는 더 높은 권한 역할로 전환할 수 있습니다.
aws_signing_helper credential-process \
--certificate readonly.pem \
--private-key readonly.key \
--trust-anchor-arn arn:aws:rolesanywhere:us-east-1:123456789012:trust-anchor/ta-id \
--profile-arn arn:aws:rolesanywhere:us-east-1:123456789012:profile/default \
--role-arn arn:aws:iam::123456789012:role/Admin
References
tip
AWS 해킹 배우기 및 연습하기:HackTricks Training AWS Red Team Expert (ARTE)
GCP 해킹 배우기 및 연습하기: HackTricks Training GCP Red Team Expert (GRTE)
Azure 해킹 배우기 및 연습하기:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks 지원하기
- 구독 계획 확인하기!
- **💬 Discord 그룹 또는 텔레그램 그룹에 참여하거나 Twitter 🐦 @hacktricks_live를 팔로우하세요.
- HackTricks 및 HackTricks Cloud 깃허브 리포지토리에 PR을 제출하여 해킹 트릭을 공유하세요.