Skip to content
Help: We're getting...
 
Notifications
Clear all

Help: We're getting flooded with 'scripting' alerts from our devs' legitimate tools.

7 Posts
7 Users
0 Reactions
2 Views
(@datadog)
Estimable Member
Joined: 1 week ago
Posts: 90
Topic starter   [#19227]

Our EDR is flagging every `python.exe`, `node.exe`, and `powershell.exe` spawn from our dev environments. Alert volume is unsustainable. SOC is drowning in noise, devs are getting blocked, and real threats are getting lost.

We need to tune detection, not turn it off. Current stack:
- **EDR:** CrowdStrike
- **Orchestration:** Tines for automated response
- **Logging:** Loki for audit trails

What I've tried:
* Excluding entire developer directories (bad idea, increases risk).
* Creating allow-lists for specific toolchains (Hash-based, but dev tools update constantly).
* Lowering prevention policy to "Detect only" for those hosts (defeats the purpose).

Need concrete strategies. How are you handling:
1. **Process lineage rules** to allow `vscode -> python` but not `cmd -> powershell -> python`?
2. **Command-line argument filtering** to permit `npm install` but alert on `powershell -enc`?
3. **Integrating with CI/CD systems** to auto-allow sanctioned pipelines?

Share specific syntax. Example of our current, too-broad, CrowdStrike IOA exclusion:

```json
{
"description": "Allow VS Code",
"ioa_rule_ids": ["12345678"],
"excluded_patterns": ["C:\Users\*\AppData\Local\Programs\Microsoft VS Code\Code.exe"]
}
```

This doesn't cover spawned child processes. Need the next level of granularity.

—DD


Metrics don't lie.


   
Quote
(@ci_cd_plumber_99)
Estimable Member
Joined: 4 months ago
Posts: 112
 

You're on the right track with lineage and arguments, but that CrowdStrike snippet is a classic path-based exclusion and that's your problem. It's too static. You need behavioral policies.

For your three points:
1. Process lineage: You need to build a custom IOA for allowed parent processes. Don't just allow `vscode.exe`. Be more specific, like allowing `Code.exe` spawning `python.exe` only when `Code.exe` itself was spawned by `explorer.exe`. That cuts out the `cmd -> powershell -> python` chain you're worried about.
2. Command-line filtering: This is where you'll get the most mileage. For your `npm install` example, create a detection rule that suppresses alerts when the command line contains your internal artifact registry URL or specific, safe flags. Conversely, trigger a high-fidelity alert for any `powershell` process with the `-enc` flag unless it's from your SCCM system.
3. CI/CD integration: This is the gold standard. Your Tines workflow should ingest a webhook from your CI system (Jenkins, GitHub Actions) at the start of a pipeline run, query CrowdStrike's API to get the sensor ID of the runner host, and temporarily add that host to a low-prevention policy group for the duration of the job. Then it flips back.

The hash-based allow-listing failing because tools update is a red herring. You should be signing your internal tool builds and allowing by certificate publisher, not hash.


Speed up your build


   
ReplyQuote
(@ci_cd_junkie)
Estimable Member
Joined: 5 months ago
Posts: 134
 

Totally feel your pain. That CrowdStrike snippet is a dead-end because it's path-based, like user465 said. You're chasing hashes and directories forever.

The key is flipping the logic. Don't try to list every safe thing. Define the *unsafe* patterns and let everything else be noise you can filter out in Tines. For your three points:

1. **Process lineage**: Build IOAs that flag *bad* parent chains, not allow good ones. A rule for `cmd.exe` -> `powershell.exe` -> `python.exe` is specific and scary. Legit IDE launches will never match that.
2. **Command-line filtering**: This is your biggest win. In Tines, you can drop any alert where the command line contains your internal package registry URL, or `--install-strategy=nested`, or `-ExecutionPolicy Bypass -File` (for known build scripts). Let the SOC see the raw logs in Loki if they need to audit.
3. **CI/CD integration**: We feed a service principal token to our CI system (Jenkins in our case). Its jobs write a marker file (`C:jenkins.build_id`) on the worker. A CrowdStrike sensor check can look for that file and auto-tag the host, then you can scope exclusions to that tag. It's not perfect, but it containers the "allow" bubble.

Your existing stack is perfect for this. Use Loki to *learn* what's normal (those `npm install` args), then codify those exceptions in Tines to kill the alerts before they hit the SOC queue. CrowdStrike should just be the raw feed.


pipeline all the things


   
ReplyQuote
(@integrations_jane_new)
Estimable Member
Joined: 3 months ago
Posts: 106
 

Spot on with the CI/CD integration point - that's the only way we got our alert volume under control for real. We used the CrowdStrike API via Workato to dynamically move hosts, but we hit a snag.

The policy group change isn't instantaneous. It can take a few minutes for the sensor to check in and get the new policy. If your CI pipeline is short, the job finishes while the host is still in the restrictive policy, causing a different kind of blockage.

We solved it by having our CI system tag the runner in our inventory at job start, and Tines watches for that tag to suppress alerts from that host for a 15-minute window instead.



   
ReplyQuote
(@amandap)
Eminent Member
Joined: 4 days ago
Posts: 21
 

That CrowdStrike IOA snippet is exactly the static approach that falls apart when Node updates. I'm new to this and trying to learn, so maybe this is naive, but wouldn't the CI/CD integration idea break down for local developer machines? They're not in a CI pipeline.

How do you handle the devs just coding locally in VS Code? Do you still rely on those behavioral IOAs for bad chains, like user200 suggested, and just accept some noise from their workstations?



   
ReplyQuote
(@jacksonj)
Estimable Member
Joined: 6 days ago
Posts: 64
 

That's a great point about local dev machines. The CI/CD trick won't work there, so you're back to behavioral rules.

But for local workstations, could you use CrowdStrike's host groups differently? Like putting all the developer laptops in a policy with those "bad chain" IOAs that user200 mentioned, while keeping servers in a stricter one? That way, the noise is at least contained to a specific group.


Thanks!


   
ReplyQuote
(@cost_analyst_liam)
Reputable Member
Joined: 3 months ago
Posts: 146
 

I agree that behavioral policies are the correct long-term vector, but implementing them effectively requires a more granular control plane than CrowdStrike's native IOA builder offers. Defining a rule like `explorer.exe -> Code.exe -> python.exe` is logically sound, but in practice, you'll find that many legitimate developer workflows bypass `explorer.exe`. Think of a developer launching a terminal within the IDE, which then spawns the Python process. The parent chain becomes `Code.exe -> WindowsTerminal.exe -> python.exe`.

The more robust method is to define the *bad* lineage with higher confidence, as others have mentioned, and then use your orchestration layer, Tines in this case, as the filtering engine. You can build a logic flow in Tines that checks for multiple conditions across the event: lineage, command-line arguments, *and* the host's role from your inventory system. This moves the suppression logic outside the EDR, making it dynamic and easier to audit and modify without pushing new sensor policies.


Always check the data transfer costs.


   
ReplyQuote