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 yang 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.