
مدقق الوصول إلى كائنات Salesforce
صدر كمصدر مفتوح من قبل NCC Group Plc - https://www.nccgroup.com/
طوّره جيروم سميث @exploresecurity (مع الشكر لفيكتور جازداغ @wucpi)
https://www.github.com/nccgroup/raccoon
صدر بموجب رخصة AGPL - يُرجى الرجوع إلى LICENSE لمزيد من المعلومات.
تحدّد هذه الأداة أيّ الملفات التعريفية (Profiles) ومجموعات الصلاحيات (Permission Sets) (التي لديها مستخدمون نشطون) تمتلك مجموعةً ما من صلاحيات القراءة/التحرير/الحذف على جميع السجلات لمجموعة معيّنة من الكائنات، وذلك بناءً على إعدادات المشاركة والإعدادات الفعّالة الخاصة بها. ومن هذا المخرَج، يمكن التحقيق في الأخطاء الإعدادية التي قد تسمح بوصول مفرط إلى كائنات تحتوي على بيانات حسّاسة. راجع مقالة المدوّنة المرافقة للخلفية على https://research.nccgroup.com/2021/06/28/are-you-oversharing-in-salesforce.
يُنصح بالتحقق من النتائج يدويًا بالرجوع المباشر إلى إعدادات Salesforce و/أو اختبار الملفات التعريفية ومجموعات الصلاحيات المتأثرة. إذا وُجدت أيّ تباينات، فيُرجى فتح مشكلة مع أكبر قدر ممكن من التفاصيل.
المتطلبات:
requests الخاصة ببايثون (مغطّاة في requirements.txt)username + password + (اختياري) token أو sessionId (مزيد من التفاصيل في قسم المصادقة).أنشئ ملف إعدادات بصيغة JSON (أو استخدم config.json كقالب) واملأه حسب الحاجة:
{
"hostname": "somewhere.my.salesforce.com",
"username": "",
"password": "",
"token": "<optional token>",
"sessionId": "",
"objects": ["Account", "Contact"],
"checkLimits": true,
"debug": "<optional debug level (0, 1 or 2)>"
}
objects هي قائمة بكائنات Salesforce المهمة (أي البيانات التي تهتم بها أكثر). استخدام أسماء واجهة البرمجة الرسمية هو الطريقة الأكثر موثوقية، ولكن إذا لم يتم العثور على تطابق، سيحاول Raccoon بعض التطابقات البسيطة بناءً، على سبيل المثال، على التسمية المعروضة. إذا استمر Raccoon في الفشل في العثور على تطابق، فسيُكمل البرنامج عملَه لكنه سيُشير إلى ذلك في المخرَج.
يتيح لك checkLimits التحقق من حصّة استدعاءات واجهة البرمجة المتبقية للمؤسسة قيد الفحص خلال الفترة المتدحرجة البالغة 24 ساعة. يقوم Raccoon بإجراء عدد قليل نسبيًا من الاستدعاءات لكل كائن (بالإضافة إلى عدد ثابت لكل تشغيل)، ولكن، كمجاملة، تتيح لك هذه المعلمة التحقق من حدودك قبل المتابعة. القيمة الافتراضية هي true. العدد الإجمالي للطلبات المتبقية المحتملة عند نقطة الفحص ليس مؤكدًا لأن عدد الاستدعاءات سيعتمد على عدد الكائنات التي لديها نموذج مشاركة 'Controlled by Parent'. الرقم المذكور يفترض أنها جميعًا كذلك، وهو بالتالي رقم أقصى.
قم بالتشغيل:
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>
عند استخدام اسم مستخدم وكلمة مرور، لاحظ أنه قد تكون هناك حاجة أيضًا إلى رمز أمان (إذا كان الاتصال من عنوان IP خارج أي نطاقات الوصول إلى الشبكة المعرّفة). راجع هذه المقالة لمزيد من المعلومات.
استخدام بديل معرف الجلسة مفيد في كثير من الحالات:
للحصول على معرف الجلسة:
sid: تأكد من أخذ ذلك الذي تتضمن سمة Domain الخاصة به my.salesforce.com أو cloudforce.comمثال على المخرَج (مختصر ومجهول المصدر):
Raccoon - Salesforce object access auditor
- version 1.0
- https://www.github.com/nccgroup/raccoon
* Refer to README for usage notes including important limitations *
Target instance: somewhere.my.salesforce.com
- Login successful
4,969,529 API requests can be sent to this instance from a 24-hour limit of 5,000,000
- Up to 33 further requests are required to complete (3 requests sent so far)
- Do you want to continue? Enter 'y' to proceed: y
Validating objects
- Found object 'Accounts' with API name 'Account'
- Found object 'Contact' with API name 'Contact'
- Found object 'Quotes' with API name 'Quote__c'
- Found object 'Quote Lines' with API name 'QuoteLine__c'
Evaluating 28 Profiles and 104 Permission Sets
- Profiles with active users: 15
- Permission Sets with active users: 67
- Ignoring 50 unused Profiles and Permission Sets
Global Sharing Overrides (ALL records for ALL objects)
------------------------------------------------------
READ/EDIT/DELETE [C]ustom Active/Total [G]uest[E]xt[I]nt
Profiles
- System Administrator 61/91 [I]
READ
Profiles
- Integration User [C] 1/1 [I]
- Analytics Cloud Integration User 1/1 [I]
Object Sharing (ALL records for EACH object)
--------------------------------------------
Account:
Organization-wide default sharing
- Internal: Public Read Only
- External: <Undefined>
READ/EDIT/DELETE [C]ustom Active/Total [G]uest[E]xt[I]nt
Profiles
- Integration User [C] 1/1 [I]
Permission Sets (* Groups)
- Mulesoft Integration [C] 2/2 [I]
READ
Profiles
- Read Only [C] 192/199 [I]
- Sales User [C] 192/248 [I]
- Finance User [C] 16/20 [I]
- Standard User 6/3075 [I]
Permission Sets (* Groups)
* Accounts PS Group [C] 36/39 [I]
- Sales Operations [C] 24/26 [I]
- SharePoint User [C] 3/4 [I]
Sharing Rules (manual check required):
- Criteria-based rules configured
- Ownership-based rules configured
Contact:
Organization-wide default sharing
- Internal: Controlled by Parent
- External: <Undefined>
Parent object: 'Account'
- Internal: Public Read Only
- External: <Undefined>
READ/EDIT/DELETE [C]ustom Active/Total [G]uest[E]xt[I]nt
Profiles
- Integration User 1/1 [I]
Permission Sets (* Groups)
- Mulesoft Integration [C] 2/2 [I]
READ
Profiles
- Read Only [C] 192/199 [I]
- Sales User [C] 192/248 [I]
- Finance User [C] 16/20 [I]
- Standard User 6/3075 [I]
Permission Sets (* Groups)
- Sales Operations [C] 24/26 [I]
Quote__c:
Organization-wide default sharing
- Internal: Public Read/Write
- External: <Undefined>
READ/EDIT [C]ustom Active/Total [G]uest[E]xt[I]nt
Profiles
- Sales User [C] 192/248 [I]
READ
Profiles
- Finance User [C] 16/20 [I]
Permission Sets (* Groups)
- Mulesoft Integration [C] 2/2 [I]