Skip to content

SIGINT forensics platform for wireless analysis Professional SIGINT forensics & wireless network analysis platform with PostGIS spatial correlation, real-time surveillance detection, and interactive geospatial visualization. Built with TypeScript, React, PostgreSQL for security researchers.with PostGIS

License

Notifications You must be signed in to change notification settings

cyclonite69/shadowcheck

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

πŸ›‘οΈ ShadowCheck

SIGINT Forensics Platform for Wireless Analysis

GitHub Stars GitHub Forks GitHub Issues License

TypeScript React PostgreSQL PostGIS Docker

A professional-grade SIGINT forensics and analysis platform for wireless network data with advanced spatial correlation, real-time monitoring, and comprehensive surveillance detection.

πŸš€ Quick Start β€’ πŸ“– Documentation β€’ 🀝 Contributing β€’ ⭐ Star this repo


🌟 Why ShadowCheck?

ShadowCheck transforms raw wireless capture data into actionable intelligence through powerful spatial analysis and intuitive visualizations. Built for security researchers, forensic analysts, and SIGINT professionals who need enterprise-grade tools for wireless network investigation.

✨ Key Features

πŸ—ΊοΈ Geospatial Intelligence

  • PostGIS-powered spatial indexing and queries
  • Interactive Mapbox visualizations
  • Radius search and geo-fencing
  • Multi-radio tracking (WiFi, BLE, Cellular)

πŸ” Advanced Analytics

  • Surveillance pattern detection
  • Network behavior analysis
  • Signal strength correlation
  • Temporal tracking and timelines

🎯 Data Enrichment

  • WiGLE API integration
  • MAC vendor lookup (300K+ OUIs)
  • Automated geolocation tagging
  • Multi-source data federation

πŸ›‘οΈ Enterprise Ready

  • Docker-based deployment
  • Prometheus + Grafana monitoring
  • Centralized logging (Loki)
  • RESTful API architecture

πŸ“Έ Screenshots

Interactive Geospatial Map

Real-time network visualization with clustering and signal range indicators

Analytics Dashboard

Comprehensive metrics, security analysis, and temporal patterns

Surveillance Detection

Automated threat detection and behavioral analysis

Note: Add screenshots to docs/images/ directory for maximum visual impact!


πŸš€ Quickstart (Docker Compose)

Get ShadowCheck running in under 5 minutes:

# 1. Clone the repository
git clone https://github.com/cyclonite69/shadowcheck.git
cd shadowcheck

# 2. Configure environment
cp .env.example .env
# Edit .env with your secure passwords

# 3. Start all services
docker compose up --build

# 4. Access the platform
# Frontend:  http://localhost:3001
# Grafana:   http://localhost:3000
# API:       http://localhost:5000

⚑ That's it! Your SIGINT platform is now running with:

  • PostgreSQL 18 + PostGIS spatial database
  • Real-time monitoring (Prometheus + Grafana)
  • Centralized logging (Loki + Promtail)
  • Full-featured React frontend

πŸ“‹ Table of Contents


πŸ—οΈ Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                     ShadowCheck Platform                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚                                                               β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”      β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚   React UI   │─────▢│  Express API │─────▢│ PostgreSQLβ”‚ β”‚
β”‚  β”‚   (Vite)     β”‚      β”‚  TypeScript  β”‚      β”‚  + PostGISβ”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜      β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β”‚         β”‚                      β”‚                     β”‚        β”‚
β”‚         β”‚              β”Œβ”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”          β”‚        β”‚
β”‚         β”‚              β”‚  Data Pipelines β”‚          β”‚        β”‚
β”‚         β”‚              β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€          β”‚        β”‚
β”‚         β”‚              β”‚ β€’ KML Import    β”‚          β”‚        β”‚
β”‚         β”‚              β”‚ β€’ Kismet CSV    β”‚          β”‚        β”‚
β”‚         β”‚              β”‚ β€’ WiGLE API     β”‚          β”‚        β”‚
β”‚         β”‚              β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜          β”‚        β”‚
β”‚         β”‚                                            β”‚        β”‚
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β–Όβ”€β”€β”€β”€β”€β”€β” β”‚
β”‚  β”‚          Monitoring & Observability Stack              β”‚ β”‚
β”‚  β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€ β”‚
β”‚  β”‚  Prometheus β”‚ Grafana β”‚ Loki β”‚ AlertManager           β”‚ β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Tech Stack

Component Technology Purpose
Frontend React + TypeScript + Vite Modern, responsive UI
Backend Node.js + Express RESTful API server
Database PostgreSQL 18 + PostGIS Spatial data storage
Mapping Mapbox GL JS Interactive visualizations
Monitoring Prometheus + Grafana Metrics and dashboards
Logging Loki + Promtail Centralized log aggregation
Container Docker + Docker Compose Deployment orchestration

πŸ’» Installation

Docker Deployment (Recommended)

Requirements:

  • Docker 20.10+
  • Docker Compose 2.0+
  • 4GB+ RAM
  • 10GB+ disk space

Step-by-step:

  1. Clone and configure:
git clone https://github.com/cyclonite69/shadowcheck.git
cd shadowcheck
cp .env.example .env
  1. Set secure passwords in .env:
POSTGRES_PASSWORD=your_secure_postgres_password_here
GRAFANA_PASSWORD=your_secure_grafana_password_here
PGADMIN_PASSWORD=your_secure_pgadmin_password_here  # Optional
  1. Launch services:
# Core services
docker compose up -d

# With pgAdmin (database management UI)
docker compose --profile admin up -d
  1. Verify deployment:
docker compose ps
docker compose logs -f backend
  1. Access interfaces:

Manual Local Setup

Click to expand manual installation guide

Prerequisites:

  • Node.js 18+
  • PostgreSQL 14+ with PostGIS
  • npm/pnpm/yarn

Backend Setup:

cd server
npm install
cp .env.example .env
# Configure DATABASE_URL in .env
npm run dev

Frontend Setup:

cd client
npm install
cp .env.example .env
# Configure VITE_API_URL in .env
npm run dev

Database Setup:

-- Create user and database
CREATE USER shadowcheck_user WITH PASSWORD 'secure_password';
CREATE DATABASE shadowcheck OWNER shadowcheck_user;

-- Connect and enable PostGIS
\c shadowcheck
CREATE EXTENSION IF NOT EXISTS postgis;
CREATE EXTENSION IF NOT EXISTS postgis_topology;
CREATE EXTENSION IF NOT EXISTS pg_trgm;

-- Apply schema
\i schema/migration.sql

βš™οΈ Configuration

Environment Variables

All configuration is managed through environment files. Never commit .env to version control.

Required Variables:

# Database
POSTGRES_PASSWORD=strong_unique_password_32_chars_min
DATABASE_URL=postgresql://shadowcheck_user:${POSTGRES_PASSWORD}@localhost:5432/shadowcheck

# Monitoring
GRAFANA_PASSWORD=strong_unique_password_for_grafana

# Optional: Database Admin UI
PGADMIN_PASSWORD=strong_unique_password_for_pgadmin

# Optional: Mapbox (for enhanced mapping)
MAPBOX_TOKEN=your_mapbox_public_token_here

Security Best Practices

  • βœ… Use 32+ character passwords with mixed case, numbers, and symbols
  • βœ… Different passwords for each service
  • βœ… Use secrets manager in production (AWS Secrets, Vault, etc.)
  • βœ… Enable TLS/HTTPS for all external connections
  • βœ… Restrict database access to localhost or VPN
  • βœ… Regular security updates and dependency scanning

πŸ”§ Usage & API

REST API Endpoints

ShadowCheck exposes a comprehensive RESTful API:

System Health

GET /api/v1/health          # Health check
GET /api/v1/status          # Detailed system status
GET /api/v1/version         # API version info
GET /api/v1/metrics         # System metrics

Network Observations

GET /api/v1/networks        # List all networks (paginated)
GET /api/v1/within          # Spatial radius search
GET /api/v1/visualize       # GeoJSON for mapping

Analytics

GET /api/v1/analytics          # Comprehensive overview
GET /api/v1/security-analysis  # Security breakdown
GET /api/v1/signal-strength    # Signal distribution
GET /api/v1/radio-stats        # Multi-radio statistics
GET /api/v1/timeline           # Temporal patterns

Surveillance Detection

GET /api/v1/surveillance/stats              # Detection statistics
GET /api/v1/surveillance/wifi/threats       # WiFi threat analysis
GET /api/v1/surveillance/location-visits    # Location patterns
GET /api/v1/surveillance/home-following     # Following detection

Access Points

GET /api/v1/access-points              # Detailed AP list
GET /api/v1/access-points/:mac         # Single AP details
GET /api/v1/access-points/:mac/observations  # AP timeline

WiGLE Enrichment

GET /api/v1/wigle/stats            # Enrichment statistics
GET /api/v1/wigle/queue            # Pending enrichments
POST /api/v1/wigle/tag             # Tag networks for enrichment
POST /api/v1/wigle/enrich          # Trigger enrichment

Example Usage

# Spatial query: networks within 500m radius
curl "http://localhost:5000/api/v1/within?lat=43.0234&lon=-83.6968&radius=500"

# Security analysis with filters
curl "http://localhost:5000/api/v1/networks?radio_types=W&min_signal=-70&security_types=Open"

# Surveillance threat detection
curl "http://localhost:5000/api/v1/surveillance/wifi/threats"

πŸ”„ Data Pipelines

ShadowCheck supports multiple ingestion formats:

1. KML Import (Google Earth/Maps)

# Place KML files in pipelines/kml/
# Import via admin UI or API
curl -X POST http://localhost:5000/api/v1/pipelines/kml/import \
  -H "Content-Type: application/json" \
  -d '{"filename": "my_networks.kml"}'

2. Kismet CSV (Wireless IDS)

# Place Kismet CSV exports in pipelines/kismet/
# Automatic detection and import

3. WiGLE CSV (Wardriving data)

# Place WiGLE CSV files in pipelines/wigle/
# Import with geolocation enrichment

4. Live Streaming (Planned)

  • Kismet remote capture
  • Real-time MQTT ingestion
  • Kafka stream processing

πŸ”’ Security & Privacy

ShadowCheck handles sensitive SIGINT data. Security is paramount:

Access Control

  • Role-based access control (RBAC) on all API endpoints
  • JWT authentication with refresh tokens
  • Rate limiting and request throttling
  • IP whitelisting for admin functions

Data Protection

  • Encrypted connections (TLS 1.3+)
  • Encrypted database backups
  • PII scrubbing and anonymization options
  • Audit logging for all data access

Compliance

  • GDPR-compliant data retention policies
  • Configurable data retention periods
  • Export and deletion capabilities
  • Comprehensive audit trails

Best Practices

  1. Always use HTTPS in production
  2. Enable database encryption at rest
  3. Regular security audits and penetration testing
  4. Keep dependencies updated
  5. Monitor for suspicious activity

πŸ“Š Monitoring & Observability

ShadowCheck includes enterprise-grade monitoring:

Grafana Dashboards

  • System Overview: Resource usage, uptime, API performance
  • Database Metrics: Connection pool, query performance, storage
  • Application Metrics: Request rates, error rates, latency
  • Security Dashboard: Failed auth, suspicious patterns

Prometheus Metrics

  • Custom application metrics
  • Database connection pool monitoring
  • API endpoint performance tracking
  • Real-time alerting

Loki Log Aggregation

  • Centralized logging from all containers
  • Log correlation and search
  • Alert triggers on log patterns
  • Long-term log retention

Access monitoring:


🀝 Contributing

We welcome contributions from the community! Here's how to get started:

Ways to Contribute

  • πŸ› Report bugs and issues
  • πŸ’‘ Suggest new features
  • πŸ“ Improve documentation
  • πŸ§ͺ Add tests and improve coverage
  • πŸ”§ Submit bug fixes
  • ✨ Implement new features

Development Workflow

  1. Fork the repository
  2. Clone your fork: git clone https://github.com/YOUR_USERNAME/shadowcheck.git
  3. Create a feature branch: git checkout -b feat/amazing-feature
  4. Make your changes with tests
  5. Commit with clear messages: git commit -m "feat: Add amazing feature"
  6. Push to your fork: git push origin feat/amazing-feature
  7. Open a Pull Request with detailed description

Code Style

  • Follow existing code formatting
  • Use TypeScript for type safety
  • Write meaningful commit messages (conventional commits)
  • Add tests for new features
  • Update documentation as needed

See CONTRIBUTING.md for detailed guidelines.


πŸ—ΊοΈ Roadmap

βœ… Current Release (v1.0)

  • βœ… PostgreSQL + PostGIS spatial database
  • βœ… Interactive Mapbox visualizations
  • βœ… Multi-source data ingestion (KML, CSV)
  • βœ… WiGLE API enrichment
  • βœ… Surveillance pattern detection
  • βœ… Comprehensive monitoring stack

🚧 In Progress

  • πŸ”„ Real-time streaming ingestion (Kafka)
  • πŸ”„ Advanced ML-based threat detection
  • πŸ”„ Multi-tenancy support
  • πŸ”„ Mobile app (React Native)

πŸ“… Planned

  • πŸ“‹ Vector tile support for massive datasets
  • πŸ“‹ 3D visualization with Cesium
  • πŸ“‹ MISP integration for threat intelligence
  • πŸ“‹ Automated PDF report generation
  • πŸ“‹ OAuth2/SAML authentication
  • πŸ“‹ Elasticsearch integration
  • πŸ“‹ Graph database correlation (Neo4j)
  • πŸ“‹ AI-powered anomaly detection

πŸ’­ Under Consideration

  • Signal triangulation algorithms
  • RF spectrum analysis integration
  • Hardware device integration (SDR)
  • Blockchain-based evidence chain

Have ideas? Open an issue or start a Discussion!


πŸ“„ License

This project is licensed under the MIT License - see the LICENSE file for details.

What This Means:

  • βœ… Use for personal and commercial projects
  • βœ… Modify and distribute
  • βœ… Private use
  • ❌ No liability or warranty

πŸ™ Acknowledgements

ShadowCheck is built on the shoulders of giants:

Core Technologies

  • PostgreSQL - World's most advanced open source database
  • PostGIS - Spatial database extender for PostgreSQL
  • React - JavaScript library for building user interfaces
  • TypeScript - JavaScript with syntax for types
  • Vite - Next generation frontend tooling
  • Mapbox GL JS - Interactive maps library
  • Express - Fast, unopinionated web framework
  • Docker - Containerization platform

Monitoring Stack

  • Prometheus - Systems monitoring and alerting
  • Grafana - Analytics and monitoring platform
  • Loki - Log aggregation system

Special Thanks

  • WiGLE.net for wireless network database API
  • Kismet project for wireless IDS inspiration
  • The open-source security research community

πŸ“ž Support & Contact

Get Help

Stay Connected


⭐ Star History

Star History Chart

Made with ❀️ by @cyclonite69

If you find ShadowCheck useful, please consider giving it a ⭐!

Report Bug β€’ Request Feature β€’ Contribute


Built for security researchers, by security researchers.

About

SIGINT forensics platform for wireless analysis Professional SIGINT forensics & wireless network analysis platform with PostGIS spatial correlation, real-time surveillance detection, and interactive geospatial visualization. Built with TypeScript, React, PostgreSQL for security researchers.with PostGIS

Topics

Resources

License

Code of conduct

Contributing

Security policy

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •