9605e1f0dc
EDR: Wraith (SentinelOne), Talon (CrowdStrike), Nyx (HarfangLab), Bastion (Defender), Synapse (Cortex XDR), Kestrel (Sophos). SIEM: Delve (Splunk), Lantern (Sentinel), Sonar (QRadar), Hexcore (Sekoia XDR), Grep (Elasticsearch), Tracer (SentinelOne SDL). Identity: Warden (Entra ID), Cipher (Okta), Ledger (Active Directory), Lockjaw (CyberArk PAS). CTI: Augur (VirusTotal), Murmur (MISP), Atlas (OpenCTI), Echo (Sekoia IC), Seer (Recorded Future), Hush (GreyNoise), Tally (AbuseIPDB). Sandbox: Scalpel (Joe), Gauntlet (ANY.RUN), Prism (VMRay). Email: Hook (Proofpoint TAP), Drift (Mimecast), Riptide (Vade). Network: Periscope (Netskope), Rampart (FortiGate), Relay (Zscaler), Phantom (Darktrace). Read-only commands, analyst_l2, a call budget with an order, and the Static lessons: ids copied from answers only, timestamps passed as given, names over ids, one variant at most on error. Each sheet passes Riposte's validator; none is field-tested yet. Each integration gets a patch bump. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_015RhL2gy6Sx6Y3FEsyBE3mZ
190 lines
7.2 KiB
YAML
190 lines
7.2 KiB
YAML
id: virustotal
|
|
name: VirusTotal
|
|
version: 1.1.1
|
|
description: "VirusTotal API v3 — reputation for IPs, domains, files and URLs, plus rescan/scan, intelligence search, analysis results, file behaviour (sandbox) reports, passive DNS and comments."
|
|
changelog: "1.1.0 — Full v3 coverage: added file and URL reputation, file rescan, URL scan, search, analysis-get, file sandbox (behaviour) report, passive DNS and comments (get/add/get-by-id/delete). Commands are now script-based (URL base64, form-encoded scans, comment resource routing). 1.0.2 — Re-publish to regenerate form-based command scripts. 1.0.1 — Added test_connection. 1.0.0 — Initial release: IP and domain reputation lookups."
|
|
category: enrichment
|
|
|
|
config_schema:
|
|
properties:
|
|
base_url:
|
|
type: string
|
|
description: VirusTotal API v3 base URL
|
|
default: https://www.virustotal.com/api/v3
|
|
api_key:
|
|
type: string
|
|
description: VirusTotal API key
|
|
x-soar-sensitive: true
|
|
required:
|
|
- api_key
|
|
|
|
auth:
|
|
- id: apikey
|
|
type: api_key
|
|
in: header
|
|
name: x-apikey
|
|
value_template: "{{secret}}"
|
|
secret_field: api_key
|
|
|
|
commands:
|
|
# ── Reputation ──────────────────────────────────────────────────────────────
|
|
- id: get_ip_report
|
|
name: virustotal-ip
|
|
description: "Reputation and last-analysis stats for an IP address."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
ip: { type: string, description: "IP address to look up" }
|
|
required: [ip]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: get_domain_report
|
|
name: virustotal-domain
|
|
description: "Reputation and last-analysis stats for a domain."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
domain: { type: string, description: "Domain to look up" }
|
|
required: [domain]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: file
|
|
name: virustotal-file
|
|
description: "Reputation and analysis for a file hash (MD5, SHA1, SHA256)."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
file: { type: string, description: "File hash" }
|
|
required: [file]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: url
|
|
name: virustotal-url
|
|
description: "Reputation and analysis for a URL (base64-id resolved automatically)."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
url: { type: string, description: "URL to look up" }
|
|
required: [url]
|
|
outputs_schema: { properties: {} }
|
|
|
|
# ── Scans ───────────────────────────────────────────────────────────────────
|
|
- id: file_rescan
|
|
name: virustotal-file-rescan
|
|
description: "Re-analyse an already-submitted file by hash. Use analysis_get to fetch results."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
file: { type: string, description: "File hash to rescan" }
|
|
required: [file]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: url_scan
|
|
name: virustotal-url-scan
|
|
description: "Submit a URL for scanning. Use analysis_get to fetch results."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
url: { type: string, description: "URL to scan" }
|
|
required: [url]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: analysis_get
|
|
name: virustotal-analysis-get
|
|
description: "Get the result of an analysis (from file_rescan or url_scan) by ID."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Analysis ID" }
|
|
required: [id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
# ── Intelligence / relationships ──────────────────────────────────────────
|
|
- id: search
|
|
name: virustotal-search
|
|
description: "Search VirusTotal for a file hash, URL, domain, IP, or tag."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
query: { type: string, description: "Search query" }
|
|
limit: { type: number, description: "Maximum number of results (default 10)" }
|
|
required: [query]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: file_sandbox_report
|
|
name: virustotal-file-sandbox-report
|
|
description: "Retrieve sandbox behaviour reports for a file hash."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
file: { type: string, description: "File hash" }
|
|
limit: { type: number, description: "Maximum number of reports (default 10)" }
|
|
required: [file]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: passive_dns
|
|
name: virustotal-passive-dns-data
|
|
description: "Passive DNS resolutions for an IP address or a domain."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
resource: { type: string, description: "IP address or domain" }
|
|
limit: { type: number, description: "Maximum number of resolutions (default 10)" }
|
|
required: [resource]
|
|
outputs_schema: { properties: {} }
|
|
|
|
# ── Comments ──────────────────────────────────────────────────────────────
|
|
- id: comments_get
|
|
name: virustotal-comments-get
|
|
description: "Get comments for an IP, domain, URL or file."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
resource: { type: string, description: "The IP, domain, URL or file hash" }
|
|
resource_type: { type: string, description: "Resource type: ip, domain, url or file (auto-detected if omitted)" }
|
|
limit: { type: number, description: "Maximum number of comments (default 10)" }
|
|
required: [resource]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: comments_add
|
|
name: virustotal-comments-add
|
|
description: "Add a comment to an IP, domain, URL or file."
|
|
risk: safe_write
|
|
inputs_schema:
|
|
properties:
|
|
resource: { type: string, description: "The IP, domain, URL or file hash" }
|
|
resource_type: { type: string, description: "Resource type: ip, domain, url or file (auto-detected if omitted)" }
|
|
comment: { type: string, description: "Comment text" }
|
|
required: [resource, comment]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: comments_get_by_id
|
|
name: virustotal-comments-get-by-id
|
|
description: "Get a single comment by its ID."
|
|
risk: read
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Comment ID" }
|
|
required: [id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
- id: comments_delete
|
|
name: virustotal-comments-delete
|
|
description: "Delete a comment by its ID."
|
|
risk: destructive
|
|
inputs_schema:
|
|
properties:
|
|
id: { type: string, description: "Comment ID" }
|
|
required: [id]
|
|
outputs_schema: { properties: {} }
|
|
|
|
# ── Connectivity test ─────────────────────────────────────────────────────
|
|
- id: test_connection
|
|
name: virustotal-test-connection
|
|
description: "Verify connectivity and credentials (used by the Test button)."
|
|
risk: read
|
|
inputs_schema:
|
|
properties: {}
|
|
required: []
|
|
outputs_schema: { properties: {} }
|