AWS - EC2, EBS, ELB, SSM, VPC & VPN Enum
Reading time: 17 minutes
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。
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呼び出しでリソースにアクセスし、ロールが指定するリソースのみにアクセスを制限するために使用できます。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, EBS, SSM & VPC Post Exploitation
EBS
Amazon EBS (Elastic Block Store) スナップショットは、基本的にAWS EBSボリュームの静的なバックアップです。言い換えれば、特定の時点でEC2インスタンスに接続されているディスクのコピーです。EBSスナップショットは、リージョンやアカウントを跨いでコピーしたり、ダウンロードしてローカルで実行したりできます。
スナップショットには、ソースコードやAPIキーなどの機密情報が含まれている可能性があるため、機会があれば確認することをお勧めします。
AMIとEBSの違い
AMIはEC2インスタンスを起動するために使用され、EC2 スナップショットはEBSボリュームに保存されたデータのバックアップと復元に使用されます。EC2スナップショットは新しいAMIを作成するために使用できますが、AMIとは異なり、アプリケーションを実行するために必要なオペレーティングシステム、アプリケーションサーバー、またはその他のソフトウェアに関する情報は含まれていません。
特権昇格
次のページでは、EBSの権限を悪用して特権を昇格させる方法を確認できます:
SSM
**Amazon Simple Systems Manager (SSM)**は、EC2インスタンスのフロートをリモートで管理し、その管理をはるかに簡単にします。これらのインスタンスの各々は、SSMエージェントサービスを実行している必要があり、サービスがAWS APIからアクションを受け取り、それを実行します。
SSMエージェントは、システムマネージャーがこれらのリソースを更新、管理、構成することを可能にします。エージェントは、AWSクラウド内のシステムマネージャーサービスからのリクエストを処理し、リクエストに指定された通りに実行します。
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の権限を悪用して特権を昇格させる方法を確認できます:
永続性
次のページでは、SSMの権限を悪用して永続性を達成する方法を確認できます:
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 Security Chipはハードウェアとファームウェアのセキュリティを特に確保し、その堅牢なアーキテクチャをさらに強化します。
詳細情報と列挙方法については、以下を参照してください:
VPN
VPNは、オンプレミスネットワーク(サイト間VPN)または作業者のラップトップ(クライアントVPN)をAWS VPCに接続し、サービスをインターネットに公開することなくアクセスできるようにします。
基本的なAWS VPNコンポーネント
- カスタマーゲートウェイ:
- カスタマーゲートウェイは、VPN接続のあなたの側を表すためにAWSで作成するリソースです。
- これは、サイト間VPN接続のあなたの側にある物理デバイスまたはソフトウェアアプリケーションです。
- ルーティング情報とネットワークデバイス(ルーターやファイアウォールなど)のパブリックIPアドレスをAWSに提供してカスタマーゲートウェイを作成します。
- VPN接続を設定するための参照ポイントとして機能し、追加料金は発生しません。
- 仮想プライベートゲートウェイ:
- 仮想プライベートゲートウェイ(VPG)は、サイト間VPN接続のAmazon側のVPN集中装置です。
- あなたのVPCに接続され、VPN接続のターゲットとして機能します。
- VPGはVPN接続のAWS側エンドポイントです。
- あなたのVPCとオンプレミスネットワーク間の安全な通信を処理します。
- サイト間VPN接続:
- サイト間VPN接続は、オンプレミスネットワークを安全なIPsec VPNトンネルを介してVPCに接続します。
- このタイプの接続にはカスタマーゲートウェイと仮想プライベートゲートウェイが必要です。
- データセンターやネットワークとAWS環境間の安全で安定した一貫した通信に使用されます。
- 通常、定期的で長期的な接続に使用され、接続を介して転送されたデータ量に基づいて請求されます。
- クライアント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 Clientを使用してVPNに接続する際、ユーザーは通常AWSにログインしてVPNにアクセスします。その後、VPN接続を確立するためにAWS資格情報が作成され、ローカルに保存されます。これらの資格情報は**$HOME/.config/AWSVPNClient/TemporaryCredentials/
資格情報はユーザーarn:aws:sts::<acc-id>:assumed-role/aws-vpn-client-metrics-analytics-access-role/CognitoIdentityCredentials
に属します(TODO: この資格情報の権限についてさらに調査する)。
opvn設定ファイル
VPN接続が確立された場合、システム内で**.opvn
設定ファイルを検索する必要があります。さらに、$HOME/.config/AWSVPNClient/OpenVpnConfigsに設定**が見つかる場所の1つです。
ポストエクスプロイト
参考文献
tip
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE)
GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)
Azureハッキングを学び、実践する:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricksをサポートする
- サブスクリプションプランを確認してください!
- **💬 Discordグループまたはテレグラムグループに参加するか、Twitter 🐦 @hacktricks_liveをフォローしてください。
- HackTricksおよびHackTricks CloudのGitHubリポジトリにPRを提出してハッキングトリックを共有してください。