Add a CrowdStrike endpoint security rule pack - #147
Draft
kyorkJ1 wants to merge 1 commit into
Draft
Conversation
CrowdStrike has no rule pack. The three endpoint packs that exist cover Sophos, Trellix and Armis, and across the 53 active JupiterOne customers measured on 2026-08-25 that is 2 customers, 0 and 0 respectively — while CrowdStrike is deployed at 23, making it the most widely deployed endpoint tool in the book. AX-1 (agent coverage, health, hygiene and policy management) is gate-met at 36 of 46 measured accounts and had no CrowdStrike content behind it. 13 rules, modelled on sophos-endpoint-security.json and using only entity types and relationship verbs documented in graph-crowdstrike/docs/jupiterone.md: crowdstrike_sensor PROTECTS crowdstrike_host, sensor ASSIGNED prevention_policy, prevention_policy HAS prevention_policy_setting, prevention_policy ENFORCES endpoint_protection, vulnerability EXPLOITS sensor, sensor HAS zero_trust_assessment. The rules are ordered so each one catches something the previous one counts as healthy: - devices no sensor protects (coverage) - sensors with no prevention policy (installed, enforcing nothing) - sensors on an inactive policy (assigned, switched off) - prevention policies with no settings (assigned, asserting nothing) - sensors not seen in 14 days (reporting stopped, still counted as protected) - hosts hidden from visibility (in inventory, excluded from activity) crowdstrike-open-critical-vulnerability-on-unpoliced-sensor is the one rule with no single-vendor equivalent anywhere in this repo: an open, publicly exploitable vulnerability on a host whose sensor has no prevention policy. That compound condition is what AX-2 actually asks for — a critical CVE combined with a missing or incorrect agent policy — and neither half fires on its own today. Properties used were taken from queries already shipping in this repo and in the managed-question library rather than from the vendor API docs: status, public, exploitability and score on crowdstrike_vulnerability, active on crowdstrike_prevention_policy, hostHiddenStatus on crowdstrike_sensor, and the normalised lastSeenOn. Verified mechanically that no rule references an undocumented entity type, an undocumented relationship verb, or a property that does not already appear in shipped content.⚠️ I could not run `npm run validate` locally — @jupiterone/query-language-parser is a private package and does not resolve outside the JupiterOne registry, so the J1QL is NOT parser-validated. CI will be the first real syntax check. The two queries most worth a second look are the reverse-direction negation `THAT !ENFORCES << crowdstrike_prevention_policy` (the idiom is copied from sophos rule 1's `THAT !PROTECTS << sophos_endpoint`) and the chained positive-then-negated traversal in the compound rule.
Contributor
|
https://github.com/JupiterOne/jupiterone-alert-rules/blob/main/package.json#L3 this version needs to be bumped before deployment to prod |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why
CrowdStrike has no rule pack. The three endpoint packs that exist cover Sophos, Trellix and Armis — across the 53 active JupiterOne customers measured on 2026-08-25 that is 2 customers, 0, and 0. CrowdStrike is deployed at 23, making it the most widely deployed endpoint tool in the book.
AX-1 (agent coverage, health, hygiene and policy management) is gate-met at 36 of 46 measured accounts and had no CrowdStrike content behind it.
What
13 rules modelled on
sophos-endpoint-security.json, using only entity types and relationship verbs documented ingraph-crowdstrike/docs/jupiterone.md.They are ordered so each one catches something the previous one counts as healthy:
devices-without-sensorsensors-without-prevention-policysensors-on-inactive-prevention-policyprevention-policies-without-settingssensors-not-reportinghosts-hidden-from-visibilitycrowdstrike-open-critical-vulnerability-on-unpoliced-sensoris the one rule with no single-vendor equivalent anywhere in this repo: an open, publicly exploitable vulnerability on a host whose sensor has no prevention policy. That compound condition is what AX-2 asks for — a critical CVE combined with a missing or incorrect agent policy — and neither half fires on its own today.Verification
Properties were taken from queries already shipping in this repo and in the managed-question library rather than from vendor API docs:
status,public,exploitability,scoreoncrowdstrike_vulnerability;activeoncrowdstrike_prevention_policy;hostHiddenStatusoncrowdstrike_sensor; and the normalisedlastSeenOn.Checked mechanically that no rule references an undocumented entity type, an undocumented relationship verb, or a property absent from shipped content.
alertLevelvalues and query names conform toscripts/validate.ts.I could not run
npm run validatelocally —@jupiterone/query-language-parseris private and does not resolve outside the JupiterOne registry, so the J1QL is not syntax-checked. CI is the first real check, which is why this is a draft.Two queries most worth a second look:
THAT !ENFORCES << crowdstrike_prevention_policy— reverse-direction negation; the idiom is copied from sophos rule 1'sTHAT !PROTECTS << sophos_endpoint🤖 Generated with Claude Code