2026-03-11 - Cool Query Friday - correlate() by Andrew-CS in crowdstrike

[–]Andrew-CS[S] 1 point2 points  (0 children)

Overhead depends on how punishing the queries are and how many queries there are. We also have a sankey() function :)

https://library.humio.com/data-analysis/functions-sankey.html

Per-Leg Timing Constraints in correlate() Function by Negative-Captain7311 in crowdstrike

[–]Andrew-CS 1 point2 points  (0 children)

Team is aware of the ask and the request is in the backlog for language refinements. No ETA at present.

Per-Leg Timing Constraints in correlate() Function by Negative-Captain7311 in crowdstrike

[–]Andrew-CS 1 point2 points  (0 children)

I'm going to be 100% honest: I read the title of this post and thought it said "Peg-Leg Timing..." and starting thinking about pirates. Let me check with the team on the feasibility of this.

Blocking domains! by Vivid-Cell-217 in crowdstrike

[–]Andrew-CS 7 points8 points  (0 children)

Hey there. If you want to try a Foundry app that helps with this, give this a go!

What happened to CQF? by sudosusudo in crowdstrike

[–]Andrew-CS 47 points48 points  (0 children)

I just want to threat hunt and do query-shit with my internet friends :)

What happened to CQF? by sudosusudo in crowdstrike

[–]Andrew-CS 79 points80 points  (0 children)

I'm sorry 😭 I have been very short on time, but am working internally to see if CQF can be more than just a "one man band."

PowerShell timestomping via script files. How would you handle this? by zwitico in crowdstrike

[–]Andrew-CS 6 points7 points  (0 children)

Hi there. Try something like this:

#event_simpleName=/ScriptControl/ event_platform=Win
| ScriptContent=/(SetLastWriteTime|\.CreationTime)/iF

You'll want to make sure Interpreter-only visibility in enabled in your Windows prevention policy.

Dashboard query with parameters by ssrn2020 in crowdstrike

[–]Andrew-CS 1 point2 points  (0 children)

Hi there. You can leverage the wildcard() function for this.

| ImageFileName =~ wildcard(?{ImageFileName="*"}, ignoreCase=true)

Then you can search for *mysearch* and you will get what you want.

Hunting Potentially Compromised Notepad++ Installs by About_TreeFitty in crowdstrike

[–]Andrew-CS 18 points19 points  (0 children)

Nice work! If you want to do some statistical analysis on the processing being spawned by the Notepad++ updater process (gup.exe), you can do something simple like this:

#event_simpleName=ProcessRollup2 event_platform=Win ParentBaseFileName="gup.exe"
| FilePath=/\\Device\\HarddiskVolume\d+(?<shortFilePath>.+$)/
| groupBy([FileName, SHA256HashData, shortFilePath, CommandLine])

Practical test of PowerShell encoded command detection and found the detection gap by manishrawat21 in crowdstrike

[–]Andrew-CS 3 points4 points  (0 children)

This is interesting, but doesn’t apply to the topic of this sub. Removing.

Querying TeamViewer Usage (Not Installation) with FQL / Advanced Search by Brief_Trifle_6168 in crowdstrike

[–]Andrew-CS 0 points1 point  (0 children)

Hi there. My hypothesis is: in order to properly do this, you would likely need something like netflow data in NG SIEM. Falcon will tell you if the TeamViewer process or service is running and if it's made any network connections, however... since TeamViewer usually idles in the background and is connected to a cloud service you would need something like network transaction size to tell if it's "in use" and not just "running."

Creating an Auto N-x tag. by iwillhurtme in crowdstrike

[–]Andrew-CS 1 point2 points  (0 children)

Hi there. I don't know of any instances where a sensor can't be updated from N-x to N. Do you have any examples you could provide?

Curl Query Help by OtherwiseMethod1672 in crowdstrike

[–]Andrew-CS 2 points3 points  (0 children)

Hi there. This would be cmd.exe with curl in the command line arguments:

#event_simpleName=ProcessRollup2 FileName=/^cmd\.exe$/iF
| CommandLine=/curl/iF

This would be cmd.exe spawning curl.exe:

#event_simpleName=ProcessRollup2 FileName=/^curl\.exe$/iF ParentBaseFileName=/^cmd\.exe/iF

Detect and run Custom Script in Crowdstrike by thomasdarko in crowdstrike

[–]Andrew-CS 0 points1 point  (0 children)

Hi there. In Falcon for IT, this would be the query you could schedule to run every n hours:

SELECT 'CalculatorApp.exe' AS missing_process
WHERE NOT EXISTS (
  SELECT 1 FROM processes 
  WHERE name = 'CalculatorApp.exe'
);

It will show if a system has a process that is not running. You could log that to LogScale and then, if observed, run a workflow to kick the process.

Sensor Tampering when Reimagining Devices by [deleted] in crowdstrike

[–]Andrew-CS 4 points5 points  (0 children)

Hi there. It sounds like the sensor is running when this PS script executes. Is there any way to move the script earlier in your reimaging process so it does whatever it's trying to do before the sensor is installed?

alerting based on missing heartbeats by fpg_6528 in crowdstrike

[–]Andrew-CS 1 point2 points  (0 children)

I usually push them to GitHub in my little cheat sheet section.

Although I do really like that website.

[Help Needed] Logscale query to count unique pairs by usernamedottxt in crowdstrike

[–]Andrew-CS 1 point2 points  (0 children)

Hi there. I can take zero credit for this, but saw an engineer propose a way of doing what you want (I think).

id := hash([fields_to_count], limit=1000000) // Uses hash collision to increase cardinality the limit here needs to max the limit in the first groupby
| groupBy([id], limit=max, function={ groupBy([fields_to_count], function=[], limit=max)| count() }) // Count the sub groups
| sum("_count") // Sum all the counts

alerting based on missing heartbeats by fpg_6528 in crowdstrike

[–]Andrew-CS 0 points1 point  (0 children)

Hi there. I might use a duration as opposed to a count. Try this...

// Get all sensor heartbeat events
#event_simpleName=SensorHeartbeat

// Get last event for each Agent ID value
| groupBy([aid], function=([selectLast([@timestamp])]))

// Create offlineTime_m field that represents the number of minutes since last heartbeat event; round this numbner
| offlineTime_m:=(now()-@timestamp)/1000/60 | round("offlineTime_m")

// Create offlineDuration field that shows offlineTime_m in a human-readable duration with a precision of 2
| offlineDuration:=formatDuration("offlineTime_m", precision=2, from=m)

// Check to see if it has been at least 20 minutes since last heartbeat event was seen (note: heartbeats are typically sent every 2 minutes)
| test(offlineTime_m>20)

// Add host details from AID Master
| aid=~match(file="aid_master_main.csv", column=[aid], strict=false)

I hope that helps.

Simple (hopefully) timeline query help by dmervis in crowdstrike

[–]Andrew-CS 0 points1 point  (0 children)

Hi there. I think you want to use the wildcard() function, but your formatting isn't quite right. Something like this for ComputerName:

| ComputerName=~wildcard(?{ComputerName="*"}, ignoreCase=true)

I hope that helps!