S
hanzo@bushidocyber ~ % man salient

Salient

A common operational picture for the network domain — built passively from Zeek telemetry a hunt team already has. Salient turns observed traffic into a scored dependency graph and a ranked Mission Relevant Terrain-Cyber report: what's out there, what depends on what, and what matters most — with the evidence behind every ranking.

MRT-C Mapping GoElasticsearchZeekWails

The north star: know the terrain fast

Dropped into an unfamiliar network, a hunt team's biggest cost is time — figuring out what actually matters before an active scan tips off an adversary or trips something fragile. Salient exists to build that picture without touching the grid. It connects read-only to Elasticsearch, aggregates existing Zeek telemetry, and turns observed traffic into a scored dependency graph and a ranked key-terrain report.

The map is a criticality view of observed dependency terrain, not a network diagram — node size and heat emphasize the systems whose compromise or loss would matter most. A declared-device topology layout remains available as an optional cross-check, but it isn't the primary view. The desktop console is a single native window on Linux, macOS, or Windows: connect, scan, browse snapshots, investigate evidence, and export — no active scanning, no change to the deployment being operated on.

Key-terrain scoring

Salient ranks key terrain from observed dependency traffic, not labels or icon size. Each rank is a composite of four weighted axes, min-max normalized within the snapshot:

40% Critical dependents

  • Distinct hosts depending
  • on auth, DNS, file, or DB

25% PageRank

  • Dependency centrality
  • auth/DNS edges weigh 3×

20% Betweenness

  • Chokepoint value
  • paths passing through the node

15% Subnet spread

  • Client-subnet reach
  • how widely a node is depended on

Invalid terrain artifacts — multicast, broadcast, loopback, link-local — are excluded from the composite. Collapsed device nodes inherit their strongest member's rank, and the console's Key Terrain drawer leads with the top-ranked systems and their score-driver evidence.

Same evidence, a second lens: rogue services

The same telemetry that ranks key terrain can expose who shouldn't be providing a service at all. Salient infers the services hosts actually provide, flags systems and roles that contradict the asset inventory, and highlights newly appeared hosts, roles, and service dependencies across snapshots.

  • Drift comparison — pick any older snapshot as a baseline and see what appeared, vanished, changed role or rank, or began providing new service dependencies, down to new DNS/DHCP/auth/file/database providers at any terrain rank, not just newcomers to the top.
  • Asset reconciliation — load an inventory CSV and see undocumented hosts, documented-but-silent assets, and role contradictions flagged directly on the map.
  • Hunt Leads — an auto-prioritized investigation queue of undocumented hosts, contradicted roles, and new or displaced service providers, each with the evidence behind it and a one-click copy of the matching query; approve a lead to suppress it as expected/benign going forward.

These are investigation leads backed by observed behavior, not automatic declarations of malicious intent — the operator determines whether a change is expected or hostile.

The operator console

  • Connect & discover — Elasticsearch connection with API key, CA certificate, and custom field map; automatic grid discovery at connect surfaces observed datasets, missing-dataset warnings, and sensors before a scan window is spent.
  • Live scans — configurable window, scope CIDRs, and timezone, with live progress and cancellation.
  • Per-host evidence — ~110 recognized services across the full Active Directory protocol set plus UniFi, Cisco, Aruba, Meraki, and Juniper gear; observed MAC and decoded OUI vendor per node; network-gear detection promotes controller/switch/AP-only protocol hosts to the core tier.
  • Device identity — link multiple IPs (a router across several VLANs) into one named device; hostname- and MAC-based hints suggest links, the operator confirms.
  • Role correction — right-click Set role… overrides a wrong inference; the correction is marked ✎ and the original inference stays visible alongside it.
  • Aggregate & flow drill-in — click an "N other hosts" node or a bundled flow arrow to open a filterable host list with rank, role, services, device, MAC, and vendor.
  • Segment-flow overview — large maps condense into one box per VLAN with top hosts shown and the rest behind an "N more hosts" chip; click a segment to drill into full detail.
  • Export — PNG of the exact on-screen layout, plus self-contained HTML and GraphML.

Optional AI device tagging

The console can suggest device tags from communication patterns in a stored snapshot — OpenAI-compatible chat completions, Anthropic Messages, or Gemini GenerateContent endpoints, including local Llama servers and compatible Ask Sage or GenAI.mil routes. Only capped node and edge summaries are sent, never raw Zeek events or Elasticsearch credentials.

Operator-confirmed facts — device names, role corrections, durable labels — ride along as ground truth the model must not contradict. Suggestions land separately from observed evidence: accept tags promotes them to durable labels that survive rescans, dismiss hides them permanently.

Security model

  • Read-only, always — Salient never changes grid configuration, indices, or documents.
  • No CDN, no telemetry — runtime assets are bundled locally; the CLI is a static binary and the console uses the OS's native webview.
  • Keys stay in memory — Elasticsearch and model API keys are never written to disk.
  • Local-only writes — the console writes only local snapshots, reports, maps, and operator-selected exports; on POSIX systems, managed artifacts use 0600 files in 0700 directories.
  • Egress is explicit — remote model endpoints require HTTPS and an explicit network-data-egress acknowledgement.

Terrain artifacts expose network dependencies and critical systems — protect them at the classification and handling level of the network they describe.

Get it running

The desktop console is the primary interface, built with Go and Wails. Clone it, install the pinned dependencies, and build:

git clone https://github.com/BushidoCyb3r/salient.git
cd salient
make gui-deps
make gui

Linux additionally needs libwebkit2gtk-4.1-dev / webkit2gtk4.1-devel and gtk3. A CLI remains available for automation, drift analysis, and reconciliation without the GUI — see the README for the first-connection walkthrough and read-only Elasticsearch API-key setup.

S

Map the terrain before you touch it

Salient is free and open source. Point it at telemetry your grid already has and get ranked key terrain, dependency evidence, and hunt leads before you run a single active scan.