Skip to content

Releases: psihijatrija/Sentinel

Sentinel 3.4.4

Choose a tag to compare

@github-actions github-actions released this 24 Oct 21:46

Sentinel 3.4.4

Fixed

  • Prevent synchronous native firewall reconciliation and WMI watcher initialization from blocking the hosted-service startup path. Preserve policy verification and explicit failure reporting.
  • Bound the complete IPC request/reply exchange, preserve the 16,384 characters unauthenticated request cap, and allow bounded full-roster replies. Distinguish SCM state from IPC readiness so a timeout is not labeled service stopped.
  • Remove hidden-window-only ClickFix kill authority, including the reported tray-icon promotion false positive. Keep download/execute detection; add no name/path exemption.
  • Correct About and architecture docs to list Service, Agent and Guard as three core processes.
  • Present absent/unreadable certificate trust markers as review-only unverified metadata; exclude this context from attack correlation while retaining explicit distrust enforcement.

Evidence and validation

  • Isolate synthetic pipeline fixtures from leaked live ancestry refresh timers and runner process IDs; preserve assertions/deadlines and include queue/engine diagnostics on timeout. The independent Windows release run remains a mandatory check.
  • Local cross-build: zero warnings/errors; portable regressions: 476 passed, eight native Windows fixtures skipped; dashboard: 34 passed. See startup timeline, verified false-positive actions, certificate context and validation limits. Historical evidence packs are preserved. Windows validation and fresh target-host logs remain necessary.

Sentinel 3.4.3

Choose a tag to compare

@github-actions github-actions released this 24 Oct 20:59

Sentinel 3.4.3

Fixed

  • Stop parsing detection evidence as a filesystem path. Reject malformed Windows path hints before installer heuristics and distinguish rule-evaluation failures from policy/dispatch failures in diagnostics. Regression tests exercise quoted System32 evidence through durable detection logging.
  • Isolate process/image, file, registry and other ETW work in four bounded FIFO lanes (2,048 events / 4 MiB each). Preserve per-provider ordering, filter unused event IDs before payload copying, scope file events before process lookup, and coalesce only path-less WMI registry-host hint refreshes to once per PID/second. Report filtered/coalesced counts separately from genuine lane loss.
  • Coalesce repeated intermittent ETW loss alerts and limit repeated reconciliation requests without declaring missing telemetry healthy.
  • Make Sentinel offline-isolation firewall rules idempotent. Repair duplicates only within the six exact owned names/group, refuse foreign collisions, and verify rule scope. Add a mandatory native Windows repeated-apply/duplicate-repair fixture.
  • Retry incomplete background file walks after 15 minutes while retaining watchers and skipping already indexed successful files. Surface bounded failed-path examples and exception/HRESULT details; access denial is not file absence, and a bad child directory does not abort sibling enumeration.
  • Keep enabled-token-privilege observations Tier2/LogOnly, outside credential-dump/composite authority; correct their explanation.

Validation and limits

  • Local cross-build: zero warnings/errors; selected portable tests: 458 passed, eight Windows fixtures skipped; dashboard: 33 passed. See log findings, validation and remaining limits. Windows CI must run the full Framework suite and all eight native endpoint fixtures; local Linux checks cannot substitute for these. No Chrome-scroll cause, zero-loss collection, complete disk access or live KGB RAT interception is claimed. NanoAV remains the separate original .NET module with its existing coexistence-only changes.

Sentinel 3.4.2

Choose a tag to compare

@github-actions github-actions released this 24 Oct 13:43

Sentinel 3.4.2

Added

  • Add bounded PE artifact observations for the marker pair in the supplied KGB RAT report, Windows Vault credential-read scope, and bounded loaded-user Policies Explorer Run/ms-settings/mscfile observations. These remain LogOnly; no live KGB sample detection or universal variant coverage is claimed.
  • Query runtime process criticality on pinned termination handles and refuse critical/unknown targets. Guard sandbox tree response and installer agent shutdown; remove the MTP heuristic's direct process-kill bypass.

Fixed

  • Remove the background scan's unconditional two-second wait for stable files, reduce per-file yielding, avoid duplicate hashing/old ADS bypass, invalidate metadata indexes after rule-version changes and skip directory junctions. Expose scan counters/elapsed time and keep unreadable paths incomplete.
  • Move ETW handler work off the native callback using bounded owned payload copies. Report queue/byte usage, dispatch loss and stuck-handler time rather than equating thread liveness with progress. Protected-provider denial and historical loss remain explicit.
  • Reorganize Overview around a small summary and collector issues. Move the roster to searchable/filterable Health & Metrics details with explicit legacy-browser controls, compact flex layouts, keyboard navigation, accurate event-window labels and honest checking/unverified status.

Validation and limits

  • Product/shipping-test cross-build: zero warnings/errors. Selected portable regressions: 426 passed, seven native Windows fixtures skipped. Dashboard: 32 passed; Chromium preview checks at 960px/720px passed. Native Framework/IE, sustained load, real interrupted scans and representative malware detection require Windows validation. NanoAV source verification passes.
  • See scope, references and validation. Marker matches do not authorize termination, criticality queries are not atomic crash-prevention guarantees, and the remaining standalone antivirus gaps are unchanged.

Sentinel 3.4.1

Choose a tag to compare

@github-actions github-actions released this 24 Oct 00:29

Sentinel 3.4.1

Fixed

  • Remove filename/command and port-only kill authority throughout dispatch and correlation. Fix the ExploitShield self-kill regression without trusting a matching executable name. Keep concrete behavioral response paths active.
  • Stop mistaking local ephemeral ports for inbound malware traffic; throttle remote endpoint observations and label TCP initiation direction unknown.
  • Replace failing legacy IPSec packet-block commands and English output parsing with idempotent, owned Windows Firewall port rules for the same compiled set. Read back rule scope/action/profiles and report unavailable or overridden configuration without alleging tampering. Remove owned modern rules during uninstall.
  • Handle Framework-mapped missing-rule exceptions during first installation, retain fail-closed handling for access/provider errors, and avoid unnecessary empty-string COM setters. Exercise first creation and idempotent reapplication in the native fixture; print the full failing stage, exception and HRESULT when it fails. Windows rerun remains required.
  • Filter native ETW subscriptions to consumed event IDs, retain credential-read attribution, increase bounded buffering and disclose unsupported-filter fallback. Report protected-provider access denial and independent loss together; new loss refreshes reconciliation even during existing degradation.
  • Recover file watcher overflow locally with a larger buffer and less unused notification traffic. Keep reconciliation visibly incomplete until the walk finishes, bypass the scan-index shortcut after overflow, and disclose enumeration failures.
  • Honor process-only response scope in chain tracing; unrequested quarantine attempts no longer make a verified kill appear partially completed. Correct Smart App Control/certificate wording and remove unsupported campaign attribution from SAC posture.

Validation and limits

  • Product projects and shipping tests cross-build: 0 warnings, 0 errors. Selected portable regressions: 395 passed, 0 failed; seven Windows fixtures skipped. Windows ACL/ADS/path-dependent cases and full Framework execution remain for Windows CI. Dashboard: 26 passed. NanoAV source scope verified unchanged.
  • Add Windows fixtures for owned port-rule apply/read-back/removal and filtered ETW process-event delivery. The dedicated gate requires all seven endpoint cases to run without skips. Protected Threat Intelligence provider access, historical event loss, effective packet blocking and inaccessible file content cannot be declared repaired from Linux. See runtime-log remediation and validation.

Sentinel 3.4.0

Choose a tag to compare

@github-actions github-actions released this 23 Oct 10:57

Sentinel 3.4.0

Changed

  • Define standalone userland protection as the product target, with Defender optional. Publish implemented mechanisms, missing EPP capabilities and acceptance priorities in the capability matrix; do not claim full antivirus or every-product parity.
  • Separate VBS, Credential Guard and Memory Integrity runtime service states from configuration, and query verified-system-image LSASS process protection with query-only access. Audit vulnerable-driver blocklist configuration without claiming enforcement. Explain Credential Guard's domain-credential scope; inactive CG is contextual rather than a universal personal-PC failure. Correct the old configuration-only IOMMU claim and add explicit inactive/unsupported dashboard labels.
  • Bind persistent TCP/drop/DNS history to process creation time, reject unavailable/reused identities, and report TCP collector failures through sensor health. DNS retry bursts remain observations rather than standalone containment authority.
  • Restrict HKLM Run/RunOnce cleanup to exact direct launches of verified quarantined files; recheck the typed value before deletion and verify absence afterward. Preserve argument-only references, changed values and unverified ancestors. Log cleanup attempts; cross-process registry mutation is not atomic.
  • Match injected-victim composite requests to actual scoped process containment so verified exits do not falsely require backing-file quarantine. Add native Windows fixtures for real owned-process exit, unrelated-process survival, temporary registry attribution and runtime-provider reporting.
  • Fix the credential-read regression fixture that assumed a fabricated PID had a live Windows identity. Inject controlled birth times into the production rule/correlator and verify positive corroboration, missing identity and PID reuse without weakening production checks.
  • Extend injection-candidate PE inspection to arbitrary host identities and RX code with readonly allocation headers. Validate executable PE sections with bounded read-only walks; MZ/JIT/ordinary image mappings do not provide payload proof. Browser/API suppression still queues PE-only target inspection without granting response authority.
  • Carry verified victim creation time through the PE-plus-credential-read chain to a scoped containment adapter. Reject PID reuse; preserve the victim's backing EXE and parent, skip ISO/container/VM mutation and prevent reinfection-cache poisoning from an injected clean host. Independent loader/module responses remain available. See DLL-loader and payload scope.
  • Extend the existing raw-socket response rule with a bounded inline-Python signature: a connected socket supplies all three standard streams of an explicitly invoked shell. Python, Ren'Py, installer names and relay labels alone provide no response authority.
  • Reuse the PowerShell decoded-code parser in the raw-socket rule, closing a path that could mistake ordinary TCP clients or quoted payload documentation for a reverse shell.
  • Correlate a real Kernel-File credential-store read with confirmed C2 or reverse-shell evidence in the same live process lifetime. Require fresh timestamps and a matching creation time; watcher notifications, unknown/reused identities, weak network observations and consultant signals cannot complete this chain. Prevent the broader session-theft rule from bypassing these checks for raw store-access observations.
  • Include ready removable volumes alongside fixed secondary drives in file watching and initial scanning. Reconcile volume attachment/removal within the scanner, releasing old watchers and restarting the lazy walk without consuming monitor failure-restart attempts. Existing file exclusions, scan budgets and observe-only file-verdict policy remain in force.

Scope and validation

  • Keep NanoAV source and its response rules unchanged. No Ren'Py-specific blocklist or unidentified “Ome-Relay” signature is introduced; neither forum post supplied a sample or detection name. See installer and relay coverage.
  • Release product projects and shipping tests cross-build with 0 warnings and 0 errors. The optional Windows Desktop ML trainer was not validated on Linux. The expanded selected portable regression suite passed 255 cases; five Windows-only fixtures were skipped. All 26 dashboard checks pass. The Windows ACL-dependent response test and native Framework runner remain unrun here. NanoAV supplied-source verification passes.
  • Tests use inert telemetry and check reverse-shell dispatch authorization, credential-chain corroboration, ordinary networking, legitimate game launches, unrelated streams, stale/reused identities and local-volume selection. Add native readonly-header/RX memory and clean Qt policy fixtures, plus fake-handle victim containment/parent-preservation tests. A dedicated Windows CI job now requires all five endpoint fixtures to execute and pass without skips. Native Windows installer, ETW attribution, removable-drive lifecycle and actual containment checks remain required; portable tests do not establish coverage against either forum sample.

Sentinel 3.3.9

Choose a tag to compare

@psihijatrija psihijatrija released this 22 Oct 13:43
df630a4

Release 3.3.9: automatic exploit maintenance with native Windows validation

Sentinel 3.1.7

Choose a tag to compare

@psihijatrija psihijatrija released this 22 Oct 01:00

Sentinel 3.1.7

Added

  • Embedded AntivirusLite engine — the standalone AntivirusLite.ps1 engine now runs in-process inside Sentinel.Agent via the Windows PowerShell 5.1 runtime (resolved from the GAC; nothing extra shipped). It runs on a background thread, so no powershell.exe child process is visible in Task Manager. Launched with -Embedded, which disables the Start-Job-based scanners and the scheduled-task auto-start; the file watcher, WMI exec monitor, scored C2 engine, and reverse-shell killer run in-process. The module is decoupled from Sentinel's response-policy pipeline and can be removed cleanly.

Fixed

  • Self-kill prevention — the embedded engine was quarantining Sentinel.Service.exe and deleting Sentinel.Agent.exe, taking the agent down. The agent now passes its install directory via -SentinelDir; the engine treats that directory and the Sentinel process names as off-limits for every destructive action (quarantine, delete, C2 kill, reverse-shell kill, behavioral kill, WMI execution-block). Behavior toward everything outside the Sentinel install directory is unchanged — it remains kill-first.
  • installer\build.bat — added the missing SentinelAutoRotate publish step that setup.iss requires, fixing the Inno Setup "Source file ... SentinelAutoRotate.exe does not exist" compile abort.

Validation and limits

  • Agent and full solution build clean (0 warnings, 0 errors); the embedded script parses with 0 errors and ships inside the installer. In-process hosting was exercised directly (scan loop ran, no child powershell.exe, no background jobs).
  • The end-to-end effect on an installed service — a full scan cycle with no QUARANTINED ... Sentinel.Service.exe / HARD DELETING ... Sentinel.Agent.exe lines in C:\ProgramData\Antivirus\av.log — remains a post-install Windows validation step.

Installer: SentinelSetup-3.1.7.exe (framework-dependent, requires .NET Framework 4.8). Run as administrator to upgrade over an existing install.

Sentinel 3.1.6

Choose a tag to compare

@psihijatrija psihijatrija released this 15 Oct 05:01

Sentinel 3.1.6

Changed

  • Removed Rules.DefenseTamper.cs stub (tombstone comment file left over from v3.1.5 decision to drop the anti-tamper rule). No functional change.
  • Version stamp 3.1.5 → 3.1.6.

Fixed

  • Ransomware detections were silently demoted to Tier2 (LogOnly). RansomwareDetectionRule
    emitted SignalType.Ransomware at Tier1Behavioral, but ResponsePolicy.ClassifyTerminalOutcome
    had no case for SignalType.Ransomware and no matching fragment in TerminalOutcomes. The signal
    fell through to NonKillGrade and was unconditionally downgraded to Tier2 / LogOnly by
    ApplyTierLaw. A fast locker (LockBit, BlackCat, Ryuk) deleting shadow copies would be logged
    but not killed. Fixed by:

    • Adding TerminalFamily.Ransomware to the enum and KillGrade set in TerminalFamily.cs.
    • Adding a SignalType.Ransomware case to the ClassifyTerminalOutcome switch (authoritative,
      no substring scan required).
    • Adding a "Ransomware" entry to TerminalOutcomes covering vssadmin / wmic / wbadmin /
      bcdedit patterns so composite/rule-name-based paths also classify correctly.
    • All detections in RansomwareDetectionRule now declare Family = TerminalFamily.Ransomware.
  • Ransomware pre-encryption pattern coverage expanded. Rules.Ransomware.cs previously only
    detected vssadmin delete shadows and three file extensions. Expanded to cover the full
    pre-encryption playbook used by LockBit, BlackCat, Ryuk, Hive, Conti, WannaCry, etc.:

    • Shadow copy deletion: vssadmin delete shadows, wmic shadowcopy delete, wbadmin delete catalog, wbadmin delete systemstatebackup.
    • Boot recovery disable: bcdedit /set recoveryenabled no, bcdedit /set safeboot.
    • ~60 named ransomware file extensions (.lockbit, .ryuk, .hive, .blackcat, .clop,
      .revil, .conti, .maze, .wannacry, .darkside, .egregor, .phobos, .stop, etc.)
      plus generic locker suffixes.
    • Ransom note creation detection (README, DECRYPT, HOW_TO_DECRYPT, HOW_TO_RESTORE, … prefixes).
  • Raw disk access detections were silently demoted to Tier2 (LogOnly). RawDiskAccessMonitor
    emitted unsigned PhysicalDrive handle holders with Tier1Behavioral / KillProcessTree but
    SignalType = SuspiciousProcess — which is not in KillGradeTerminalFamilies. ApplyTierLaw
    demoted the event to Tier2 / LogOnly, letting a wiper process (HermeticWiper, CaddyWiper,
    WhisperGate) continue overwriting MBR/sectors. Fixed by declaring
    Family = TerminalFamily.RawDiskAccess on kill-grade events (confidence ≥ 0.85), making
    ClassifyTerminalFamily authoritative without substring scanning. Volume-root-only handles
    (trusted backup tools, signed binaries) remain Tier2 / LogOnly unchanged.
    Added "RawDiskAccess" entry to TerminalOutcomes for composite/rule-name path consistency.

Changed

  • TerminalFamily.cs: added Ransomware and RawDiskAccess families; both are KillGrade.
  • ResponsePolicy.cs: added Ransomware and RawDiskAccess TerminalOutcomes blocks;
    wired SignalType.Ransomware in ClassifyTerminalOutcome switch.
  • Version stamp 3.1.4 → 3.1.5.

Fixed

  • forum.hr remained blocked on existing installs after v3.1.3. The v3.1.3 change only
    removed forum.hr from DefaultSeedDomains, preventing it from being re-seeded on fresh
    installs. However, existing machines already had it written into blocklist-domains.cache
    from the original v2.8.7 seed, and Load() simply read it back on every restart. Added a
    RetiredSeedDomains eviction pass at the end of Load(): any domain in that set is removed
    from the in-memory blocklist and the cache is re-saved, so the entry is gone permanently after
    the first service restart following this update.
  • HostsFileGuard retired domain blocks cleanup. Added RetiredDomainBlocks ("forum.hr")
    to HostsFileGuard: automatically removes stale NRPT wildcard rules (matching by GUID or domain)
    and cleans hosts-file sinkhole lines on service startup and periodic checks. Also signals Dnscache
    via paramchange and flushes DNS resolver cache so resolution is restored immediately. No user
    action required.

Changed

  • Version stamp 3.1.3 -> 3.1.4.

Sentinel 3.1.5

Choose a tag to compare

@psihijatrija psihijatrija released this 15 Oct 04:59

Sentinel 3.1.5

Fixed

  • Ransomware detections were silently demoted to Tier2 (LogOnly). RansomwareDetectionRule
    emitted SignalType.Ransomware at Tier1Behavioral, but ResponsePolicy.ClassifyTerminalOutcome
    had no case for SignalType.Ransomware and no matching fragment in TerminalOutcomes. The signal
    fell through to NonKillGrade and was unconditionally downgraded to Tier2 / LogOnly by
    ApplyTierLaw. A fast locker (LockBit, BlackCat, Ryuk) deleting shadow copies would be logged
    but not killed. Fixed by:

    • Adding TerminalFamily.Ransomware to the enum and KillGrade set in TerminalFamily.cs.
    • Adding a SignalType.Ransomware case to the ClassifyTerminalOutcome switch (authoritative,
      no substring scan required).
    • Adding a "Ransomware" entry to TerminalOutcomes covering vssadmin / wmic / wbadmin /
      bcdedit patterns so composite/rule-name-based paths also classify correctly.
    • All detections in RansomwareDetectionRule now declare Family = TerminalFamily.Ransomware.
  • Ransomware pre-encryption pattern coverage expanded. Rules.Ransomware.cs previously only
    detected vssadmin delete shadows and three file extensions. Expanded to cover the full
    pre-encryption playbook used by LockBit, BlackCat, Ryuk, Hive, Conti, WannaCry, etc.:

    • Shadow copy deletion: vssadmin delete shadows, wmic shadowcopy delete, wbadmin delete catalog, wbadmin delete systemstatebackup.
    • Boot recovery disable: bcdedit /set recoveryenabled no, bcdedit /set safeboot.
    • ~60 named ransomware file extensions (.lockbit, .ryuk, .hive, .blackcat, .clop,
      .revil, .conti, .maze, .wannacry, .darkside, .egregor, .phobos, .stop, etc.)
      plus generic locker suffixes.
    • Ransom note creation detection (README, DECRYPT, HOW_TO_DECRYPT, HOW_TO_RESTORE, … prefixes).
  • Raw disk access detections were silently demoted to Tier2 (LogOnly). RawDiskAccessMonitor
    emitted unsigned PhysicalDrive handle holders with Tier1Behavioral / KillProcessTree but
    SignalType = SuspiciousProcess — which is not in KillGradeTerminalFamilies. ApplyTierLaw
    demoted the event to Tier2 / LogOnly, letting a wiper process (HermeticWiper, CaddyWiper,
    WhisperGate) continue overwriting MBR/sectors. Fixed by declaring
    Family = TerminalFamily.RawDiskAccess on kill-grade events (confidence ≥ 0.85), making
    ClassifyTerminalFamily authoritative without substring scanning. Volume-root-only handles
    (trusted backup tools, signed binaries) remain Tier2 / LogOnly unchanged.
    Added "RawDiskAccess" entry to TerminalOutcomes for composite/rule-name path consistency.

Changed

  • TerminalFamily.cs: added Ransomware and RawDiskAccess families; both are KillGrade.
  • ResponsePolicy.cs: added Ransomware and RawDiskAccess TerminalOutcomes blocks;
    wired SignalType.Ransomware in ClassifyTerminalOutcome switch.
  • Version stamp 3.1.4 → 3.1.5.

Fixed

  • forum.hr remained blocked on existing installs after v3.1.3. The v3.1.3 change only
    removed forum.hr from DefaultSeedDomains, preventing it from being re-seeded on fresh
    installs. However, existing machines already had it written into blocklist-domains.cache
    from the original v2.8.7 seed, and Load() simply read it back on every restart. Added a
    RetiredSeedDomains eviction pass at the end of Load(): any domain in that set is removed
    from the in-memory blocklist and the cache is re-saved, so the entry is gone permanently after
    the first service restart following this update.
  • HostsFileGuard retired domain blocks cleanup. Added RetiredDomainBlocks ("forum.hr")
    to HostsFileGuard: automatically removes stale NRPT wildcard rules (matching by GUID or domain)
    and cleans hosts-file sinkhole lines on service startup and periodic checks. Also signals Dnscache
    via paramchange and flushes DNS resolver cache so resolution is restored immediately. No user
    action required.

Changed

  • Version stamp 3.1.3 -> 3.1.4.

Sentinel 3.1.4

Choose a tag to compare

@psihijatrija psihijatrija released this 14 Oct 12:34

Sentinel 3.1.4

Fixed

  • forum.hr remained blocked on existing installs after v3.1.3. The v3.1.3 change only
    removed forum.hr from DefaultSeedDomains, preventing it from being re-seeded on fresh
    installs. However, existing machines already had it written into blocklist-domains.cache
    from the original v2.8.7 seed, and Load() simply read it back on every restart. Added a
    RetiredSeedDomains eviction pass at the end of Load(): any domain in that set is removed
    from the in-memory blocklist and the cache is re-saved, so the entry is gone permanently after
    the first service restart following this update. No user action required.

Changed

  • Version stamp 3.1.3 -> 3.1.4.