Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
raccoon — Salesforce object access auditor | Kitploit
Инструменты/GitHubGitHub/nccgroup/raccoon
Безопасность облачной инфраструктурыАнализ уязвимостейАудит конфигурацииБезопасность облачных средУправление идентификацией и доступом (IAM)Неправильная КонфигурацияБезопасность Баз Данных
GitHubnccgroup/raccoon

raccoon

Salesforce object access auditor

Репозиторий
118753 лет назадПроверено Kitploit
Сайт

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Raccoon: аудитор доступа к объектам Salesforce

Выпущен как 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 и/или тестированием затронутых профилей и наборов разрешений. При обнаружении расхождений, пожалуйста, сообщите о проблеме с максимально возможным количеством деталей.

Использование

Требования:

  • Python 3
  • Модуль Python requests (описан в requirements.txt)
  • Учётная запись со следующими минимальными правами:
    • 'API Enabled'
    • 'View Setup and Configuration'
    • 'Modify Metadata Through Metadata API Functions' (см. примечание о 'правах учётной записи')
    • Право на чтение всех проверяемых объектов (или предоставьте 'View All Data')
  • Для аутентификации укажите ЛИБО username + password + (необязательно) token, ЛИБО sessionId (подробнее в разделе Аутентификация).

Создайте файл конфигурации JSON (или используйте config.json как шаблон) и заполните по мере необходимости:

root@kitploit:~
{
	"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'. Указанное число предполагает, что таких объектов все, и поэтому является максимальным.

Запуск:

root@kitploit:~
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>

Аутентификация

При использовании имени пользователя и пароля учтите, что также может потребоваться токен безопасности (если подключение выполняется с IP-адреса вне заданных диапазонов Network Access). Дополнительные сведения см. в этой статье.

Использование альтернативы с идентификатором сессии полезно во многих случаях:

  • Единый вход, т.е. прямой вход в Salesforce невозможен
  • Применяется MFA
  • Проблемы с получением API-токена (когда он нужен)
  • Исключает случайное оставление учётных данных в файле

Чтобы получить идентификатор сессии:

  • Войдите в Salesforce и при необходимости переключитесь в классический режим
  • С помощью инструмента Inspect браузера отобразите cookie-файлы
  • Иногда существует несколько cookie sid: убедитесь, что вы берёте ту, чей атрибут Domain включает my.salesforce.com или cloudforce.com

Вывод

Пример (сокращённый и анонимизированный) вывода:

root@kitploit:~
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 проверяет только профили и наборы разрешений с активными пользователями, чтобы снизить многословность вывода. Информация об этом отображается, после чего:

  • Сначала выводятся глобальные переопределения общего доступа, поскольку профили и наборы разрешений, которым разрешены 'View All Data' и 'Modify All Data', имеют права на ВСЕ объекты.
  • Затем каждый объект проверяется по очереди: сначала рассматриваются права чтение+редактирование+удаление, затем чтение+редактирование и, наконец, только чтение. Профиль или набор разрешений указывается в выводе только один раз (в разделе с наивысшим набором действующих прав). Это делается во избежание повторов — например, подразумевается, что профиль с 'Modify All Data' имеет права чтение+редактирование+удаление для всех указанных объектов; таким образом, он показывается только в разделе «Global Sharing Overrides» и не перечисляется в результатах по каждому объекту. Единственное исключение — когда профили или наборы разрешений с глобальным правом 'View All Data' имеют дополнительные права редактирования/удаления, включённые на уровне объекта.
  • Для каждого объекта выделяется сам факт наличия правил общего доступа (Sharing Rules), но без дальнейшей детализации.

Если назначение прав выполнено через группу наборов разрешений (Permission Set Group), а не через отдельный набор разрешений, слева от имени вместо обычного дефиса появляется звёздочка-маркер отступа (см. Accounts PS Group в примере выше). Кроме того, отображается, является ли профиль или набор разрешений пользовательским (для набора разрешений «пользовательский» означает «создан администратором», в противном случае он «стандартный и связан с конкретной лицензией набора разрешений» [ref]).

Как для глобального, так и для объектного общего доступа профили и наборы разрешений упорядочиваются с учётом вероятного интереса. Первый уровень упорядочения касается типа назначенного пользователя: сначала «гостевые» (неаутентифицированные), затем «внешние» (различные типы портальных пользователей) и затем «внутренние» (все остальные). Важно отметить, что «внешние» здесь связано с определением, используемым в контексте «модели внешнего общего доступа» [ref]. Идея состоит в том, чтобы выявить потенциально чрезмерный общий доступ для неаутентифицированных или портальных пользователей. Однако это несколько экспериментально, поскольку документация Salesforce не содержит исчерпывающего списка допустимых значений 'UserType' для объекта 'User' [ref]. В результате возможна ошибочная классификация — в таком случае, пожалуйста, сообщите о проблеме. Второй уровень упорядочения основан на количестве активных пользователей: сначала наибольшее (общее количество назначенных пользователей также отображается для сведения).

Примечания

Основная цель Raccoon — выявлять случаи широкого доступа ко всем записям; инструмент охватывает:

  • Связи Master-Detail, для которых общий доступ имеет тип 'Controlled by Parent' (но только если существует единственная связь Master-Detail и родитель находится непосредственно над дочерним объектом, т.е. модель общего доступа родителя также не может быть 'Controlled by Parent').
  • Особые связи 'Controlled by Parent' между Contact/Order/Asset и родительским Account (которые работают несколько иначе, чем обычная связь Master-Detail).
  • Повторимся: учитываются только профили и наборы разрешений с активными пользователями.

Следующие факторы, влияющие только на подмножество записей, не оцениваются:

  • Правила общего доступа (хотя их наличие для объекта отмечается)
  • Наборы общего доступа (Sharing Sets)
  • Группы общего доступа (Share Groups)
  • Общий доступ на основе иерархии ролей
  • Ручной общий доступ, настроенный пользователями для отдельных записей
  • «Неявный» (или «встроенный») общий доступ для некоторых дочерних объектов Account, если его модель общего доступа — Private
  • Поле 'private' записи Opportunity (и его влияние на связанные Quote)

Некоторые объекты, такие как 'User' и 'File', не вписываются в стандартную модель общего доступа и/или затрагивают другие системные разрешения. Известные случаи отмечаются в выводе, если они указаны в списке objects.

Экземпляры с более чем 2000 комбинированных профилей и наборов разрешений не поддерживаются из-за ограничений платформы на использование 'GROUP BY' в SOQL-запросах. Это щедрый запас и может стать препятствием только в самых крайних случаях.

Права учётной записи

Этот инструмент выполняет только операции чтения. Поэтому может показаться удивительным требование '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 Metadata Through Metadata API Functions', а не 'Modify All Data'.

Сообщение об ошибках

Если проблема связана со входом, сначала перепроверьте hostname, имя пользователя, пароль и токен безопасности (если требуется). Также учтите, не нужно ли сбросить пароль (попробуйте обычный веб-вход в Salesforce), поскольку это состояние возвращает ошибку, неотличимую от недействительного входа. Если используется идентификатор сессии, убедитесь, что он действителен для правильного домена.

Запустите инструмент с debug, установленным в 2, так как подробный вывод может помочь определить причину. Этот уровень также выводит стек вызовов (stack trace) в файл, имя которого указывается в выводе. При сообщении о проблеме, пожалуйста, приложите как вывод консоли, так и стек вызовов (при необходимости анонимизируйте).

Почему «Raccoon»?

Известен тем, что роется в объектах (rummaging around objects).

Скачать инструмент