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.1.0.tar.gz (71.0 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.1.0-py3-none-any.whl (64.9 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for ghostcanary-0.1.0.tar.gz
Algorithm Hash digest
SHA256 b189ee9292f0a327fd04a1106dc469df0faef01cac05854cc72db8b768f760be
MD5 dd4caf1248484c8c9600c51855c38b2b
BLAKE2b-256 41a5091ff22e1da6344e6ba389b86af01f955df9f4111c7355397444f27240ff

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ghostcanary-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 64.9 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.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 51a09c04075e666696ce001ca11c8aaeb43021f0d267a35440dc35e6d5d3e843
MD5 61e6dbdd2bc653475fbc217943de24a9
BLAKE2b-256 660e3b8c30517ddf5714ecfc99e3323f70d621d5cddb9cc474a94db6d21f0c54

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