How to List TCC Entries Across All Macs
Using Kolide, you can easily view and query Mac TCC Entries across your fleet.
Introduction
Over the last decade, Apple has worked to provide users with a configurable interface for controlling access to their private data, and for granting permissions to applications. This interface is internally referred to as Transparency, Consent, and Control or TCC for short.
TCC manages the permissions which apps have to access certain protected services, directories and utilities, for example a video conferencing software may request that you grant access to your iSight webcam before it is able to access that hardware.
These preferences are stored in two databases on disk:
/Users/<username>/Library/Application Support/com.apple.TCC/TCC.db/Library/Application Support/com.apple.TCC/TCC.db
The list of TCC preferences may be reviewed and modified via the macOS GUI by following the steps below:
- Open the Apple menu by clicking on the Apple icon at the top-left of your screen.
- In the dropdown menu, Click on the item labeled System Preferences
- In System Preferences click on the item labeled Security & Privacy
- In the Security & Privacy preference pane, click the tab at the top labeled Privacy
- This list shows each category of permissions available on your device, the applications which have requested those permissions and the approval state they are currently in.
For more information about TCC permissions please refer to the official Apple Support documentation: Change Privacy preferences on a Mac
What Mac TCC Entry Data Can Kolide Collect?
Kolide's endpoint agent bundles in osquery to efficiently collect Mac TCC Entries from Macs in your fleet. Once collected, Kolide will parse, clean up, and centrally store this data in Inventory for your team to view, query, or export via API.
Kolide meticulously documents every piece of data returned so you can understand the results.
Mac TCC Entries Schema
| Column | Type | Description | |
|---|---|---|---|
| id | Primary Key |
Unique identifier for the object |
|
| device_id | Foreign Key |
Device associated with the entry |
|
| device_name | Text |
Display name of the device associated with the entry |
|
| access_last_modified_at | Timestamp |
The time the TCC permission was last modified on the device |
|
| auth_reason | Enum::Text |
The reason the Can be one of the following:
|
|
| auth_value | Enum::Text |
The effective authorization level for the client and service after reconciling the TCC databases with MDM overrides. See Can be one of the following:
|
|
| client | Text |
The application or process the permission applies to, interpreted according to |
|
| client_type | Enum::Text |
How the Can be one of the following:
|
|
| indirect_object_identifier | Text |
The identifier of the indirect object the permission applies to. Only used for services such as AppleEvents/automation where one application is granted permission to control another (the indirect object is the target). For the majority of permissions, which have no indirect object, macOS stores the placeholder |
|
| indirect_object_identifier_type | Enum::Text |
How the Can be one of the following:
|
|
| managed | Boolean |
|
|
| service | Text |
The protected TCC service the permission applies to (eg. |
|
| service_display_name | Text |
A human-readable name for |
|
| source | Text |
The filesystem path of the data source that determined the effective |
|
| superseded_auth_value | Enum::Text |
When an MDM override determined Can be one of the following:
|
|
| username | Text |
The user account the entry belongs to, or |
|
| collected_at | Timestamp |
Time the row of data was first collected in the database |
|
| updated_at | Timestamp |
Time the row of data was last changed in the database |
|
What Can You Do With This Information?
Kolide enables you to write your own queries against the data the agent collects. This allows you to build your own reports and API endpoints. For example, you can:
SELECT device_name, client, service, auth_value, auth_reason, username
FROM mac_tcc_entries
WHERE service IN ('kTCCServiceCamera', 'kTCCServiceMicrophone')
AND auth_value = 'allowed'
ORDER BY device_name
| device_name | client | service | auth_value | auth_reason | username |
|---|---|---|---|---|---|
| bamboo | com.google.Chrome | kTCCServiceMicrophone | allowed | user_consent | jordan |
| conference-room-zoom | com.cisco.webexmeetingsapp | kTCCServiceCamera | allowed | mdm_policy | root |
| kangaroo | us.zoom.xos | kTCCServiceCamera | allowed | user_consent | ashley |
SELECT device_name, client, service,
auth_value AS effective,
superseded_auth_value AS os_recorded
FROM mac_tcc_entries
WHERE managed = true
AND superseded_auth_value IS NOT NULL
ORDER BY client, service
| device_name | client | service | effective | os_recorded |
|---|---|---|---|---|
| Fritzs-MacBook-Pro | com.crowdstrike.falcon.Agent | kTCCServiceSystemPolicyAllFiles | allowed | denied |
Why Should I Collect Mac TCC Entries?
The TCC permissions configured for your device are an important item to audit and review for your IT and Security team. These permissions can indicate malicious applications which have requested additional permissions which will allow them access sensitive information or resources (your microphone or webcam).
Likewise, this information can be important in a troubleshooting context if a user is experiencing difficulty with a particular piece of software which requires permissions (eg. Chrome requesting webcam access in order to perform video conferencing).
Additionally, some security software (like Kolide) may need Full Disk Access permissions in order to adequately inspect the configuration of certain services or applications.
End-User Privacy Consideration
Kolide practices Honest Security. We believe that data should be collected from end-user devices transparently and with privacy in mind.
Because requested TCC permissions typically accompany an installed application, they may indicate or suggest certain personal or private user behavior based on the name of the app. For example:
- eCigarette-Vaporizer-Control.app
- Adult-Toy-Control.app
- Fertility-Window-Tracker.app
- Torrenting-Software.app
When you use Kolide to list Mac TCC Entry data from end-user devices, Kolide gives the people using those devices insight into exactly what data is collected, the privacy implications, and who on the IT team can see the data. This all happens in our end-user privacy center which can be accessed directly by employees.