Skip to main content

Umbra

Graph-first OSINT for authorized investigations. Umbra connects public data sources into a provenance-backed entity graph, scores confidence, and watches for change — locally, from the command line, with no account and no API keys required for most of it.

Lawful use only. Every case records an authorization_basis for audit. Umbra is passive and defensive: it does not crawl criminal marketplaces, buy stolen data, or provide intrusion capability. Read the acceptable use policy before you start.

pip install umbra-osint
umbra init      # data directory + ethics acknowledgement
umbra doctor    # verify the install before relying on it

The distribution is umbra-osint; the import package and the commands are umbra and umbra-worker.

What it does

umbra intent "example.com"          # free text -> a plan you can review
umbra case create -n acme -b own_asset
umbra run <case-id> -d 1            # collect, pivot, score
umbra profile <case-id>             # markdown profile with provenance
umbra graph <case-id> -o acme.graphml
  • 40 plugin collectors, most of them key-free — DNS, TLS, RDAP, HTTP, Certificate Transparency, git forges, SPARQL, HTML.
  • Entity graph across 21 types: domain, ip, email, url, username, org, person, phone, crypto_address, location, vulnerability, malware, cert, asn, mac, repo, technology, breach, paste, nameserver, registrar.
  • Confidence scoring — multi-factor bands, recomputed after every run, with every claim traceable to the evidence that produced it.
  • Email header analysisumbra email message.eml parses the Received chain, marks where it stops being trustworthy, and judges SPF/DKIM/DMARC alignment from the topmost Authentication-Results only.
  • File ingestumbra <file> takes .eml, IP and entity lists, CSV, JSON, and reads metadata out of images (EXIF), PDFs and Office documents. Nothing is collected until you confirm the plan.
  • Phone reputation — offline validation plus a moderated community report corpus. A number nobody has reported is reported as unreported, never as clean.
  • Crypto screeningumbra crypto screen <address> against an owned OFAC/curated label lake. Offline, no chain API.
  • Owned data lakes — Umbra ingests primary sources it can then query with no external API: Certificate Transparency, the IEEE OUI registry, CISA KEV, the abuse.ch malware feeds, DB-IP GeoIP, and an OSM camera/RF corpus.
  • Cyber wiki — a 3.7k-page corpus with exact-identifier lookup (umbra lookup CVE-2021-44228). CVE coverage is every entry in the CISA Known Exploited Vulnerabilities catalogue — not all published CVEs, which is a deliberate scope choice. umbra epss score CVE-… covers the rest with FIRST's modelled exploitation probability, so "not in KEV" stops meaning "no information".
  • Watchlist monitor — DNS/HTTP snapshots and diffs, cron-friendly.
  • Exports — markdown profile, GraphML, and a full JSON case bundle.
  • Blocklist output — malware domain/IP and adult-content feeds in Pi-hole/AdGuard format, built from the owned lakes.

Local-first: SQLite under ~/.umbra by default, Postgres when you point UMBRA_DATABASE_URL at one.

Honest limits

  • Absence of a finding is not a clean result. When a source is unreachable Umbra says so rather than reporting nothing found — blocklists, certificate logs and vulnerability data are all treated this way, on purpose.
  • DNS blocklists need a local recursive resolver. Queried through a public resolver (1.1.1.1, 8.8.8.8) they refuse the query and answer in a way that looks like a listing for every address. umbra doctor checks this.
  • An owned lake is only as current as its last sync. umbra doctor reports the row count and the age of every corpus, because a stale lake answers "not listed" with total confidence.
  • The hosted web application is not in this package. The CLI is the open core; the hosted product runs at umbra-osint.com.

Requires

Python 3.11+. MIT licensed.

Release files for umbra-osint 0.2.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for umbra-osint 0.2.0
File Size Uploaded
umbra_osint-0.2.0.tar.gz 888.1 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for umbra-osint 0.2.0
File Interpreter ABI Platform
umbra_osint-0.2.0-py3-none-any.whl Python 3 none any Details

Total release size: 1.7 MB

Release files / umbra_osint-0.2.0.tar.gz

Download URL umbra_osint-0.2.0.tar.gz
Size 888.1 kB
Tags Source
SHA-256 checksum
How to use checksums
fb85b717d770b60ef5025112d3fd535a311076cd30f4f33eced953b294b3d7b0
BLAKE2b-256 checksum
How to use checksums
b2317390882bfa4348e6cde92485de281fdee1f8f7cc79252d9294e6d13bcac9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release files / umbra_osint-0.2.0-py3-none-any.whl

Download URL umbra_osint-0.2.0-py3-none-any.whl
Size 776.3 kB
Tags Python 3
SHA-256 checksum
How to use checksums
733963348f3552ed8b1052202ba8c108b99598d747d3841a054166b9490ffd10
BLAKE2b-256 checksum
How to use checksums
f23a5f7dd6cb1b75f4c9982544fada090e802945325210a659366e6bb628ee65
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.11.15

Release history Release notifications | RSS feed

0.2.1

2 release files

This release

0.2.0 This release

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page