{
  "technique_id": "T1489",
  "name": "Service Stop",
  "priority": "high",
  "status": "draft",
  "version": "0.1.0",
  "last_reviewed": "2026-07-23",
  "generated_by": "SOC Response Atlas by Basyrix",
  "tactics": [
    "Impact"
  ],
  "platforms": [
    "ESXi",
    "IaaS",
    "Linux",
    "macOS",
    "Windows"
  ],
  "summary": "Adversaries may stop or disable services on a system to render those services unavailable to legitimate users. Stopping critical services or processes can inhibit or stop response to an incident or aid in the adversary's overall objectives to cause damage to the environment. Adversaries may accomplish this by disabling individual services of high importance to an organization, such as <code>MSExchangeIS</code>, which will make Exchange content inaccessible...",
  "soc_recommendation": "Investigate Service Stop activity in the context of Impact: confirm scope, affected host/identity, and whether it matches expected administrative behaviour before deciding this is benign.",
  "d3fend_mappings": [
    {
      "id": "D3-NTA",
      "name": "Network Traffic Analysis",
      "relationship": "detect",
      "practical_action": "Monitor for Network Traffic Analysis indicators relevant to this technique.",
      "tooling": [
        "Sentinel",
        "Defender for Endpoint"
      ]
    }
  ],
  "investigation_steps": {
    "microsoft": [
      "Review Defender for Endpoint / Defender XDR alerts and timeline for the affected host or identity.",
      "Check Sentinel analytics rules and incidents correlated with this technique.",
      "Review Entra ID sign-in and audit logs if the technique involves an identity or cloud resource."
    ],
    "generic": [
      "Confirm whether the observed service stop activity matches expected administrative or application behaviour.",
      "Identify the host, account, or resource where the activity occurred and its business criticality.",
      "Check for related alerts before and after this activity to reconstruct the broader intrusion timeline.",
      "Real detection reference: \"Common Event Format (CEF) via AMA - Critical or High Severity Detections by User\" -- Creates an incident when a large number of Critical or High severity CrowdStrike Falcon sensor detections is triggered by a single user within 1 hour. The rule uses the CrowdStrikeFalconEventStream table, filters for DetectionSummaryEvent records with Severity set to Critical or High, and alerts when detections for a single DstUserName exceed the configured threshold of 15. Review DstHostName, SrcIpAddr, FileName, FileHash, and Message for investigation context.'"
    ]
  },
  "evidence_to_collect": [
    "Host or resource affected",
    "Account or identity involved",
    "Timestamp of the activity",
    "Related process, file, or network artifact",
    "Any preceding or follow-on alerts"
  ],
  "response_actions": [
    {
      "name": "Contain the affected host or account",
      "category": "Containment",
      "risk": "Medium",
      "automation_safe": false,
      "approval_required": true,
      "tool": "Defender for Endpoint / Entra ID",
      "notes": "Requires approval -- confirm malicious intent before isolating a host or disabling an account."
    },
    {
      "name": "Collect and preserve evidence",
      "category": "Investigation",
      "risk": "Low",
      "automation_safe": true,
      "approval_required": false,
      "tool": "Defender for Endpoint",
      "notes": "Safe -- read-only evidence collection."
    }
  ],
  "queries": {
    "kql": [
      {
        "name": "4465ebde-b381-45f7-ad08-7d818070a11c — Common Event Format (CEF) via AMA - Critical or High Severity Detections by User",
        "description": "Creates an incident when a large number of Critical or High severity CrowdStrike Falcon sensor detections is triggered by a single user within 1 hour. The rule uses the CrowdStrikeFalconEventStream table, filters for DetectionSummaryEvent records with Severity set to Critical or High, and alerts when detections for a single DstUserName exceed the configured threshold of 15. Review DstHostName, SrcIpAddr, FileName, FileHash, and Message for investigation context.' (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "let timeframe = 1h;\nlet threshold = 15; // update threshold value based on organization's preference\nlet NotableEvents = CrowdStrikeFalconEventStream\n| where TimeGenerated > ago(timeframe)\n| where EventType == \"DetectionSummaryEvent\"\n| where Severity in (\"Critical\", \"High\")\n| summarize StartTimeUtc = min(TimeGenerated), EndTimeUtc = max(TimeGenerated), Total = count() by DstUserName, DstHostName, SrcIpAddr, FileName, FileHash, Message\n| where Total > threshold;\nNotableEvents\n| extend timestamp = StartTimeUtc, AccountCustomEntity = DstUserName, HostCustomEntity = DstHostName, IPCustomEntity = SrcIpAddr, FileHashCustomEntity = FileHash, FileHashAlgo = \"MD5\"\n| project timestamp, StartTimeUtc, EndTimeUtc, DstUserName, DstHostName, SrcIpAddr, FileName, FileHash, FileHashAlgo, Message, Total, AccountCustomEntity, HostCustomEntity, IPCustomEntity, FileHashCustomEntity"
      },
      {
        "name": "b54123ef-cfa7-769e-a959-f437404a1192 — UniFi Site Manager: ISP Downtime",
        "description": "Identifies when the ISP connection experiences downtime, impacting business operations and requiring documentation for SLA purposes. (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "// UniFi ISP Downtime Detection\nlet MinDowntimeSeconds = 60;\nUnifi_SiteManager_ISPMetrics_CL\n| where TimeGenerated > ago(30m)\n| mv-expand period = Periods\n| extend\n    metricTime = todatetime(period.metricTime),\n    downtime = toint(period.data.wan.downtime),\n    uptime = todouble(period.data.wan.uptime),\n    ispName = tostring(period.data.wan.ispName),\n    ispAsn = tostring(period.data.wan.ispAsn)\n// De-duplicate Periods: each poll returns the same hour buckets, so collapse to latest value per metricTime\n| summarize arg_max(TimeGenerated, downtime, uptime, ispAsn) by tostring(SiteId), ispName, metricTime\n| where metricTime > ago(30m)\n| where downtime > 0\n| summarize\n    TotalDowntimeSeconds = sum(downtime),\n    EventCount = count(),\n    AvgUptime = round(avg(uptime), 2),\n    FirstSeen = min(metricTime),\n    LastSeen = max(metricTime)\n    by SiteId, ispName, ispAsn\n| where TotalDowntimeSeconds >= MinDowntimeSeconds\n| extend\n    TimeGenerated = now(),\n    DowntimeMinutes = round(TotalDowntimeSeconds / 60.0, 2)\n| project\n    TimeGenerated,\n    SiteId = SiteId,\n    ISPName = ispName,\n    ISPAsn = ispAsn,\n    TotalDowntimeSeconds,\n    DowntimeMinutes,\n    AvgUptimePct = AvgUptime,\n    EventCount,\n    FirstSeen,\n    LastSeen"
      },
      {
        "name": "9283b576-5350-fca1-3979-dacb6acd1d16 — UniFi Site Manager: Multiple Devices Offline",
        "description": "Identifies when multiple UniFi devices go offline simultaneously, typically signaling a power outage, upstream connectivity failure, or infrastructure issue requiring investigation. (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "let prev_offline_ids = Unifi_SiteManager_Devices_CL\n    | where TimeGenerated between (ago(45m) .. ago(15m))\n    | summarize arg_max(TimeGenerated, *) by Id\n    | where Status == \"offline\"\n    | distinct Id;\nUnifi_SiteManager_Devices_CL\n| where TimeGenerated > ago(15m)\n| summarize arg_max(TimeGenerated, *) by Id\n| where Status == \"offline\"\n| extend IsNew = Id !in (prev_offline_ids)\n| summarize\n    OfflineDeviceCount = count(),\n    NewlyOfflineCount = countif(IsNew),\n    OfflineDevices = make_list(coalesce(Name, Id)),\n    NewlyOfflineDevices = make_list_if(coalesce(Name, Id), IsNew),\n    ProductLines = make_set(ProductLine)\n| where OfflineDeviceCount >= 3\n| where NewlyOfflineCount > 0\n| extend\n    TimeGenerated = now(),\n    OfflineDeviceList = strcat_array(OfflineDevices, \", \"),\n    NewlyOfflineList = strcat_array(NewlyOfflineDevices, \", \"),\n    AffectedProductLines = strcat_array(ProductLines, \", \")\n| extend Activity = strcat(NewlyOfflineCount, ' device(s) newly offline (', OfflineDeviceCount, ' total offline): ', NewlyOfflineList)\n| project\n    TimeGenerated,\n    OfflineDeviceCount,\n    NewlyOfflineCount,\n    OfflineDeviceList,\n    NewlyOfflineList,\n    AffectedProductLines,\n    Activity"
      }
    ],
    "spl": [],
    "esql": [
      {
        "name": "6641a5af-fb7e-487a-adc4-9e6503365318 — Suspicious Termination of ESXI Process",
        "description": "(EQL) Identifies instances where VMware processes, such as \"vmware-vmx\" or \"vmx,\" are terminated on a Linux system by a \"kill\" command. The rule monitors for the \"end\" event type, which signifies the termination of a process... (Source: Elastic's official detection-rules repository (Elastic License v2).)",
        "query": "process where host.os.type == \"linux\" and event.type == \"end\" and process.name in (\"vmware-vmx\", \"vmx\")\nand process.parent.name == \"kill\""
      },
      {
        "name": "b627cd12-dac4-11ec-9582-f661ea17fbcd — Elastic Agent Service Terminated",
        "description": "(EQL) Identifies the Elastic endpoint agent has stopped and is no longer running on the host. Adversaries may attempt to disable security monitoring tools in an attempt to evade detection or prevention capabilities during an intrusion. This may also indicate an issue with the agent itself and should be addressed to ensure defensive measures are back in a stable state. (Source: Elastic's official detection-rules repository (Elastic License v2).)",
        "query": "process where event.type == \"start\" and\n(\n  /* net, sc or wmic stopping or deleting Elastic Agent on Windows */\n  (\n    process.name : (\"net.exe\", \"sc.exe\", \"wmic.exe\",\"powershell.exe\",\"taskkill.exe\",\"PsKill.exe\",\"ProcessHacker.exe\") and\n    process.args : (\"stopservice\",\"uninstall\", \"stop\", \"disabled\",\"Stop-Process\",\"terminate\",\"suspend\") and\n    process.args : (\"elasticendpoint\", \"Elastic Agent\",\"elastic-agent\",\"elastic-endpoint\")\n  ) or\n\n  /* service or systemctl used to stop Elastic Agent on Linux */\n  (\n    process.name in (\"systemctl\", \"service\", \"chkconfig\", \"update-rc.d\") and\n    process.args : (\"elastic-agent\", \"elastic-agent.service\", \"ElasticEndpoint\") and\n    process.args : (\"stop\", \"disable\", \"remove\", \"off\", \"kill\", \"mask\") and\n    not (\n      process.parent.executable : \"/opt/Elastic/Agent/data/elastic-agent-*/components/previous/elastic-endpoint\" and\n      process.parent.args : \"uninstall\" and\n      process.parent.args : \"--keepstate\"\n    )\n  ) or\n  \n  /* pkill, killall used to stop Elastic Agent or Endpoint on Linux */\n  (process.name in (\"pkill\", \"killall\", \"kill\") and process.args : (\"elastic-agent\", \"elastic-endpoint\")) or\n\n  /* Unload Elastic Defend extension on MacOS */\n  (process.name : \"kextunload\" and process.args : \"com.apple.iokit.EndpointSecurity\")\n)"
      }
    ]
  },
  "automation": {
    "safe": [
      "Add recommendation as Sentinel incident comment.",
      "Run enrichment queries.",
      "Create ServiceNow SecOps task."
    ],
    "approval_required": [
      "Contain or disable the affected host/account.",
      "Any change to production configuration."
    ]
  },
  "escalation_criteria": [
    "Service Stop activity observed on a privileged account or critical system.",
    "Activity follows or precedes other suspicious behaviour in the same investigation.",
    "Automated triage cannot confidently rule out malicious intent."
  ],
  "false_positive_considerations": [
    "Legitimate administrative or maintenance activity matching this pattern.",
    "Approved security testing or red team exercise.",
    "Known benign software producing similar telemetry."
  ],
  "confluence": {
    "title": "T1489 - Service Stop Response Guidance",
    "labels": [
      "mitre",
      "attack",
      "d3fend",
      "secops",
      "basyrix"
    ],
    "sections": [
      "summary",
      "d3fend_mappings",
      "investigation_steps",
      "response_actions",
      "queries",
      "automation",
      "escalation_criteria",
      "false_positive_considerations"
    ]
  }
}