az cli 2.30 이전 버전의 accessTokens.json 파일 - Jan2022 - 액세스 토큰을 평문으로 저장
azureProfile.json 파일에는 로그인한 사용자에 대한 정보가 포함되어 있습니다.
**az logout**은 토큰을 제거합니다.
**Az PowerShell**의 이전 버전은 **TokenCache.dat**에 액세스 토큰을 평문으로 저장했습니다. 또한 **AzureRmContext.json**에 ServicePrincipalSecret을 평문으로 저장합니다. Save-AzContext cmdlet을 사용하여 토큰을 저장할 수 있습니다.
Disconnect-AzAccount를 사용하여 이를 제거할 수 있습니다.
Az - AzureAD 섹션에서 az cli, AzureAD 및 Az PowerShell을 설치하는 방법을 배우세요.
가장 먼저 알아야 할 것 중 하나는 당신이 누구인지 (어떤 환경에 있는지)입니다:
azaccountlistazaccounttenantlist# Current tenant infoazaccountsubscriptionlist# Current subscription infoazadsigned-in-usershow# Current signed-in userazadsigned-in-userlist-owned-objects# Get owned objects by current userazaccountmanagement-grouplist#Not allowed by default
#Get the current session stateGet-AzureADCurrentSessionInfo#Get details of the current tenantGet-AzureADTenantDetail
# Get the information about the current context (Account, Tenant, Subscription etc.)Get-AzContext# List all available contextsGet-AzContext-ListAvailable# Enumerate subscriptions accessible by the current userGet-AzSubscription#Get Resource groupGet-AzResourceGroup# Enumerate all resources visible to the current userGet-AzResource# Enumerate all Azure RBAC role assignmentsGet-AzRoleAssignment# For all usersGet-AzRoleAssignment-SignInName test@corp.onmicrosoft.com # For current user
Azure를 열거하는 가장 중요한 명령어 중 하나는 Az PowerShell의 **Get-AzResource**입니다. 이 명령어를 사용하면 현재 사용자가 볼 수 있는 리소스를 알 수 있습니다.
이제 자격 증명에 대한 정보를 얻었으므로 (그리고 레드 팀이라면 탐지되지 않았기를 바랍니다). 환경에서 사용 중인 서비스를 파악할 시간입니다.
다음 섹션에서는 일반적인 서비스를 열거하는 몇 가지 방법을 확인할 수 있습니다.
Service Principal and Access Policy
Azure 서비스는 시스템 ID(서비스 자체) 또는 사용자 할당 관리 ID를 가질 수 있습니다. 이 ID는 예를 들어 KeyVault에서 비밀을 읽기 위한 액세스 정책을 가질 수 있습니다. 이러한 액세스 정책은 제한되어야 하지만(최소 권한 원칙), 필요한 것보다 더 많은 권한을 가질 수 있습니다. 일반적으로 App Service는 KeyVault를 사용하여 비밀과 인증서를 검색합니다.
따라서 이러한 ID를 탐색하는 것이 유용합니다.
App Service SCM
App Service '컨테이너'에 로그인하기 위한 Kudu 콘솔.
Webshell
portal.azure.com을 사용하여 셸을 선택하거나 shell.azure.com을 사용하여 bash 또는 powershell을 사용할 수 있습니다. 이 셸의 '디스크'는 storage-account에 이미지 파일로 저장됩니다.
Azure DevOps
Azure DevOps는 Azure와 별개입니다. 저장소, 파이프라인(yaml 또는 릴리스), 보드, 위키 등을 포함합니다. Variable Groups는 변수 값과 비밀을 저장하는 데 사용됩니다.
Import-Module monkey365Get-HelpInvoke-Monkey365Get-HelpInvoke-Monkey365-DetailedInvoke-Monkey365-IncludeAzureActiveDirectory -ExportTo HTML -Verbose -Debug -InformationAction ContinueInvoke-Monkey365- Instance Azure -Analysis All -ExportTo HTML
# Start Backendcd stormspotter\backend\pipenv shellpython ssbackend.pyz# Start Front-endcd stormspotter\frontend\dist\spa\quasar.cmd serve -p 9091--history# Run Stormcollectorcd stormspotter\stormcollector\pipenv shellaz login -u test@corp.onmicrosoft.com -p Welcome2022!python stormspotter\stormcollector\sscollector.pyz cli# This will generate a .zip file to upload in the frontend (127.0.0.1:9091)
AzureHound는 Azure 환경에서 BloodHound 데이터를 수집하는 도구입니다. BloodHound는 공격자가 Active Directory 환경에서 권한 상승 경로를 찾는 데 사용되는 도구입니다. AzureHound는 이와 유사하게 Azure 환경에서 권한 상승 경로를 찾는 데 사용됩니다.
BloodHound에 데이터 로드: 수집된 데이터를 BloodHound에 로드하여 분석합니다.
주요 기능
Azure AD 사용자, 그룹, 역할, 애플리케이션 및 서비스 프린시플에 대한 정보를 수집합니다.
권한 상승 경로를 시각화하여 공격자가 어떤 경로를 통해 권한을 상승시킬 수 있는지 보여줍니다.
주의사항
AzureHound를 사용하기 전에 적절한 권한을 가지고 있는지 확인해야 합니다.
수집된 데이터는 민감할 수 있으므로 안전하게 보관해야 합니다.
# You need to use the Az PowerShell and Azure AD modules:$passwd =ConvertTo-SecureString"Welcome2022!"-AsPlainText -Force$creds =New-Object System.Management.Automation.PSCredential ("test@corp.onmicrosoft.com", $passwd)Connect-AzAccount-Credential $credsImport-Module AzureAD\AzureAD.psd1Connect-AzureAD-Credential $creds# Launch AzureHound. AzureHound\AzureHound.ps1Invoke-AzureHound-Verbose# Simple queries## All Azure UsersMATCH (n:AZUser) return n.name## All Azure ApplicationsMATCH (n:AZApp) return n.objectid## All Azure DevicesMATCH (n:AZDevice) return n.name## All Azure GroupsMATCH (n:AZGroup) return n.name## All Azure Key VaultsMATCH (n:AZKeyVault) return n.name## All Azure Resource GroupsMATCH (n:AZResourceGroup) return n.name## All Azure Service PrincipalsMATCH (n:AZServicePrincipal) return n.objectid## All Azure Virtual MachinesMATCH (n:AZVM) return n.name## All Principals with the ‘Contributor’ roleMATCH p = (n)-[r:AZContributor]->(g) RETURN p# Advanced queries## Get Global AdminsMATCH p =(n)-[r:AZGlobalAdmin*1..]->(m) RETURN p## Owners of Azure GroupsMATCH p = (n)-[r:AZOwns]->(g:AZGroup) RETURN p## All Azure Users and their GroupsMATCH p=(m:AZUser)-[r:MemberOf]->(n) WHERE NOT m.objectid CONTAINS 'S-1-5'RETURN p## Privileged Service PrincipalsMATCH p = (g:AZServicePrincipal)-[r]->(n) RETURN p## Owners of Azure ApplicationsMATCH p = (n)-[r:AZOwns]->(g:AZApp) RETURN p## Paths to VMsMATCH p = (n)-[r]->(g: AZVM) RETURN p## Paths to KeyVaultMATCH p = (n)-[r]->(g:AZKeyVault) RETURN p## Paths to Azure Resource GroupMATCH p = (n)-[r]->(g:AZResourceGroup) RETURN p## On-Prem users with edges to AzureMATCH p=(m:User)-[r:AZResetPassword|AZOwns|AZUserAccessAdministrator|AZContributor|AZAddMembers|AZGlobalAdmin|AZVMContributor|AZOwnsAZAvereContributor]->(n) WHERE m.objectid CONTAINS 'S-1-5-21' RETURN p
## All Azure AD Groups that are synchronized with On-Premise ADMATCH (n:Group) WHERE n.objectid CONTAINS 'S-1-5' AND n.azsyncid IS NOT NULL RETURN n
NCC Group에서 개발한 Azucar는 Azure 서비스 구성의 보안 상태를 평가하는 도구입니다. 이 도구는 Azure 구독의 다양한 측면을 검사하고 잠재적인 보안 문제를 식별합니다.
# You should use an account with at least read-permission on the assets you want to accessgitclonehttps://github.com/nccgroup/azucar.gitPS> Get-ChildItem-Recursec:\Azucar_V10|Unblock-FilePS> .\Azucar.ps1-AuthModeUseCachedCredentials-Verbose-WriteLog-Debug-ExportToPRINTPS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
PS> .\Azucar.ps1 -ExportTo CSV,JSON,XML,EXCEL -AuthMode Certificate_Credentials -Certificate C:\AzucarTest\server.pfx -CertFilePassword MySuperP@ssw0rd! -ApplicationId 00000000-0000-0000-0000-000000000000 -TenantID 00000000-0000-0000-0000-000000000000
# resolve the TenantID for an specific usernamePS> .\Azucar.ps1-ResolveTenantUserNameuser@company.com