Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/

This commit is contained in:
Translator
2025-06-24 14:04:44 +00:00
parent 09ad448487
commit 164afdc9b3
2 changed files with 47 additions and 50 deletions
@@ -1,42 +0,0 @@
# AWS - IAM Roles Anywhere Privesc
{{#include ../../../../banners/hacktricks-training.md}}
AWS IAM RolesAnywhere는 AWS 외부의 워크로드가 X.509 인증서를 사용하여 IAM 역할을 맡을 수 있도록 합니다. 그러나 신뢰 정책이 적절하게 범위가 지정되지 않으면 권한 상승을 위해 악용될 수 있습니다.
이 정책은 허용되는 신뢰 앵커 또는 인증서 속성에 대한 제한이 없습니다. 결과적으로 계정의 모든 신뢰 앵커에 연결된 모든 인증서를 사용하여 이 역할을 맡을 수 있습니다.
```json
{
"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
그런 다음 유효한 인증서를 사용하여 공격자는 더 높은 권한 역할로 전환할 수 있습니다.
```bash
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
- https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation/
{{#include ../../../../banners/hacktricks-training.md}}
@@ -6,9 +6,9 @@
### `sts:AssumeRole`
모든 역할은 **역할 신뢰 정책**과 함께 생성되며, 이 정책은 **누가 생성된 역할을 맡을 수 있는지를 나타냅니다**. **같은 계정**의 역할이 특정 계정이 이를 맡을 수 있다고 말하면, 이는 해당 계정 역할에 접근할 수 있음을 의미합니다 (그리고 잠재적으로 **privesc**).
모든 역할은 **역할 신뢰 정책**으로 생성되며, 이 정책은 **누가 생성된 역할을 맡을 수 있는지**를 나타냅니다. **같은 계정**의 역할이 다른 계정이 이를 맡을 수 있다고 말하면, 해당 계정 역할에 접근할 수 있게 됩니다 (그리고 잠재적으로 **privesc**를 할 수 있습니다).
예를 들어, 다음 역할 신뢰 정책은 누구나 이를 맡을 수 있음을 나타내므로, **모든 사용자가 해당 역할과 관련된 권한으로 privesc할 수 있습니다**.
예를 들어, 다음 역할 신뢰 정책은 누구나 이를 맡을 수 있음을 나타내므로, **모든 사용자가 해당 역할과 관련된 권한으로 privesc할 수 있습니다**.
```json
{
"Version": "2012-10-17",
@@ -23,7 +23,7 @@
]
}
```
역할을 가장할 수 있습니다:
당신은 다음 역할을 가장할 수 있습니다:
```bash
aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
```
@@ -31,7 +31,7 @@ aws sts assume-role --role-arn $ROLE_ARN --role-session-name sessionname
> [!CAUTION]
> 이 경우 권한 `sts:AssumeRole`은 **악용할 역할에 명시되어야** 하며 공격자의 정책에는 명시되지 않아야 합니다.\
> 한 가지 예외를 제외하고, **다른 계정의 역할을 가정하기 위해** 공격자 계정은 **역할에 대 `sts:AssumeRole`** 권한 **필요합니다.**
> 한 가지 예외를 제외하고, **다른 계정의 역할을 가정하기 위해** 공격자 계정은 **역할에 대 `sts:AssumeRole`** 권한 **필요합니다.**
### **`sts:GetFederationToken`**
@@ -57,7 +57,7 @@ aws sts get-federation-token --name <username>
이 역할에 대한 신뢰 정책은 **SAML을 통해 인증된 사용자에게 역할을 가장할 수 있는 권한을 부여합니다.**
이 권한이 포함된 신뢰 정책의 예는:
이 권한이 포함된 신뢰 정책의 예는 다음과 같습니다:
```json
{
"Version": "2012-10-17",
@@ -82,7 +82,7 @@ aws sts get-federation-token --name <username>
```bash
aws sts assume-role-with-saml --role-arn <value> --principal-arn <value>
```
하지만 **제공자**는 [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role)와 같이 이를 더 쉽게 만들기 위한 **자체 도구**를 가질 수 있습니다:
하지만 **제공자**는 이를 더 쉽게 만들기 위해 **자신의 도구**를 가질 수 있습니다, 예를 들어 [onelogin-aws-assume-role](https://github.com/onelogin/onelogin-python-aws-assume-role):
```bash
onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --aws-region eu-west-1 -z 3600
```
@@ -90,17 +90,56 @@ onelogin-aws-assume-role --onelogin-subdomain mettle --onelogin-app-id 283740 --
### `sts:AssumeRoleWithWebIdentity`
이 권한은 **웹 아이덴티티 공급자를 통해 인증된 모바일, 웹 애플리케이션, EKS...의 사용자**일련의 임시 보안 자격 증명 얻을 수 있는 권한을 부여합니다. [여기에서 자세히 알아보세요.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
이 권한은 **모바일, 웹 애플리케이션, EKS...**에서 웹 아이덴티티 공급자인증된 사용자에 대한 임시 보안 자격 증명 세트를 얻을 수 있는 권한을 부여합니다. [여기에서 자세히 알아보세요.](https://docs.aws.amazon.com/STS/latest/APIReference/API_AssumeRoleWithWebIdentity.html)
예를 들어, **EKS 서비스 계정**이 **IAM 역할을 가장할 수 있어야** 하는 경우, **`/var/run/secrets/eks.amazonaws.com/serviceaccount/token`**에 토큰이 있으며, 역할을 **가정하고 자격 증명을 얻을 수** 있습니다.
```bash
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
{{#ref}}
../aws-basic-information/aws-federation-abuse.md
{{#endref}}
### IAM Roles Anywhere Privesc
AWS IAM RolesAnywhere는 AWS 외부의 워크로드가 X.509 인증서를 사용하여 IAM 역할을 가정할 수 있도록 합니다. 그러나 신뢰 정책이 적절하게 범위가 지정되지 않으면 권한 상승을 위해 악용될 수 있습니다.
이 정책은 허용되는 신뢰 앵커 또는 인증서 속성에 대한 제한이 없습니다. 결과적으로, 계정의 모든 신뢰 앵커에 연결된 모든 인증서를 사용하여 이 역할을 가정할 수 있습니다.
```json
{
"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
그런 다음 유효한 인증서를 사용하여 공격자는 더 높은 권한 역할로 전환할 수 있습니다.
```bash
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
- [https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation](https://www.ruse.tech/blogs/aws-roles-anywhere-privilege-escalation)
{{#include ../../../banners/hacktricks-training.md}}