This hunt targets adversary behavior involving the execution of known VShell indicators of compromise (IOCs) within the Azure environment to identify potential command-and-control or lateral movement activities. Proactively hunting for these 28 specific IOCs in Azure Sentinel is critical because early detection of this high-severity threat enables rapid containment before the adversary establishes a persistent foothold across cloud workloads.
Malware Family: VShell Total IOCs: 28 IOC Types: ip:port
| Type | Value | Threat Type | First Seen | Confidence |
|---|---|---|---|---|
| ip:port | 123[.]57[.]133[.]197:8084 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]100[.]33:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]61:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 43[.]226[.]40[.]204:57665 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]62:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 38[.]76[.]201[.]200:33333 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]48:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]43:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]40:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]41:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]96[.]47:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]99[.]38:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]100[.]51:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]97[.]44:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]103[.]62:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]102[.]44:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]103[.]49:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]101[.]52:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 101[.]43[.]124[.]213:8085 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 110[.]42[.]189[.]130:8084 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]100[.]35:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 119[.]45[.]105[.]71:8088 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]102[.]57:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]102[.]36:8885 | botnet_cc | 2026-07-12 | 100% |
| ip:port | 154[.]88[.]100[.]56:8885 | botnet_cc | 2026-07-12 | 100% |
// Hunt for network connections to known malicious IPs
// Source: ThreatFox - VShell
let malicious_ips = dynamic(["154.88.97.44", "154.88.100.51", "154.88.99.41", "154.88.100.56", "154.88.99.48", "154.88.100.40", "139.129.51.9", "154.88.100.33", "154.88.99.61", "154.88.99.62", "154.88.101.52", "119.45.105.71", "43.226.40.204", "154.88.102.44", "154.88.96.47", "101.43.124.213", "154.88.102.57", "154.88.99.40", "123.57.133.197", "154.88.103.62", "154.88.99.38", "154.88.100.34", "154.88.100.35", "110.42.189.130", "154.88.103.49", "154.88.102.36", "38.76.201.200", "154.88.99.43"]);
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.44", "154.88.100.51", "154.88.99.41", "154.88.100.56", "154.88.99.48", "154.88.100.40", "139.129.51.9", "154.88.100.33", "154.88.99.61", "154.88.99.62", "154.88.101.52", "119.45.105.71", "43.226.40.204", "154.88.102.44", "154.88.96.47", "101.43.124.213", "154.88.102.57", "154.88.99.40", "123.57.133.197", "154.88.103.62", "154.88.99.38", "154.88.100.34", "154.88.100.35", "110.42.189.130", "154.88.103.49", "154.88.102.36", "38.76.201.200", "154.88.99.43"]);
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 specific false positive scenarios for the ThreatFox: VShell IOCs rule in an enterprise environment, including suggested filters and exclusions:
Endpoint Security Agent Updates & Definitions
Process Name and User Account. Filter for processes like C:\Program Files\CrowdStrike\fsagent.exe or MsMpEng.exe running under the local system account (NT AUTHORITY\SYSTEM) or a dedicated service account (e.g., svc-antivirus-updates).IT Asset Management & Patch Deployment
10.x.x.50 for the SCCM site server) or specific Service Accounts used by deployment tools (e.g., DOMAIN\svc-ansible-runner). Additionally, filter by the parent process path if the IOCs are triggered during a scheduled task execution (e.g., C:\Windows\System32\schtasks.exe calling a deployment script).**Third-Party Cloud Security Sc