يرمز BARK إلى مجموعة أبحاث هجوم BloodHound. إنه برنامج PowerShell النصي الذي تم تصميمه لمساعدة فريق BloodHound Enterprise في البحث والتحقق المستمر من أساسيات إساءة الاستخدام. تركز BARK حاليًا على مجموعة منتجات وخدمات Microsoft Azure.
لا يتطلب BARK أي تبعيات لطرف ثالث. تم تصميم وظائف BARK لتكون بسيطة وقابلة للصيانة قدر الإمكان. معظم الوظائف عبارة عن أغلفة بسيطة جدًا لتقديم الطلبات إلى نقاط نهاية REST API المختلفة. لا تتطلب وظائف BARK الأساسية بعضها البعض - يمكنك سحب أي وظيفة BARK تقريبًا من BARK وستعمل بشكل مثالي كوظيفة مستقلة في البرامج النصية الخاصة بك.
المؤلف الرئيسي: آندي روبينز @_wald0
المساهمين:
هناك طرق عديدة لاستيراد برنامج PowerShell النصي. إليك طريقة واحدة:
أولاً، قم بتنزيل BARK.ps1 عن طريق استنساخ هذا الريبو أو ببساطة نسخ/لصق محتوياته الأولية من GitHub.
git clone https://github.com/BloodHoundAD/BARK
الآن، أدخل القرص المضغوط إلى الدليل الذي يوجد به PS1:
cd BARK
أخيرًا، يمكنك استيراد جهاز PS1 بهذه الطريقة:
. .BARK.ps1
اضغط على زر الإدخال، وسيتمكن الآن مثيل PowerShell الخاص بك من الوصول إلى جميع وظائف BARK.
مع استثناءات قليلة جدًا، تتطلب نقاط نهاية Azure API المصادقة للتفاعل معها. يأتي BARK مع بعض الوظائف التي ستساعدك في الحصول على الرموز المميزة اللازمة للتفاعل مع MS Graph وAzure REST APIs. أي وظيفة BARK تتفاعل مع Azure API والتي تتطلب المصادقة ستتطلب منك توفير رمز مميز.
لنفترض أنك تريد إدراج جميع المستخدمين في مستأجر معرف Entra. تحتاج أولاً إلى الحصول على رمز مميز محدد لـ 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 مع معرف العميل والسر. مفيد للمصادقة كمدير خدمة Entra.Get-AzureRMTokenWithPortalAuthRefreshToken
JWT على نطاق AzureRM مع رمز تحديث Azure Portal Auth الذي يقدمه المستخدم.Get-AzureRMTokenWithRefreshToken
JWT على نطاق AzureRM مع رمز التحديث المقدم من المستخدم.Get-AzureRMTokenWithUsernamePassword
JWT على نطاق AzureRM مع اسم المستخدم وكلمة المرور اللذين يوفرهما المستخدم.Get-EntraRefreshTokenWithUsernamePassword
مجموعة من الرموز المميزة، بما في ذلك رمز التحديث، من تسجيل الدخول.microsoftonline.com باستخدام اسم المستخدم وكلمة المرور اللذين يوفرهما المستخدم. سيفشل هذا إذا كان لدى المستخدم متطلبات مصادقة متعددة العوامل أو إذا تأثر بسياسة الوصول المشروط.Get-MSGraphTokenWithClientCredentials
JWT على نطاق MS Graph مع معرف العميل والسر. مفيد للمصادقة كمدير خدمة Entra.Get-MSGraphTokenWithPortalAuthRefreshToken
JWT على نطاق MS Graph مع رمز تحديث Azure Portal Auth الذي يقدمه المستخدم.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
بجمع مالكي تسجيل تطبيق Entra.Get-EntraDeviceRegisteredUsers
بجمع مستخدمي جهاز Entra.Get-EntraGroupMembers
أعضاء مجموعة Entra.Get-EntraGroupOwner
بجمع مالكي مجموعة Entra.Get-EntraRoleTemplates
بجمع قوالب دور مسؤول Entra.Get-EntraServicePrincipal
بجمع مبدأ خدمة Entra.Get-EntraServicePrincipalOwner
بجمع مالكي مدير خدمة Entra.Get-EntraTierZeroServicePrincipals
بجمع مبادئ خدمة Entra التي لديها دور مسؤول Tier Zero Entra أو تعيين دور تطبيق Tier Zero MS Graph.Get-MGAppRoles
أدوار التطبيق التي يوفرها مدير خدمة MS Graph. Get-AllAzureManagedIdentityAssignments
بجمع كافة تعيينات الهوية المُدارة.Get-AllAzureRMAKSClusters
بجمع كل مجموعات خدمة kubernetes بموجب اشتراك.Get-AllAzureRMAutomationAccounts
بجمع كافة حسابات الأتمتة بموجب اشتراك.Get-AllAzureRMAzureContainerRegistries
بجمع جميع سجلات الحاويات بموجب اشتراك.Get-AllAzureRMFunctionApps
جميع التطبيقات الوظيفية ضمن اشتراك.Get-AllAzureRMKeyVaults
جميع خزائن المفاتيح ضمن اشتراك.Get-AllAzureRMLogicApps
جميع التطبيقات المنطقية بموجب اشتراك.Get-AllAzureRMResourceGroups
بجمع كافة مجموعات الموارد ضمن الاشتراك.Get-AllAzureRMSubscriptions
جميع اشتراكات AzureRM.Get-AllAzureRMVMScaleSetsVMs
بجمع كافة الأجهزة الافتراضية ضمن مجموعة مقياس VM.Get-AllAzureRMVMScaleSets
جميع مجموعات موازين الأجهزة الافتراضية ضمن اشتراك.Get-AllAzureRMVirtualMachines
بجمع كافة الأجهزة الافتراضية بموجب اشتراك.Get-AllAzureRMWebApps
جميع تطبيقات الويب بموجب اشتراك.Get-AzureAutomationAccountRunBookOutput
بتشغيل دليل تشغيل حساب التشغيل الآلي واسترداد مخرجاته.Get-AzureFunctionAppFunctionFile
بتجميع الملف الأولي (عادةً التعليمات البرمجية المصدر) لوظيفة التطبيق الوظيفي.Get-AzureFunctionAppFunctions
جميع الوظائف ضمن تطبيق وظيفي.Get-AzureFunctionAppMasterKeys
جميع المفاتيح الرئيسية ضمن تطبيق وظيفي.Get-AzureFunctionOutput
بتشغيل وظيفة التطبيق الوظيفي واسترداد مخرجاتها.Get-AzureRMKeyVaultSecretValue
بجمع القيمة السرية لمخزن المفتاح.Get-AzureRMKeyVaultSecretVersions
جميع إصدارات سر مخزن المفاتيح.Get-AzureRMKeyVaultSecrets
بجمع كل الأسرار ضمن قبو رئيسي.Get-AzureRMRoleAssignments
بجمع كافة تعيينات الأدوار مقابل كائن ما.Get-AzureRMRoleDefinitions
جميع تعريفات الأدوار الموضحة في نطاق الاشتراك، بما في ذلك الأدوار المخصصة.Get-AzureRMWebApp
تطبيق ويب. Get-IntuneManagedDevices
بجمع الأجهزة التي يديرها Intune.Get-IntuneRoleDefinitions
بجمع تعريفات دور Intune المتاحة. Add-MemberToEntraGroup
إضافة مدير إلى مجموعة Entra.Enable-EntraRole
تمكين (أو "تنشيط") دور Entra.New-EntraAppOwner
إضافة مالك جديد إلى تطبيق Entra.New-EntraAppRoleAssignment
منح دور التطبيق لمدير الخدمة. على سبيل المثال، يمكنك استخدام هذا لمنح مدير الخدمة دور التطبيق RoleManagement.ReadWrite.Directory.New-EntraAppSecret
إنشاء سر جديد لتسجيل تطبيق Entra الحالي.New-EntraGroupOwner
إضافة مالك جديد إلى مجموعة Entra.New-EntraRoleAssignment
تعيين دور مسؤول Entra لمدير محدد.New-EntraServicePrincipalOwner
إضافة مالك جديد إلى مدير خدمة Entra.New-EntraServicePrincipalSecret
إنشاء سر جديد لمبدأ خدمة Entra الحالي.Reset-EntraUserPassword
إعادة تعيين كلمة المرور لمستخدم آخر. في حالة النجاح، سيحتوي الإخراج على كلمة المرور الجديدة للمستخدم التي تم إنشاؤها بواسطة Azure.Set-EntraUserPassword
تعيين كلمة المرور لمستخدم آخر على قيمة جديدة مقدمة من المستخدم. Invoke-AzureRMAKSRunCommand
بإرشاد مجموعة AKS لتنفيذ أمر.Invoke-AzureRMVMRunCommand
تنفيذ أمر على جهاز افتراضي.Invoke-AzureRMWebAppShellCommand
تنفيذ أمر على حاوية تطبيق ويب.Invoke-AzureVMScaleSetVMRunCommand
تنفيذ أمر على VM Scale Set VM.New-AzureAutomationAccountRunBook
إضافة دليل التشغيل إلى حساب التشغيل الآلي.New-AzureKeyVaultAccessPolicy
منح أذونات "الحصول" و"القائمة" الرئيسية على أسرار مخزن المفاتيح ومفاتيحه وشهاداته.New-AzureRMRoleAssignment
منح تعيين دور AzureRM المحدد من قبل المستخدم لمدير معين على نطاق معين.New-PowerShellFunctionAppFunction
إنشاء وظيفة PowerShell جديدة في تطبيق وظيفي. ConvertTo-Markdown
لتدليك الإخراج من وظائف Invoc-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
لاختبار ما إذا كان بإمكان مدير الخدمة نشر دليل تشغيل جديد إلى حساب أتمتة موجود.Test-AzureRMVMRunCommand
لاختبار ما إذا كان بإمكان المدير تشغيل أمر على جهاز افتراضي موجود.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 دون موافقة المسؤول.