2023-02-22 21:07:36 +00:00
# CIS Benchmarks
2024-03-21 20:03:14 +00:00
_Available in Fleet Premium_.
2023-07-11 05:41:47 +00:00
2025-03-25 21:40:48 +00:00
CIS Benchmarks represent the consensus-based effort of cybersecurity experts to help you protect your systems against threats more confidently.
2023-02-22 21:07:36 +00:00
For more information about CIS Benchmarks check out [Center for Internet Security ](https://www.cisecurity.org/cis-benchmarks )'s website.
2023-07-11 05:41:47 +00:00
Fleet has implemented native support for CIS Benchmarks for the following platforms:
2024-03-21 20:03:14 +00:00
- macOS 13.0 Ventura
- macOS 14.0 Sonoma
2024-12-10 19:00:50 +00:00
- macOS 15.0 Sequoia
2024-03-21 20:03:14 +00:00
- Windows 10 Enterprise
- Windows 11 Enterprise
2023-02-22 21:07:36 +00:00
2024-08-16 20:30:31 +00:00
[Where possible ](#limitations ), each CIS Benchmark is implemented with a [policy query ](https://fleetdm.com/docs/rest-api/rest-api#policies ) in Fleet.
2023-02-22 21:07:36 +00:00
Missing the word be (#31554)
# Checklist for submitter
If some of the following don't apply, delete the relevant line.
- [ ] Changes file added for user-visible changes in `changes/`,
`orbit/changes/` or `ee/fleetd-chrome/changes`.
See [Changes
files](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/guides/committing-changes.md#changes-files)
for more information.
- [ ] Input data is properly validated, `SELECT *` is avoided, SQL
injection is prevented (using placeholders for values in statements)
- [ ] If paths of existing endpoints are modified without backwards
compatibility, checked the frontend/CLI for any necessary changes
## Testing
- [ ] Added/updated automated tests
- [ ] Where appropriate, [automated tests simulate multiple hosts and
test for host
isolation](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/reference/patterns-backend.md#unit-testing)
(updates to one hosts's records do not affect another)
- [ ] QA'd all new/changed functionality manually
For unreleased bug fixes in a release candidate, one of:
- [ ] Confirmed that the fix is not expected to adversely impact load
test results
- [ ] Alerted the release DRI if additional load testing is needed
## Database migrations
- [ ] Checked table schema to confirm autoupdate
- [ ] Checked schema for all modified table for columns that will
auto-update timestamps during migration.
- [ ] Confirmed that updating the timestamps is acceptable, and will not
cause unwanted side effects.
- [ ] Ensured the correct collation is explicitly set for character
columns (`COLLATE utf8mb4_unicode_ci`).
## New Fleet configuration settings
- [ ] Setting(s) is/are explicitly excluded from GitOps
If you didn't check the box above, follow this checklist for
GitOps-enabled settings:
- [ ] Verified that the setting is exported via `fleetctl
generate-gitops`
- [ ] Verified the setting is documented in a separate PR to [the GitOps
documentation](https://github.com/fleetdm/fleet/blob/main/docs/Configuration/yaml-files.md#L485)
- [ ] Verified that the setting is cleared on the server if it is not
supplied in a YAML file (or that it is documented as being optional)
- [ ] Verified that any relevant UI is disabled when GitOps mode is
enabled
## fleetd/orbit/Fleet Desktop
- [ ] Verified compatibility with the latest released version of Fleet
(see [Must
rule](https://github.com/fleetdm/fleet/blob/main/docs/Contributing/workflows/fleetd-development-and-release-strategy.md))
- [ ] If the change applies to only one platform, confirmed that
`runtime.GOOS` is used as needed to isolate changes
- [ ] Verified that fleetd runs on macOS, Linux and Windows
- [ ] Verified auto-update works from the released version of component
to the new version (see [tools/tuf/test](../tools/tuf/test/README.md))
2025-08-04 18:51:19 +00:00
These policy queries are intended to assess your organization's security posture against the CIS benchmarks. Because the policy queries alone do not remediate security issues, a host may fail a CIS Benchmark policy if there is no device profile or script in place to enforce the setting. By enabling [automations ](https://fleetdm.com/guides/automations#basic-article ) in Fleet, these policy queries can be used as the basis for managing security compliance and remediation in Fleet.
2025-03-25 21:40:48 +00:00
For example, this is the query for **CIS - Ensure FileVault Is Enabled (MDM Required)** :
2023-10-02 17:49:58 +00:00
```sql
SELECT 1 WHERE
EXISTS (
SELECT 1 FROM managed_policies WHERE
domain='com.apple.MCX' AND
name='dontAllowFDEDisable' AND
(value = 1 OR value = 'true') AND
username = ''
)
AND NOT EXISTS (
SELECT 1 FROM managed_policies WHERE
domain='com.apple.MCX' AND
name='dontAllowFDEDisable' AND
(value != 1 AND value != 'true')
)
AND EXISTS (
SELECT 1 FROM disk_encryption WHERE
user_uuid IS NOT "" AND
filevault_status = 'on'
);
```
2025-03-25 21:40:48 +00:00
This policy is evaluating 2 attributes:
2023-10-02 17:49:58 +00:00
1. Is FileVault currently enabled?
2. Is there a profile in place that prevents FileVault from being disabled?
If either of these conditions fails, the host is considered to be failing the policy.
2023-07-11 05:41:47 +00:00
## How to add CIS Benchmarks
2023-02-22 21:07:36 +00:00
2025-03-25 21:40:48 +00:00
All CIS policies are stored under our restricted licensed folder `ee/cis/` . To easily convert the [CIS benchmarks YAML raw file ](https://raw.githubusercontent.com/fleetdm/fleet/refs/heads/main/ee/cis/macos-14/cis-policy-queries.yml ) to a YAML array format compatible with Fleet GitOps, follow these steps:
2023-02-22 21:07:36 +00:00
2025-03-25 21:40:48 +00:00
1. Install [yq ](https://github.com/mikefarah/yq ) if you don't have it already. (yq is a command-line YAML, JSON and XML processor.)
2025-05-14 19:00:47 +00:00
2. Run this Shell script to transform the policies into [Fleet YAML ](https://fleetdm.com/docs/configuration/yaml-files ):
2025-03-25 21:40:48 +00:00
```
#!/bin/bash
#shellcheck disable=SC2207
# convert.cis.policy.queries.yml @2024 Fleet Device Management
# CIS queries as written here:
# https://github.com/fleetdm/fleet/blob/main/ee/cis/macos-14/cis-policy-queries.yml
# must be converted to be uploaded via Fleet GitOps.
#
# This script takes as input the YAML from the file linked above & creates a new YAML array compatible with the "Separate file" format documented here:
# https://fleetdm.com/docs/configuration/yaml-files#separate-file
2023-02-22 21:07:36 +00:00
2023-06-16 17:14:23 +00:00
2025-03-25 21:40:48 +00:00
# get CIS queries raw file from Fleet repo
cisfile='https://raw.githubusercontent.com/fleetdm/fleet/refs/heads/main/ee/cis/macos-14/cis-policy-queries.yml'
cispath='/private/tmp/cis.yml'
# cisspfl='/private/tmp/cis.gitops.yml'
2024-01-24 14:57:19 +00:00
2025-03-25 21:40:48 +00:00
/usr/bin/curl -X GET -LSs "$cisfile" -o "$cispath"
# create CIS benchmark array
IFS=$'\n'
cisarry=($(/opt/homebrew/bin/yq '.spec.name' "$cispath" | /usr/bin/grep -v '\-\-\-'))
for i in "${cisarry[@]}"
do
cisname="$(/opt/homebrew/bin/yq ".[] | select(.name == \"$i\") | (del(.platforms)) | (del(.purpose)) | (del(.tags)) | (del(.contributors))" "$cispath" | /opt/homebrew/bin/yq eval '.name')"
cispfrm="$(/opt/homebrew/bin/yq ".[] | select(.name == \"$i\") | (del(.platforms)) | (del(.purpose)) | (del(.tags)) | (del(.contributors))" "$cispath" | /opt/homebrew/bin/yq eval '.platform')"
cisdscr="$(/opt/homebrew/bin/yq ".[] | select(.name == \"$i\") | (del(.platforms)) | (del(.purpose)) | (del(.tags)) | (del(.contributors))" "$cispath" | /opt/homebrew/bin/yq eval --unwrapScalar=true '.description')"
cisrslt="$(/opt/homebrew/bin/yq ".[] | select(.name == \"$i\") | (del(.platforms)) | (del(.purpose)) | (del(.tags)) | (del(.contributors))" "$cispath" | /opt/homebrew/bin/yq eval --unwrapScalar=true '.resolution')"
cisqrry="$(/opt/homebrew/bin/yq ".[] | select(.name == \"$i\") | (del(.platforms)) | (del(.purpose)) | (del(.tags)) | (del(.contributors))" "$cispath" | /opt/homebrew/bin/yq eval --unwrapScalar=true '.query')"
printf "name: %s\nplatform: %s\ndescription: |\n%s\nresolution: |\n%s\nquery: |\n%s\n" "$cisname" "$cispfrm" "$cisdscr" "$cisrslt" "$cisqrry" | /usr/bin/sed 's/^/ /g;s/^[[:space:]]*name:/- name:/;s/^[[:space:]]*platform:/ platform:/;s/^[[:space:]]*description:/ description:/;s/^[[:space:]]*resolution:/ resolution:/;s/^[[:space:]]*query:/ query:/'
# set -x
# trap read debug
done
2023-02-22 21:07:36 +00:00
```
2025-03-25 21:40:48 +00:00
3. The converted YAML is written to standard out in the Terminal. Copy/paste the CIS policies you wish to use into your own YAML file and run Fleet GitOps.
If you're using `fleetctl apply` , you can apply the policies to a specific team use the `--policies-team` flag:
2023-02-22 21:07:36 +00:00
```sh
fleetctl apply --policies-team "Workstations" -f cis-policy-queries.yml
```
2023-04-03 19:46:51 +00:00
## Levels 1 and 2
CIS designates various benchmarks as Level 1 or Level 2 to describe the level of thoroughness and burden that each benchmark represents.
2023-09-26 23:12:32 +00:00
Each benchmark is tagged as `CIS_Level1` or `CIS_Level2` .
2023-04-03 19:46:51 +00:00
### Level 1
Items in this profile intend to:
- be practical and prudent;
- provide a clear security benefit; and
- not inhibit the utility of the technology beyond acceptable means.
### Level 2
This profile extends the "Level 1" profile. Items in this profile exhibit one or more of the following characteristics:
- are intended for environments or use cases where security is paramount or acts as defense in depth measure
- may negatively inhibit the utility or performance of the technology.
2024-04-01 15:34:39 +00:00
## Requirements
Following are the requirements to use the CIS Benchmarks in Fleet:
- Devices must be running [`fleetd` ](https://fleetdm.com/docs/using-fleet/orbit ), Fleet's lightweight agent.
- Some CIS Benchmarks explicitly involve verifying MDM-based controls, so devices must be enrolled to an MDM solution.
2024-08-16 20:30:31 +00:00
- On macOS, the orbit component of fleetd must have "Full Disk Access", see [Grant Full Disk Access to Osquery on macOS ](https://fleetdm.com/guides/enroll-hosts#grant-full-disk-access-to-osquery-on-macos ).
2024-04-01 15:34:39 +00:00
## Limitations
Certain benchmarks cannot be automated by a policy in Fleet. For a list of specific benchmarks which are not covered, please visit the README for each benchmark:
- [macOS 13.0 Ventura ](https://github.com/fleetdm/fleet/blob/main/ee/cis/macos-13/README.md )
- [macOS 14.0 Sonoma ](https://github.com/fleetdm/fleet/blob/main/ee/cis/macos-14/README.md )
2024-12-10 19:00:50 +00:00
- [macos 15.0 Sequoia ](https://github.com/fleetdm/fleet/blob/main/ee/cis/macos-15/README.md )
2024-04-01 15:34:39 +00:00
- [Windows 10 Enterprise ](https://github.com/fleetdm/fleet/blob/main/ee/cis/win-10/README.md )
- [Windows 11 Enterprise ](https://github.com/fleetdm/fleet/blob/main/ee/cis/win-11/README.md )
2023-06-16 17:14:23 +00:00
2023-09-25 17:59:09 +00:00
## Performance testing
2025-06-09 13:48:27 +00:00
In August 2023, we completed [scale testing on 10k Windows hosts and 70k macOS hosts ](https://docs.google.com/document/d/1OSpyzMkHjVhG_-EIBkLu7X3hj_XfVASGl3IXIYChpck/edit?usp=sharing ). Ultimately, we validated both server and host performance at that scale.
2023-09-25 17:59:09 +00:00
2024-08-16 20:30:31 +00:00
< meta name = "category" value = "guides" >
< meta name = "authorGitHubUsername" value = "lucasmrod" >
< meta name = "authorFullName" value = "Lucas Rodriguez" >
< meta name = "publishedOn" value = "2024-04-02" >
< meta name = "articleTitle" value = "CIS Benchmarks" >
< meta name = "description" value = "Read about how Fleet's implementation of CIS Benchmarks offers consensus-based cybersecurity guidance." >