
Salesforce object access auditor
NCC Group Plc द्वारा ओपन सोर्स के रूप में जारी - https://www.nccgroup.com/
Jerome Smith @exploresecurity द्वारा विकसित (Viktor Gazdag @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 कॉन्फ़िगरेशन के सीधे संदर्भ और/या प्रभावित Profiles और Permission Sets के परीक्षण के साथ मैन्युअल रूप से सत्यापित किया जाए। यदि विसंगतियाँ मिलें, तो कृपया अधिक से अधिक विवरण के साथ issue दर्ज करें।
आवश्यकताएँ:
requests मॉड्यूल (requirements.txt द्वारा कवर्ड)username + password + (वैकल्पिक) token या sessionId प्रदान करें (अधिक विवरण Authentication अनुभाग में)।एक 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 ऑब्जेक्ट्स की सूची है (यानी वह डेटा जिसकी आप सबसे अधिक परवाह करते हैं)। औपचारिक API नामों का उपयोग करना सबसे विश्वसनीय तरीका है, लेकिन यदि कोई मेल नहीं मिलता है, तो Raccoon कुछ सरल मिलानों का प्रयास करेगा, उदाहरण के लिए प्रदर्शित लेबल के आधार पर। यदि Raccoon को अभी भी कोई मेल नहीं मिलता है, तो प्रोग्राम आगे बढ़ेगा लेकिन आउटपुट में इसे चिह्नित करेगा।
checkLimits आपको जाँच करने की सुविधा देता है कि जाँचे जा रहे इंस्टेंस के लिए 24 घंटे की घूमती अवधि में कितने API कॉल शेष हैं। Raccoon प्रति ऑब्जेक्ट अपेक्षाकृत कम कॉल करता है (प्रति रन एक निश्चित संख्या के अतिरिक्त), लेकिन शिष्टाचार के रूप में, यह पैरामीटर आपको आगे बढ़ने से पहले अपनी सीमाएँ जाँचने की अनुमति देता है। डिफ़ॉल्ट मान true है। चेकपॉइंट पर संभावित शेष अनुरोधों की कुल संख्या निश्चित नहीं है क्योंकि कॉलों की संख्या इस बात पर निर्भर करेगी कि कितने ऑब्जेक्ट में 'Controlled by Parent' साझाकरण मॉडल है। बताई गई संख्या यह मानकर चलती है कि सभी में यही है और इस प्रकार यह अधिकतम सीमा है।
चलाएँ:
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>
जब उपयोगकर्ता नाम और पासवर्ड का उपयोग किया जाता है, तो ध्यान दें कि सुरक्षा टोकन की भी आवश्यकता हो सकती है (यदि किसी परिभाषित Network Access सीमा के बाहर किसी IP पते से आ रहे हैं)। अधिक जानकारी के लिए इस लेख को देखें।
session ID विकल्प का उपयोग कई मामलों में उपयोगी है:
session ID प्राप्त करने के लिए:
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]
QuoteLine__c:
Organization-wide default sharing
- Internal: Controlled by Parent
- External: <Undefined>
Parent object: 'Quote__c'
- Internal: Public Read/Write
- External: <Undefined>
READ/EDIT/DELETE [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]
Total API requests sent: 31
Raccoon अपने आउटपुट की विस्तृतता कम करने के लिए केवल सक्रिय उपयोगकर्ताओं वाले Profiles और Permission Sets की जाँच करता है। इसके बारे में जानकारी प्रदर्शित की जाती है, जिसके बाद:
यदि विशेषाधिकारों का असाइनमेंट किसी एक Permission Set के बजाय Permission Set Group के माध्यम से दिया गया है, तो सामान्य हाइफ़न के स्थान पर नाम के बाईं ओर एक इंडेंटेशन मार्कर के रूप में तारांकन दिखाई देता है (उपरोक्त नमूना आउटपुट में Accounts PS Group)। इसके अलावा, यह भी दिखाया जाता है कि Profile या Permission Set custom है या नहीं (Permission Sets के लिए custom का अर्थ है "किसी एडमिन द्वारा बनाया गया" अन्यथा यह "मानक है और किसी विशिष्ट permission set लाइसेंस से संबंधित है" [ref])।
वैश्विक और ऑब्जेक्ट दोनों प्रकार की साझाकरण के लिए, Profiles और Permission Sets को संभावित रुचि दर्शाने के लिए क्रमबद्ध किया जाता है। क्रमबद्धता का पहला स्तर यह बताता है कि किस प्रकार का उपयोगकर्ता असाइन किया गया है - पहले 'guest' (अप्रमाणित), फिर 'external' (विभिन्न प्रकार के पोर्टल उपयोगकर्ता), फिर 'internal' (बाकी सब कुछ)। यह ध्यान रखना महत्वपूर्ण है कि यहाँ 'external' 'external sharing model' के संदर्भ में उपयोग की गई परिभाषा से संबंधित है [ref]। यहाँ विचार अप्रमाणित या पोर्टल उपयोगकर्ताओं के लिए संभावित रूप से अत्यधिक साझाकरण को उजागर करना है। हालाँकि, यह कुछ हद तक प्रयोगात्मक है क्योंकि Salesforce दस्तावेज़ीकरण 'User' ऑब्जेक्ट के लिए मान्य 'UserType' मानों की सूची में व्यापक नहीं है [ref]। परिणामस्वरूप, गलत वर्गीकरण हो सकता है - ऐसे मामले में कृपया issue दर्ज करें। क्रमबद्धता का दूसरा स्तर सक्रिय उपयोगकर्ताओं की संख्या पर आधारित है - पहले उच्चतम (जानकारी के लिए असाइन किए गए उपयोगकर्ताओं की कुल संख्या भी प्रदर्शित की जाती है)।
Raccoon का प्राथमिक उद्देश्य सभी रिकॉर्ड्स तक व्यापक पहुँच के उदाहरणों को उजागर करना है, और इसमें शामिल हैं:
निम्नलिखित कारक, जो रिकॉर्ड्स के केवल एक उपसमुच्चय को प्रभावित करते हैं, मूल्यांकित नहीं किए जाते:
कुछ ऑब्जेक्ट्स, जैसे 'User' और 'File', मानक साझाकरण मॉडल में फिट नहीं होते और/या अन्य सिस्टम अनुमतियाँ काम में आती हैं। यदि objects सूची में निर्दिष्ट हैं तो ज्ञात उदाहरणों को आउटपुट में चिह्नित किया जाता है।
2,000 से अधिक संयुक्त Profiles और Permission Sets वाले इंस्टेंस SOQL कथनों में 'GROUP BY' के उपयोग पर प्लेटफ़ॉर्म सीमाओं के कारण समर्थित नहीं हैं। यह एक उदार भत्ता है और केवल सबसे चरम मामलों में ही बाधा बनना चाहिए।
यह टूल केवल पढ़ने के ऑपरेशन करता है। इसलिए टूल चलाने के लिए उपयोग किए जाने वाले खाते के लिए 'Modify Metadata Through Metadata API Functions' को आवश्यकता के रूप में देखना आश्चर्यजनक हो सकता है। हालाँकि, लिखने के समय, Metadata API के लिए केवल-पढ़ने की अनुमतियों वाला खाता कॉन्फ़िगर करना संभव नहीं लगता। दस्तावेज़ीकरण से:
किसी ऐसे उपयोगकर्ता की पहचान करें जिसके पास API Enabled अनुमति और Modify Metadata Through Metadata API Functions अनुमति या Modify All Data अनुमति हो। Metadata API कॉल तक पहुँचने के लिए ये अनुमतियाँ आवश्यक हैं। यदि किसी उपयोगकर्ता को डेटा तक नहीं बल्कि मेटाडेटा तक पहुँच की आवश्यकता है, तो Modify Metadata Through Metadata API Functions अनुमति सक्षम करें। अन्यथा, Modify All Data अनुमति सक्षम करें।
इसलिए सुझाव दिया जाता है कि 'Modify All Data' के स्थान पर 'Modify Metadata Through Metadata API Functions' का उपयोग किया जाए।
यदि समस्या लॉगिन से है तो कृपया पहले hostname, username, password और security token (यदि आवश्यक हो) की दोबारा जाँच करें। यह भी विचार करें कि क्या पासवर्ड रीसेट करने की आवश्यकता है (सामान्य Salesforce वेब लॉगिन आज़माएँ) क्योंकि यह स्थिति ऐसी त्रुटि लौटाती है जो अमान्य लॉगिन से अप्रभेद्य होती है। यदि session ID का उपयोग कर रहे हैं, तो सुनिश्चित करें कि यह सही डोमेन के लिए मान्य है।
टूल को debug सेट करके 2 पर चलाएँ, क्योंकि विस्तृत आउटपुट कारण की पहचान करने में मदद कर सकता है। यह स्तर आउटपुट में नामित फ़ाइल में stack trace भी आउटपुट करता है। यदि कोई issue रिपोर्ट कर रहे हैं, तो कृपया कंसोल आउटपुट और stack trace दोनों शामिल करें (आवश्यकतानुसार अनामीकृत करें)।
ऑब्जेक्ट्स के आस-पास खोजबीन करने के लिए जाना जाता है।