Forensics
Remotely trigger forensic artifact collection on an EDR-managed endpoint, then review the returned processes, network connections, startup items, scheduled tasks, recent files and event logs. The in-app page is titled Digital Forensics.
/forensicsHow forensics collection works
OverviewThe Forensics page is a two-pane console. The left pane lists every forensics collection (a report) for your organization; selecting one opens the collected artifacts in the right pane. The header summarises how many collections exist and how many threat indicators were flagged across them.
The collection handshake
A collection is not gathered by the web app directly — it is queued for the endpoint agent to run:
- You pick a target agent and start a collection. The server creates a
ForensicsReportwith statuspendingand queues anEndpointCommandnamedcollect-forensicscarrying the new report's id. - The agent picks up the command on its next heartbeat (the UI states this happens within about 30 seconds) and gathers the artifacts on the host.
- The agent posts the collected data back; the report flips to
complete, stores the artifacts, and records acollectedAttimestamp.
Report status
| Status | Meaning in the UI |
|---|---|
pending | Command queued, waiting for the agent to pick it up |
collecting | Agent is actively gathering artifacts (animated progress) |
complete | Artifacts returned and viewable |
failed | Agent offline or the command timed out |
Live refresh
The report list re-fetches every 15 seconds. When you have a still-collecting report open, that report is polled every 5 seconds until it finishes, so the view updates itself without a manual reload.
Reports are scoped to your organization. The agent list that populates the target picker is drawn from your EDR fleet, and only agents that are not currently offline appear as selectable options.
Collecting artifacts from an endpoint
How to useClick Collect Artifacts to open the collection dialog.
Starting a collection
- Target Agent (required) — choose a host from the dropdown of online agents (each shows hostname, platform and status). If no agents are online, the field becomes a free-text input for a hostname or IP.
- Reason / Trigger (optional) — a note such as a detection name or incident id. If left blank the collection is recorded as
manual. - Click Start Collection. The command is queued and a new report appears in the list.
Artifacts the dialog lists
The dialog shows the categories that a collection is expected to return:
- Running processes + command lines
- Active network connections
- Autorun / startup entries
- Scheduled tasks
- Recently modified files (labelled "24h")
- Security event logs (labelled "7 days")
Reviewing a report
- Each report card shows the hostname, who or what triggered it, the status, a process/connection count, a threat count when indicators are present, and a relative timestamp.
- Selecting a completed report opens the artifact viewer, with collapsible sections per artifact category. Sections containing flagged items open automatically.
- Export JSON downloads the raw collected data as a
.jsonfile named for the host. - Delete (on the card or in the detail header) removes the report. The removal is optimistic and rolls back if the server rejects it.
Artifact sections & threat highlighting
ReferenceWhen a report is complete, the viewer renders whichever of these sections the agent returned. Empty sections are hidden.
| Section | Fields shown |
|---|---|
| System Information | Key/value pairs (opens by default) |
| Running Processes | PID, name, user, CPU/memory, command line / path |
| Network Connections | Protocol, local address, remote address, state, process |
| Startup / Autorun Entries | Name, command, location |
| Scheduled Tasks | Name, status, next run, action |
| Recently Modified Files | Path, modified time, size |
| Security Event Logs | Event id, level, message, time |
If the agent returns only a raw text blob instead of structured sections, it is shown verbatim in a fallback panel.
Threat indicators
The viewer applies client-side heuristics to surface likely-malicious artifacts. Matching processes and connections are highlighted in red and summarised in a "Threat Indicators Found" banner at the top of the report.
- Suspicious processes — a process name containing any of:
mimikatz,meterpreter,cobalt,empire,lazagne,bloodhound,psexec,netcat,ncat,socat,chisel,ligolo. - C2 connections — a network connection whose remote port is one of: 4444, 4445, 1234, 5555, 6666, 7777, 8888, 9999, 31337, 1337, 2222, 6667.
These indicators are presentation-layer flags computed in the browser from the returned artifacts — they highlight and count matches for triage, and do not change what the agent collected.
API endpoints
ReferenceThe page is backed by two route files. Analyst-facing calls use your logged-in session; the artifact submission path is authenticated by the agent's own token.
| Method & path | Auth | Purpose |
|---|---|---|
POST /api/forensics/collect | User session | Queue a collection for an agent (by hostname or agentId, org-scoped). Creates the report and the collect-forensics command. |
GET /api/forensics/reports | User session | List up to 50 reports for your org, newest first, with parsed artifact data. |
POST /api/forensics/reports | Agent token | Agent submits collected data for a report it owns; marks it complete. |
DELETE /api/forensics/reports?id= | User session | Delete one report (must belong to your org). |
Queue a collection
curl -X POST https://app.guardfox.example/api/forensics/collect \
-H "Content-Type: application/json" \
-b "next-auth.session-token=" \
-d '{ "hostname": "WORKSTATION-07", "triggeredBy": "Suspicious process detected" }'
# → { "reportId": "...", "status": "pending",
# "message": "Collection command queued. Agent will collect on next heartbeat." } List reports
curl https://app.guardfox.example/api/forensics/reports \
-b "next-auth.session-token="
# → { "reports": [ { "id": "...", "hostname": "WORKSTATION-07",
# "triggeredBy": "manual", "status": "complete",
# "data": { "processes": [...], "network": [...] },
# "collectedAt": "...", "createdAt": "..." } ] } The ForensicsReport record stores id, agentId, hostname, triggeredBy (manual / soar / auto), status, the collected artifacts (dataJson), collectedAt, createdAt and the owning organizationId.