# macOS Authorizations DB & Authd {{#include ../../../banners/hacktricks-training.md}} ## **Athorizarions DB** Il database situato in `/var/db/auth.db` è un database utilizzato per memorizzare i permessi per eseguire operazioni sensibili. Queste operazioni vengono eseguite completamente nello **spazio utente** e sono solitamente utilizzate dai **servizi XPC** che devono verificare **se il client chiamante è autorizzato** a eseguire determinate azioni controllando questo database. Inizialmente, questo database viene creato dal contenuto di `/System/Library/Security/authorization.plist`. Successivamente, alcuni servizi potrebbero aggiungere o modificare questo database per aggiungere altri permessi. Le regole sono memorizzate nella tabella `rules` all'interno del database e contengono le seguenti colonne: - **id**: Un identificatore unico per ogni regola, automaticamente incrementato e che funge da chiave primaria. - **name**: Il nome unico della regola utilizzato per identificarla e fare riferimento ad essa all'interno del sistema di autorizzazione. - **type**: Specifica il tipo di regola, limitato ai valori 1 o 2 per definire la sua logica di autorizzazione. - **class**: Categorizza la regola in una classe specifica, assicurandosi che sia un intero positivo. - "allow" per consentire, "deny" per negare, "user" se la proprietà del gruppo indica un gruppo di cui l'appartenenza consente l'accesso, "rule" indica in un array una regola da soddisfare, "evaluate-mechanisms" seguito da un array `mechanisms` che sono o builtins o un nome di un bundle all'interno di `/System/Library/CoreServices/SecurityAgentPlugins/` o /Library/Security//SecurityAgentPlugins - **group**: Indica il gruppo utente associato alla regola per l'autorizzazione basata su gruppi. - **kofn**: Rappresenta il parametro "k-of-n", determinando quanti subregole devono essere soddisfatte su un numero totale. - **timeout**: Definisce la durata in secondi prima che l'autorizzazione concessa dalla regola scada. - **flags**: Contiene vari flag che modificano il comportamento e le caratteristiche della regola. - **tries**: Limita il numero di tentativi di autorizzazione consentiti per migliorare la sicurezza. - **version**: Tiene traccia della versione della regola per il controllo delle versioni e gli aggiornamenti. - **created**: Registra il timestamp quando la regola è stata creata per scopi di audit. - **modified**: Memorizza il timestamp dell'ultima modifica apportata alla regola. - **hash**: Contiene un valore hash della regola per garantire la sua integrità e rilevare manomissioni. - **identifier**: Fornisce un identificatore stringa unico, come un UUID, per riferimenti esterni alla regola. - **requirement**: Contiene dati serializzati che definiscono i requisiti specifici di autorizzazione e i meccanismi della regola. - **comment**: Offre una descrizione o un commento leggibile dall'uomo sulla regola per documentazione e chiarezza. ### Example ```bash # List by name and comments sudo sqlite3 /var/db/auth.db "select name, comment from rules" # Get rules for com.apple.tcc.util.admin security authorizationdb read com.apple.tcc.util.admin class rule comment For modification of TCC settings. created 701369782.01043606 modified 701369782.01043606 rule authenticate-admin-nonshared version 0 ``` Inoltre, in [https://www.dssw.co.uk/reference/authorization-rights/authenticate-admin-nonshared/](https://www.dssw.co.uk/reference/authorization-rights/authenticate-admin-nonshared/) è possibile vedere il significato di `authenticate-admin-nonshared`: ```json { "allow-root": "false", "authenticate-user": "true", "class": "user", "comment": "Authenticate as an administrator.", "group": "admin", "session-owner": "false", "shared": "false", "timeout": "30", "tries": "10000", "version": "1" } ``` ## Authd È un demone che riceverà richieste per autorizzare i client a eseguire azioni sensibili. Funziona come un servizio XPC definito all'interno della cartella `XPCServices/` e utilizza per scrivere i suoi log in `/var/log/authd.log`. Inoltre, utilizzando lo strumento di sicurezza, è possibile testare molte API di `Security.framework`. Ad esempio, `AuthorizationExecuteWithPrivileges` eseguendo: `security execute-with-privileges /bin/ls` Questo fork e exec `/usr/libexec/security_authtrampoline /bin/ls` come root, che chiederà permessi in un prompt per eseguire ls come root:
{{#include ../../../banners/hacktricks-training.md}}