← Back to SOC feed Coverage →

Tor

kql MEDIUM Azure-Sentinel
DeviceNetworkEvents
huntingmicrosoftofficial
This rule was pulled from an open-source repository and enriched with AI. Validate in a test environment before deploying to production.
View original rule at Azure-Sentinel →
Retrieved: 2026-05-07T23:00:00Z · Confidence: medium

Hunt Hypothesis

Adversaries may use Tor or Meek to exfiltrate data or communicate covertly, leveraging encrypted networks to evade detection. SOC teams should proactively hunt for Tor-related activity in Azure Sentinel to identify potential command and control channels or data exfiltration attempts.

KQL Query

DeviceNetworkEvents  
| where Timestamp < ago(3d) and InitiatingProcessFileName in~ ("tor.exe", "meek-client.exe")
// Returns MD5 hashes of files used by Tor, to enable you to block them.
// We count how prevalent each file is (by machines) and show examples for some of them (up to 5 machine names per hash).
| summarize MachineCount=dcount(DeviceName), MachineNames=makeset(DeviceName, 5) by InitiatingProcessMD5
| order by MachineCount desc

Analytic Rule Definition

id: a0b19966-3b4d-45de-969c-ee5f1ef8c18a
name: Tor
description: |
  This query looks for Tor client, or for a common Tor plugin called Meek.
  We query for active Tor connections, but could have alternatively looked for active Tor runs (ProcessCreateEvents) or Tor downloads (DeviceFileEvents).
  To read more about this technique, see:.
  Tor: https://attack.mitre.org/wiki/Software/S0183#Techniques_Used.
  Meek plugin: https://attack.mitre.org/wiki/Software/S0175.
  Multi-hop proxy technique: https://attack.mitre.org/wiki/Technique/T1188.
  Tags: #Tor, #MultiHopProxy, #CnC.
requiredDataConnectors:
- connectorId: MicrosoftThreatProtection
  dataTypes:
  - DeviceNetworkEvents
query: |
  DeviceNetworkEvents  
  | where Timestamp < ago(3d) and InitiatingProcessFileName in~ ("tor.exe", "meek-client.exe")
  // Returns MD5 hashes of files used by Tor, to enable you to block them.
  // We count how prevalent each file is (by machines) and show examples for some of them (up to 5 machine names per hash).
  | summarize MachineCount=dcount(DeviceName), MachineNames=makeset(DeviceName, 5) by InitiatingProcessMD5
  | order by MachineCount desc

Required Data Sources

Sentinel TableNotes
DeviceNetworkEventsEnsure this data connector is enabled

References

False Positive Guidance

Original source: https://github.com/Azure/Azure-Sentinel/blob/main/Hunting Queries/Microsoft 365 Defender/Command and Control/Tor.yaml