Cloud forensic triage — read-only collector, ingester, and analyst console.
Project description
Ventra
Cloud forensic triage — collect, normalize, investigate.
A read-only collector runs in the client's cloud environment, pulls incident-relevant logs and artifacts into a sealed evidence package, and hands off to an offline analyst console. No ongoing access to the client account is required after collection.
Architecture · Evidence Package Format · Operator runbook · Analyst runbook
Overview
Ventra is an open-source toolkit for cloud incident response triage. It is built for IR teams who need a bounded, time-scoped investigation — not a SIEM replacement or a live monitoring platform.
The workflow has three tiers, connected by a single contract: the Evidence Package Format (EPF).
| Tier | Where it runs | Responsibility |
|---|---|---|
| Collector | Client cloud shell (AWS today) | Read-only acquisition, hashing, packaging |
| Ingester | IR workstation | Verify integrity, parse, normalize, load |
| Console | IR workstation or forensic VPC | Case-scoped investigation UI |
┌────────────────┐ sealed .tar.zst ┌────────────────┐ ┌────────────────┐
│ COLLECTOR │ ────────────────► │ INGESTER │ ────► │ CONSOLE │
│ cloud shell │ manifest + hash │ parse/normalize│ query │ analyst GUI │
│ read-only IAM │ │ verify/load │ │ RBAC, offline │
└────────────────┘ └────────────────┘ └────────────────┘
After collection, analysis happens entirely on evidence copies. The console makes no outbound network calls and ships no telemetry.
What you get
AWS collector
Twenty read-only collectors cover the sources IR teams typically need on day one:
- Control plane — CloudTrail, AWS Config, logging posture
- Identity — IAM snapshot, account context, KMS keys, Secrets Manager metadata
- Network & edge — VPC Flow Logs, WAF, ELB/ALB access logs, CloudFront, Route 53 Resolver
- Detections — GuardDuty, Security Hub, Inspector, Macie, Detective
- Workloads — EC2, S3, Lambda, S3 access logs, EKS audit logs
Every source is hashed at acquisition. Disabled or empty log sources are recorded in the manifest as gaps — missing telemetry is treated as evidence.
Review the IAM policy before any engagement:
docs/iam-policies/aws-collector-readonly.json.
Analyst console
Investigation panels map directly to collector output:
| Panel | Focus |
|---|---|
| CloudTrail Timeline | API and control-plane activity |
| Security Findings | GuardDuty, Security Hub, Config, and related detections |
| Identity & Access | IAM users, roles, policies, credential posture |
| Network Activity | VPC flow volume, egress, rejected connections, flow log |
| Web & DNS | Edge access logs, WAF, DNS resolver queries |
| Data Access | S3 object-level access |
| Logs Coverage | What was collected, partial, or missing |
| Resource Inventory | EC2, S3, Lambda, and related inventory |
Role-based access control (Responder, Investigator, Data Custodian, Analyst) is enforced server-side.
Design principles
Ventra follows standard cloud DFIR practice, including AWS guidance on forensic investigation environments:
- Read-only at the source — the collector IAM policy contains no mutating actions; CI enforces this.
- Hash on acquisition — SHA-256 for every artifact before it leaves the account.
- Immutable evidence — packages are sealed; the ingester works on copies only.
- Chain of custody — operator, account, time window, tool version, and invocation are in every manifest.
- Separation of duties — collection and analysis roles are distinct.
- Offline analysis — the console requires no cloud connectivity after ingest.
- Document the gaps — unconfigured or denied log sources are first-class outputs.
Quick start
1. Collect (AWS CloudShell)
# Review the read-only policy first:
# docs/iam-policies/aws-collector-readonly.json
curl -fsSL https://raw.githubusercontent.com/Haggag-22/Ventra/main/bin/install-cloudshell.sh | bash
ventra collect aws \
--case CASE-2026-0042 \
--since 2026-05-01 \
--out ~/ventra-evidence
The installer upgrades to the latest PyPI release on each run. Pin a version for an engagement
with VENTRA_INSTALL_SPEC='ventra==1.0.0'.
Collection produces a compressed evidence package and sidecar integrity files under --out.
Unless --no-ingest is passed, the package is ingested automatically into ./cases.
Full operator steps: docs/runbooks/operator.md.
2. Investigate (IR workstation)
From a repository clone:
cd Ventra
ventra gui
On first run, ventra gui creates a virtual environment, installs Python and Node
dependencies, starts the FastAPI backend and Next.js frontend, and opens the console in your
browser.
You can also import a package from the Cases screen or run ventra-ingest manually.
Full analyst workflow: docs/runbooks/analyst.md.
What Ventra is not
- Not a SIEM — cases are scoped investigations, not always-on log pipelines.
- Not EDR or disk forensics — OS internals, memory, and imaging stay with dedicated tools.
- Not a containment platform — the collector never modifies, isolates, or terminates resources.
- Not long-term storage — Ventra defines the evidence format; retention is the IR team's choice.
Repository layout
bin/ CloudShell install and collection scripts
collector/ Read-only acquisition (Python, boto3)
ingester/ Verify, parse, normalize, load (DuckDB / Parquet)
console/ Analyst UI (FastAPI + Next.js)
schemas/ JSON Schemas — manifest, package, unified event
docs/ EPF spec, IAM policies, runbooks, architecture
deploy/ Reference Terraform for a forensic environment
tests/ Fixtures and unit / integration tests
Collector modules live under collector/aws/ by domain (identity/, control_plane/,
network/, detections/, workloads/). Azure and GCP packages are scaffolded for future
phases and reuse the same EPF and console.
Documentation
| Document | Description |
|---|---|
docs/architecture.md |
Three-tier design and EPF contract |
docs/evidence-package-format.md |
Package structure and integrity |
docs/runbooks/operator.md |
Running the collector |
docs/runbooks/analyst.md |
Console investigation workflow |
docs/runbooks/data-custodian.md |
Case import, export, deletion |
docs/iam-policies/ |
Read-only policies per cloud |
docs/threat-coverage.md |
Detection and log source mapping |
ROADMAP.md |
Planned phases and milestones |
Status
Ventra is under active development. AWS is the supported cloud today. Azure and GCP collectors are planned; the console and ingester are already cloud-agnostic via the unified event schema.
See ROADMAP.md for current phase and upcoming work.
License
Apache-2.0. No telemetry.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file ventra-0.2.0.tar.gz.
File metadata
- Download URL: ventra-0.2.0.tar.gz
- Upload date:
- Size: 665.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
db2de4b3554c28aea25e873b72d29645d812e55a97ed80da8c3ca5dded3adacb
|
|
| MD5 |
09037122bef176f65f0351b1d40fb192
|
|
| BLAKE2b-256 |
f65d97f0983dae96699d3369d95be953ec6ceb9230f04562d914956df2c6b12a
|
Provenance
The following attestation bundles were made for ventra-0.2.0.tar.gz:
Publisher:
publish.yml on Haggag-22/Ventra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ventra-0.2.0.tar.gz -
Subject digest:
db2de4b3554c28aea25e873b72d29645d812e55a97ed80da8c3ca5dded3adacb - Sigstore transparency entry: 1839942340
- Sigstore integration time:
-
Permalink:
Haggag-22/Ventra@858627cb291fae1a6063a2cae35466a7c7c78ad9 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Haggag-22
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@858627cb291fae1a6063a2cae35466a7c7c78ad9 -
Trigger Event:
push
-
Statement type:
File details
Details for the file ventra-0.2.0-py3-none-any.whl.
File metadata
- Download URL: ventra-0.2.0-py3-none-any.whl
- Upload date:
- Size: 106.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d0d3a323f03c8c1d04bb4190ee4cee93b8c1f7376a853534403a8abea46e8f85
|
|
| MD5 |
36db75a5aca6fce6c9aa2b778fcf5415
|
|
| BLAKE2b-256 |
48f5732e0bd5fa63fc9c50da2c693dd7582d48a6bead8b770d8e7f9f4a3ff929
|
Provenance
The following attestation bundles were made for ventra-0.2.0-py3-none-any.whl:
Publisher:
publish.yml on Haggag-22/Ventra
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
ventra-0.2.0-py3-none-any.whl -
Subject digest:
d0d3a323f03c8c1d04bb4190ee4cee93b8c1f7376a853534403a8abea46e8f85 - Sigstore transparency entry: 1839942398
- Sigstore integration time:
-
Permalink:
Haggag-22/Ventra@858627cb291fae1a6063a2cae35466a7c7c78ad9 -
Branch / Tag:
refs/tags/v0.2.0 - Owner: https://github.com/Haggag-22
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@858627cb291fae1a6063a2cae35466a7c7c78ad9 -
Trigger Event:
push
-
Statement type: