Skip to main content

Endpoint security monitor — watches your system and screams when something changes.

Project description

ghostcanary

Endpoint security monitor. Watches your system and screams when something changes.

A loud, visible desktop canary. Not an EDR. Not a blocker. Just a watcher that talks.

What It Monitors

  • Kernel drivers - new loads, disappearances
  • Windows services - new services, state changes
  • Processes - new process names, suspicious parent-child relationships, encoded PowerShell, download cradles
  • Network connections - new outbound destinations, new listening ports, connection spikes, beaconing detection
  • DNS cache - new resolutions, suspicious/DGA-like domains
  • Registry autoruns - Run/RunOnce key changes
  • Scheduled tasks - new tasks, removed tasks
  • File system - new executables in monitored paths, startup folder modifications, System32 changes
  • DLLs - unusual load paths, unsigned DLLs in signed processes
  • Named pipes - new pipe creation (common C2 channel)
  • WMI subscriptions - event subscription creation
  • COM objects - hijack detection
  • Event logs - gaps, cleared logs

Cross-platform: Windows (full support), Linux and macOS (core monitoring via psutil fallback).

Install

pip install ghostcanary

With desktop UI support (Pillow for mascot images):

pip install ghostcanary[ui]

With all optional dependencies (psutil for deeper process/network monitoring):

pip install ghostcanary[full]

Quick Start

Run the scanner

ghostcanary-scan                    # Continuous scanning (30s interval)
ghostcanary-scan --interval 10      # Faster scanning
ghostcanary-scan --once             # Single scan and exit
ghostcanary-scan --list-logs        # List monitored Windows Event Logs

Run the desktop UI

ghostcanary-ui                      # Floating desktop mascot with speech bubbles
ghostcanary-ui --test               # Show a test bubble and exit

Run the daemon (manages scanner + UI)

ghostcanary-daemon run              # Start both scanner and UI, auto-restart on crash
ghostcanary-daemon install          # Add to Windows startup (requires admin)
ghostcanary-daemon uninstall        # Remove from Windows startup
ghostcanary-daemon status           # Check if running/installed
ghostcanary-daemon stop             # Stop the daemon

How It Works

  1. Edge Parser scans system surfaces on a configurable interval
  2. Compares current state against a SQLite-backed baseline
  3. Emits typed signals with severity levels (INFO, WARN, ALERT, CRITICAL)
  4. Canary UI picks up signals and displays speech bubbles on your desktop
  5. Notification Center provides filterable history of all signals

No inference. No correlation. No blocking. Just facts.

Configuration

On first run, a config.yaml is created in the package directory with defaults. Key sections:

  • scan - interval, parallel workers
  • baseline - aging, frequency tracking, anomaly threshold
  • network - spike detection, beaconing parameters
  • beaconing - trusted processes/destinations, scoring thresholds
  • process - suspicious parent/child relationships
  • alert - sound, snooze, rate limiting
  • ui - color mode, theme

Using as a Library

import ghostcanary

# Check version
print(ghostcanary.__version__)

# Access signal types
print(ghostcanary.SignalTypes.NEW_KERNEL_DRIVER)

# Create a signal
sig = ghostcanary.Signal.create(
    signal_type=ghostcanary.SignalTypes.NEW_KERNEL_DRIVER,
    source_surface="CustomMonitor",
    artifacts={"name": "suspicious.sys"},
    severity=ghostcanary.Severity.CRITICAL,
    category=ghostcanary.Category.KERNEL,
)

# Store in the signals database
db = ghostcanary.get_signals_db()
db.store(sig)

# Query signals
recent = db.get_recent(limit=10)

Signal Flow

System State (drivers, services, processes, network, ...)
    |
    v
Edge Parser (scan surfaces, compare baseline, emit signals)
    |
    v
signals.json (file-based queue) + signals.db (SQLite history)
    |
    v
Canary UI (poll queue, translate signal, show bubble)

Design Principles

  1. No inference - only detects changes, never interprets them
  2. No correlation - each surface is independent
  3. No blocking - observes, never prevents
  4. Local only - everything stays on this machine
  5. Expendable - raw logs exist elsewhere, these files can be deleted
  6. Visible - canary is always on screen, not hidden
  7. Loud - every signal gets a bubble
  8. Factual - dry tone, no alarm, no "attack" language

License

MIT

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ghostcanary-0.2.0.tar.gz (73.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ghostcanary-0.2.0-py3-none-any.whl (68.3 kB view details)

Uploaded Python 3

File details

Details for the file ghostcanary-0.2.0.tar.gz.

File metadata

  • Download URL: ghostcanary-0.2.0.tar.gz
  • Upload date:
  • Size: 73.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for ghostcanary-0.2.0.tar.gz
Algorithm Hash digest
SHA256 6667a68944ab81a373bdf2cdfc1c97e251f1983f23bf6906056bad29a1b4f3d0
MD5 d7a86be7e16e081f6069ca278ffe136e
BLAKE2b-256 31703fa8ccbf573447be09330b00faa8e814212e644be9b361e821afea18efff

See more details on using hashes here.

File details

Details for the file ghostcanary-0.2.0-py3-none-any.whl.

File metadata

  • Download URL: ghostcanary-0.2.0-py3-none-any.whl
  • Upload date:
  • Size: 68.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.10

File hashes

Hashes for ghostcanary-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9b6d803c52165b59c2e8d26715d33928d107d8844c78a15560579047c1fe33bc
MD5 b3a4e10dab3a2297215318fc8d1e142e
BLAKE2b-256 68f9c6ba44cbe0d7295809bda1c39f04fd46b30388f3b828635fce4171e0e19c

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page