Skip to content

Commit 2eb6de5

Browse files
author
Gorstak
committed
chore: update
1 parent b7c8cfc commit 2eb6de5

21 files changed

Lines changed: 675 additions & 70 deletions

CHANGELOG.md

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,41 @@
22

33
All notable changes to Windows Sentinel are documented in this file.
44

5+
## [3.3.0] - 2026-05-23
6+
7+
### Added — Electron Allowlist & Work Folders Protection
8+
9+
#### Electron/JIT App Allowlist (False Positive Elimination)
10+
11+
- **BehavioralCorrelationEngine**: Added comprehensive allowlist of 40+ Electron/JIT apps that are now excluded from composite correlation. Eliminates false "In-Memory Implant + Network Beacon" and "DGA + C2 Beaconing" composites for:
12+
- IDEs: Kiro, VS Code, Rider, IntelliJ, PyCharm, WebStorm, GoLand
13+
- Communication: Discord, Slack, Teams, Signal, WhatsApp, Telegram
14+
- Productivity: Notion, Obsidian, Figma, Postman, Todoist, ClickUp, Linear
15+
- Security: Bitwarden, 1Password
16+
- Media: Spotify, Loom
17+
- Gaming: Steam, steamwebhelper
18+
- Dev tools: GitKraken, Insomnia
19+
- Windows system: dwm, TextInputHost, SearchHost, ShellExperienceHost
20+
21+
- **MemoryBehaviorAnalyzer**: Expanded JIT process exclusion list with all the above Electron apps. These processes legitimately use RWX memory for V8/SpiderMonkey JIT compilation.
22+
23+
#### Work Folders Exfiltration Monitor (Kill-Authorized)
24+
25+
- **WorkFoldersExfilMonitor** — Detects and blocks unauthorized Work Folders activation:
26+
- Monitors Work Folders service state (kills if running on personal machine)
27+
- Detects new sync server URLs appearing in registry (removes them)
28+
- Detects Group Policy injection for auto-provisioning (deletes policy keys)
29+
- Detects Work Folders process execution (kills immediately)
30+
- Takes baseline at startup — alerts if already configured
31+
- Active response: stops service, kills process, removes registry config
32+
- MITRE T1567, T1048, T1484.001
33+
34+
### Changed
35+
36+
- Version bumped to 3.3.0 across all projects
37+
38+
---
39+
540
## [3.2.0] - 2026-05-22
641

742
### Added — Browser & Account Credential Protection + PowerShell Threat Monitoring

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
**Userland EDR for Windows — Behavioral Detection, Automated Response & Aggressive Deception**
44

5-
> Version: 3.2.0 (Browser & Account Credential Protection)
5+
> Version: 3.3.0 (Electron Allowlist & Work Folders Protection)
66
> Author: [Gorstak](https://gorstak.eu) | [GitHub](https://github.com/CroatiaSecurity/Sentinel)
77
> License: MIT
88
@@ -481,6 +481,7 @@ installer/
481481
| 3.0.0 | Security Hardening, Observability & Resilience | Centralized SecurityValidation utility, RateLimiter with burst capability, SafeExecution patterns (retry/timeout/circuit breaker), ConfigurationValidation framework, ConfigIntegrityMonitor (detects config/exe tampering), SentinelHealthCheck (memory/handles/threads/log/quarantine monitoring), SentinelMetrics (counters/histograms/gauges for detection rate, FP rate, response latency), SecureHttpClientFactory (TLS 1.2+, domain allowlisting, certificate validation), atomic quarantine operations, DllUnloadEngine improvements (IDisposable, validation, safe unload), StructuredLoggingExtensions, comprehensive fuzz tests and integration tests. |
482482
| 3.1.0 | Observability, Blind Spots & Resilience | SentinelMetrics wired into DetectionEngine and AdvancedResponseEngine (live detection rate, response latency, FP tracking). HashReputationService cache implemented (in-memory + DPAPI-encrypted disk persistence via SecureCacheStore, cuts API calls 90%+). Named Pipe Monitor (Cobalt Strike, PsExec, Impacket, Metasploit C2 detection). WMI Event Subscription Persistence Monitor (T1546.003 — detects planted __EventFilter/__EventConsumer bindings). Startup Self-Test (ETW, DPAPI, quarantine, log file, rule count verification on boot). Watchdog heartbeat HMAC signing (DPAPI-derived key, unforgeable without SYSTEM access). ProcessAncestryCache WMI/CIM fallback for Server Core/IoT. SentinelService.StartAsync properly overrides BackgroundService. |
483483
| 3.2.0 | Browser & Account Credential Protection | ChromeCredentialGuardMonitor (Login Data, Cookies, Local State file access monitoring for all Chromium browsers). FirefoxCredentialGuardMonitor (key4.db, logins.json, cookies.sqlite monitoring for Firefox/Waterfox/Thunderbird). MicrosoftAccountGuardMonitor (WAM TokenBroker cache, PRT extraction, BrowserCore abuse, Azure AD token theft tools). BrowserExtensionMonitor (malicious extension installation, registry force-install, dangerous permission detection). ChromeSessionGuardMonitor (remote debugging, CDP hijack, App-Bound Encryption bypass). PowerShellThreatMonitor (ETW script-block logging, AMSI/ETW bypass detection, download cradles, offensive frameworks, credential theft commands, encoded command detection). BrowserCredentialTheftRule (process-start detection for stealer tools targeting all browsers + Microsoft tokens). President's Law updated: "browser credential theft" kill-authorized. |
484+
| 3.3.0 | Electron Allowlist & Work Folders Protection | Comprehensive Electron/JIT app allowlist in BehavioralCorrelationEngine and MemoryBehaviorAnalyzer — eliminates false composite detections for Kiro, VS Code, Discord, Slack, Teams, Steam, Spotify, Notion, Obsidian, Figma, Postman, Bitwarden, and 20+ other apps. WorkFoldersExfilMonitor: detects unauthorized Work Folders configuration (registry, Group Policy injection), kills the service if running, removes injected policies, blocks silent data exfiltration via enterprise sync on personal machines. Kill-authorized. |
484485

485486
---
486487

THREAT_MODEL.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Windows Sentinel — Threat Model
22

3-
**Version: 3.2.0**
3+
**Version: 3.3.0**
44

55
This document assumes the attacker has read the source code.
66

architecture-council.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
**Status:** Architecture spec. Extends, does not replace, `requirements.md`,
44
`design.md`, `constraints.md` (all v0.9.0).
55

6-
**Last updated:** v3.2.0 (May 2026) — Browser & Account Credential Protection.
6+
**Last updated:** v3.3.0 (May 2026) — Electron Allowlist & Work Folders Protection.
77

88
---
99

constraints.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Windows Sentinel — Constraints
22

3-
**Version: 3.2.0**
3+
**Version: 3.3.0**
44

55
---
66

design.md

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Windows Sentinel — Design Document
22

3-
**Version: 3.2.0**
3+
**Version: 3.3.0**
44

55
---
66

@@ -73,6 +73,7 @@ The fusion layer is PASSIVE — it never blocks, kills, or modifies telemetry.
7373
| `BrowserExtensionMonitor` | **3.2.0** Baselines installed extensions, detects new extensions with dangerous permissions, registry force-install. Scans every 30s | No |
7474
| `ChromeSessionGuardMonitor` | **3.2.0** Detects remote debugging port abuse, CDP connections from scripting processes, App-Bound Encryption bypass (elevation_service.exe). Scans every 15s | No |
7575
| `PowerShellThreatMonitor` | **3.2.0** ETW script-block logging (Event ID 4104). Detects AMSI/ETW bypass, download cradles, reflective loading, offensive frameworks, credential theft commands. Falls back to cmdline scanning. | Yes (ETW preferred) |
76+
| `WorkFoldersExfilMonitor` | **3.3.0** Detects unauthorized Work Folders activation (service running, registry config, Group Policy injection). Active response: kills service, removes config, deletes policy keys. Kill-authorized. Scans every 15s | No |
7677

7778
### Engine
7879

@@ -317,6 +318,14 @@ Composite detections are emitted as Tier1 `DetectionEvent`s directly into the de
317318
| `BrowserCredentialTheftRule` | Process-start detection rule for browser credential theft tools. Covers Chromium paths, Firefox paths, Microsoft token paths, DPAPI patterns, known stealer tools. |
318319
| President's Law update | `"browser credential theft"` fragment added to kill list in both AdvancedResponseEngine and AgentResponseEngine. |
319320

321+
## Added in 3.3.0
322+
323+
| Component | Purpose |
324+
|-----------|---------|
325+
| Electron/JIT allowlist (BehavioralCorrelationEngine) | 40+ Electron apps excluded from composite correlation. Eliminates false "In-Memory Implant + Network Beacon" and "DGA + C2 Beaconing" composites for Kiro, VS Code, Discord, Slack, Steam, etc. |
326+
| Electron/JIT allowlist (MemoryBehaviorAnalyzer) | Expanded JIT process exclusion list with all common Electron apps. Prevents false RWX memory alerts. |
327+
| `WorkFoldersExfilMonitor` | Detects unauthorized Work Folders activation: service state monitoring, registry config detection, Group Policy injection detection. Active response: kills service, removes config, deletes injected policies. Kill-authorized. |
328+
320329
---
321330

322331
## Monitoring Coverage by Elevation Level

installer/build.ps1

Lines changed: 28 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -44,48 +44,42 @@ dotnet clean "$RepoRoot\src\WindowsSentinel.Service\WindowsSentinel.Service.cspr
4444
dotnet clean "$RepoRoot\src\WindowsSentinel.Agent\WindowsSentinel.Agent.csproj" -c $Configuration --nologo -v q 2>$null
4545
Write-Host "[OK] Build cache cleared" -ForegroundColor Green
4646

47-
# ── Check Windows Defender Exclusions ─────────────────────────────────────────
48-
Write-Host "`n[Pre-build] Checking Windows Defender configuration..." -ForegroundColor Yellow
47+
# ── Windows Defender Exclusions (ALWAYS add — status check is unreliable) ─────
48+
Write-Host "`n[Pre-build] Adding Windows Defender exclusions..." -ForegroundColor Yellow
4949

5050
try {
51-
$defenderStatus = Get-MpComputerStatus -ErrorAction SilentlyContinue
52-
if ($defenderStatus.RealTimeProtectionEnabled) {
53-
$exclusions = Get-MpPreference -ErrorAction SilentlyContinue | Select-Object -ExpandProperty ExclusionPath
54-
$repoExcluded = $exclusions | Where-Object { $_ -and $RepoRoot.StartsWith($_) }
55-
56-
if (-not $repoExcluded) {
57-
# AUTOMATIC: Try to add exclusion without prompting
58-
try {
59-
Add-MpPreference -ExclusionPath $RepoRoot -ErrorAction Stop
60-
Write-Host "[AUTO] Added Defender exclusion for $RepoRoot" -ForegroundColor Green
61-
62-
# Also exclude build outputs
63-
$publishPath = Join-Path $Installer "publish"
64-
if (Test-Path $publishPath) {
65-
Add-MpPreference -ExclusionPath $publishPath -ErrorAction SilentlyContinue | Out-Null
66-
}
67-
68-
# Exclude the releases folder
69-
$releasesPath = Join-Path $RepoRoot "releases"
70-
Add-MpPreference -ExclusionPath $releasesPath -ErrorAction SilentlyContinue | Out-Null
71-
}
72-
catch {
73-
Write-Host "[WARN] Could not auto-add Defender exclusion (needs Admin): $_" -ForegroundColor Yellow
74-
Write-Host " Build may fail with 'virus detected' errors." -ForegroundColor Yellow
75-
Write-Host " To fix: Run as Administrator or run: Add-MpPreference -ExclusionPath '$RepoRoot'" -ForegroundColor Cyan
76-
Start-Sleep -Seconds 2
77-
}
51+
# Always add exclusions regardless of reported Defender status.
52+
# Get-MpComputerStatus can report RealTimeProtection=disabled while
53+
# Defender still scans files during build (cloud protection, on-access hooks).
54+
$exclusionsNeeded = @(
55+
$RepoRoot,
56+
(Join-Path $Installer "publish"),
57+
(Join-Path $Installer "output"),
58+
(Join-Path $RepoRoot "releases")
59+
)
60+
61+
foreach ($path in $exclusionsNeeded) {
62+
try {
63+
Add-MpPreference -ExclusionPath $path -ErrorAction Stop
7864
}
79-
else {
80-
Write-Host "[OK] Windows Defender exclusion already configured" -ForegroundColor Green
65+
catch {
66+
# Silently continue — may already exist or need admin
8167
}
8268
}
83-
else {
84-
Write-Host "[OK] Windows Defender Real-time Protection is disabled" -ForegroundColor Yellow
69+
70+
# Also exclude the dotnet build output patterns
71+
try {
72+
Add-MpPreference -ExclusionProcess "dotnet.exe" -ErrorAction SilentlyContinue
73+
Add-MpPreference -ExclusionExtension ".dll" -ErrorAction SilentlyContinue
8574
}
75+
catch { }
76+
77+
Write-Host "[OK] Defender exclusions applied (repo + publish + output)" -ForegroundColor Green
8678
}
8779
catch {
88-
Write-Host "[WARN] Could not check Defender status: $_" -ForegroundColor Yellow
80+
Write-Host "[WARN] Could not add Defender exclusions (run as Admin if build fails): $_" -ForegroundColor Yellow
81+
Write-Host " Manual fix: Add-MpPreference -ExclusionPath '$RepoRoot'" -ForegroundColor Cyan
82+
Start-Sleep -Seconds 2
8983
}
9084

9185
# ── 1. Publish Service ────────────────────────────────────────────────────────

installer/setup.iss

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515

1616
#define AppName "Windows Sentinel"
1717
#ifndef AppVersion
18-
#define AppVersion "3.2.0"
18+
#define AppVersion "3.3.0"
1919
#endif
2020
#define AppPublisher "Gorstak"
2121
#define AppURL "https://github.com/CroatiaSecurity/Sentinel"

requirements.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Windows Sentinel — Requirements
22

3-
**Version: 3.2.0**
3+
**Version: 3.3.0**
44

55
---
66

src/WindowsSentinel.Agent/Program.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -80,7 +80,7 @@ static async Task<int> Main(string[] args)
8080
var host = builder.Build();
8181

8282
var logger = host.Services.GetRequiredService<ILogger<Program>>();
83-
logger.LogInformation("Windows Sentinel Agent v3.2.0 starting in user session (with user-context monitors)");
83+
logger.LogInformation("Windows Sentinel Agent v3.3.0 starting in user session (with user-context monitors)");
8484

8585
await host.RunAsync();
8686

0 commit comments

Comments
 (0)