Skip to content
Just built a custom...
 
Notifications
Clear all

Just built a custom detection for Qakbot using Sigma and SentinelOne

4 Posts
4 Users
0 Reactions
38 Views
(@emmaw)
Estimable Member
Joined: 3 months ago
Posts: 139
Topic starter   [#16999]

Hi everyone! I'm still pretty new to the security side of things, coming from a project management background. I've been trying to learn detection engineering and just built my first custom detection rule for Qakbot, targeting the `rundll32.exe` command line patterns I read about in an advisory.

I used a Sigma rule and deployed it in our SentinelOne console. It seems to be working in our test environment and caught a few simulated events. I'm curious though—for those of you running S1 at scale, do you find custom Sigma rules like this perform well alongside the native analytics? Any tips on avoiding false positives, or things I should watch out for when tuning it?

Also, from a workflow perspective, how do you usually manage and version these custom rules across a larger team? Is there a preferred method, or is it mostly ad-hoc?



   
Quote
(@derekf)
Reputable Member
Joined: 3 months ago
Posts: 285
 

Congratulations on getting your first Sigma rule deployed, especially coming from a project management angle. That's a solid practical start.

In our environment, custom Sigma rules perform a specific, complementary role alongside native analytics. SentinelOne's engine excels at behavioral detection, while Sigma rules allow you to codify specific, known-bad IOCs or TTPs from advisories, like the Qakbot command-line patterns you're targeting. The performance hit is negligible, but the main trade-off is maintenance. Native detections evolve with the product; your custom rule is now a static asset you own. For tuning, I'd recommend immediately adding a few key exclusions to your rule's logic to avoid the common false positives with `rundll32`. Legitimate software updaters and certain enterprise management tools often use similar patterns. Start by excluding common paths like `C:WindowsSystem32` and `C:Program Files` from the command-line target, unless your intelligence suggests the malware is executing directly from there.

Regarding workflow, we treat custom detection rules like code. They're stored in a dedicated Git repository, with a CI/CD pipeline that uses SentinelOne's APIs to deploy them to our production console on merge to main. This gives us version history, peer review via pull requests, and a rollback mechanism. An ad-hoc approach becomes unmanageable once you have more than a handful of rules or multiple analysts contributing.


No free lunch in cloud.


   
ReplyQuote
(@emilyh)
Estimable Member
Joined: 2 months ago
Posts: 166
 

That's a really practical first project. I've been trying to learn Sigma for similar reasons, mostly for automating detections from threat intel feeds.

On the versioning question, we're a small team and ended up using a basic Git repo just for our custom rules, with a simple readme for deployment steps. It's not fancy, but it solves the change tracking problem. How are you handling the deployment from Sigma to the S1 console? I've found that manual copy-paste can introduce errors if you're not careful.



   
ReplyQuote
(@crm_hopper_2026)
Honorable Member
Joined: 5 months ago
Posts: 456
 

Your point about manual copy-paste errors is a significant operational risk we've documented in our own post-mortems. A flawed rule deployed at scale can generate thousands of alerts.

We moved to a CI/CD pipeline for this exact reason. The Sigma rule YAML lives in Git, and a GitHub Action uses the official Sigma CLI to convert it to the SentinelOne query syntax, validates the syntax, and then pushes it via their API to a pre-defined policy. This eliminates the transcription error and gives us a clear audit trail linking a commit hash to the exact rule version active in the console.

For a small team, even a simple script that runs `sigma convert` and does a basic diff against the previously deployed rule can catch most formatting errors before they hit production. The key is to never have a human manually translate the logic into the S1 query field.



   
ReplyQuote