This hypothesis targets the presence of VShell, a lightweight reverse shell tool frequently used by adversaries to establish persistent, low-noise command-and-control channels that often evade standard network monitoring. Proactively hunting for these specific IOCs in Azure Sentinel allows the SOC to identify compromised endpoints early, preventing attackers from leveraging this tool for lateral movement or data exfiltration before they can escalate privileges.
Malware Family: VShell Total IOCs: 17 IOC Types: ip:port
| Type | Value | Threat Type | First Seen | Confidence |
|---|---|---|---|---|
| ip:port | 154[.]91[.]56[.]110:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 119[.]45[.]28[.]237:8081 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 115[.]159[.]72[.]17:8084 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]63[.]99:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]63[.]122:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]63[.]103:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]63[.]123:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]63[.]117:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]63[.]119:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]56[.]106:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]56[.]108:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]56[.]125:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]60[.]106:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]56[.]103:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]59[.]109:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]59[.]114:8074 | botnet_cc | 2026-09-10 | 100% |
| ip:port | 154[.]91[.]60[.]105:8074 | botnet_cc | 2026-09-10 | 100% |
// Hunt for network connections to known malicious IPs
// Source: ThreatFox - VShell
let malicious_ips = dynamic(["154.91.56.125", "154.91.60.105", "154.91.63.123", "154.91.63.103", "154.91.63.117", "154.91.60.106", "154.91.56.110", "154.91.63.122", "115.159.72.17", "154.91.63.119", "154.91.56.103", "154.91.63.99", "154.91.56.108", "154.91.56.106", "154.91.59.109", "154.91.59.114", "119.45.28.237"]);
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.91.56.125", "154.91.60.105", "154.91.63.123", "154.91.63.103", "154.91.63.117", "154.91.60.106", "154.91.56.110", "154.91.63.122", "115.159.72.17", "154.91.63.119", "154.91.56.103", "154.91.63.99", "154.91.56.108", "154.91.56.106", "154.91.59.109", "154.91.59.114", "119.45.28.237"]);
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 |
Scenario: A DevOps engineer uses the vshell binary (or a similar lightweight shell utility like mksysb or custom-built debug shells) during a scheduled maintenance window to troubleshoot network connectivity issues on a Linux host, triggering the IOCs for known VShell hashes or command-line patterns.
jenkins, gitlab-runner, ansible) or where the execution occurs within a designated “Maintenance” security group and the user account belongs to the devops or sre domain group.Scenario: A security team performs a periodic vulnerability scan or threat hunt using a tool like Nessus or Qualys that includes a payload or script referencing VShell IOCs to verify detection coverage, causing the scanner’s agent to execute the IOC-matching logic or download the sample.
security-scanner subnet (e.g., 10.20.30.0/24) or where the process name matches known scanner agents (nessus-agent, qualys-agent, tenable-scanner).Scenario: An application deployment pipeline uses a container image built from a base OS that includes a legacy or debug version of a shell utility with a hash matching one of the 17 VShell IOCs, which is executed as part of a standard docker build or kubectl apply job.
docker or containerd and the namespace is dev, staging, or ci-cd, or where the process is a child of dockerd or kubelet and the user is `