Skip to main content
COSMICBYTEZLABS
NewsSecurityHOWTOsToolsStudyTraining
ProjectsChecklistsAI RankingsNewsletterStatusTagsAbout
Subscribe

Press Enter to search or Esc to close

News
Security
HOWTOs
Tools
Study
Training
Projects
Checklists
AI Rankings
Newsletter
Status
Tags
About
RSS Feed
Reading List
Subscribe

Stay in the Loop

Get the latest security alerts, tutorials, and tech insights delivered to your inbox.

Subscribe NowFree forever. No spam.
COSMICBYTEZLABS

Your trusted source for IT intelligence, cybersecurity insights, and hands-on technical guides.

429+ Articles
114+ Guides

CONTENT

  • Latest News
  • Security Alerts
  • HOWTOs
  • Projects
  • Exam Prep

RESOURCES

  • Search
  • Browse Tags
  • Newsletter Archive
  • Reading List
  • RSS Feed

COMPANY

  • About Us
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CosmicBytez Labs. All rights reserved.

System Status: Operational
  1. Home
  2. HOWTOs
  3. SentinelOne Threat Hunting with Deep Visibility
SentinelOne Threat Hunting with Deep Visibility
HOWTOAdvanced

SentinelOne Threat Hunting with Deep Visibility

Master threat hunting using SentinelOne's Deep Visibility query language. Learn to investigate suspicious processes, detect lateral movement, hunt for...

Dylan H.

Security Engineering

February 3, 2026
8 min read

Prerequisites

  • SentinelOne console access
  • Deep Visibility license
  • Security analyst experience

Overview

SentinelOne's Deep Visibility provides real-time telemetry for threat hunting across your entire endpoint fleet. This guide covers practical threat hunting techniques, from basic queries to advanced IOC detection.

What You'll Learn

  • Deep Visibility query syntax and operators
  • Process tree analysis for attack detection
  • Hunting for persistence mechanisms
  • Lateral movement detection
  • Building custom detection rules
  • PowerShell API automation

Why Deep Visibility?

Traditional AVSentinelOne Deep Visibility
Signature-basedBehavioral analysis
Post-infection alertsReal-time telemetry
Limited forensicsFull process history
Manual investigationQuery-based hunting

Deep Visibility Query Basics

Deep Visibility uses a SQL-like query language to search endpoint telemetry.

Query Structure

EventType = "Process Creation"
AND ProcessName = "powershell.exe"
AND ProcessCmdLine Contains "-enc"

Common Operators

OperatorDescriptionExample
=Exact matchProcessName = "cmd.exe"
ContainsSubstring matchProcessCmdLine Contains "mimikatz"
StartsWithPrefix matchFilePath StartsWith "C:\Temp"
InMultiple valuesProcessName In ("cmd.exe", "powershell.exe")
RegExpRegex matchProcessCmdLine RegExp "base64"

Event Types

Process Creation      - New process started
Process Exit          - Process terminated
File Creation         - New file written
File Modification     - Existing file changed
Registry Key Creation - New registry key
Registry Value Set    - Registry value modified
Network Connection    - Outbound connection
DNS Query             - DNS resolution

Hunting for Suspicious Processes

Encoded PowerShell Commands

Attackers frequently use Base64-encoded PowerShell to evade detection:

EventType = "Process Creation"
AND ProcessName = "powershell.exe"
AND (
    ProcessCmdLine Contains "-enc" OR
    ProcessCmdLine Contains "-EncodedCommand" OR
    ProcessCmdLine Contains "-e " OR
    ProcessCmdLine Contains "FromBase64String"
)

Living Off the Land (LOLBins)

Hunt for abuse of legitimate Windows binaries:

EventType = "Process Creation"
AND ProcessName In (
    "certutil.exe",
    "bitsadmin.exe",
    "mshta.exe",
    "regsvr32.exe",
    "rundll32.exe",
    "wmic.exe",
    "msiexec.exe"
)
AND (
    ProcessCmdLine Contains "http" OR
    ProcessCmdLine Contains "ftp" OR
    ProcessCmdLine Contains "/transfer"
)

Suspicious Parent-Child Relationships

Detect unusual process spawning patterns:

EventType = "Process Creation"
AND ParentProcessName = "outlook.exe"
AND ProcessName In ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe")
EventType = "Process Creation"
AND ParentProcessName = "winword.exe"
AND ProcessName Not In ("splwow64.exe")

Persistence Mechanism Detection

Scheduled Tasks

Hunt for malicious scheduled task creation:

EventType = "Process Creation"
AND ProcessName = "schtasks.exe"
AND ProcessCmdLine Contains "/create"

More specific - tasks running from suspicious locations:

EventType = "Process Creation"
AND ProcessName = "schtasks.exe"
AND (
    ProcessCmdLine Contains "AppData" OR
    ProcessCmdLine Contains "Temp" OR
    ProcessCmdLine Contains "ProgramData" OR
    ProcessCmdLine RegExp "C:\\Users\\[^\\]+\\Downloads"
)

Registry Run Keys

Detect persistence via registry:

EventType = "Registry Value Set"
AND RegistryPath Contains "CurrentVersion\Run"
EventType = "Registry Value Set"
AND RegistryPath In (
    "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
    "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\Run",
    "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce",
    "HKCU\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce"
)

WMI Event Subscriptions

Advanced persistence technique:

EventType = "Process Creation"
AND ProcessName = "wmic.exe"
AND ProcessCmdLine Contains "EventConsumer"

Lateral Movement Detection

PsExec and Remote Execution

EventType = "Process Creation"
AND ProcessName In ("psexec.exe", "psexec64.exe", "paexec.exe")

Service-based lateral movement:

EventType = "Process Creation"
AND ProcessName = "sc.exe"
AND ProcessCmdLine Contains "\\\"
AND ProcessCmdLine Contains "create"

WMI Remote Execution

EventType = "Process Creation"
AND ProcessName = "wmic.exe"
AND ProcessCmdLine Contains "/node:"
AND ProcessCmdLine Contains "process call create"

Pass-the-Hash Indicators

EventType = "Process Creation"
AND ProcessName = "sekurlsa.exe"
OR (
    ProcessName = "mimikatz.exe" OR
    ProcessCmdLine Contains "sekurlsa::logonpasswords"
)

RDP Connections

EventType = "Network Connection"
AND DstPort = 3389
AND ConnectionStatus = "SUCCESS"

Credential Access Detection

LSASS Access

Credential dumping attempts:

EventType = "Process Access"
AND TargetProcessName = "lsass.exe"
AND SourceProcessName Not In (
    "csrss.exe",
    "wininit.exe",
    "services.exe"
)

SAM Database Access

EventType = "File Read"
AND FilePath Contains "system32\config\SAM"

Credential File Access

EventType = "File Read"
AND (
    FilePath Contains "Credentials" OR
    FilePath Contains ".rdp" OR
    FilePath Contains "ntds.dit" OR
    FileName RegExp "\.(ppk|pem|key)$"
)

Data Exfiltration Detection

Large Outbound Transfers

EventType = "Network Connection"
AND ConnectionDirection = "OUTBOUND"
AND NetworkBytes > 10000000

Cloud Storage Uploads

EventType = "DNS Query"
AND DnsQuery In (
    "*.dropbox.com",
    "*.drive.google.com",
    "*.onedrive.live.com",
    "*.mega.nz",
    "*.pastebin.com"
)

Archive Creation Before Exfil

EventType = "Process Creation"
AND ProcessName In ("7z.exe", "rar.exe", "zip.exe", "tar.exe")
AND ProcessCmdLine Contains "a "
| FollowedBy ProcessCreation
  WHERE ProcessCmdLine Contains "http"
  WITHIN 5 minutes

PowerShell API Integration

Authentication

function Connect-SentinelOne {
    param(
        [Parameter(Mandatory)]
        [string]$ConsoleUrl,
 
        [Parameter(Mandatory)]
        [string]$ApiToken
    )
 
    $script:S1Session = @{
        BaseUrl = $ConsoleUrl.TrimEnd('/')
        Headers = @{
            "Authorization" = "ApiToken $ApiToken"
            "Content-Type"  = "application/json"
        }
    }
 
    # Verify connection
    try {
        $response = Invoke-RestMethod `
            -Uri "$($script:S1Session.BaseUrl)/web/api/v2.1/system/info" `
            -Headers $script:S1Session.Headers `
            -Method GET
 
        Write-Host "Connected to SentinelOne" -ForegroundColor Green
        Write-Host "  Version: $($response.data.build)"
        return $true
    }
    catch {
        Write-Error "Connection failed: $_"
        return $false
    }
}

Execute Deep Visibility Query

function Invoke-S1Query {
    param(
        [Parameter(Mandatory)]
        [string]$Query,
 
        [string]$FromDate = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
        [string]$ToDate = (Get-Date).ToString("yyyy-MM-ddTHH:mm:ss.fffZ"),
        [int]$Limit = 100
    )
 
    $body = @{
        query     = $Query
        fromDate  = $FromDate
        toDate    = $ToDate
        limit     = $Limit
    } | ConvertTo-Json
 
    $response = Invoke-RestMethod `
        -Uri "$($script:S1Session.BaseUrl)/web/api/v2.1/dv/query" `
        -Headers $script:S1Session.Headers `
        -Method POST `
        -Body $body
 
    return $response.data
}
 
# Usage
$results = Invoke-S1Query -Query 'EventType = "Process Creation" AND ProcessName = "powershell.exe"'
$results | Select-Object endpointName, processCmd, createdAt

Automated Threat Hunt

function Start-ThreatHunt {
    param(
        [hashtable]$Queries,
        [string]$OutputPath = ".\hunt-results"
    )
 
    New-Item -Path $OutputPath -ItemType Directory -Force | Out-Null
 
    $findings = @()
 
    foreach ($hunt in $Queries.GetEnumerator()) {
        Write-Host "Running hunt: $($hunt.Key)..." -ForegroundColor Cyan
 
        $results = Invoke-S1Query -Query $hunt.Value
 
        if ($results.Count -gt 0) {
            Write-Host "  Found $($results.Count) matches" -ForegroundColor Yellow
 
            $findings += [PSCustomObject]@{
                Hunt    = $hunt.Key
                Query   = $hunt.Value
                Count   = $results.Count
                Results = $results
            }
 
            # Export results
            $results | Export-Csv `
                -Path "$OutputPath\$($hunt.Key -replace ' ', '-').csv" `
                -NoTypeInformation
        }
        else {
            Write-Host "  No matches" -ForegroundColor Green
        }
    }
 
    return $findings
}
 
# Define hunts
$hunts = @{
    "Encoded PowerShell" = 'EventType = "Process Creation" AND ProcessName = "powershell.exe" AND ProcessCmdLine Contains "-enc"'
    "LOLBin Download"    = 'EventType = "Process Creation" AND ProcessName = "certutil.exe" AND ProcessCmdLine Contains "http"'
    "Suspicious Tasks"   = 'EventType = "Process Creation" AND ProcessName = "schtasks.exe" AND ProcessCmdLine Contains "AppData"'
}
 
# Execute hunt
$results = Start-ThreatHunt -Queries $hunts

Building Custom Detection Rules

Star Custom Rule

Create rules from successful hunts:

function New-S1CustomRule {
    param(
        [Parameter(Mandatory)]
        [string]$Name,
 
        [Parameter(Mandatory)]
        [string]$Query,
 
        [ValidateSet("Low", "Medium", "High", "Critical")]
        [string]$Severity = "Medium",
 
        [string]$Description
    )
 
    $body = @{
        data = @{
            name        = $Name
            query       = $Query
            severity    = $Severity
            description = $Description
            enabled     = $true
        }
    } | ConvertTo-Json -Depth 5
 
    $response = Invoke-RestMethod `
        -Uri "$($script:S1Session.BaseUrl)/web/api/v2.1/star-custom-rules" `
        -Headers $script:S1Session.Headers `
        -Method POST `
        -Body $body
 
    Write-Host "Rule '$Name' created" -ForegroundColor Green
    return $response.data
}

Example Rules

# Detect Mimikatz
New-S1CustomRule `
    -Name "Mimikatz Execution Detected" `
    -Query 'ProcessCmdLine Contains "sekurlsa" OR ProcessCmdLine Contains "mimikatz"' `
    -Severity "Critical" `
    -Description "Detects Mimikatz credential dumping tool"
 
# Detect reverse shells
New-S1CustomRule `
    -Name "Potential Reverse Shell" `
    -Query 'ProcessCmdLine RegExp "nc.*-e|ncat.*-e|bash.*-i.*>&"' `
    -Severity "High" `
    -Description "Detects common reverse shell patterns"

Ransomware Detection Queries

Mass File Encryption

EventType = "File Modification"
| GroupBy EndpointName, ProcessName
  Having Count > 100
  Within 1 minute

Known Ransomware Extensions

EventType = "File Creation"
AND (
    FileName EndsWith ".encrypted" OR
    FileName EndsWith ".locked" OR
    FileName EndsWith ".crypto" OR
    FileName RegExp "\.[a-z]{5,10}$"
)
| GroupBy EndpointName
  Having Count > 50

Shadow Copy Deletion

EventType = "Process Creation"
AND (
    (ProcessName = "vssadmin.exe" AND ProcessCmdLine Contains "delete shadows") OR
    (ProcessName = "wmic.exe" AND ProcessCmdLine Contains "shadowcopy delete") OR
    (ProcessName = "bcdedit.exe" AND ProcessCmdLine Contains "recoveryenabled no")
)

Best Practices

  1. Start with known-good - Understand normal before hunting abnormal
  2. Tune for environment - Whitelist legitimate admin tools
  3. Document findings - Keep hunt notebooks with queries and results
  4. Automate repeatable hunts - Schedule weekly hunt routines
  5. Share IOCs - Feed findings back into SIEM and firewall rules
  6. Practice on red team exercises - Validate detection coverage

Query Reference Card

Use CaseQuery Pattern
Process by nameProcessName = "malware.exe"
Command line searchProcessCmdLine Contains "suspicious"
File in locationFilePath StartsWith "C:\Temp"
Network to IPDstIp = "192.168.1.100"
DNS lookupDnsQuery Contains "evil.com"
Registry persistenceRegistryPath Contains "CurrentVersion\Run"
Time-boundedCreatedAt > "2024-01-01T00:00:00Z"

Next Steps

  • FortiGate Firewall Policy Management
  • Enterprise BitLocker Automation
  • Building a SIEM with Open-Source Tools
#sentinelone#edr#Threat Hunting#Deep Visibility#Security#PowerShell

Related Articles

SentinelOne Health Check: Agent Status Monitoring and

Organizations deploying SentinelOne endpoint protection require continuous monitoring of agent health to ensure comprehensive threat coverage across their...

17 min read

Deploy SentinelOne Policy

Deploy, manage, and validate SentinelOne security policies across your endpoint estate using the SentinelOne Management API. This automated workflow supports:

25 min read

Invoke SentinelOne Threat Hunt

Proactive threat hunting is essential for identifying sophisticated threats that evade automated detection systems. This script automates the process of...

20 min read
Back to all HOWTOs