BARK ย่อมาจาก BloodHound Attack Research Kit เป็นสคริปต์ PowerShell ที่สร้างขึ้นเพื่อช่วยทีม BloodHound Enterprise ในการค้นคว้าและตรวจสอบการละเมิดแบบดั้งเดิมอย่างต่อเนื่อง ปัจจุบัน BARK มุ่งเน้นไปที่ชุดผลิตภัณฑ์และบริการ Azure ของ Microsoft
BARK ไม่จำเป็นต้องพึ่งพาบุคคลที่สาม ฟังก์ชั่นของ BARK ได้รับการออกแบบให้เรียบง่ายและบำรุงรักษาได้มากที่สุด ฟังก์ชันส่วนใหญ่เป็น wrappers ที่เรียบง่ายสำหรับส่งคำขอไปยังจุดสิ้นสุด REST API ต่างๆ ฟังก์ชันพื้นฐานของ BARK ไม่จำเป็นต้องใช้ซึ่งกันและกัน คุณสามารถดึงฟังก์ชัน BARK เกือบทั้งหมดออกจาก BARK ได้ และมันจะทำงานได้อย่างสมบูรณ์แบบในฐานะฟังก์ชันสแตนด์อโลนในสคริปต์ของคุณเอง
ผู้เขียนหลัก: Andy Robbins @_wald0
ผู้ร่วมให้ข้อมูล:
มีหลายวิธีในการนำเข้าสคริปต์ PowerShell นี่เป็นวิธีหนึ่ง:
ขั้นแรก ดาวน์โหลด BARK.ps1 โดยการโคลน repo นี้ หรือเพียงคัดลอก/วางเนื้อหาดิบจาก GitHub
git clone https://github.com/BloodHoundAD/BARK
ตอนนี้ cd ลงในไดเร็กทอรีที่ PS1 อยู่:
cd BARK
สุดท้าย คุณสามารถนำเข้า PS1 ได้ดังนี้:
. .BARK.ps1
กด Enter จากนั้นอินสแตนซ์ PowerShell ของคุณจะสามารถเข้าถึงฟังก์ชันทั้งหมดของ BARK ได้
ด้วยข้อยกเว้นเพียงเล็กน้อย ตำแหน่งข้อมูล Azure API จำเป็นต้องมีการรับรองความถูกต้องจึงจะโต้ตอบได้ BARK มาพร้อมกับฟังก์ชันบางอย่างที่จะช่วยให้คุณได้รับโทเค็นที่จำเป็นสำหรับการโต้ตอบกับ MS Graph และ Azure REST API ฟังก์ชัน BARK ใดๆ ที่โต้ตอบกับ Azure API ที่ต้องมีการตรวจสอบสิทธิ์จะต้องให้คุณระบุโทเค็น
สมมติว่าคุณต้องการแสดงรายการผู้ใช้ทั้งหมดในผู้เช่า Entra ID ก่อนอื่นคุณต้องได้รับโทเค็นที่กำหนดขอบเขตสำหรับ MS Graph มีหลายวิธีในการรับโทเค็นนี้:
หากคุณมีชื่อผู้ใช้/รหัสผ่านรวมกันสำหรับผู้ใช้ Entra ในผู้เช่านั้น คุณสามารถรับโทเค็นการรีเฟรชสำหรับผู้ใช้ได้ก่อนโดยใช้ฟังก์ชัน Get-EntraRefreshTokenWithUsernamePassword
ของ BARK:
$MyRefreshTokenRequest = Get-EntraRefreshTokenWithUsernamePassword -username "[email protected]" -password "MyVeryCoolPassword" -TenantID "contoso.onmicrosoft.com"
ออบเจ็กต์ผลลัพธ์ที่คุณเพิ่งสร้างขึ้น $MyRefreshTokenRequest
จะมีโทเค็นการรีเฟรชสำหรับผู้ใช้ของคุณเป็นส่วนหนึ่งของมัน ตอนนี้คุณสามารถขอโทเค็นที่กำหนดขอบเขต MS Graph ได้โดยใช้โทเค็นการรีเฟรชนี้:
$MyMSGraphToken = Get-MSGraphTokenWithRefreshToken -RefreshToken $MyRefreshTokenRequest.refresh_token -TenantID "contoso.onmicrosoft.com"
ตอนนี้วัตถุใหม่นี้ $MyMSGraphToken
จะมีหนึ่งในค่าคุณสมบัติ JWT ที่มีการกำหนดขอบเขต MS Graph สำหรับผู้ใช้ของคุณ ตอนนี้คุณพร้อมที่จะใช้โทเค็นนี้เพื่อแสดงรายการผู้ใช้ทั้งหมดในผู้เช่า Entra:
$MyUsers = Get-AllEntraUsers -Token $MyMSGraphToken.access_token -ShowProgress
เมื่อเสร็จแล้ว ตัวแปร $MyEntraUsers
จะถูกเติมด้วยอ็อบเจ็กต์ที่แสดงถึงผู้ใช้ทั้งหมดในผู้เช่า Entra ของคุณ
Get-AzureKeyVaultTokenWithClientCredentials
ร้องขอโทเค็นจาก STS ด้วย Azure Vault ที่ระบุว่าเป็นทรัพยากร/กลุ่มเป้าหมายที่ใช้รหัสไคลเอ็นต์และข้อมูลลับGet-AzureKeyVaultTokenWithUsernamePassword
ร้องขอโทเค็นจาก STS ด้วย Azure Vault ที่ระบุว่าเป็นทรัพยากร/ผู้ชมเป้าหมายโดยใช้ชื่อผู้ใช้และรหัสผ่านที่ผู้ใช้ระบุGet-AzurePortalTokenWithRefreshToken
ร้องขอโทเค็นการรีเฟรช Azure Portal Auth ด้วยโทเค็นการรีเฟรชที่ผู้ใช้ระบุGet-AzureRMTokenWithClientCredentials
ร้องขอ JWT ที่กำหนดขอบเขต AzureRM พร้อมด้วยรหัสไคลเอ็นต์และความลับ มีประโยชน์สำหรับการตรวจสอบสิทธิ์เป็นบริการหลักของ EntraGet-AzureRMTokenWithPortalAuthRefreshToken
ร้องขอ JWT ที่มีขอบเขต AzureRM พร้อมด้วยโทเค็น Azure Portal Auth Refresh ที่ผู้ใช้ระบุGet-AzureRMTokenWithRefreshToken
ร้องขอ JWT ที่กำหนดขอบเขต AzureRM พร้อมด้วยโทเค็นการรีเฟรชที่ผู้ใช้ระบุGet-AzureRMTokenWithUsernamePassword
ร้องขอ JWT ที่กำหนดขอบเขต AzureRM ด้วยชื่อผู้ใช้และรหัสผ่านที่ผู้ใช้ระบุGet-EntraRefreshTokenWithUsernamePassword
ร้องขอคอลเลกชันของโทเค็น รวมถึงโทเค็นการรีเฟรช จาก login.microsoftonline.com ด้วยชื่อผู้ใช้และรหัสผ่านที่ผู้ใช้ระบุ สิ่งนี้จะล้มเหลวหากผู้ใช้มีข้อกำหนดการตรวจสอบสิทธิ์แบบหลายปัจจัยหรือได้รับผลกระทบจากนโยบายการเข้าถึงแบบมีเงื่อนไขGet-MSGraphTokenWithClientCredentials
ร้องขอ JWT ที่มีขอบเขตกราฟ MS พร้อมรหัสไคลเอ็นต์และความลับ มีประโยชน์สำหรับการตรวจสอบสิทธิ์เป็นบริการหลักของ EntraGet-MSGraphTokenWithPortalAuthRefreshToken
ร้องขอ JWT ที่มีขอบเขตเป็น MS Graph พร้อมด้วยโทเค็น Azure Portal Auth Refresh ที่ผู้ใช้ระบุGet-MSGraphTokenWithRefreshToken
ร้องขอ JWT ที่มีขอบเขตเป็น MS Graph พร้อมด้วยโทเค็นการรีเฟรชที่ผู้ใช้ระบุGet-MSGraphTokenWithUsernamePassword
ร้องขอ JWT ที่มีขอบเขตเป็น MS Graph ด้วยชื่อผู้ใช้และรหัสผ่านที่ผู้ใช้ระบุParse-JWTToken
จะใช้ JWT ที่เข้ารหัส Base64 เป็นอินพุตและแยกวิเคราะห์ให้คุณ มีประโยชน์สำหรับการตรวจสอบผู้ชมโทเค็นและการอ้างสิทธิ์ที่ถูกต้องฟังก์ชันที่ใช้โทเค็นการรีเฟรชใน BARK นั้นอิงตามฟังก์ชันใน TokenTactics โดย Steve Borosh
Get-AllEntraApps
รวบรวมวัตถุการลงทะเบียนแอปพลิเคชัน Entra ทั้งหมดGet-AllEntraGroups
รวบรวมกลุ่ม Entra ทั้งหมดGet-AllEntraRoles
รวบรวมบทบาทผู้ดูแลระบบ Entra ทั้งหมดGet-AllEntraServicePrincipals
รวบรวมออบเจ็กต์หลักของบริการ Entra ทั้งหมดGet-AllEntraUsers
รวบรวมผู้ใช้ Entra ทั้งหมดGet-EntraAppOwner
รวบรวมเจ้าของการลงทะเบียนแอป EntraGet-EntraDeviceRegisteredUsers
รวบรวมผู้ใช้อุปกรณ์ EntraGet-EntraGroupMembers
รวบรวมสมาชิกของกลุ่ม EntraGet-EntraGroupOwner
รวบรวมเจ้าของกลุ่ม EntraGet-EntraRoleTemplates
รวบรวมเทมเพลตบทบาทของผู้ดูแลระบบ EntraGet-EntraServicePrincipal
รวบรวมหลักการบริการของ EntraGet-EntraServicePrincipalOwner
รวบรวมเจ้าของบริการหลักของ EntraGet-EntraTierZeroServicePrincipals
รวบรวมหลักการบริการของ Entra ที่มีบทบาทผู้ดูแลระบบ Tier Zero Entra หรือการกำหนดบทบาทแอป Tier Zero MS GraphGet-MGAppRoles
รวบรวมบทบาทของแอปที่มีให้โดยบริการหลักของ MS Graph Get-AllAzureManagedIdentityAssignments
รวบรวมการกำหนดข้อมูลประจำตัวที่ได้รับการจัดการทั้งหมดGet-AllAzureRMAKSClusters
รวบรวมคลัสเตอร์บริการ kubernetes ทั้งหมดภายใต้การสมัครใช้งานGet-AllAzureRMAutomationAccounts
รวบรวมบัญชีอัตโนมัติทั้งหมดภายใต้การสมัครสมาชิกGet-AllAzureRMAzureContainerRegistries
รวบรวมการลงทะเบียนคอนเทนเนอร์ทั้งหมดภายใต้การสมัครใช้งานGet-AllAzureRMFunctionApps
รวบรวมแอปฟังก์ชันทั้งหมดภายใต้การสมัครสมาชิกGet-AllAzureRMKeyVaults
รวบรวม Key Vaults ทั้งหมดภายใต้การสมัครสมาชิกGet-AllAzureRMLogicApps
รวบรวมแอปลอจิกทั้งหมดภายใต้การสมัครรับข้อมูลGet-AllAzureRMResourceGroups
รวบรวมกลุ่มทรัพยากรทั้งหมดภายใต้การสมัครใช้งานGet-AllAzureRMSubscriptions
รวบรวมการสมัคร AzureRM ทั้งหมดGet-AllAzureRMVMScaleSetsVMs
รวบรวมเครื่องเสมือนทั้งหมดภายใต้ชุดมาตราส่วน VMGet-AllAzureRMVMScaleSets
รวบรวมชุดมาตราส่วนเครื่องเสมือนทั้งหมดภายใต้การสมัครใช้งานGet-AllAzureRMVirtualMachines
รวบรวมเครื่องเสมือนทั้งหมดภายใต้การสมัครสมาชิกGet-AllAzureRMWebApps
รวบรวมเว็บแอปทั้งหมดภายใต้การสมัครสมาชิกGet-AzureAutomationAccountRunBookOutput
รันสมุดบัญชีอัตโนมัติและดึงข้อมูลผลลัพธ์Get-AzureFunctionAppFunctionFile
รวบรวมไฟล์ดิบ (โดยปกติจะเป็นซอร์สโค้ด) ของฟังก์ชันแอปฟังก์ชันGet-AzureFunctionAppFunctions
รวบรวมฟังก์ชันทั้งหมดภายใต้แอปฟังก์ชันGet-AzureFunctionAppMasterKeys
รวบรวมคีย์หลักทั้งหมดภายใต้แอปฟังก์ชันGet-AzureFunctionOutput
รันฟังก์ชันแอปฟังก์ชันและดึงข้อมูลเอาต์พุตGet-AzureRMKeyVaultSecretValue
รวบรวมค่าความลับของ Key VaultGet-AzureRMKeyVaultSecretVersions
รวบรวม Key Vault Secret ทุกเวอร์ชันGet-AzureRMKeyVaultSecrets
รวบรวมความลับทั้งหมดภายใต้ Key VaultGet-AzureRMRoleAssignments
รวบรวมการกำหนดบทบาททั้งหมดกับวัตถุGet-AzureRMRoleDefinitions
รวบรวมคำจำกัดความบทบาททั้งหมดที่อธิบายไว้ในขอบเขตการสมัครใช้งาน รวมถึงบทบาทที่กำหนดเองGet-AzureRMWebApp
รวบรวมเว็บแอป Get-IntuneManagedDevices
รวบรวมอุปกรณ์ที่มีการจัดการ IntuneGet-IntuneRoleDefinitions
รวบรวมคำจำกัดความบทบาท Intune ที่พร้อมใช้งาน Add-MemberToEntraGroup
จะพยายามเพิ่มตัวการให้กับกลุ่ม EntraEnable-EntraRole
จะพยายามเปิดใช้งาน (หรือ "เปิดใช้งาน") บทบาท EntraNew-EntraAppOwner
จะพยายามเพิ่มเจ้าของใหม่ในแอป EntraNew-EntraAppRoleAssignment
จะพยายามมอบบทบาทของแอปให้กับบริการหลัก ตัวอย่างเช่น คุณสามารถใช้สิ่งนี้เพื่อให้บทบาทแอป RoleManagement.ReadWrite.Directory แก่บริการหลักได้New-EntraAppSecret
จะพยายามสร้างความลับใหม่สำหรับการลงทะเบียนแอป Entra ที่มีอยู่New-EntraGroupOwner
จะพยายามเพิ่มเจ้าของใหม่ให้กับกลุ่ม EntraNew-EntraRoleAssignment
จะพยายามมอบหมายบทบาทผู้ดูแลระบบ Entra ให้กับอาจารย์ใหญ่ที่ระบุNew-EntraServicePrincipalOwner
จะพยายามเพิ่มเจ้าของใหม่ให้กับบริการหลักของ EntraNew-EntraServicePrincipalSecret
จะพยายามสร้างข้อมูลลับใหม่สำหรับบริการหลักของ Entra ที่มีอยู่Reset-EntraUserPassword
จะพยายามรีเซ็ตรหัสผ่านของผู้ใช้รายอื่น หากสำเร็จ ผลลัพธ์จะมีรหัสผ่านใหม่ที่สร้างโดย Azure ของผู้ใช้Set-EntraUserPassword
จะพยายามตั้งรหัสผ่านของผู้ใช้รายอื่นเป็นค่าที่ผู้ใช้ระบุใหม่ Invoke-AzureRMAKSRunCommand
จะสั่งให้คลัสเตอร์ AKS ดำเนินการคำสั่งInvoke-AzureRMVMRunCommand
จะพยายามดำเนินการคำสั่งบน VMInvoke-AzureRMWebAppShellCommand
จะพยายามดำเนินการคำสั่งบนคอนเทนเนอร์ของเว็บแอปInvoke-AzureVMScaleSetVMRunCommand
จะพยายามดำเนินการคำสั่งบน VM Scale Set VMNew-AzureAutomationAccountRunBook
จะพยายามเพิ่ม runbook ให้กับบัญชีอัตโนมัติNew-AzureKeyVaultAccessPolicy
จะพยายามให้สิทธิ์ "รับ" และ "รายการ" หลักกับความลับ คีย์ และใบรับรองของ Key VaultNew-AzureRMRoleAssignment
จะพยายามมอบการกำหนดบทบาท AzureRM ที่ผู้ใช้ระบุให้กับตัวการเฉพาะในขอบเขตที่กำหนดNew-PowerShellFunctionAppFunction
จะพยายามสร้างฟังก์ชัน PowerShell ใหม่ในแอปฟังก์ชัน ConvertTo-Markdown
ใช้สำหรับการนวดเอาต์พุตจากฟังก์ชัน Invivo-Tests สำหรับการใช้งานในแพลตฟอร์มอื่นInvoke-AllAzureMGAbuseTests
ดำเนินการทดสอบการตรวจสอบการละเมิดทั้งหมดที่สามารถดำเนินการได้โดยการถือบทบาทแอป MS Graph ส่งคืนออบเจ็กต์ที่อธิบายว่าสิทธิ์ใดที่ประสบความสำเร็จในการทดสอบการละเมิดแต่ละครั้งInvoke-AllAzureRMAbuseTests
ดำเนินการทดสอบการตรวจสอบการละเมิด AzureRM ทั้งหมด และส่งออกออบเจ็กต์ผลลัพธ์ที่อธิบายว่าบทบาท AzureRM ใดที่ได้รับความสามารถในการดำเนินการละเมิดแต่ละครั้งInvoke-AllEntraAbuseTests
ดำเนินการทดสอบการตรวจสอบการละเมิดทั้งหมดที่สามารถทำได้โดยผู้หลักที่ได้รับบทบาทผู้ดูแลระบบ Entra ส่งคืนออบเจ็กต์ที่อธิบายว่าสิทธิ์ใดที่ประสบความสำเร็จในการทดสอบการละเมิดแต่ละครั้งNew-EntraIDAbuseTestSPs
จะสร้างบริการหลักใหม่ตามบทบาทผู้ดูแลระบบ Entra ที่ใช้งานอยู่ และมอบบทบาทที่เหมาะสมให้กับบริการหลักแต่ละรายการ ส่งกลับข้อมูลรับรองข้อความธรรมดาที่สร้างขึ้นสำหรับแต่ละบริการหลักNew-EntraIDAbuseTestUsers
สร้างผู้ใช้ใหม่ต่อบทบาทผู้ดูแลระบบ Entra ที่ใช้งานอยู่ และมอบบทบาทที่เหมาะสมให้กับผู้ใช้แต่ละราย ส่งกลับข้อมูลรับรองข้อความธรรมดาที่สร้างขึ้นสำหรับผู้ใช้แต่ละรายNew-IntuneAbuseTestUsers
สร้างผู้ใช้ใหม่ตามบทบาท Intune และมอบบทบาทที่เหมาะสมให้กับผู้ใช้แต่ละราย ส่งกลับข้อมูลรับรองข้อความธรรมดาที่สร้างขึ้นสำหรับผู้ใช้แต่ละรายNew-MSGraphAppRoleTestSPs
จะสร้างบริการหลักใหม่ตามบทบาทของแอป MS Graph และมอบบทบาทที่เหมาะสมให้กับบริการหลักแต่ละรายการ ส่งกลับข้อมูลรับรองข้อความธรรมดาที่สร้างขึ้นสำหรับแต่ละบริการหลักNew-TestAppReg
สร้างออบเจ็กต์การลงทะเบียนแอปพลิเคชันเพื่อวัตถุประสงค์ที่ชัดเจนในการทดสอบการตรวจสอบการละเมิดNew-TestSP
สร้างบริการหลักใหม่และเชื่อมโยงกับแอปที่สร้างโดยฟังก์ชันข้างต้นRemove-AbuseTestAzureRMRoles
เป็นฟังก์ชันล้างข้อมูลสำหรับการลบบทบาทผู้ดูแลระบบ AzureRM ที่สร้างขึ้นระหว่างการทดสอบRemove-AbuseTestServicePrincipals
จะล้างการทดสอบการละเมิดโดยการลบหลักการบริการที่สร้างขึ้นระหว่างการทดสอบTest-AzureRMAddSelfToAzureRMRole
ใช้ในการทดสอบการตรวจสอบความถูกต้องในทางที่ผิดเพื่อตรวจสอบว่าบริการหลักที่มีสิทธิ์บางอย่างสามารถให้บทบาทผู้ดูแลระบบการเข้าถึงผู้ใช้แก่ตนเองผ่านการสมัครสมาชิกได้หรือไม่Test-AzureRMCreateFunction
ใช้ในการทดสอบการตรวจสอบความถูกต้องในทางที่ผิดเพื่อทดสอบว่าบริการหลักสามารถเพิ่มฟังก์ชันใหม่ให้กับแอปฟังก์ชันที่มีอยู่ได้หรือไม่Test-AzureRMPublishAutomationAccountRunBook
ใช้เพื่อทดสอบว่าบริการหลักสามารถเผยแพร่ Runbook ใหม่ไปยังบัญชีอัตโนมัติที่มีอยู่ได้หรือไม่Test-AzureRMVMRunCommand
ใช้เพื่อทดสอบว่าตัวการสามารถเรียกใช้คำสั่งบน VM ที่มีอยู่ได้หรือไม่Test-MGAddMemberToNonRoleEligibleGroup
ใช้เพื่อทดสอบว่าบริการหลักสามารถเพิ่มตัวเองลงในกลุ่มที่มีสิทธิ์ที่ไม่ใช่บทบาทได้หรือไม่Test-MGAddMemberToRoleEligibleGroup
ใช้เพื่อทดสอบว่าบริการหลักสามารถเพิ่มตัวเองลงในกลุ่มที่มีสิทธิ์ตามบทบาทได้หรือไม่Test-MGAddOwnerToNonRoleEligibleGroup
ใช้เพื่อทดสอบว่าบริการหลักสามารถให้สิทธิ์การเป็นเจ้าของกลุ่มที่มีสิทธิ์ซึ่งไม่มีบทบาทอย่างชัดเจนได้หรือไม่Test-MGAddOwnerToRoleEligibleGroup
ใช้เพื่อทดสอบว่าบริการหลักสามารถให้สิทธิ์การเป็นเจ้าของกลุ่มที่มีสิทธิ์ตามบทบาทอย่างชัดเจนหรือไม่Test-MGAddRootCACert
ใช้เพื่อทดสอบว่าผู้ให้บริการหลักสามารถเพิ่มใบรับรอง Root CA ใหม่ให้กับผู้เช่าได้หรือไม่Test-MGAddSecretToApp
ใช้เพื่อทดสอบว่าบริการหลักสามารถเพิ่มความลับใหม่ให้กับแอปที่มีอยู่ได้หรือไม่Test-MGAddSecretToSP
ใช้เพื่อทดสอบว่าบริการหลักสามารถเพิ่มข้อมูลลับใหม่ให้กับบริการหลักที่มีอยู่ได้หรือไม่Test-MGAddSelfAsOwnerOfApp
ใช้ในการทดสอบการตรวจสอบการละเมิดเพื่อตรวจสอบว่าบริการหลักที่มีสิทธิ์เฉพาะสามารถให้สิทธิ์การเป็นเจ้าของแอป Entra ที่มีอยู่ได้หรือไม่Test-MGAddSelfAsOwnerOfSP
ใช้ในการทดสอบการตรวจสอบความถูกต้องในทางที่ผิดเพื่อตรวจสอบว่าบริการหลักที่มีสิทธิ์เฉพาะสามารถให้สิทธิ์การเป็นเจ้าของบริการหลักของ Entra ที่มีอยู่ได้หรือไม่Test-MGAddSelfToEntraRole
ใช้ในการทดสอบการตรวจสอบความถูกต้องในทางที่ผิดเพื่อพิจารณาว่าบริการหลักที่มีสิทธิ์เฉพาะสามารถเพิ่มตัวเองลงในบทบาทผู้ดูแลระบบ Entra เช่น ผู้ดูแลระบบส่วนกลาง เป็นต้นTest-MGAddSelfToMGAppRole
ใช้ในการทดสอบการตรวจสอบความถูกต้องในทางที่ผิดเพื่อตรวจสอบว่าบริการหลักที่มีสิทธิ์พิเศษสามารถให้บทบาทแอป MS Graph เฉพาะแก่ตัวเองได้โดยไม่ต้องได้รับความยินยอมจากผู้ดูแลระบบหรือไม่