A regional hospital SOC received a Check Point VPN advisory the same week public reports confirmed active exploitation of a Security Gateway remote-code-execution flaw. Analysts pulled the source IP from three failed admin-portal attempts, opened a popular internet-wide scan portal, and saw SSH on 22, a stale Apache banner, and a clean malware reputation score. They closed the ticket as commodity scanning. Six days later, host telemetry showed that same address had served a WordPress plugin payload to an internal jump box during the exact half-hour window of those VPN probes. The live scan page had refreshed overnight. The host the analysts trusted was no longer the host that had touched their edge.
That failure pattern shows up whenever teams treat OSINT as a current screenshot instead of a time-bounded reconstruction. Public indexes, reverse DNS, certificate caches, and abuse listings are valuable. They become misleading when investigators substitute today’s fingerprint for the infrastructure state that existed when the alert fired.
What went wrong in the hospital’s IP hunt
The team followed a familiar checklist: geolocation, ASN, open ports, one reputation lookup, one WHOIS contact. Each step answered a useful question about the IP as of the moment of the lookup. None of those answers constrained the investigation to the timestamps on the firewall and VPN logs.
During the same period, operators elsewhere were racing to patch after Dutch NCSC and vendor warnings around Check Point VPN flaws, while WordPress critical-code-execution campaigns and skimmer deployments tied to malicious automation pushed disposable hosting into short lifetimes. Infrastructure that hosts an exploit kit at 02:14 can look like a quiet VPS by noon. OSINT that ignores that churn attributes the wrong service profile to the right address.
Anchor every lookup to the incident clock
Start with the earliest and latest timestamps where the IP appears in your telemetry: edge firewall accepts or drops, VPN auth failures, proxy CONNECT records, DNS resolutions from endpoints, EDR network events. Write those bounds into the case notes before any external query.
- Record timezone and clock source for each log class so you can align proxy and host events without inventing false simultaneity.
- Prefer the first internal sighting over the first public listing; public feeds often lag hours or days behind your own sensors.
- If the IP rotates across a short window, treat the set as one session family until identity or TLS fingerprints prove otherwise.
Tradeoff: a strict time box slows “quick block” muscle memory. The payoff is that every subsequent Shodan, Censys, SecurityTrails, or CRT.sh result can be labeled in-window, pre-window, or post-window. Post-window banners are context, not evidence of what contacted you.
Rebuild the public surface that existed then
Live port lists describe what answers now. Historical OSINT describes what could have answered during your breach window.
Historical hosting and DNS
Pull passive DNS for the IP across the incident window and the seven days before it. Note which hostnames resolved to the address, which of those names still resolve there, and which moved to new A or AAAA records after your last alert. Certificate Transparency entries that mention those names give you issuance times that often survive hosting migrates.
When MovieReaper-style campaigns push malware through compromised distribution sites, or when skimmer operators infect dozens of storefronts and rotate exit or staging hosts, the useful OSINT signal is often the hostname history, not the current landing page on the IP.
Scan indexes with date filters
Use internet-wide scan archives that expose observation dates. Match banners, HTTP titles, TLS serials, and JA3 or JA4-like fingerprints to observations nearest your window. If the nearest observation is weeks away, mark confidence low and say so in the ticket.
Caveat: some indexes sample unevenly. A missing historical scan does not prove the port was closed. Pair indexes with your own packet captures or NetFlow when available.
Routing and registration as supporting context
ASN, RIR allocation, and abuse contacts help you decide whom to notify and whether the space is cloud, residential, or specialized hosting. Treat them as routing and operator context. They do not prove which process listened on the host at 02:14. When GitLab-related supply-chain abuse or phishing kit hosting sits on shared cloud ranges, registration data alone will not separate the malicious tenant from neighbors.
Separate shared neighbors from campaign infrastructure
Reverse-IP and “same certificate” pivots expand scope fast. They also pull in innocent co-tenants on CDNs, parking pages, and multi-site WordPress hosts.
- Require a second independent link before promoting a neighbor IP into the hunt: shared unique HTTP body hash, identical rare TLS certificate, matching malware family beacon URI, or overlapping victim set in trusted reporting.
- Score shared cloud ASNs lower for attribution and higher for containment decisions that affect only your egress allowlists.
- Keep compromised-legitimate hosts on a different playbook from purpose-built C2. Both may appear on abuse lists; only one deserves customer notification and sinkhole coordination.
This distinction matters when public headlines mix VPN edge exploitation, WordPress mass compromise, and financial-sector monitoring reports. The same blocklist can contain scanners, sinkholes, bulletproof staging, and hijacked marketing sites. Your OSINT package should label which category the evidence supports.
Build a reproducible OSINT package, not a portal screenshot
Every IP case should leave behind artifacts another analyst can re-run:
- Incident time bounds and log sources used
- Queries executed (tool, parameters, exact UTC time of the query)
- Raw exports: passive DNS CSV, CT results, historical scan JSON, WHOIS snapshot
- Confidence notes for geo, ASN, and service attributions
- Actions taken: block, monitor, ticket to identity, vendor notify
Implementation detail that saves hours: store the query time beside the result. Reputation and scan portals change underneath you. Without that stamp, next week’s reviewer cannot tell whether a “clean” score applied during the incident or only after the operator rotated content.
Tradeoff: packaging adds ten to twenty minutes per high-severity IP. For low-severity scanner noise, use a shortened template that still captures time bounds and one historical check. Full packages belong on VPN admin paths, identity-adjacent portals, and any IP that touched a host that later showed malware.
When public news should change your OSINT priority
Map external reporting to your hunt queue without copying someone else’s attribution.
- Active exploitation of edge VPN flaws: prioritize OSINT on sources that hit management or auth URLs, then reconstruct historical service state on those sources before mass blocking.
- WordPress RCE waves: expect short-lived shared hosting; lean on passive DNS and CT more than today’s HTTP title.
- Skimmer and malicious-agent campaigns: pivot from payment-page domains and first-party script hosts, then to IPs only after hostname evidence lands in-window.
- Torrent- and SEO-driven malware: treat residential or consumer VPN exits as possible last-hop noise; hunt the staging hostname and payload hash first.
Caveat: headlines set priority and hypotheses. Your logs set facts. Keep both labels visible in the case.
Practical workflow you can run this week
- Freeze the alert IP’s first and last seen times from edge plus host telemetry.
- Export passive DNS and CT for that window; list hostnames that overlapped the window.
- Pull the nearest historical scan observations; mark gaps explicitly.
- Compare current live scan results as a delta, not as ground truth.
- Pivot only on dual-signal neighbors; park single-signal reverse-IP hits in a watch list.
- Notify the abuse contact with your time bounds and evidence hashes attached; ask for confirmation of customer or takedown status in that window.
- Feed confirmed in-window infrastructure into detection as indicators with expiry dates that match how fast that class of host rotates.
Takeaways for defenders
OSINT for IP investigation earns its keep when it reconstructs the public face of a host during your incident window, documents how you know, and resists collapsing shared neighbors into one attribution story. Live scan portals are one input. Time-bounded passive DNS, certificate history, dated scan archives, and disciplined pivots turn that input into decisions your SOC can defend after the operator has already wiped the banners your first screenshot showed.