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
모든 역할은 **역할 신뢰 정책(role trust policy)**과 함께 생성됩니다. 이 정책은 누가 생성된 역할을 assume할 수 있는지를 나타냅니다. 동일한 계정의 역할이 어떤 계정이 이를 assume할 수 있다고 명시하면, 그 계정은 해당 역할에 접근할 수 있게 되고(및 잠재적으로 privesc) 권한을 획득할 수 있다는 뜻입니다.
예를 들어, 다음과 같은 역할 신뢰 정책은 누구나 해당 역할을 assume할 수 있음을 나타내므로, 어떤 사용자든 해당 역할에 연결된 권한으로 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
Potential Impact: role에 대한 Privesc.
caution
이 경우 권한 sts:AssumeRole는 남용하려는 role에 명시되어 있어야 하며 공격자가 소유한 정책에는 있으면 안 됩니다.
단, 한 가지 예외를 제외하면, 다른 계정의 role을 assume하려면 공격자 계정은 해당 role에 대해 또한 **sts:AssumeRole**을 보유해야 합니다.
sts:AssumeRoleWithSAML
이 role을 가진 trust policy는 SAML로 인증된 사용자에게 role을 가장(impersonate)할 수 있는 접근 권한을 부여합니다.
An example of a trust policy with this permission is:
{
"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"
}
}
}
]
}
일반적으로 해당 role을 가장하여 자격 증명을 생성하려면 다음과 같은 방법을 사용할 수 있습니다:
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
Potential Impact: 역할에 대한 Privesc.
sts:AssumeRoleWithWebIdentity
이 권한은 웹 아이덴티티 공급자를 통해 모바일, 웹 애플리케이션, EKS 등에서 인증된 사용자가 임시 보안 자격 증명 세트를 얻을 수 있도록 허용합니다. Learn more here.
For example, if an EKS service account should be able to impersonate an IAM role, it will have a token in /var/run/secrets/eks.amazonaws.com/serviceaccount/token and can assume the role and get credentials doing something like:
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
이 공격을 이해하려면 trust anchor가 무엇인지 설명할 필요가 있다. AWS IAM Roles Anywhere에서 trust anchor는 신뢰의 루트 엔티티로, 계정에 등록된 Certificate Authority (CA)의 공개 인증서를 포함하여 AWS가 제시된 X.509 인증서를 검증할 수 있게 한다. 따라서 클라이언트 인증서가 해당 CA에서 발급되었고 trust anchor가 활성화되어 있으면 AWS는 이를 유효한 인증서로 인식한다.
또한 profile은 X.509 인증서의 어떤 속성(CN, OU, 또는 SAN 등)이 session tags로 변환될지를 정의하는 구성이며, 이 태그들은 이후 trust policy의 조건과 비교된다.
이 정책에는 어떤 trust anchor나 인증서 속성이 허용되는지에 대한 제한이 없다. 결과적으로 계정 내 어떤 trust anchor에 연결된 어떤 인증서든 이 역할을 assume하는 데 사용할 수 있다.
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Principal": {
"Service": "rolesanywhere.amazonaws.com"
},
"Action": [
"sts:AssumeRole",
"sts:SetSourceIdentity",
"sts:TagSession"
]
}
]
}
privesc를 위해 aws_signing_helper가 https://docs.aws.amazon.com/rolesanywhere/latest/userguide/credential-helper.html에서 필요합니다
그런 다음 유효한 인증서를 사용하면 공격자는 더 높은 권한의 role로 pivot할 수 있습니다
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
신뢰 앵커는 클라이언트의 readonly.pem 인증서가 권한 있는 CA에서 발급된 것인지를 검증하며, 해당 readonly.pem 인증서에는 AWS가 서명이 대응하는 개인 키 readonly.key로 이루어졌는지를 확인할 때 사용하는 공개 키가 포함되어 있다.
인증서는 또한 CN 또는 OU와 같은 속성들을 제공하고, default 프로필은 이를 태그로 변환한다. 역할의 신뢰 정책은 이 태그들을 사용해 액세스 허가 여부를 결정할 수 있다. 신뢰 정책에 조건이 없으면 이러한 태그는 아무런 의미가 없으며, 유효한 인증서를 가진 누구에게나 액세스가 허용된다.
이 공격이 가능하려면 신뢰 앵커와 default 프로필이 모두 활성화되어 있어야 한다.
참고 자료
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을 제출하여 해킹 트릭을 공유하세요.
HackTricks Cloud