AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum

htARTE (HackTricks AWS Red Team 전문가)를 통해 제로부터 영웅이 될 때까지 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

VPC & 네트워킹

VPC가 무엇인지 및 그 구성 요소에 대해 알아보세요:

pageAWS - VPC & Networking Basic Information

EC2

Amazon EC2는 가상 서버를 시작하는 데 사용됩니다. 보안네트워킹 구성저장소 관리가 가능합니다. Amazon EC2의 유연성은 자원을 상하로 조정하여 다양한 요구 사항 변경이나 인기 급증에 효과적으로 적응할 수 있는 능력에서 나타납니다. 이 기능은 정확한 트래픽 예측의 필요성을 줄입니다.

EC2에서 열거할 흥미로운 사항:

  • 가상 머신

  • SSH 키

  • 사용자 데이터

  • 기존 EC2/AMI/스냅샷

  • 네트워킹

  • 네트워크

  • 서브네트워크

  • 공용 IP

  • 열린 포트

  • AWS 외부의 다른 네트워크와의 통합 연결

인스턴스 프로필

EC2 인스턴스에서 실행되는 응용 프로그램에 권한을 부여하기 위해 역할을 사용하려면 약간의 추가 구성이 필요합니다. EC2 인스턴스에서 실행되는 응용 프로그램은 가상화된 운영 체제에 의해 AWS로부터 추상화됩니다. 이 추가 분리로 인해 AWS 역할 및 해당 권한을 EC2 인스턴스에 할당하고 해당 응용 프로그램에서 사용할 수 있도록 만들려면 추가 단계가 필요합니다.

이 추가 단계는 인스턴스에 첨부된 인스턴스 프로필의 생성입니다. 인스턴스 프로필에는 역할이 포함되어 있으며 인스턴스에서 실행되는 응용 프로그램에 역할의 일시적 자격 증명을 제공할 수 있습니다. 그런 다음 해당 일시적 자격 증명을 응용 프로그램의 API 호출에서 사용하여 리소스에 액세스하고 역할이 지정한 리소스에만 액세스할 수 있도록 제한할 수 있습니다. 한 번에 하나의 역할만 EC2 인스턴스에 할당할 수 있으며 인스턴스의 모든 응용 프로그램이 동일한 역할과 권한을 공유합니다.

메타데이터 엔드포인트

AWS EC2 메타데이터는 실행 중인 Amazon Elastic Compute Cloud (EC2) 인스턴스에 대한 정보입니다. 이 메타데이터는 인스턴스에 대한 정보를 제공하는 데 사용되며 인스턴스 ID, 실행 중인 가용 영역, 인스턴스와 관련된 IAM 역할 및 인스턴스의 호스트 이름과 같은 정보를 제공합니다.

열거

# Get EC2 instances
aws ec2 describe-instances
aws ec2 describe-instance-status #Get status from running instances

# Get user data from each ec2 instance
for instanceid in $(aws ec2 describe-instances --profile <profile> --region us-west-2 | grep -Eo '"i-[a-zA-Z0-9]+' | tr -d '"'); do
echo "Instance ID: $instanceid"
aws ec2 describe-instance-attribute --profile <profile> --region us-west-2 --instance-id "$instanceid" --attribute userData | jq ".UserData.Value" | tr -d '"' | base64 -d
echo ""
echo "-------------------"
done

# Instance profiles
aws iam list-instance-profiles
aws iam list-instance-profiles-for-role --role-name <name>

# Get tags
aws ec2 describe-tags

# Get volumes
aws ec2 describe-volume-status
aws ec2 describe-volumes

# Get snapshots
aws ec2 describe-snapshots --owner-ids self

# Scheduled instances
aws ec2 describe-scheduled-instances

# Get custom images
aws ec2 describe-images --owners self

# Get Elastic IPs
aws ec2 describe-addresses

# Get current output
aws ec2 get-console-output --instance-id [id]

# Get VPN customer gateways
aws ec2 describe-customer-gateways
aws ec2 describe-vpn-gateways
aws ec2 describe-vpn-connections

# List conversion tasks to upload/download VMs
aws ec2 describe-conversion-tasks
aws ec2 describe-import-image-tasks

# Get Bundle Tasks
aws ec2 describe-bundle-tasks

# Get Classic Instances
aws ec2 describe-classic-link-instances

# Get Dedicated Hosts
aws ec2 describe-hosts

# Get SSH Key Pairs
aws ec2 describe-key-pairs

# Get Internet Gateways
aws ec2 describe-internet-gateways

# Get NAT Gateways
aws ec2 describe-nat-gateways

# Get subnetworks
aws ec2 describe-subnets

# Get FW rules
aws ec2 describe-network-acls

# Get security groups
aws ec2 describe-security-groups

# Get interfaces
aws ec2 describe-network-interfaces

# Get routes table
aws ec2 describe-route-tables

# Get VPCs
aws ec2 describe-vpcs
aws ec2 describe-vpc-peering-connections

인증되지 않은 액세스

pageAWS - EC2 Unauthenticated Enum

권한 상승

다음 페이지에서 EC2 권한을 남용하여 권한 상승하는 방법을 확인할 수 있습니다:

pageAWS - EC2 Privesc

사후 공격

pageAWS - EC2, EBS, SSM & VPC Post Exploitation

EBS

Amazon EBS (Elastic Block Store) 스냅샷은 기본적으로 AWS EBS 볼륨의 정적 백업입니다. 다시 말해, 특정 시점에 EC2 인스턴스에 연결된 디스크의 사본입니다. EBS 스냅샷은 지역 및 계정간에 복사하거나 다운로드하여 로컬에서 실행할 수 있습니다.

스냅샷에는 소스 코드나 API 키와 같은 민감한 정보가 포함될 수 있으므로 가능한 경우 확인하는 것이 좋습니다.

AMI와 EBS의 차이

AMIEC2 인스턴스를 시작하는 데 사용되며, EC2 스냅샷은 EBS 볼륨에 저장된 데이터를 백업하고 복구하는 데 사용됩니다. EC2 스냅샷을 사용하여 새 AMI를 만들 수 있지만, AMI와 동일하지 않으며 운영 체제, 응용 프로그램 서버 또는 응용 프로그램 실행에 필요한 기타 소프트웨어에 대한 정보가 포함되지 않습니다.

권한 상승

다음 페이지에서 EBS 권한을 남용하여 권한 상승하는 방법을 확인할 수 있습니다:

pageAWS - EBS Privesc

SSM

**Amazon Simple Systems Manager (SSM)**은 EC2 인스턴스의 플로트를 원격으로 관리하여 관리를 훨씬 쉽게 만듭니다. 이러한 각 인스턴스는 SSM 에이전트 서비스를 실행해야 하며, 서비스는 AWS API에서 동작을 수행하고 실행하는 역할을 합니다.

SSM 에이전트를 통해 Systems Manager가 이러한 리소스를 업데이트, 관리 및 구성할 수 있습니다. 에이전트는 AWS 클라우드의 Systems Manager 서비스에서 요청을 처리한 다음 요청에 지정된대로 실행합니다.

SSM 에이전트는 일부 AMI에 사전 설치되어 있거나 인스턴스에 수동으로 설치해야 할 수 있습니다. 또한 인스턴스 내에서 사용되는 IAM 역할은 통신을 위해 AmazonEC2RoleforSSM 정책이 부착되어 있어야 합니다.

열거

aws ssm describe-instance-information
aws ssm describe-parameters
aws ssm describe-sessions --state [Active|History]
aws ssm describe-instance-patches --instance-id <id>
aws ssm describe-instance-patch-states --instance-ids <id>
aws ssm describe-instance-associations-status --instance-id <id>

다음 명령을 실행하여 EC2 인스턴스에서 Systems Manager가 실행 중인지 확인할 수 있습니다:

ps aux | grep amazon-ssm

권한 상승

다음 페이지에서는 권한 상승을 위해 SSM 권한을 남용하는 방법을 확인할 수 있습니다:

pageAWS - SSM Privesc

ELB

Elastic Load Balancing (ELB)은 Amazon Web Services (AWS) 배포를 위한 로드 밸런싱 서비스입니다. ELB는 자동으로 들어오는 애플리케이션 트래픽을 분산하고 트래픽 수요를 충족하기 위해 리소스를 확장합니다.

열거

# List internet-facing ELBs
aws elb describe-load-balancers
aws elb describe-load-balancers | jq '.LoadBalancerDescriptions[]| select( .Scheme | contains("internet-facing"))|.DNSName'

# DONT FORGET TO CHECK VERSION 2
aws elbv2 describe-load-balancers
aws elbv2 describe-load-balancers | jq '.LoadBalancers[].DNSName'
aws elbv2 describe-listeners --load-balancer-arn <load_balancer_arn>

런치 템플릿 & 오토스케일링 그룹

열거

# Launch templates
aws ec2 describe-launch-templates
aws ec2 describe-launch-templates --launch-template-id <launch_template_id>
## Get details, like user data
aws ec2 describe-launch-template-versions --launch-template-id <launch_template_id>

# Autoscaling
aws autoscaling describe-auto-scaling-groups
aws autoscaling describe-auto-scaling-instances
aws autoscaling describe-launch-configurations
aws autoscaling describe-load-balancer-target-groups
aws autoscaling describe-load-balancers

Nitro

AWS Nitro는 AWS EC2 인스턴스의 기본 플랫폼을 형성하는 혁신적인 기술 모음입니다. Amazon이 소개한 Nitro는 보안, 성능 및 신뢰성을 향상시키기 위해 사용자 정의 하드웨어 구성 요소 및 가벼운 하이퍼바이저를 활용합니다. 전통적 가상화 기능의 많은 부분을 전용 하드웨어 및 소프트웨어로 추상화하여 공격 표면을 최소화하고 리소스 효율성을 향상시킵니다. 가상화 기능을 오프로드함으로써 Nitro는 EC2 인스턴스가 거의 베어 메탈 성능을 제공할 수 있도록 하여 리소스 집약적인 응용 프로그램에 특히 유익합니다. 또한 Nitro 보안 칩은 특히 하드웨어 및 펌웨어의 보안을 보장하여 견고한 아키텍처를 더욱 확고히 합니다.

더 많은 정보 및 열거 방법은 다음에서 확인할 수 있습니다:

pageAWS - Nitro Enum

VPN

VPN을 사용하면 온프레미스 네트워크(사이트 간 VPN) 또는 **근무자 노트북(클라이언트 VPN)**을 AWS VPC에 연결하여 서비스에 인터넷에 노출하지 않고 액세스할 수 있습니다.

기본 AWS VPN 구성 요소

  1. 고객 게이트웨이:

  • 고객 게이트웨이는 VPN 연결의 당신쪽을 나타내기 위해 AWS에서 생성하는 리소스입니다.

  • 사실상 사이트 간 VPN 연결의 당신쪽에 있는 물리적 장치 또는 소프트웨어 응용 프로그램입니다.

  • 라우팅 정보와 네트워크 장치(라우터 또는 방화벽과 같은)의 공용 IP 주소를 제공하여 고객 게이트웨이를 생성합니다.

  • VPN 연결 설정의 참조점으로 작용하며 추가 요금이 부과되지 않습니다.

  1. 가상 사설 게이트웨이:

  • 가상 사설 게이트웨이(VPG)는 사이트 간 VPN 연결의 아마존 측에 있는 VPN 집중기입니다.

  • VPG는 VPC에 연결되어 VPN 연결의 대상으로 작동합니다.

  • VPG는 VPN 연결의 AWS 측 엔드포인트입니다.

  • VPC와 온프레미스 네트워크 간의 안전한 통신을 처리합니다.

  1. 사이트 간 VPN 연결:

  • 사이트 간 VPN 연결은 안전한 IPsec VPN 터널을 통해 온프레미스 네트워크를 VPC에 연결합니다.

  • 이 유형의 연결에는 고객 게이트웨이와 가상 사설 게이트웨이가 필요합니다.

  • 데이터 센터 또는 네트워크와 AWS 환경 간의 안전하고 안정적이며 일관된 통신에 사용됩니다.

  • 일반적으로 정기적이고 장기적인 연결에 사용되며 연결을 통해 전송된 데이터 양에 따라 청구됩니다.

  1. 클라이언트 VPN 엔드포인트:

  • 클라이언트 VPN 엔드포인트는 클라이언트 VPN 세션을 활성화하고 관리하기 위해 AWS에서 생성하는 리소스입니다.

  • 개별 장치(노트북, 스마트폰 등)가 AWS 리소스 또는 온프레미스 네트워크에 안전하게 연결할 수 있도록 사용됩니다.

  • 전체 네트워크를 연결하는 것이 아닌 개별 클라이언트를 대상으로 설계되었다는 점에서 사이트 간 VPN과 다릅니다.

  • 클라이언트 VPN을 사용하면 각 클라이언트 장치가 VPN 클라이언트 소프트웨어를 사용하여 안전한 연결을 설정합니다.

AWS VPN의 혜택 및 구성 요소에 대한 자세한 정보는 여기에서 찾을 수 있습니다.

열거

# VPN endpoints
## Check used subnetwork, authentication, SGs, connected...
aws ec2 describe-client-vpn-endpoints

## Get AWS network info related to the vpn endpoint
aws ec2 describe-client-vpn-target-networks --client-vpn-endpoint-id <id>

## Get AWS subnet & ip range the VPN iconnected to
aws ec2 describe-client-vpn-routes --client-vpn-endpoint-id <id>

## Check authorization rules
aws ec2 describe-client-vpn-authorization-rules --client-vpn-endpoint-id <id>

## Get current connections to the VPN endpoint
aws ec2 describe-client-vpn-connections --client-vpn-endpoint-id <id>

# Get VPN gateways and check with which VPC each is connected
aws ec2 describe-vpn-gateways

# Get VPN site-to-site connections
aws ec2 describe-vpn-connections

로컬 열거

로컬 임시 자격 증명

AWS VPN 클라이언트를 사용하여 VPN에 연결할 때, 사용자는 일반적으로 VPN에 액세스하기 위해 AWS에 로그인합니다. 그런 다음 VPN 연결을 설정하기 위해 로컬에 일부 AWS 자격 증명이 생성되고 저장됩니다. 이러한 자격 증명은 $HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txt저장되어 있으며 AccessKey, SecretKey, Token을 포함합니다.

이 자격 증명은 사용자 arn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials에 속합니다 (TODO: 이 자격 증명의 권한에 대해 더 많은 연구 필요).

opvn 구성 파일

VPN 연결이 설정된 경우 시스템에서 .opvn 구성 파일을 검색해야 합니다. 또한 구성을 찾을 수 있는 한 곳은 **$HOME/.config/AWSVPNClient/OpenVpnConfigs**입니다.

포스트 익스플로잇레이션

pageAWS - VPN Post Exploitation

참고 자료

htARTE (HackTricks AWS Red Team Expert)를 통해 제로부터 AWS 해킹을 배우세요!

HackTricks를 지원하는 다른 방법:

最終更新