How the Wazuh and VirusTotal integration checks changed files
If your Wazuh agents already run file integrity monitoring, the VirusTotal integration adds a reputation check to changed files, so an alert can carry a verdict alongside the file path and hash. In the documented flow, file integrity monitoring records a change, the integration takes the file's hash, Wazuh queries VirusTotal with that hash, and the returned result is written into the Wazuh alert. The exact method depends on the integrator configuration and the options that your Wazuh release supports. Before you write any configuration, confirm the block names, settings and behavior in the Wazuh documentation for the release you run, and test them on a non-production agent group first.
Several decisions shape the result before any configuration is written. You need to choose which directories file integrity monitoring covers, because a broad scope produces more lookups and more noise. You also need to decide which alert levels or rule groups trigger a lookup, and whether every detected change is checked or only changes in selected paths such as system binaries, startup locations or web roots. Ask the vendor or check the release documentation whether any file content leaves your network during the lookup or only the hash does. That answer determines how your data handling and privacy reviews classify the integration, so record it in the design before rollout.
The integration needs a VirusTotal API key, and that key becomes a credential your team must manage. Decide who owns the key, where it is stored on the Wazuh server, how access is logged, and how it is rotated. Public API access is subject to rate limits, which constrain how many lookups can run in a given period. Confirm the current limits in VirusTotal's own documentation, because they can change and the terms for public use differ from commercial access. Plan for bursts, such as a package update that changes many files at once, where lookups may be queued, delayed or skipped. Your alerting should show when lookups did not complete so that an unchecked file is not mistaken for a clean one.
Pairing verdicts with active response, which can remove a file automatically, is the highest-risk part of the design. A false positive on a required binary can break a production service, so limit automated removal to defined agent groups and verdict thresholds, and confirm the trigger logic in the release you run. Run the full chain in a test environment with known-safe and known-test files, and confirm that the response runs only when intended and is logged. DeployOpen plans, configures and tests this integration in your own environment, within a written scope. DeployOpen is not a VirusTotal partner or reseller, and nothing in this section is a VirusTotal certification.
What you need before connecting Wazuh to VirusTotal
Six items must be in place before the integration can run, and each one is a check to complete before configuration starts. Together they cover the Wazuh stack, the agents that report file changes, the VirusTotal account, and the network path the lookups use.
Supported Wazuh server, indexer and dashboard
The Wazuh server analyzes agent data and the indexer stores the resulting alerts, so all three components must run versions the documentation supports together. Confirm that the server, indexer and dashboard sit on the 4.14 release line you plan to use, and record the exact build in your change log. Version mismatches are the first thing to rule out when alerts or dashboards fail after an upgrade.
Minimum 4.14 patch level
The 4.14 line has shipped several patch releases, including 4.14.8 on 23 September 2026 and 4.14.9 on 14 October 2026, according to the Wazuh release notes. Choose the lowest patch you will accept, read the fixes listed between that build and the current one, and confirm the target before installation. Patches have arrived roughly every one to two months, so repeat this check at each change window.
Agents with file integrity monitoring enabled
The integration depends on file integrity monitoring, which reports files that are created or changed on endpoints. Enable it for the paths that matter, such as system binaries, startup locations, web roots and user download directories, and exclude high-churn paths that generate noise. Confirm each endpoint runs an operating system that Wazuh agents support before you rely on its coverage.
VirusTotal account and API key
The integration needs a VirusTotal account and an API key that the Wazuh server uses for file hash lookups. Assign one named owner to the account, decide who may rotate the key, and store the key in your secrets process instead of shared configuration files. Ask VirusTotal which key tier and request limits apply to your expected lookup volume before you size the integration.
Outbound HTTPS or a documented proxy
The Wazuh server must reach the VirusTotal API over outbound HTTPS, either directly or through a proxy your team has documented and tested. Confirm the destination host and port with your network team, check whether TLS inspection sits on the path, and verify that the proxy passes the headers the API key requires. Test from the server itself, since the lookups run there and not on the agents.
Network policy for hash lookups
Each lookup sends only a file hash to a third-party service, but security and privacy owners still need to approve that data flow before go-live. Check whether your policy allows external hash queries from production systems, whether file paths or names in the alert context may leave your environment, and whether the VirusTotal terms fit your data classification. Record the decision and its owner in your change record.
How file integrity events reach VirusTotal and come back as alerts
The path has four stages, and each one can lose or delay an alert. First, a Wazuh agent on an endpoint with file integrity monitoring enabled detects a change in a monitored directory and reports it to the Wazuh server. The server decodes that event and applies its rules. For the agent groups and rules you have scoped, it generates a file integrity alert. The Wazuh indexer stores that alert, and the Wazuh dashboard reads it from there. Before you assume a lookup will follow, confirm in your own environment which groups and directories produce events, because a change that never becomes an alert will never reach VirusTotal.
The integration step is the one that reaches outside your network, so it needs the most scrutiny. The integration takes the file hash from the alert and submits it to VirusTotal for lookup. Confirm which hash algorithms the documented integration supports, such as MD5, SHA-1 or SHA-256, because the algorithm determines which VirusTotal records can match and which hash field the alert must carry. Also confirm whether the lookup runs for new files, for modified files, or for both. That choice drives how many requests your API key makes, and it affects how many endpoints can be checked during a busy period.
The verdict returns as a new event rather than as an edit to the original alert. Wazuh then processes that event like any other: it is indexed, it appears in the dashboard, and rules can match it. Decide early which fields the verdict event carries, such as the detection count or the hash it refers to, and confirm those field names against the documented integration before writing any rule. A rule that matches a field the event does not carry will never fire, and nothing will report the failure. Expect a delay between the original file change and the verdict, and design alerting so that the first alert is not the only signal you rely on.
Because the lookup is one step in a chain, a missing result can come from any stage. The agent may be offline, the server rule may not match the event, the API key may hit its request limit, or the verdict event may not be indexed. Test each stage with a controlled file change in a non-production group, then trace that change through the alert, the lookup and the verdict on the dashboard. Keep a record of what the test showed at each stage. That record gives you a baseline for the rate limit and rule checks covered elsewhere on this page, and it shows your team where to look first when a real detection goes quiet.
Configuration sequence for the VirusTotal check
This sequence connects file integrity monitoring on the agents to VirusTotal lookups on the Wazuh server, so that changed files produce an alert with a verdict. Each step ends with a check you can run before moving on. Confirm option names and reload behavior against the documentation for your Wazuh release.
Create and store the API key securely
The security engineer creates a VirusTotal API key under the account that owns the lookups and stores it where only the Wazuh manager's service account can read it, such as a root-owned file with restricted permissions or a secrets store your team already operates. Do not paste the key into shared tickets, chat, or configuration files kept in version control. Done means the file ownership and mode match your policy, and a search of the manager logs, shell history, and configuration backups returns no matches for the key string. Ask your team to record who holds the key and where rotation is tracked.
Scope file integrity monitoring to target directories
The platform engineer decides which agent groups and directories are watched by file integrity monitoring, and sets those directories in the group's agent configuration so the scope is repeatable across hosts. Start with directories where unexpected executables or scripts would matter most, and keep the list short enough to review. Done means the agent group shows the expected directories, and a test change in one watched directory produces a file integrity event in the dashboard. Directories outside the scope should produce no event for the same change.
Add the VirusTotal integration block on the server
On the Wazuh server, the administrator adds the VirusTotal integration block to the manager configuration, pointing it at the stored key through the mechanism the documentation describes and limiting it to the file integrity rules or alert levels you chose. Keep the key reference out of the block itself where your release allows it, and add a comment that names the owner. Done means the configuration file parses without errors when checked with the manager's configuration test command, and the integration appears as loaded in the manager logs on the next start.
Restart or reload the manager as documented
The administrator restarts or reloads the Wazuh manager using the method the documentation gives for your release, during a window your change process approves. Because the integration depends on the key and the rules, reload only after the configuration test passes. Done means the manager service reports as active, the logs show the VirusTotal integration starting without authentication or permission errors, and the key string still does not appear in the log output. If errors appear, roll back the configuration change before testing further.
Trigger a known test file change
The security analyst creates or modifies a harmless, known test file in a monitored directory on an enrolled agent, using a sample that security tools are designed to flag so the lookup has a predictable result. Avoid live malware in any environment. Done means a file integrity alert for the test file appears in the dashboard within the time your team expects for scheduled or real-time scanning, and the manager logs show a lookup request for that file hash. If no alert appears, check the scope from step two before changing the integration.
Verify the alert and verdict fields
The security analyst opens the alert for the test file and confirms the VirusTotal fields are present, including the verdict or detection counts, the file hash, and the link back to the lookup. Field names vary by release, so compare them against the documentation for your version and the rule that produced the alert. Done means the alert is indexed in the Wazuh indexer and searchable by file name and hash, and the expected fields are populated. Record the result as the baseline for your acceptance evidence before connecting active response.
Which Wazuh fields feed VirusTotal and what comes back
This table maps the data elements that move from a file integrity event into a VirusTotal lookup and back into Wazuh alerts. Read each row as one field group: where it originates, what it drives in rules, dashboards or active response, and what to verify before you build on it. The main takeaway is that exact field names can change between releases, so confirm them in the documentation for your version before writing rules.
| Data element | Source in the event | What it drives | Confirm or route |
|---|---|---|---|
| File path | Path of the changed file recorded by file integrity monitoring | Triage context and path-based allowlisting of expected changes | Confirm the field name for your release. Route to SIEM for correlation |
| Monitored group | Group assigned to the directory in the agent file integrity configuration | Selects which changes trigger a lookup and sets the alert level | Confirm group naming in the configuration reference for your version |
| File hash | Hash the agent calculates for the changed file | The lookup key sent to VirusTotal | Confirm which hash algorithms are enabled and which one the integration sends |
| Agent identity | Agent ID, name and IP address attached to the event | Identifies the endpoint and is the target for active response | Route agent ID and name to SIEM or SOAR for host-level grouping |
| Verdict counts | Malicious and suspicious detection counts in the lookup response | Rule conditions and alert thresholds for the integration | Confirm response field names and threshold logic in the release documentation |
| Lookup status or error | Response code or error returned when a lookup fails or is throttled | Separates clean verdicts from lookups that never completed | Alert on failures and route them to SIEM so unscanned files are not read as clean |
| Scan metadata | Scan date and engine totals included in the lookup response | Dashboard columns and analyst notes during triage | Confirm availability in your release before building dashboards on it |
| Rule ID and rule level | Wazuh rule that fired on the lookup result | Links the verdict to alerts, dashboard filters and active response triggers | Confirm rule IDs in the shipped ruleset. SOAR playbooks should match on rule ID |
Planning around VirusTotal public API rate limits
The public VirusTotal API applies request limits, so the design has to fit inside them before the integration goes live. Confirm the current limits and terms on VirusTotal's own documentation before sizing anything, because they can change and figures in older articles or forum posts may be out of date. The risk is specific to file integrity monitoring. Every created or modified file in a watched path can become a hash lookup candidate, so a busy policy on a fleet of endpoints can generate more lookups per day than the public API allows. Estimate that volume from your own change rates, not from a generic assumption.
Scoping monitored paths is the first control. In the Wazuh agent configuration, the file integrity monitoring directories define what gets checked, so limit them to locations where an unexpected change matters, such as system binaries, startup locations and web roots. Then exclude high-churn directories such as temporary folders, package caches, browser profiles, log directories, container layers and application upload stores, using the ignore settings the Wazuh documentation describes for your agent version. Record a reason for each exclusion. Security reviewers will ask why a path is not checked, and the answer should be written down before go-live.
Deduplication and event selection reduce volume further. The same file hash appears many times across a fleet, for example when a software package is installed on hundreds of machines, so confirm whether your integration version avoids repeated lookups for a hash it has already checked, and add caching if it does not. Next, decide which events trigger a lookup. Options include only newly created executables, only changes in certain directories, or only events at or above a defined rule level. The Wazuh rules and integration filters control what reaches the lookup step, so test those filters against a sample of endpoints and count the lookups per day before rolling out to the full fleet.
The last decision is whether the public key is enough. A public key may suit a lab or a low-volume environment, but a continuous policy across many endpoints can outgrow it. Before choosing a premium or private key from VirusTotal, ask the vendor what the license permits in your context, including whether your file metadata may be submitted, how long results are retained and what support is included. Plan for key storage and rotation as well. Throttled or failed lookups must be logged and retried or alerted on, so an endpoint is never treated as clean simply because the check did not complete. Active response should also depend on a completed lookup result, not on the absence of one.
Securing the VirusTotal key and the data sent outside your network
These controls cover the two places where this integration crosses your trust boundary: the credential that authorizes lookups and the file-derived data that leaves your network. Review them together before the first lookup runs, because an exposed key and an overly broad monitoring scope are both easy to miss after go-live.
Keep the API key out of scripts
The VirusTotal API key authorizes every lookup and is tied to the account that owns it. Place it in the Wazuh server configuration under a restricted file path, or retrieve it from a secrets manager at deployment time, and keep it out of shared automation scripts, tickets and chat logs. Confirm with your secrets owner how the key is rotated and who is notified when it changes.
Limit who can read server configuration
The integration block that references the key sits in the Wazuh server configuration, so anyone who can read that file can likely read the key. Restrict file permissions to the service account and a small administrator group, and apply the same rule to backups, configuration management repositories and diagnostic bundles. Re-check permissions after upgrades and any reconfiguration, since file ownership can change during package work.
Restrict outbound traffic to the lookup endpoint
Allow the Wazuh server to reach only the VirusTotal API hostname it needs, on the protocol the integration uses, and deny other outbound destinations from that host. If your network requires an egress proxy, route the traffic through it and record the proxy policy in your change records. Confirm the current endpoint name in the vendor documentation before writing the firewall rule, since endpoints can change.
Log lookups and failures
Keep records of which hashes were submitted, when, which agent and rule triggered the lookup, and whether it succeeded, was throttled or failed authentication. Forward these events to your central log store with restricted read access and a retention period set by your audit team. Failed lookups deserve the same attention as successful ones, because a broken or silently disabled check leaves files unverified without any visible alert.
Assess what leaves the environment
Each lookup sends a file hash to an external service. Review which directories are monitored, which hold sensitive internal files, and whether file names, paths or other metadata appear in the requests or in any event you forward. Hashes of internal documents can still reveal information, for example by confirming that a specific known file exists on a given system, so narrow the monitored scope to match your sensitivity classes.
Agree the data-handling position
Whether file-derived data may leave your network is a decision for your privacy and legal owners and should be settled before engineering sets the monitored paths. Document which data categories are excluded, what the provider's terms say about retention and sharing of submitted data, and when the position will be reviewed. Bring this record to the implementation kickoff so the configuration matches the agreed position.
Pairing VirusTotal verdicts with active response to remove malicious files
The first decision is whether Wazuh should act on a VirusTotal verdict at all, or only raise an alert for a person to review. Active response is the Wazuh mechanism that runs a command on the agent when a rule matches, so a VirusTotal-driven rule could in principle trigger a script that deletes or quarantines a changed file. That capability is useful, but deleting a file is destructive and cannot be reversed by Wazuh. A detection that is wrong, or a legitimate file that happens to be flagged by one engine, can remove a configuration file, a library or a database component and break a service. Treat automatic removal as a change to production behavior that needs its own approval, not as a default that comes with the integration.
Before designing anything, confirm the active response options documented for the Wazuh release you run, including which built-in commands exist, how they are triggered, whether they run on the agent or the server, and what they do to a file. Release lines change, and the 4.14 patch releases in 2026 should be checked against the release notes rather than assumed to behave identically. Record the exact agent version too, because active response behavior and script locations depend on it. Where the documented options do not cover the action you want, the custom script is part of the engagement scope, along with its testing and its rollback path.
Start with alert-only rules. Run the VirusTotal-linked rules for a period long enough to see how often they fire on your real file change patterns, which directories generate noise, and which verdicts come from benign software updates. Then add a verdict threshold, so removal is considered only when a defined number of engines flag the file, and pair it with a clear allowlist of paths, hashes and signed software that must never be touched, such as package manager directories, backup agents and security tooling. Test the full chain on non-production agents that mirror your operating systems and file layouts, and confirm that the allowlist, threshold and script behave as intended before any production agent is in scope.
Where the platform allows it, prefer a copy or quarantine step over deletion. Moving the file to a restricted location, keeping a hash and a copy with its metadata, and recording the action in the alert chain lets an analyst reverse a mistake and gives an incident responder evidence. Confirm on each agent operating system whether the quarantine location is protected from the same users and processes that could tamper with it, and what happens to file permissions and ownership during the move. Plan storage capacity and a retention period for quarantined files as an operating task.
Decide before go-live who approves removal on production systems, and document the answer. Options include a human analyst who confirms each action, a change owner who authorizes a defined class of files, or automatic removal limited to specific non-production or low-impact hosts. The approval model should name the roles, the response time expected for a confirmation request, and the path for emergency action. Our engagement designs and tests the removal logic, thresholds, allowlist and quarantine behavior together with your approval model, so the removal path is verified in your environment rather than assumed to work.
Why VirusTotal results do not appear in Wazuh
This table pairs each common reason VirusTotal verdicts are missing from Wazuh with the check that confirms it and the fix to apply. Work through the rows in order, because the first two causes block every lookup. Before you change the design, confirm the exact error text in the Wazuh manager log and the current status of the VirusTotal service, since many symptoms look alike.
| Likely cause | What to check | Fix |
|---|---|---|
| API key missing or invalid | The integration block has no key, the key was revoked, or it was pasted with extra characters; the manager log shows authentication errors | Set the key in the integration block, reload the manager, and test with a file hash you already know is listed |
| Outbound HTTPS blocked | The manager cannot reach the VirusTotal API, and lookups time out or fail in the manager log | Allow outbound HTTPS from the manager, or route it through the approved proxy and confirm the proxy settings apply to that process |
| Lookups throttled by public API limits | Some lookups return rate-limit responses while others succeed, especially during bursts of file changes | Confirm the current public limits in the VirusTotal documentation, narrow monitored paths to higher-risk locations, or plan for a higher-volume key |
| File integrity policy does not cover the path | The changed file produces no syscheck event, so no hash reaches the integration | Check the syscheck directories for the agent group and confirm the path is monitored in realtime or on schedule |
| Integration not reloaded after changes | Edits to the configuration or shared group files are not active on the manager | Validate the configuration, restart the manager, and confirm the change reached the target agent group |
| Event volume floods the queue | Lookups lag behind file changes, or some events are dropped during bursts of activity | Exclude noisy paths such as temporary and package caches, and watch queue and log counters for a growing backlog |
| Rule level filter hides the verdict | The integration or downstream rule level threshold excludes the alert that carries the VirusTotal result | Check the level settings on the integration and rules, confirm the alert in the archives, then adjust the filter and test again |
| Active response runs on the wrong agent group | The removal action targets agents outside the intended group, or no agent in the group receives it | Confirm the active response block names the right group and agent IDs, and that the command matches each endpoint operating system |
Questions buyers ask before connecting Wazuh to VirusTotal
Is there a license fee for self-hosted Wazuh with VirusTotal?
No license fee applies to the self-hosted Wazuh software, which is open source under the GNU General Public License version 2. Your costs sit in the infrastructure that runs the Wazuh server, indexer and dashboard, and in the agents on your endpoints. VirusTotal is a separate cost. Access to its public API is governed by VirusTotal's terms, and any paid key tier is a subscription you buy from VirusTotal. Confirm the current key options, request limits and terms directly with VirusTotal before you design the file checks, because those limits determine how many files you can check and how quickly.
What does a VirusTotal integration cost on top of Wazuh?
The VirusTotal key is the only external line item to confirm. Check current prices and request limits with VirusTotal before you commit to a design. Your internal costs are the time to configure the integration, the capacity of the Wazuh components that will handle the extra checks, and ongoing tuning after go-live. Some costs are one-time, such as the initial build and testing, and some recur, such as key subscriptions, infrastructure and periodic review. Ask for a quote that lists each cost separately and says who pays for it, so you can see what recurs and what does not.
How long does connecting Wazuh to VirusTotal take?
The duration depends on the scope you agree, so no single figure fits every environment. The main variables are the number of file paths monitored by file integrity monitoring, the number of endpoints reporting, whether a working Wazuh deployment already exists, and whether automated removal through active response is part of the build. A narrow scope on an existing deployment moves faster than a broad scope that also adds response actions and testing. Ask for the timeline in the written scope, with phases, dependencies and client approvals shown, before work starts.
What does DeployOpen need from our team for this work?
DeployOpen needs access to the Wazuh manager, the agent configuration and the dashboard, along with a named technical contact who can approve changes to agents and the manager. You also need a test endpoint group where file changes can be triggered safely. Your team decides who holds the VirusTotal key, which file paths to watch, and the response policy for flagged files. Plan a change window for pushing agent configuration to endpoints. Confirm these access points and approvals with your security and platform teams, and list them in the written scope so nothing is assumed.
Can our own team connect Wazuh to VirusTotal without a partner?
Often yes, if your team already operates Wazuh and is comfortable editing integration settings on the manager, changing agent configuration and writing rules. The configuration itself is modest: an API key, the file integrity monitoring paths, an integration block on the manager, and rules that turn lookup results into alerts. The harder parts are testing for false positives, tuning alert levels and designing any automated response safely. Teams new to Wazuh should weigh that learning curve against a fixed-scope engagement. In either case, build and test in a non-production endpoint group first.
Which factors make the VirusTotal integration effort larger or smaller?
Effort rises mainly with the number of monitored paths and endpoints, because each adds file changes to hash, check and triage. Larger endpoint groups also need staged rollout and more agent configuration pushes. The active response decision changes the work the most. An alert-only design needs detection tuning, while automated removal of files needs exclusions, approvals, rollback tests and clear logging. Other drivers include how many Wazuh environments are in scope, how mature your existing rules are, and how much documentation and handover you want. Ask for scope items to be listed by endpoint group and path count so that quotes can be compared on the same basis.
Should we let Wazuh remove files automatically after a VirusTotal match?
Start with alerts only, and add automated removal later for a narrow set of paths once you have measured the false positive rate. Removing a file that a business application depends on can cause an outage, so any response needs allowlists, exclusions for system and application paths, approval rules and a tested way to restore files. Confirm which active response scripts your Wazuh version supports and how they behave on each operating system you run, using the official documentation for that release. Decide the response policy with your security and operations owners before the build starts.
How does DeployOpen quote a VirusTotal integration engagement?
DeployOpen does not publish a price list. A quote follows from the written scope, which sets out the systems, file paths, endpoint groups, active response decision, testing, documentation and handover, along with your responsibilities. Most engagements are fixed-scope, so the deliverables and timeline are agreed in writing before work starts. If you want help after go-live, ongoing support, upgrades and continuous testing are available as retainers. Ask for the quote to show one-time work and any recurring items separately.
How DeployOpen scopes, builds and supports the VirusTotal integration
DeployOpen plans and builds the Wazuh and VirusTotal integration inside your own infrastructure, so file hashes, API keys and response logic stay under your control. Work follows a written scope, and ongoing support is available as a retainer. Each step is agreed in writing before the build starts.
How we scope
- The written scope names the Wazuh managers, agents and monitored directories that take part in file checks.
- It records how the VirusTotal API key is issued, stored and rotated, and which team owns it.
- It sets which file paths and alert levels trigger lookups, and the public API limits you confirm with VirusTotal.
How we build
- Build starts in a non-production Wazuh environment, so file integrity monitoring and lookups are tested first.
- Integration settings, decoders and rules are version-controlled and deployed through your change process.
- Active response rules that remove flagged files are tested with controlled samples before they are enabled.
How we hand over
- Handover includes configuration documentation, the API key procedure, and a record of every rule and active response script.
- Your team receives a runbook covering alert triage, false positive handling and what to do when lookups fail.
- Knowledge transfer sessions walk your administrators through the dashboards, logs and removal actions they will operate.
How we support
- Ongoing support can be run as a retainer covering Wazuh upgrades and changes to the VirusTotal integration.
- Review API key use, lookup failures and rate-limit errors as part of routine retainer operations.
- Changes to the integration follow the same written scope process, so each adjustment is agreed before it is applied.

