يرمز 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 دون موافقة المسؤول.