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.1

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.1
File Size Uploaded
umbra_osint-0.2.1.tar.gz 890.2 kB Details

Built distribution (wheel)

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

Total release size: 1.7 MB

Release files / umbra_osint-0.2.1.tar.gz

Download URL umbra_osint-0.2.1.tar.gz
Size 890.2 kB
Tags Source
SHA-256 checksum
How to use checksums
cda6a66195a3ee7bd01f4eb9287857f80091c9c4051ee3cd79f5f7bf1bbab6fc
BLAKE2b-256 checksum
How to use checksums
252f06bd7194b1568a4a845ec8eb4186b5186f6c1a0a709c31e42b085ccbfd60
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.1-py3-none-any.whl

Download URL umbra_osint-0.2.1-py3-none-any.whl
Size 776.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
9242a7bfbd8ae5bffafae140a35c952d4949bafeac2466d77d5b74ca0f2ada77
BLAKE2b-256 checksum
How to use checksums
b54a9d7d787d92f4025b0631c1d8c27b0cbc34bf829f2139a1f801c68805141b
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

This release

0.2.1 This release

2 release files

0.2.0

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