This hunt hypothesis targets adversary behavior involving the execution or network communication of known VShell indicators of compromise (IOCs) to detect potential command-and-control activity or initial access attempts. Proactively hunting for these 24 specific IOCs in Azure Sentinel is critical because it enables the SOC team to identify and contain high-severity threats associated with this malware family before they escalate into broader lateral movements within the enterprise environment.
Malware Family: VShell Total IOCs: 24 IOC Types: ip:port
| Type | Value | Threat Type | First Seen | Confidence |
|---|---|---|---|---|
| ip:port | 154[.]88[.]97[.]34:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]55:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]45:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]49:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]48:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]50:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]61:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]57:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]37:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]33:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]50:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]43:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]53:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]33:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 45[.]197[.]36[.]34:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]97[.]39:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]55:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 43[.]161[.]215[.]33:21 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]40:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]61:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]35:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 154[.]88[.]96[.]57:8885 | botnet_cc | 2026-07-14 | 100% |
| ip:port | 38[.]14[.]212[.]71:8888 | botnet_cc | 2026-07-13 | 100% |
| ip:port | 154[.]88[.]96[.]59:8885 | botnet_cc | 2026-07-13 | 100% |
// Hunt for network connections to known malicious IPs
// Source: ThreatFox - VShell
let malicious_ips = dynamic(["154.88.97.33", "43.161.215.33", "38.14.212.71", "154.88.96.50", "154.88.96.40", "154.88.96.43", "154.88.97.49", "154.88.97.50", "154.88.96.57", "154.88.97.57", "154.88.96.59", "154.88.97.48", "154.88.96.45", "154.88.96.35", "45.197.36.34", "154.88.96.61", "154.88.97.39", "154.88.97.55", "154.88.96.55", "154.88.97.61", "154.88.96.37", "154.88.97.34", "154.88.97.53", "154.88.96.33"]);
CommonSecurityLog
| where DestinationIP in (malicious_ips) or SourceIP in (malicious_ips)
| project TimeGenerated, SourceIP, DestinationIP, DestinationPort, DeviceAction, Activity
| order by TimeGenerated desc
// Hunt in Defender for Endpoint network events
let malicious_ips = dynamic(["154.88.97.33", "43.161.215.33", "38.14.212.71", "154.88.96.50", "154.88.96.40", "154.88.96.43", "154.88.97.49", "154.88.97.50", "154.88.96.57", "154.88.97.57", "154.88.96.59", "154.88.97.48", "154.88.96.45", "154.88.96.35", "45.197.36.34", "154.88.96.61", "154.88.97.39", "154.88.97.55", "154.88.96.55", "154.88.97.61", "154.88.96.37", "154.88.97.34", "154.88.97.53", "154.88.96.33"]);
DeviceNetworkEvents
| where RemoteIP in (malicious_ips)
| project Timestamp, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, ActionType
| order by Timestamp desc
| Sentinel Table | Notes |
|---|---|
CommonSecurityLog | Ensure this data connector is enabled |
DeviceNetworkEvents | Ensure this data connector is enabled |
Here are 5 specific false positive scenarios for the ThreatFox: VShell IOCs detection rule in an enterprise environment, along with suggested filters or exclusions:
Security Operations Center (SOC) Threat Intelligence Feeds Ingestion
Host_Group = SIEM_Ingest_Servers) and restrict alerts to non-whitelisted user workstations only.IT Administration Manual Threat Hunting & Baseline Validation
Invoke-WebRequest cmdlet or a tool like curl against VShell sandbox URLs to validate connectivity and download sample malware artifacts for training purposes. This activity triggers network connection alerts matching the detection logic.powershell.exe, curl.exe) running under a known administrative account (e.g., DOMAIN\SecAdmin_Group) and limit the scope to business hours (08:00–18:00).Automated Patch Management & Software Deployment