
Salesforce object access auditor
Выпущен как open source компанией NCC Group Plc - https://www.nccgroup.com/
Разработан Джеромом Смитом @exploresecurity (благодарности Виктору Газдагу @wucpi)
https://www.github.com/nccgroup/raccoon
Выпущен под лицензией AGPL - подробнее см. в LICENSE.
Этот инструмент определяет, какие профили и наборы разрешений (с активными пользователями) имеют некую комбинацию прав чтения/редактирования/удаления для ВСЕХ записей заданного набора объектов, исходя из их фактических настроек общего доступа и объектов. По этому результату можно исследовать ошибки конфигурации, которые потенциально допускают чрезмерный доступ к объектам, содержащим чувствительные данные. Справочные материалы см. в сопутствующей публикации в блоге: 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 (т.е. данных, которые для вас наиболее важны). Наиболее надёжный способ — использовать официальные имена API, однако, если совпадение не найдено, Raccoon попробует некоторые простые варианты сопоставления, например по отображаемой подписи. Если Raccoon по-прежнему не сможет найти совпадение, программа продолжит работу, но отметит это в выводе.
checkLimits позволяет проверить остаток лимита вызовов API для исследуемого экземпляра в рамках 24-часового скользящего периода. Raccoon выполняет относительно немного вызовов на объект (плюс фиксированное число за запуск), однако, из вежливости, этот параметр позволяет проверить лимиты перед началом работы. Значение по умолчанию — true. Общее количество возможных оставшихся запросов в контрольной точке не является точным, поскольку число вызовов зависит от того, у скольких объектов модель общего доступа 'Controlled by Parent'. Указанное число предполагает, что таких объектов все, и поэтому является максимальным.
Запуск:
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>
При использовании имени пользователя и пароля учтите, что также может потребоваться токен безопасности (если подключение выполняется с IP-адреса вне заданных диапазонов Network Access). Дополнительные сведения см. в этой статье.
Использование альтернативы с идентификатором сессии полезно во многих случаях:
Чтобы получить идентификатор сессии:
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>