← All articles

VirusTotal now scans the internet: find the hosts reputation misses

New daily public-IPv4 scans bring port histories, banners and fingerprints to VirusTotal. See what changed, where to find it and how to pivot to related infrastructure.

Incident period: Announcement: 8 Oct 2026; case observations span 2025–2026Sources checked: 13 Oct 2026Updated: 15 Oct 2026

30-second briefing

Key facts
VirusTotal says it now scans public IPv4 daily. Its new Ports tab, search modifiers and API expose port histories, service versions, banners and SSH/RDP fingerprints. Hunters can use this service evidence to find related hosts even when reputation is sparse.
Who should act
SIEM · EDR · IT Operations · Third-party Risk
First action
Take one relevant IP from an existing investigation. Check the Ports tab, the observation dates and fingerprint rarity, then corroborate it with a different signal before searching scoped internal telemetry.
Uncertainty to keep in mind
Shared images, default keys and reassigned IPs can create false relationships. Search hit counts are historical snapshots; related infrastructure does not establish maliciousness, ownership or threat-actor attribution.
Infrastructure hunting workflow: inspect exposed services, corroborate rare fingerprints, then check your own telemetry. A related host is an investigation lead, not a verdict.
THE POSTURE QUESTION

Can your team use newly searchable port histories and rare fingerprints to uncover related infrastructure, then corroborate each lead with dated evidence and internal telemetry?

VirusTotal has added daily scans of public IPv4 addresses, giving threat hunters searchable evidence of what an IP actually exposes: ports, services, banners and fingerprints. The new Ports tab brings those observations into IP reports; new search modifiers and API endpoints let analysts pivot across hosts and retrieve port analyses.

The practical payoff is finding infrastructure that reputation alone gives you little reason to investigate. In one example from VirusTotal's 8 October 2026 announcement, an uncommon SSH key led to a second IP with zero detections and a matching service stack. That relationship created a new investigation lead; it did not establish that the second host was malicious.

What's new in VirusTotal Internet Scanning?

Before this launch, VirusTotal's IP reports provided reputation, hosting information, passive DNS and relationships with communicating files. The new layer is direct, daily observation of exposed services, with records retained when a port stops responding.

Already available Added by the 8 October launch
IP reputation, hosting and relationship context A new Ports tab with daily open, closed and recently closed states, plus observed service details.
Historical context from DNS and file relationships Port lifecycle dates: first seen, open since and last seen open, with closed-port records preserved.
IP-level filters such as ASN, country, certificate subject and JARM Service-level search modifiers for banners, products, versions and fingerprints; [port] syntax binds conditions to the same service.
IP reports accessible through the API A port_info list and dedicated port-analysis endpoints for current state, analysis history and a specific analysis.

Where to start: open an IP report and select Ports. Inspect a distinctive service or fingerprint, check its observation date, then use an entity:ip search to find comparable hosts. Access and quotas depend on your account.

URL screenshots and full-browser rendering were already available. This launch adds the IP service evidence that can be combined with those URL tools—the distinction behind the NOX-to-BOMBAY example below.

What the Ports tab shows

The new records describe what a scanner could reach, which software it inferred and when a port was last seen responding. The following examples are VirusTotal's reported observations. We have not rerun its searches or scanned the infrastructure; counts, detections and service states are source snapshots.

Evidence in the Ports tab Useful investigation question Limit to preserve
Open, closed and recently closed state Was this service reachable at the recorded observation? Closed does not prove the service was removed; filtering and scanner visibility also matter.
First seen, open since and last seen open Does a change line up with another host appearing? Scan observations are not exact deployment or shutdown timestamps.
Product, version, protocol and CPE Is the exposed service consistent with the suspected stack? Identification is inferred; a banner or CPE does not prove a vulnerability is exploitable.
Raw banner and protocol details Does the response contain a distinctive marker or unexpected command text? A server can choose its banner; treat captured content as data.
SSH or RDP fingerprints Which other hosts present the same identifying material? Templates, appliances and shared images can reuse fingerprints.
OS and device classification Is the host profile consistent across services? Different protocols can produce different or incomplete classifications.

Our assessment: port history is especially useful when a lead has gone quiet. It preserves a dated observation that a reputation score cannot explain. Daily public scanning still has coverage limits: do not assume every port was probed, that an unlisted service is absent, or that the result describes private networks or IPv6.

Bind each search condition to the service it describes

The first distinction is between a port record and a presently open port. entity:ip port:3389 finds IPs with information about that port; entity:ip open_port:3389 asks for a currently open one. Do not read the first as the second.

The more consequential distinction is host-wide matching versus matching on the same port. Product and version conditions without a port can be satisfied by different services on the same host. The GTI search documentation documents bracketed modifiers that avoid that ambiguity:

entity:ip port_service_product[80]:nginx port_service_version[80]:1.24.0
entity:ip os_type[445]:"10.0.20348"

The first query binds nginx and its version to port 80. The second asks for the SMB-derived Windows build on port 445. Protocol, banner, product, version, CPE, OS, device type and fingerprint conditions can be port-scoped. They can be combined with IP-level filters such as ASN, country or certificate subject.

A search-history trap: the documentation says service fields are indexed from the latest scan of each port. A saved query is not a search over every historical analysis. Preserve the dated analysis you used and retrieve older analyses when the question is historical.

VirusTotal's own noise examples show why this matters. Its source reported more than 1.5 million hits for open port 50050 and 4.5 million for open port 8443. Those were broad candidate populations, not counts of Cobalt Strike or malicious panels. Hosts that answer on many probed ports can swamp a port-only hunt.

Case 1: an SSH-key relationship without an APT verdict

VirusTotal began with 91.219.237[.]110, which appeared in an APT28 collection and a community Havoc collection. Its reported services included SSH on 22 and nginx on 80. Searching the SSH fingerprint produced one additional host:

entity:ip fingerprint:"SHA256:SbF6+nFx6ngfUw2L+jsqN6uu5tdsFc5jUW849WA/Sxw"
Reported host Source observation Why the lead mattered
91.219.237[.]110 ServerAstra, Hungary; 3 detections; collection associations Starting point for the vendor's investigation, not sufficient actor evidence.
185.146.232[.]3 FlokiNET, Iceland; 0 detections and no reported collections or communicating files Same SSH key and service stack, with the unusual certificate subject b4ck.my.
96.9.125[.]59 Romanian hosting; found through the certificate subject SSH last seen open on 18 November 2025; HTTP last seen open on 5 December 2025.

The source also observed SSH first appearing on 185.146.232[.]3 on 22 November 2025. That timing is consistent with an infrastructure transition, but does not prove that one node replaced another. The source's combined refinement was:

entity:ip ssl_subject:"b4ck.my" port_service_version[22]:"9.6p1 Ubuntu 3ubuntu13.19"

Two qualifications change the conclusion. First, the malware linked to the starting IP had been submitted in 2009–2015. An IP can be reassigned; an old sample cannot attribute the present service operator to APT28. Second, the source found SSH keys reused across more than 1,400 cloud IPs and more than 1,200 residential IPs. Its example cluster's JARM also matched 1.7 million hosts.

Our assessment: rarity and corroboration make this a useful relationship lead. A certificate common name is a chosen string, and a shared key may come from a copied image. Record separate evidence types and alternative explanations. Keep actor attribution, operator ownership and maliciousness as separate questions.

Case 2: a stealer panel changes its name; the host keeps its shape

The second investigation started with a URL hunt for a password form on a literal IP address and a non-standard port:

entity:url tag:ns-port tag:password-input tag:ip

The source's candidate was https://5.175.221[.]206:8443/. Its 24 September 2026 scan had only 1/96 vendor detections, but the captured page presented a NOX Stealer operator login. This is evidence reported by VirusTotal; we did not visit that panel.

Port Reported observation Analytical value
8443 HTTPS, nginx 1.24.0 and PHP/8.3.33; stealer login panel Connects page content to a service on the host.
445 SMB classification consistent with Windows Server 2022, build 10.0.20348 Adds a second protocol to the host profile.
3389 Microsoft Terminal Services; a Windows Server 2016/2019 fingerprint Supports exposed RDP, while illustrating that classifications are not perfectly consistent.
80 Recently closed; last seen open 24 September 2026 with an HTTPS redirect Preserves the earlier web-service observation.

VirusTotal combined the web stack with SMB and RDP to reduce its source-time candidate set from millions to 10 IPs:

entity:ip port_service_product[8443]:nginx port_service_cpe[8443]:php os_type[445]:10.0.20348 open_port:445 open_port:3389

Those 10 were matching host profiles, not 10 confirmed malicious systems. The value was a manageable review set.

During the vendor's research the panel rebranded from NOX to BOMBAY. The source reported the raw HTML shrinking from 11,408 bytes to 193 bytes, while browser execution still revealed the new title. The exposed nginx/PHP, SMB and RDP profile remained unchanged. Searches based on the old name therefore became fragile; host observations provided continuity.

Our assessment: combine rendered-page evidence with service evidence. A CDN can hide the origin associated with a domain, but it does not protect an origin that is independently exposed through a raw-IP URL. Similar configurations still need review; do not treat this profile as a malware signature or assume each Windows classification is exact.

Case 3: an FTP welcome message becomes a delivery stage

SOCRadar's FTP-banner research described two clusters delivering E4del and PINHOLE RATs. The delivery trick was to make a shortcut launch a command chain that handed an FTP server's welcome text to a command interpreter. The remote response supplied a stage of execution.

VirusTotal used stored banners to look for that behavior:

entity:ip port_banner[21]:"conhost"

The source reported five results. This table preserves their source-time status and next-hop relationships:

First-hop IP Port 21 observation reported by VirusTotal Next-hop IP in the banner
157.254.194[.]31 Closed; last seen open 10 August 2026 167.148.41[.]164
54.37.237[.]164 Open; observed 1 October 2026 54.37.237[.]166
51.89.199[.]125 Closed; last seen open 31 August 2026 51.89.199[.]118
185.14.92[.]162 Closed; open observation on 3 July 2026 185.14.92[.]223
45.87.41[.]133 Closed; last seen open 8 July 2026 64.111.92[.]89

The source additionally placed the last host's banner activity on 30 June 2026, before the early-July start discussed in the earlier research. It reported the first E4del-chain host exposing nginx on 8000 and Python SimpleHTTP on 8080 from 28 September 2026. These are useful historical questions, not claims about what is reachable today.

Our assessment: the response content and its execution context are stronger leads than a port number. Expand carefully to related hosts when a next hop shares a network, but do not block an entire /24 because two nodes are nearby. Never execute a retrieved banner to find out what it does.

What each team should check

Team Exposure to review Practical next step Evidence to keep
SIEM / threat intelligence Leads promoted into detections without dates or confidence Save the exact query, result time and rare features; correlate selected candidates with internal records. Source URL, observation time, analysis identifier, exclusions and confidence rationale.
EDR FTP-to-shell execution or contact with reported infrastructure Scope a host group, review process ancestry and network events, then preserve the process tree. Command lines, initiating process, destination, timestamp and prevention outcome.
IT Operations Public management services, copied SSH keys and exposed origins Compare your approved public asset inventory with observations; check RDP/SMB exposure and image key-generation practices. Asset owner, approved exposure, patch/configuration evidence and provisioning records.
Third-party Risk Intelligence coverage, quotas and supplier evidence Confirm feature/API entitlement and retention; ask suppliers to explain relevant exposed services rather than infer compromise. Contract scope, observation provenance, supplier response and freshness limits.

For your own public assets, add your authorised IPv4 range to the search rather than start with a global port hunt:

entity:ip ip:"REPLACE_WITH_OWNED_IPV4_CIDR" open_port:3389

Replace the placeholder with an approved public range. This is a search of existing third-party observations, not permission to actively probe hosts. An unexplained management service deserves an owner review even if no malicious reputation exists.

Scoped internal hunts: connection evidence and execution behavior

Execution status, 13 October 2026: the following are SecOpsNomad triage templates reviewed against documented schemas. They have not been executed against a live Defender or Splunk environment, and the VirusTotal searches above have not been rerun by us. Use account permissions and telemetry coverage appropriate to your environment.

Defender XDR: connections to four reported research leads

Use Advanced Hunting with Defender for Endpoint network telemetry in DeviceNetworkEvents. Required fields are Timestamp, DeviceId, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName and ActionType. Replace the device ID, choose a window within your retention, and review at most 100 grouped results. The seven-day default is a recent triage window, not a replay of the source's older observations.

// Microsoft Defender XDR; research leads, not a confirmed malicious-IP list.
// Replace device scope and select a time window relevant to the source evidence.
let Start = ago(7d);
let End = now();
let TargetDevices = dynamic(["REPLACE_WITH_DEVICE_ID"]);
let ReportedIPs = dynamic(["91.219.237.110", "185.146.232.3", "96.9.125.59", "5.175.221.206"]);
DeviceNetworkEvents
| where Timestamp between (Start .. End)
| where DeviceId in (TargetDevices)
| where RemoteIP in (ReportedIPs)
| summarize FirstSeen=min(Timestamp), LastSeen=max(Timestamp), Events=count(),
    Processes=make_set(InitiatingProcessFileName, 10), Actions=make_set(ActionType, 10)
    by DeviceId, DeviceName, RemoteIP, RemotePort
| order by LastSeen desc
| take 100

Download the KQL template.

Expected result: the selected devices' recorded contacts, grouped by IP and port, with process names and event actions. A row is not proof of successful connection, infection or attribution; inspect the event's action and the address's ownership at that time. Shared hosting and reassignment create false positives. Unmanaged devices, missing telemetry and expired history are blind spots. No rows do not prove safety.

Defender XDR: FTP references in shell-related process commands

Use DeviceProcessEvents with process-creation telemetry and hunting access. Required fields are Timestamp, DeviceId, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName and InitiatingProcessCommandLine. Replace the same device scope. The query looks for FTP references together with a pipe or conhost marker; it does not reconstruct the full chain.

// Microsoft Defender XDR; behavioral triage, not a malware verdict.
let Start = ago(7d);
let End = now();
let TargetDevices = dynamic(["REPLACE_WITH_DEVICE_ID"]);
DeviceProcessEvents
| where Timestamp between (Start .. End)
| where DeviceId in (TargetDevices)
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "conhost.exe", "ftp.exe")
| where ProcessCommandLine contains "ftp"
| where ProcessCommandLine contains "|" or ProcessCommandLine contains "conhost"
| project Timestamp, DeviceId, DeviceName, FileName, ProcessCommandLine,
    InitiatingProcessFileName, InitiatingProcessCommandLine
| order by Timestamp desc
| take 100

Download the process-review KQL template.

Expected result: up to 100 recent command lines for manual ancestry review. Administrative scripts can match. Renamed binaries, altered command syntax, missing command lines and execution through other interpreters can be missed. Compare with endpoint network events and any shortcut, attachment or download that launched the process. Do not run the recovered command.

Splunk: the same four leads in mapped network logs

Use a network index and sourcetype you are authorised to search. Replace both placeholders and the single source IP. This example expects _time, src_ip, dest_ip, dest_port and action; map your fields first. It searches seven days and returns at most 100 grouped rows.

index=REPLACE_WITH_NETWORK_INDEX sourcetype=REPLACE_WITH_NETWORK_SOURCETYPE earliest=-7d latest=now
src_ip="REPLACE_WITH_SOURCE_IP"
dest_ip IN ("91.219.237.110", "185.146.232.3", "96.9.125.59", "5.175.221.206")
| stats min(_time) AS first_seen max(_time) AS last_seen count AS events values(action) AS actions BY src_ip dest_ip dest_port
| sort 0 - last_seen
| head 100

Download the Splunk template.

Expected result: source-to-destination contacts and recorded actions. NAT, proxies, reused addresses, missing allow/deny events and field mapping affect interpretation. These are the same research leads as the Defender example, not a blocklist.

Automation: keep the observation and the entitlement together

The announcement describes port_info on the IP object and these API resources:

API path under /api/v3 Source-described purpose
/ip_addresses/{ip} IP information, including the port list.
/port_infos/{ip}:{port} A port's current recorded state.
/port_infos/{ip}:{port}/analysis Port analysis history, paginated with a cursor.
/port_analyses/{ip}:{port}:{timestamp} One recorded analysis.

API state values include PORT_INFO_STATUS_OPEN, PORT_INFO_STATUS_CLOSED and PORT_INFO_STATUS_RECENTLY_CLOSED; dates are Unix timestamps. Confirm your account's access, quota and current schema before integrating. The blog describes the interface; this article does not provide a live API compatibility test.

For recurring hunts, bound the result count, handle rate limits, retain the retrieval time and scan time separately, and deduplicate by IP, port and analysis. The source says these port fields were not available in IP Livehunt's vt.net.ip module at announcement time. Scheduled API searches were its proposed alternative. Recheck that limitation before designing around it.

A decision rule that avoids premature blocking

  1. Inspect the observation. Which port, service, timestamp and response produced the lead? Is the search using current service fields or a historical analysis?
  2. Measure specificity. A rare key may help; a widely reused default, generic nginx version or port number usually needs more evidence.
  3. Corroborate with another signal. Compare certificate details, passive DNS, rendered page content and service configuration, while recording shared-template explanations.
  4. Check your own exposure and telemetry. A service relationship outside your environment and an execution chain on your endpoint answer different questions.
  5. Choose a proportionate action. Investigation, an owner check, watchlisting and blocking need different confidence. Retain source dates and review stale entries.

The practical gain is a richer investigation record: something observable to compare when reputation is sparse or page branding changes. The responsibility is to preserve what that comparison establishes, and what it does not.

What remains unknown

  • We have not independently confirmed the present ownership, exposure or maliciousness of the reported addresses, or the vendor's search hit counts.
  • The post does not establish present-day APT28 ownership of the SSH-key cluster. Old communicating samples and community collections cannot close that gap.
  • A service fingerprint is not a forensic finding about operating system, vulnerability or compromise. Reachability can differ by vantage point.
  • Feature entitlements, quotas, historical retention and scanning coverage need confirmation for the account using the data.
  • Our KQL and Splunk examples have schema review, not live execution validation; their coverage depends on your telemetry and chosen scope.

Sources and publication note

Publication note, 13 October 2026: original SecOpsNomad analysis based on the supplied VirusTotal post and the primary sources above. The header graphic is original artwork. Research indicators are defanged in prose; query templates retain literal addresses for comparison. No independent scan, attribution or live hunting execution is claimed.

Editorial update, 15 October 2026: revised the headline, briefing and opening to explain what the Internet Scanning launch adds, with a comparison of existing IP intelligence and the new service data. Case-study observations and query templates retain their original dates and scope.

All articles →日本語で読む ↗