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

HackTricksをサポートする

VPC & Networking

VPCとは何か、そのコンポーネントについて学ぶ:

AWS - VPC & Networking Basic Information

EC2

Amazon EC2は仮想サーバーを起動するために利用されます。セキュリティネットワーキングの設定やストレージの管理が可能です。Amazon EC2の柔軟性は、リソースを上下にスケールさせる能力にあり、変動する要求の変化や人気の急上昇に効果的に適応します。この機能により、正確なトラフィック予測の必要性が減少します。

EC2で列挙する興味深い項目:

  • 仮想マシン

  • SSHキー

  • ユーザーデータ

  • 既存のEC2/AMI/スナップショット

  • ネットワーキング

  • ネットワーク

  • サブネットワーク

  • パブリックIP

  • 開いているポート

  • AWS外部の他のネットワークとの統合接続

インスタンスプロファイル

EC2インスタンス上で実行されるアプリケーションに権限を付与するためにロールを使用するには、少し追加の設定が必要です。EC2インスタンス上で実行されるアプリケーションは、仮想化されたオペレーティングシステムによってAWSから抽象化されています。この追加の分離のため、AWSロールとその関連する権限をEC2インスタンスに割り当て、それをアプリケーションに利用可能にするための追加のステップが必要です。

この追加のステップは、インスタンスにアタッチされたインスタンスプロファイルの作成です。インスタンスプロファイルはロールを含み、インスタンス上で実行されるアプリケーションにロールの一時的な認証情報を提供できます。これらの一時的な認証情報は、アプリケーションのAPI呼び出しでリソースにアクセスするために使用され、ロールが指定するリソースにのみアクセスを制限できます。1つのEC2インスタンスに割り当てられるロールは1つだけであり、インスタンス上のすべてのアプリケーションは同じロールと権限を共有します。

メタデータエンドポイント

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

認証されていないアクセス

AWS - EC2 Unauthenticated Enum

特権昇格

以下のページで、EC2の権限を悪用して特権を昇格させる方法を確認できます:

AWS - EC2 Privesc

ポストエクスプロイト

AWS - 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の権限を悪用して特権を昇格させる方法を確認できます:

AWS - 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

Privesc

以下のページでSSM権限を悪用して権限を昇格させる方法を確認できます:

AWS - SSM Privesc

ELB

Elastic Load Balancing (ELB)は、Amazon Web Services (AWS)デプロイメントのためのロードバランシングサービスです。ELBは自動的に受信アプリケーショントラフィックを分散し、トラフィック需要に応じてリソースをスケールします。

Enumeration

# 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 & Autoscaling Groups

Enumeration

# 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 Security Chipはハードウェアとファームウェアのセキュリティを確保し、その堅牢なアーキテクチャをさらに強化します。

詳細情報とその列挙方法については以下を参照してください:

AWS - Nitro Enum

VPN

VPNは、オンプレミスネットワーク(サイト間VPN)または従業員のラップトップ(クライアントVPN)をAWS VPCに接続し、インターネットに公開することなくサービスにアクセスできるようにします。

基本的なAWS VPNコンポーネント

  1. Customer Gateway:

  • Customer Gatewayは、VPN接続のあなた側を表すためにAWSで作成するリソースです。

  • これは、サイト間VPN接続のあなた側にある物理デバイスまたはソフトウェアアプリケーションです。

  • ルーティング情報とネットワークデバイス(ルーターやファイアウォールなど)のパブリックIPアドレスをAWSに提供してCustomer Gatewayを作成します。

  • VPN接続の設定のための参照ポイントとして機能し、追加料金は発生しません。

  1. Virtual Private Gateway:

  • Virtual Private Gateway(VPG)は、サイト間VPN接続のAmazon側のVPNコンセントレーターです。

  • VPCにアタッチされ、VPN接続のターゲットとして機能します。

  • VPGはVPN接続のAWS側のエンドポイントです。

  • VPCとオンプレミスネットワーク間の安全な通信を処理します。

  1. Site-to-Site VPN Connection:

  • Site-to-Site VPN接続は、オンプレミスネットワークを安全なIPsec VPNトンネルを介してVPCに接続します。

  • このタイプの接続にはCustomer GatewayとVirtual Private Gatewayが必要です。

  • データセンターやネットワークとAWS環境間の安全で安定した一貫した通信に使用されます。

  • 通常、定期的で長期的な接続に使用され、接続を介して転送されるデータ量に基づいて課金されます。

  1. Client VPN Endpoint:

  • Client VPNエンドポイントは、クライアントVPNセッションを有効にし、管理するためにAWSで作成するリソースです。

  • 個々のデバイス(ラップトップ、スマートフォンなど)がAWSリソースやオンプレミスネットワークに安全に接続できるようにするために使用されます。

  • Site-to-Site VPNとは異なり、ネットワーク全体を接続するのではなく、個々のクライアント用に設計されています。

  • Client VPNでは、各クライアントデバイスがVPNクライアントソフトウェアを使用して安全な接続を確立します。

AWS VPNの利点とコンポーネントの詳細情報はこちらで確認できます。

Enumeration

# 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

Local Enumeration

Local Temporary Credentials

AWS VPN Clientを使用してVPNに接続する場合、ユーザーは通常、VPNにアクセスするためにAWSにログインします。その後、VPN接続を確立するためにAWSの資格情報が作成され、ローカルに保存されます。これらの資格情報は$HOME/.config/AWSVPNClient/TemporaryCredentials/<region>/temporary-credentials.txtに保存され、AccessKeySecretKeyTokenが含まれています。

これらの資格情報はユーザーarn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentialsに属します(この資格情報の権限についてはさらに調査が必要です)。

opvn config files

VPN接続が確立された場合、システム内の**.opvn設定ファイルを検索する必要があります。さらに、設定が見つかる可能性のある場所は$HOME/.config/AWSVPNClient/OpenVpnConfigs**です。

Post Exploitaiton

AWS - VPN Post Exploitation

References

Support HackTricks

Last updated