This hypothesis targets the execution of the vshell reverse shell payload, a tool frequently used by adversaries to establish persistent remote access and facilitate command-and-control communications. Proactively hunting for these specific URLs in Azure Sentinel allows the SOC team to identify compromised endpoints before the attacker can fully leverage the shell for lateral movement or data exfiltration.
Threat: vshell Total URLs: 3 Active URLs: 3
| URL | Status | Threat | Date Added |
|---|---|---|---|
hxxp://222.112.70.149:8084/?h=222.112.70.149&p=8084&t=ws&a=w32&stage=true | online | malware_download | 2026-09-14 |
hxxp://175.27.140.230:8888/?a=w32&h=175.27.140.230&p=8888&stage=true&t=ws | online | malware_download | 2026-09-14 |
hxxp://139.95.24.51:8081/?h=139.95.24.51&p=8081&t=tcp&a=w64&stage=true | online | malware_download | 2026-09-14 |
// Hunt for DNS resolution of URLhaus malicious domains
// Threat: vshell
let malicious_domains = dynamic(["139.95.24.51", "175.27.140.230", "222.112.70.149"]);
DnsEvents
| where Name has_any (malicious_domains)
| project TimeGenerated, Computer, Name, IPAddresses
| order by TimeGenerated desc
// Hunt for web traffic to URLhaus malicious domains
let malicious_domains = dynamic(["139.95.24.51", "175.27.140.230", "222.112.70.149"]);
CommonSecurityLog
| where RequestURL has_any (malicious_domains) or DestinationHostName has_any (malicious_domains)
| project TimeGenerated, SourceIP, RequestURL, DestinationHostName, DeviceAction
| order by TimeGenerated desc
| Sentinel Table | Notes |
|---|---|
CommonSecurityLog | Ensure this data connector is enabled |
DnsEvents | Ensure this data connector is enabled |
/api/, /dashboard/, or /webhook/ and the HTTP response header Server matches nginx or apache rather than a generic shell interpreter.canarytokens.org or internal honeytoken.io) that mimics the vshell URL pattern to detect unauthorized access, but the URL is accessed by the monitoring agent itself.
10.20.30.0/24) or where the user agent string contains CanaryToken or HoneypotMonitor.rsync or aws s3 sync) pulls configuration files from a staging server that has a temporary vshell-like URL structure for debugging purposes, which is not yet cleaned up.
.json, .yaml, or .conf and where the HTTP method is GET with a status code of 200, specifically if the source process is rsync, curl, or wget initiated by a service account.ngrok or cloudflared) that generates a unique subdomain matching the vshell pattern, and the service is accessed by an integration test suite.