
Auditor dell'accesso agli oggetti Salesforce
Rilasciato come open source da NCC Group Plc - https://www.nccgroup.com/
Sviluppato da Jerome Smith @exploresecurity (con ringraziamenti a Viktor Gazdag @wucpi)
https://www.github.com/nccgroup/raccoon
Rilasciato sotto AGPL - fare riferimento a LICENSE per maggiori informazioni.
Questo strumento determina quali Profili e Set di Autorizzazioni (con utenti attivi) hanno una qualche combinazione di permessi di lettura/modifica/eliminazione su TUTTI i record per un dato insieme di oggetti, in base alla loro condivisione effettiva e alle impostazioni degli oggetti. Da questo output è possibile analizzare le configurazioni errate che potenzialmente consentono un accesso eccessivo a oggetti che contengono dati sensibili. Fare riferimento al post del blog di accompagnamento per il contesto su https://research.nccgroup.com/2021/06/28/are-you-oversharing-in-salesforce.
Si consiglia di verificare manualmente i risultati con riferimento diretto alla configurazione di Salesforce e/o testando i Profili e i Set di Autorizzazioni interessati. Qualora vengano riscontrate discrepanze, si prega di segnalare un problema con quanti più dettagli possibile.
Requisiti:
requests (coperto da requirements.txt)username + password + (opzionale) token OPPURE sessionId (maggiori dettagli nella sezione Autenticazione).Creare un file di configurazione JSON (o usare config.json come modello) e compilarlo come richiesto:
{
"hostname": "somewhere.my.salesforce.com",
"username": "",
"password": "",
"token": "<token opzionale>",
"sessionId": "",
"objects": ["Account", "Contact"],
"checkLimits": true,
"debug": "<livello di debug opzionale (0, 1 o 2)>"
}
objects è un elenco di oggetti Salesforce di interesse (cioè i dati a cui si tiene di più). Usare i nomi API formali è il metodo più affidabile ma, se non viene trovata una corrispondenza, Raccoon proverà alcune semplici corrispondenze basate, ad esempio, sull'etichetta visualizzata. Se Raccoon non riesce comunque a trovare una corrispondenza, il programma continuerà ma lo segnalerà nell'output.
checkLimits consente di verificare la disponibilità di chiamate API rimanenti per l'istanza in esame nel periodo mobile di 24 ore. Raccoon effettua relativamente poche chiamate per oggetto (oltre a un numero fisso per esecuzione) ma, per cortesia, questo parametro consente di controllare i propri limiti prima di procedere. Il valore predefinito è true. Il numero totale di possibili richieste rimanenti al punto di controllo non è certo perché il numero di chiamate dipenderà da quanti oggetti hanno un modello di condivisione 'Controlled by Parent'. Il numero indicato presuppone che tutti lo abbiano ed è quindi un massimo.
Eseguire:
git clone https://github.com/nccgroup/raccoon
pip3 install -r requirements.txt
python3 raccoon.py <config_file>
Quando si usano nome utente e password, notare che potrebbe essere necessario anche un token di sicurezza (se si proviene da un indirizzo IP esterno agli intervalli di Network Access definiti). Fare riferimento a questo articolo per maggiori informazioni.
L'uso dell'alternativa con ID di sessione è utile in molti casi:
Per ottenere l'ID di sessione:
sid: assicurarsi di prendere quello il cui attributo Domain include my.salesforce.com o cloudforce.comOutput di esempio (abbreviato e anonimizzato):
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]