BARK adalah singkatan dari BloodHound Attack Research Kit. Ini adalah skrip PowerShell yang dibuat untuk membantu tim BloodHound Enterprise dalam meneliti dan terus memvalidasi penyalahgunaan primitif. BARK saat ini berfokus pada rangkaian produk dan layanan Microsoft Azure.
BARK tidak memerlukan ketergantungan pihak ketiga. Fungsi BARK dirancang sesederhana dan sedapat mungkin dipelihara. Sebagian besar fungsi merupakan pembungkus yang sangat sederhana untuk membuat permintaan ke berbagai titik akhir REST API. Fungsi dasar BARK bahkan tidak memerlukan satu sama lain - Anda dapat menarik hampir semua fungsi BARK dari BARK dan fungsi tersebut akan bekerja dengan sempurna sebagai fungsi mandiri dalam skrip Anda sendiri.
Penulis utama: Andy Robbins @_wald0
Kontributor:
Ada banyak cara untuk mengimpor skrip PowerShell. Inilah salah satu caranya:
Pertama, unduh BARK.ps1 dengan mengkloning repo ini atau cukup salin/tempel konten mentahnya dari GitHub.
git clone https://github.com/BloodHoundAD/BARK
Sekarang, cd ke direktori tempat PS1 berada:
cd BARK
Terakhir, Anda dapat melakukan dot import PS1 seperti ini:
. .BARK.ps1
Tekan enter, dan instance PowerShell Anda sekarang akan memiliki akses ke semua fungsi BARK.
Dengan sedikit pengecualian, titik akhir Azure API memerlukan autentikasi untuk berinteraksi. BARK hadir dengan beberapa fungsi yang akan membantu Anda memperoleh token yang diperlukan untuk berinteraksi dengan MS Graph dan Azure REST API. Fungsi BARK apa pun yang berinteraksi dengan Azure API yang memerlukan autentikasi akan mengharuskan Anda menyediakan token.
Katakanlah Anda ingin mencantumkan semua pengguna di penyewa Entra ID. Anda harus terlebih dahulu mendapatkan cakupan token untuk MS Graph. Ada banyak cara untuk mendapatkan token ini:
Jika Anda memiliki kombinasi nama pengguna/kata sandi untuk pengguna Entra di penyewa tersebut, Anda dapat terlebih dahulu memperoleh token penyegaran untuk pengguna tersebut menggunakan fungsi Get-EntraRefreshTokenWithUsernamePassword
BARK:
$MyRefreshTokenRequest = Get-EntraRefreshTokenWithUsernamePassword -username "[email protected]" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
Objek hasil yang baru saja Anda buat, $MyRefreshTokenRequest
, akan memiliki token penyegaran untuk pengguna Anda. Anda sekarang dapat meminta token cakupan MS Graph menggunakan token penyegaran ini:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
Sekarang objek baru ini, $MyMSGraphToken
, akan memiliki salah satu nilai propertinya JWT cakupan MS Graph untuk pengguna Anda. Anda sekarang siap menggunakan token ini untuk mencantumkan semua pengguna di penyewa Entra:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
Setelah selesai, variabel $MyEntraUsers
akan diisi oleh objek yang mewakili semua pengguna di penyewa Entra Anda.
Get-AzureKeyVaultTokenWithClientCredentials
meminta token dari STS dengan Azure Vault yang ditentukan sebagai sumber daya/audiens yang dituju menggunakan ID klien dan rahasia.Get-AzureKeyVaultTokenWithUsernamePassword
meminta token dari STS dengan Azure Vault yang ditentukan sebagai sumber daya/audiens yang dituju menggunakan nama pengguna dan kata sandi yang diberikan pengguna.Get-AzurePortalTokenWithRefreshToken
meminta token Azure Portal Auth Refresh dengan token penyegaran yang disediakan pengguna.Get-AzureRMTokenWithClientCredentials
meminta JWT cakupan AzureRM dengan ID klien dan rahasia. Berguna untuk mengautentikasi sebagai perwakilan layanan Entra.Get-AzureRMTokenWithPortalAuthRefreshToken
meminta JWT cakupan AzureRM dengan token Azure Portal Auth Refresh yang disediakan pengguna.Get-AzureRMTokenWithRefreshToken
meminta JWT cakupan AzureRM dengan token penyegaran yang disediakan pengguna.Get-AzureRMTokenWithUsernamePassword
meminta JWT cakupan AzureRM dengan nama pengguna dan kata sandi yang diberikan pengguna.Get-EntraRefreshTokenWithUsernamePassword
meminta kumpulan token, termasuk token penyegaran, dari login.microsoftonline.com dengan nama pengguna dan kata sandi yang diberikan pengguna. Tindakan ini akan gagal jika pengguna memiliki persyaratan Autentikasi Multifaktor atau terpengaruh oleh Kebijakan Akses Bersyarat.Get-MSGraphTokenWithClientCredentials
meminta JWT cakupan MS Graph dengan ID klien dan rahasia. Berguna untuk mengautentikasi sebagai perwakilan layanan Entra.Get-MSGraphTokenWithPortalAuthRefreshToken
meminta JWT cakupan MS Graph dengan token Azure Portal Auth Refresh yang disediakan pengguna.Get-MSGraphTokenWithRefreshToken
meminta JWT cakupan MS Graph dengan token penyegaran yang disediakan pengguna.Get-MSGraphTokenWithUsernamePassword
meminta JWT cakupan MS Graph dengan nama pengguna dan kata sandi yang diberikan pengguna.Parse-JWTToken
akan mengambil JWT yang dikodekan Base64 sebagai masukan dan menguraikannya untuk Anda. Berguna untuk memverifikasi audiens dan klaim token yang benar.Fungsi penyegaran berbasis token di BARK didasarkan pada fungsi di TokenTactics oleh Steve Borosh.
Get-AllEntraApps
mengumpulkan semua objek pendaftaran aplikasi Entra.Get-AllEntraGroups
mengumpulkan semua grup Entra.Get-AllEntraRoles
mengumpulkan semua peran admin Entra.Get-AllEntraServicePrincipals
mengumpulkan semua objek perwakilan layanan Entra.Get-AllEntraUsers
mengumpulkan semua pengguna Entra.Get-EntraAppOwner
mengumpulkan pemilik pendaftaran aplikasi Entra.Get-EntraDeviceRegisteredUsers
mengumpulkan pengguna perangkat Entra.Get-EntraGroupMembers
mengumpulkan anggota grup Entra.Get-EntraGroupOwner
mengumpulkan pemilik grup Entra.Get-EntraRoleTemplates
mengumpulkan templat peran admin Entra.Get-EntraServicePrincipal
mengumpulkan perwakilan layanan Entra.Get-EntraServicePrincipalOwner
mengumpulkan pemilik perwakilan layanan Entra.Get-EntraTierZeroServicePrincipals
mengumpulkan perwakilan layanan Entra yang memiliki Peran Admin Entra Tier Zero atau penetapan Peran Aplikasi MS Graph Tier Zero.Get-MGAppRoles
mengumpulkan peran aplikasi yang disediakan oleh perwakilan layanan MS Graph. Get-AllAzureManagedIdentityAssignments
mengumpulkan semua penetapan identitas terkelola.Get-AllAzureRMAKSClusters
mengumpulkan semua kluster layanan kubernetes dalam langganan.Get-AllAzureRMAutomationAccounts
mengumpulkan semua akun otomatisasi dalam langganan.Get-AllAzureRMAzureContainerRegistries
mengumpulkan semua registrasi kontainer dalam langganan.Get-AllAzureRMFunctionApps
mengumpulkan semua aplikasi fungsi dalam langganan.Get-AllAzureRMKeyVaults
mengumpulkan semua brankas kunci dalam langganan.Get-AllAzureRMLogicApps
mengumpulkan semua aplikasi logika dalam langganan.Get-AllAzureRMResourceGroups
mengumpulkan semua grup sumber daya dalam langganan.Get-AllAzureRMSubscriptions
mengumpulkan semua langganan AzureRM.Get-AllAzureRMVMScaleSetsVMs
mengumpulkan semua mesin virtual di bawah kumpulan skala VM.Get-AllAzureRMVMScaleSets
mengumpulkan semua set skala komputer virtual dalam langganan.Get-AllAzureRMVirtualMachines
mengumpulkan semua mesin virtual dalam langganan.Get-AllAzureRMWebApps
mengumpulkan semua aplikasi web dalam langganan.Get-AzureAutomationAccountRunBookOutput
menjalankan runbook akun otomatisasi dan mengambil outputnya.Get-AzureFunctionAppFunctionFile
mengumpulkan file mentah (biasanya kode sumber) dari fungsi aplikasi fungsi.Get-AzureFunctionAppFunctions
mengumpulkan semua fungsi di bawah aplikasi fungsi.Get-AzureFunctionAppMasterKeys
mengumpulkan semua kunci utama di bawah aplikasi fungsi.Get-AzureFunctionOutput
menjalankan fungsi aplikasi fungsi dan mengambil outputnya.Get-AzureRMKeyVaultSecretValue
mengumpulkan nilai rahasia brankas kunci.Get-AzureRMKeyVaultSecretVersions
mengumpulkan semua versi rahasia brankas kunci.Get-AzureRMKeyVaultSecrets
mengumpulkan semua rahasia di bawah brankas kunci.Get-AzureRMRoleAssignments
mengumpulkan semua penetapan peran terhadap suatu objek.Get-AzureRMRoleDefinitions
mengumpulkan semua definisi peran yang dijelaskan pada cakupan langganan, termasuk peran kustom.Get-AzureRMWebApp
mengumpulkan aplikasi web. Get-IntuneManagedDevices
mengumpulkan perangkat yang dikelola Intune.Get-IntuneRoleDefinitions
mengumpulkan definisi peran Intune yang tersedia. Add-MemberToEntraGroup
akan mencoba menambahkan entitas utama ke grup Entra.Enable-EntraRole
akan mencoba mengaktifkan (atau "mengaktifkan") peran Entra.New-EntraAppOwner
akan mencoba menambahkan pemilik baru ke aplikasi Entra.New-EntraAppRoleAssignment
akan mencoba memberikan peran aplikasi kepada perwakilan layanan. Misalnya, Anda dapat menggunakan ini untuk memberikan peran aplikasi RoleManagement.ReadWrite.Directory kepada perwakilan layanan.New-EntraAppSecret
akan mencoba membuat rahasia baru untuk pendaftaran aplikasi Entra yang sudah ada.New-EntraGroupOwner
akan mencoba menambahkan pemilik baru ke grup Entra.New-EntraRoleAssignment
akan mencoba menetapkan peran admin Entra ke entitas utama tertentu.New-EntraServicePrincipalOwner
akan mencoba menambahkan pemilik baru ke perwakilan layanan Entra.New-EntraServicePrincipalSecret
akan mencoba membuat rahasia baru untuk perwakilan layanan Entra yang sudah ada.Reset-EntraUserPassword
akan mencoba mengatur ulang kata sandi pengguna lain. Jika berhasil, outputnya akan berisi kata sandi pengguna baru yang dibuat oleh Azure.Set-EntraUserPassword
akan mencoba mengatur kata sandi pengguna lain ke nilai baru yang disediakan pengguna. Invoke-AzureRMAKSRunCommand
akan menginstruksikan kluster AKS untuk menjalankan perintah.Invoke-AzureRMVMRunCommand
akan mencoba menjalankan perintah pada VM.Invoke-AzureRMWebAppShellCommand
akan mencoba menjalankan perintah pada kontainer aplikasi web.Invoke-AzureVMScaleSetVMRunCommand
akan mencoba menjalankan perintah pada VM Scale Set VM.New-AzureAutomationAccountRunBook
akan mencoba menambahkan runbook ke akun otomatisasi.New-AzureKeyVaultAccessPolicy
akan mencoba memberikan izin utama "Dapatkan" dan "Daftar" pada rahasia, kunci, dan sertifikat brankas kunci.New-AzureRMRoleAssignment
akan mencoba memberikan penetapan peran AzureRM yang ditentukan pengguna kepada entitas utama tertentu pada cakupan tertentu.New-PowerShellFunctionAppFunction
akan mencoba membuat fungsi PowerShell baru di aplikasi fungsi. ConvertTo-Markdown
digunakan untuk memijat output dari fungsi Invoke-Tests untuk digunakan di platform lain.Invoke-AllAzureMGAbuseTests
melakukan semua pengujian validasi penyalahgunaan yang dapat dijalankan dengan memegang peran aplikasi MS Graph. Mengembalikan objek yang menjelaskan hak istimewa mana yang berhasil melakukan setiap pengujian penyalahgunaan.Invoke-AllAzureRMAbuseTests
melakukan semua pengujian validasi penyalahgunaan AzureRM dan mengeluarkan objek hasil yang menjelaskan peran AzureRM mana yang diberikan kemampuan untuk melakukan setiap penyalahgunaan.Invoke-AllEntraAbuseTests
melakukan semua tes validasi penyalahgunaan yang dapat dijalankan oleh entitas utama yang diberikan peran admin Entra. Mengembalikan objek yang menjelaskan hak istimewa mana yang berhasil melakukan setiap pengujian penyalahgunaan.New-EntraIDAbuseTestSPs
membuat perwakilan layanan baru per peran admin Entra aktif dan memberikan peran yang sesuai kepada setiap perwakilan layanan. Mengembalikan kredensial teks biasa yang dibuat untuk setiap kepala layanan.New-EntraIDAbuseTestUsers
membuat pengguna baru per peran admin Entra aktif dan memberi setiap pengguna peran yang sesuai. Mengembalikan kredensial teks biasa yang dibuat untuk setiap pengguna.New-IntuneAbuseTestUsers
membuat pengguna baru per peran Intune dan memberi setiap pengguna peran yang sesuai. Mengembalikan kredensial teks biasa yang dibuat untuk setiap pengguna.New-MSGraphAppRoleTestSPs
membuat perwakilan layanan baru per peran aplikasi MS Graph dan memberikan peran yang sesuai kepada setiap perwakilan layanan. Mengembalikan kredensial teks biasa yang dibuat untuk setiap kepala layanan.New-TestAppReg
membuat objek pendaftaran aplikasi untuk tujuan eksplisit pengujian validasi penyalahgunaan.New-TestSP
membuat perwakilan layanan baru dan mengaitkannya dengan aplikasi yang dibuat oleh fungsi di atas.Remove-AbuseTestAzureRMRoles
adalah fungsi pembersihan untuk menghapus peran admin AzureRM yang dibuat selama pengujian.Remove-AbuseTestServicePrincipals
membersihkan pengujian penyalahgunaan dengan menghapus prinsipal layanan yang dibuat selama pengujian.Test-AzureRMAddSelfToAzureRMRole
digunakan dalam pengujian validasi penyalahgunaan untuk menentukan apakah perwakilan layanan dengan hak tertentu dapat memberikan sendiri peran Admin Akses Pengguna melalui langganan.Test-AzureRMCreateFunction
digunakan dalam pengujian validasi penyalahgunaan untuk menguji apakah perwakilan layanan dapat menambahkan fungsi baru ke aplikasi fungsi yang sudah ada.Test-AzureRMPublishAutomationAccountRunBook
digunakan untuk menguji apakah perwakilan layanan dapat menerbitkan runbook baru ke akun otomatisasi yang ada.Test-AzureRMVMRunCommand
digunakan untuk menguji apakah entitas utama dapat menjalankan perintah pada VM yang ada.Test-MGAddMemberToNonRoleEligibleGroup
digunakan untuk menguji apakah perwakilan layanan dapat menambahkan dirinya ke grup yang tidak memenuhi syarat peran.Test-MGAddMemberToRoleEligibleGroup
digunakan untuk menguji apakah perwakilan layanan dapat menambahkan dirinya ke grup yang memenuhi syarat peran.Test-MGAddOwnerToNonRoleEligibleGroup
digunakan untuk menguji apakah perwakilan layanan dapat memberikan kepemilikan eksplisit atas grup yang tidak memenuhi syarat peran.Test-MGAddOwnerToRoleEligibleGroup
digunakan untuk menguji apakah perwakilan layanan dapat memberikan dirinya sendiri kepemilikan eksplisit atas grup yang memenuhi syarat peran.Test-MGAddRootCACert
digunakan untuk menguji apakah perwakilan layanan dapat menambahkan sertifikat Root CA baru ke penyewa.Test-MGAddSecretToApp
digunakan untuk menguji apakah perwakilan layanan dapat menambahkan rahasia baru ke aplikasi yang sudah ada.Test-MGAddSecretToSP
digunakan untuk menguji apakah perwakilan layanan dapat menambahkan rahasia baru ke perwakilan layanan yang sudah ada.Test-MGAddSelfAsOwnerOfApp
digunakan dalam pengujian validasi penyalahgunaan untuk menentukan apakah perwakilan layanan dengan hak istimewa tertentu dapat memberikan dirinya kepemilikan atas aplikasi Entra yang ada.Test-MGAddSelfAsOwnerOfSP
digunakan dalam pengujian validasi penyalahgunaan untuk menentukan apakah perwakilan layanan dengan hak istimewa tertentu dapat memberikan dirinya kepemilikan atas perwakilan layanan Entra yang ada.Test-MGAddSelfToEntraRole
digunakan dalam pengujian validasi penyalahgunaan untuk menentukan apakah perwakilan layanan dengan hak istimewa tertentu dapat menambahkan dirinya ke peran admin Entra - Admin Global, misalnya.Test-MGAddSelfToMGAppRole
digunakan dalam pengujian validasi penyalahgunaan untuk menentukan apakah perwakilan layanan dengan hak istimewa tertentu dapat memberikan dirinya sendiri peran aplikasi MS Graph tertentu tanpa izin admin.