diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-roles-anywhere-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-roles-anywhere-privesc.md deleted file mode 100644 index ea89dacd4..000000000 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-iam-roles-anywhere-privesc.md +++ /dev/null @@ -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}} diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md index 345fdcf25..262cbd299 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-sts-privesc.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 이 역할에 대한 신뢰 정책은 **SAML을 통해 인증된 사용자에게 역할을 가장할 수 있는 권한을 부여합니다.** -이 권한이 포함된 신뢰 정책의 예는: +이 권한이 포함된 신뢰 정책의 예는 다음과 같습니다: ```json { "Version": "2012-10-17", @@ -82,7 +82,7 @@ aws sts get-federation-token --name ```bash aws sts assume-role-with-saml --role-arn --principal-arn ``` -하지만 **제공자**는 [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-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}}