feat(harfanglab): v1.3.0 — response & triage expansion (27 commands + alert mappers)

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
2026-07-21 22:33:59 +02:00
parent cba746a9f9
commit 952dc7efda
+301 -2
View File
@@ -1,8 +1,8 @@
id: harfanglab id: harfanglab
name: HarfangLab EDR name: HarfangLab EDR
version: 1.2.2 version: 1.3.0
description: "HarfangLab EDR — endpoint detection & response: alert/threat ingestion, endpoint enrichment, isolation, threat-intelligence (IOC/whitelist), telemetry hunting and forensic collection jobs." description: "HarfangLab EDR — endpoint detection & response: alert/threat ingestion, endpoint enrichment, isolation, threat-intelligence (IOC/whitelist), telemetry hunting and forensic collection jobs."
changelog: "1.2.2 — Documentation wording cleanup. 1.2.1 — Corrected the get_threats OCSF mapper to native threat fields (top_agents/top_impacted_users/top_rules/mitre_tactics) instead of enriched-only arrays; added agent.osversion to get_security_events. 1.2.0 — Added ingestion commands get_security_events (alerts) and get_threats with bundled OCSF mappers and ingest hints (results_path/dedup/incremental). 1.1.1 — Added test_connection for the instance Test button. 1.1.0 — Command names prefixed with 'harfanglab-' (e.g. harfanglab-isolate-endpoint) for easier toolbox search; command IDs unchanged. 1.0.0 — Initial release: endpoint/agent management, isolation, policy assignment, IOC & whitelist management, security-event triage, telemetry hunting (processes, network, DNS, authentications, binaries, event logs), threat hunting by hash, and forensic collection jobs (pipes, prefetch, run keys, scheduled tasks, drivers, services, processes, network, sessions, WMI, IOC scan, artifacts, RAM dump) with their result retrieval commands. Compatible with HarfangLab EDR 2.13.7+." changelog: "1.3.0 — Response & triage expansion: kill/dump process, on-demand AV/YARA scans, file/service/scheduled-task deletion, quarantine management, threat-level isolation, job cancel/relaunch/wait; alert search (get_alerts) and full alert/threat triage (tag, comments, notes, status, level, history, details); exhaustive alert OCSF mappers. 1.2.2 — Documentation wording cleanup. 1.2.1 — Corrected the get_threats OCSF mapper to native threat fields (top_agents/top_impacted_users/top_rules/mitre_tactics) instead of enriched-only arrays; added agent.osversion to get_security_events. 1.2.0 — Added ingestion commands get_security_events (alerts) and get_threats with bundled OCSF mappers and ingest hints (results_path/dedup/incremental). 1.1.1 — Added test_connection for the instance Test button. 1.1.0 — Command names prefixed with 'harfanglab-' (e.g. harfanglab-isolate-endpoint) for easier toolbox search; command IDs unchanged. 1.0.0 — Initial release: endpoint/agent management, isolation, policy assignment, IOC & whitelist management, security-event triage, telemetry hunting (processes, network, DNS, authentications, binaries, event logs), threat hunting by hash, and forensic collection jobs (pipes, prefetch, run keys, scheduled tasks, drivers, services, processes, network, sessions, WMI, IOC scan, artifacts, RAM dump) with their result retrieval commands. Compatible with HarfangLab EDR 2.13.7+."
category: endpoint category: endpoint
# Per-instance configuration. Scripts use <url> as the API base and call /api/... paths. # Per-instance configuration. Scripts use <url> as the API base and call /api/... paths.
@@ -733,6 +733,305 @@ commands:
required: [job_id] required: [job_id]
outputs_schema: { properties: {} } outputs_schema: { properties: {} }
# ── Response: process ─────────────────────────────────────────────────────
- id: kill_process
name: harfanglab-kill-process
description: "Kill processes on an endpoint matching a criterion (name, path, pid, hash, command line...). Destructive: matching processes are terminated. Returns the created job; poll with harfanglab-wait-for-job."
risk: destructive
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
field: { type: string, description: "Criterion field: name, path, username, commandline, parent_name, parent_path, parent_commandline, pid, md5, sha1, sha256 (default name)" }
operator: { type: string, description: "Criterion operator: eq, not_eq, contains, not_contains (default eq)" }
value: { type: string, description: "Criterion value to match" }
required: [agent_id, value]
outputs_schema: { properties: {} }
- id: dump_process
name: harfanglab-dump-process
description: "Dump the memory of processes matching a criterion (same criteria as kill-process). Returns the created job."
risk: safe_write
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
field: { type: string, description: "Criterion field: name, path, username, commandline, parent_name, parent_path, parent_commandline, pid, md5, sha1, sha256 (default name)" }
operator: { type: string, description: "Criterion operator: eq, not_eq, contains, not_contains (default eq)" }
value: { type: string, description: "Criterion value to match" }
required: [agent_id, value]
outputs_schema: { properties: {} }
# ── Response: scans ───────────────────────────────────────────────────────
- id: av_scan
name: harfanglab-av-scan
description: "Start an on-demand antivirus scan on an endpoint (full, quick, or resource with explicit paths). Returns the created job."
risk: safe_write
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
scan_type: { type: string, description: "Scan type: full, quick or resource (default quick)" }
paths: { type: string, description: "Comma-separated paths to scan (required for resource scans)" }
required: [agent_id]
outputs_schema: { properties: {} }
- id: yara_scan
name: harfanglab-yara-scan
description: "Start a YARA scan on an endpoint using named YARA sources. Returns the created job."
risk: safe_write
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
sources: { type: string, description: "Comma-separated YARA source names" }
directories: { type: string, description: "Comma-separated directories to scan" }
scan_filesystem: { type: boolean, description: "Scan the filesystem (default true)" }
scan_processes: { type: boolean, description: "Scan running processes (default false)" }
required: [agent_id]
outputs_schema: { properties: {} }
# ── Response: remediation ─────────────────────────────────────────────────
- id: delete_file
name: harfanglab-delete-file
description: "Delete a file on an endpoint by full path. Destructive. Returns the created job."
risk: destructive
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
filepath: { type: string, description: "Full path of the file to delete on the host" }
required: [agent_id, filepath]
outputs_schema: { properties: {} }
- id: delete_service
name: harfanglab-delete-service
description: "Delete a Windows service on an endpoint by service name. Destructive. Returns the created job."
risk: destructive
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
service_name: { type: string, description: "Name of the service to delete" }
required: [agent_id, service_name]
outputs_schema: { properties: {} }
- id: delete_scheduled_task
name: harfanglab-delete-scheduled-task
description: "Delete a scheduled task on an endpoint by task URI. Destructive. Returns the created job."
risk: destructive
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
schtask_uri: { type: string, description: "URI of the scheduled task to delete (e.g. \\Microsoft\\Windows\\...)" }
required: [agent_id, schtask_uri]
outputs_schema: { properties: {} }
# ── Response: quarantine ──────────────────────────────────────────────────
- id: quarantine_file
name: harfanglab-quarantine-file
description: "Move a file on an endpoint into HarfangLab quarantine by full path. Returns the created job."
risk: safe_write
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
file_path: { type: string, description: "Full path of the file to quarantine on the host" }
comment: { type: string, description: "Quarantine comment" }
required: [agent_id, file_path]
outputs_schema: { properties: {} }
- id: unquarantine_file
name: harfanglab-unquarantine-file
description: "Restore a quarantined file to its original location on the endpoint. Returns the created job."
risk: safe_write
inputs_schema:
properties:
agent_id: { type: string, description: "Agent unique identifier from the HarfangLab EDR Manager" }
local_id: { type: string, description: "Quarantined item local UUID (from harfanglab-quarantine-search)" }
overwrite_existing: { type: boolean, description: "Overwrite an existing file at the original path (default true)" }
required: [agent_id, local_id]
outputs_schema: { properties: {} }
- id: quarantine_search
name: harfanglab-quarantine-search
description: "Search quarantined files by hash, hostname or agent. Items include their id; once acquired on the manager the file is downloadable at /api/data/quarantine/item/{id}/download/."
risk: read
inputs_schema:
properties:
hash: { type: string, description: "File hash (md5, sha1 or sha256 — routed by length)" }
agent_hostname: { type: string, description: "Endpoint hostname" }
agent_id: { type: string, description: "Agent unique identifier" }
search: { type: string, description: "Free-text search term" }
limit: { type: number, description: "Max results (default 100)" }
offset: { type: number, description: "Pagination offset (default 0)" }
required: []
outputs_schema: { properties: {} }
- id: quarantine_request_upload
name: harfanglab-quarantine-request-upload
description: "Request upload of a quarantined file from the endpoint to the manager (returns the upload job). Once done, download at /api/data/quarantine/item/{id}/download/."
risk: safe_write
inputs_schema:
properties:
item_id: { type: string, description: "Quarantined item UUID (from harfanglab-quarantine-search)" }
required: [item_id]
outputs_schema: { properties: {} }
# ── Response: threat isolation & job lifecycle ────────────────────────────
- id: isolate_from_threat
name: harfanglab-isolate-from-threat
description: "Network-isolate ALL agents involved in a threat. Destructive: cuts network access on every impacted endpoint."
risk: destructive
inputs_schema:
properties:
threat_id: { type: string, description: "Threat identifier" }
required: [threat_id]
outputs_schema: { properties: {} }
- id: deisolate_from_threat
name: harfanglab-deisolate-from-threat
description: "Remove network isolation from all agents involved in a threat."
risk: safe_write
inputs_schema:
properties:
threat_id: { type: string, description: "Threat identifier" }
required: [threat_id]
outputs_schema: { properties: {} }
- id: job_cancel
name: harfanglab-job-cancel
description: "Cancel a running job by job ID."
risk: safe_write
inputs_schema:
properties:
job_id: { type: string, description: "Job ID to cancel" }
required: [job_id]
outputs_schema: { properties: {} }
- id: job_relaunch
name: harfanglab-job-relaunch
description: "Relaunch a cancelled or errored job by job ID."
risk: safe_write
inputs_schema:
properties:
job_id: { type: string, description: "Job ID to relaunch" }
required: [job_id]
outputs_schema: { properties: {} }
- id: wait_for_job
name: harfanglab-wait-for-job
description: "Poll a job until all its instances finish (done/error/canceled) or the timeout elapses. Returns {done: true|false, job: {...}} — never fails on timeout, so playbooks can branch on done."
risk: read
inputs_schema:
properties:
job_id: { type: string, description: "Job ID to wait for" }
timeout: { type: number, description: "Max seconds to wait (default 300)" }
interval: { type: number, description: "Seconds between polls (default 10)" }
required: [job_id]
outputs_schema: { properties: {} }
# ── Triage: alerts ────────────────────────────────────────────────────────
- id: get_alerts
name: harfanglab-get-alerts
description: "Search security events (alerts) for playbooks: by IDs, hostname, agent, threat, rule name, level/status/type, date range. Returns {count, results}."
risk: read
inputs_schema:
properties:
alert_ids: { type: string, description: "Comma-separated alert IDs (fetched individually; other filters ignored)" }
hostname: { type: string, description: "Endpoint hostname" }
agent_id: { type: string, description: "Agent unique identifier" }
threat_id: { type: string, description: "Threat key — alerts aggregated under this threat" }
rule_name: { type: string, description: "Detection rule name" }
level: { type: string, description: "Comma-separated severities (low, medium, high, critical)" }
status: { type: string, description: "Comma-separated statuses (new, investigating, closed, false_positive)" }
alert_type: { type: string, description: "Comma-separated alert types (sigma, yara, hlai, vt, ransom, ioc...)" }
from_date: { type: string, description: "ISO8601 lower bound on alert_time" }
to_date: { type: string, description: "ISO8601 upper bound on alert_time" }
search: { type: string, description: "Free-text search term" }
ordering: { type: string, description: "Sort field (default -alert_time)" }
limit: { type: number, description: "Max results (default 100)" }
offset: { type: number, description: "Pagination offset (default 0)" }
required: []
outputs_schema: { properties: {} }
- id: alert_tag
name: harfanglab-alert-tag
description: "Change the status of one or more alerts in bulk (new, investigating, false_positive, closed), optionally with a comment."
risk: safe_write
inputs_schema:
properties:
alert_ids: { type: string, description: "Comma-separated alert IDs" }
new_status: { type: string, description: "new | investigating | false_positive | closed" }
new_comment: { type: string, description: "Optional comment attached to the status change" }
required: [alert_ids, new_status]
outputs_schema: { properties: {} }
- id: alert_comment
name: harfanglab-alert-comment
description: "Add a comment to a security event (alert)."
risk: safe_write
inputs_schema:
properties:
alert_id: { type: string, description: "Alert ID" }
comment: { type: string, description: "Comment text" }
required: [alert_id, comment]
outputs_schema: { properties: {} }
- id: alert_details
name: harfanglab-alert-details
description: "Get the full details of an alert (raw Sigma/YARA rule, binary availability, process unique id...)."
risk: read
inputs_schema:
properties:
alert_id: { type: string, description: "Alert ID" }
required: [alert_id]
outputs_schema: { properties: {} }
- id: alert_history
name: harfanglab-alert-history
description: "Get the status-change history of an alert."
risk: read
inputs_schema:
properties:
alert_id: { type: string, description: "Alert ID" }
required: [alert_id]
outputs_schema: { properties: {} }
# ── Triage: threats ───────────────────────────────────────────────────────
- id: get_threat
name: harfanglab-get-threat
description: "Get a single threat by ID."
risk: read
inputs_schema:
properties:
threat_id: { type: string, description: "Threat identifier" }
required: [threat_id]
outputs_schema: { properties: {} }
- id: threat_status
name: harfanglab-threat-status
description: "Change the status of one or more threats (new, investigating, false_positive, closed), optionally propagating to their security events."
risk: safe_write
inputs_schema:
properties:
threat_ids: { type: string, description: "Comma-separated threat IDs" }
new_status: { type: string, description: "new | investigating | false_positive | closed" }
tag_security_events: { type: boolean, description: "Also apply the status to the threat's security events (default false)" }
required: [threat_ids, new_status]
outputs_schema: { properties: {} }
- id: threat_level
name: harfanglab-threat-level
description: "Change the severity level of one or more threats (low, medium, high, critical)."
risk: safe_write
inputs_schema:
properties:
threat_ids: { type: string, description: "Comma-separated threat IDs" }
new_level: { type: string, description: "low | medium | high | critical" }
required: [threat_ids, new_level]
outputs_schema: { properties: {} }
- id: threat_comment
name: harfanglab-threat-comment
description: "Add a comment to a threat."
risk: safe_write
inputs_schema:
properties:
threat_id: { type: string, description: "Threat identifier" }
comment: { type: string, description: "Comment text" }
required: [threat_id, comment]
outputs_schema: { properties: {} }
- id: threat_note_set
name: harfanglab-threat-note-set
description: "Create or update the analyst note of a threat (title + content). Upserts: creates the note, or replaces it if one exists."
risk: safe_write
inputs_schema:
properties:
threat_id: { type: string, description: "Threat identifier" }
title: { type: string, description: "Note title" }
content: { type: string, description: "Note content" }
required: [threat_id, title, content]
outputs_schema: { properties: {} }
- id: threat_history
name: harfanglab-threat-history
description: "Get the status-change history of a threat."
risk: read
inputs_schema:
properties:
threat_id: { type: string, description: "Threat identifier" }
required: [threat_id]
outputs_schema: { properties: {} }
# ── Connectivity test ───────────────────────────────────────────────────── # ── Connectivity test ─────────────────────────────────────────────────────
- id: test_connection - id: test_connection
name: harfanglab-test-connection name: harfanglab-test-connection