{
  "technique_id": "T1127",
  "name": "Trusted Developer Utilities Proxy Execution",
  "priority": "high",
  "status": "draft",
  "version": "0.1.0",
  "last_reviewed": "2026-07-23",
  "generated_by": "SOC Response Atlas by Basyrix",
  "tactics": [
    "Stealth",
    "Execution"
  ],
  "platforms": [
    "Windows"
  ],
  "summary": "Adversaries may take advantage of trusted developer utilities to proxy execution of malicious payloads. There are many utilities used for software development related tasks that can be used to execute code in various forms to assist in development, debugging, and reverse engineering...",
  "soc_recommendation": "Investigate Trusted Developer Utilities Proxy Execution activity in the context of Stealth/Execution: confirm scope, affected host/identity, and whether it matches expected administrative behaviour before deciding this is benign.",
  "d3fend_mappings": [
    {
      "id": "D3-FA",
      "name": "File Analysis",
      "relationship": "detect",
      "practical_action": "Monitor for File Analysis indicators relevant to this technique.",
      "tooling": [
        "Defender for Endpoint"
      ]
    },
    {
      "id": "D3-SU",
      "name": "Software Update",
      "relationship": "harden",
      "practical_action": "Apply Software Update to reduce this technique's viability before an incident occurs.",
      "tooling": [
        "Defender for Endpoint"
      ]
    },
    {
      "id": "D3-FEV",
      "name": "File Eviction",
      "relationship": "evict",
      "practical_action": "Use File Eviction to remove the adversary's foothold once this technique is confirmed.",
      "tooling": [
        "Defender for Endpoint"
      ]
    },
    {
      "id": "D3-CF",
      "name": "Content Filtering",
      "relationship": "isolate",
      "practical_action": "Apply Content Filtering to contain the blast radius once this technique is observed.",
      "tooling": [
        "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 trusted developer utilities proxy execution 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: \"Powershell Empire Cmdlets Executed in Command Line\" -- This query identifies use of PowerShell Empire's cmdlets within the command line data of the PowerShell process, indicating potential use of the post-exploitation tool.'"
    ]
  },
  "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": "ef88eb96-861c-43a0-ab16-f3835a97c928 — Powershell Empire Cmdlets Executed in Command Line",
        "description": "This query identifies use of PowerShell Empire's cmdlets within the command line data of the PowerShell process, indicating potential use of the post-exploitation tool.' (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed), mapped via sub-technique T1127.001.)",
        "query": "let regexEmpire = tostring(toscalar(externaldata(cmdlets:string)[@\"https://raw.githubusercontent.com/Azure/Azure-Sentinel/master/Sample%20Data/Feeds/EmpireCommandString.txt\"] with (format=\"txt\")));\n(union isfuzzy=true\n (SecurityEvent\n| where EventID == 4688\n//consider filtering on filename if perf issues occur\n//where FileName in~ (\"powershell.exe\",\"powershell_ise.exe\",\"pwsh.exe\")\n| where not(ParentProcessName has_any ('gc_worker.exe', 'gc_service.exe'))\n| where CommandLine has \"-encodedCommand\"\n| parse kind=regex flags=i CommandLine with * \"-EncodedCommand \" encodedCommand\n| extend encodedCommand = iff(encodedCommand has \" \", tostring(split(encodedCommand, \" \")[0]), encodedCommand)\n// Note: currently the base64_decode_tostring function is limited to supporting UTF8\n| extend decodedCommand = translate('\\0','', base64_decode_tostring(substring(encodedCommand, 0, strlen(encodedCommand) -  (strlen(encodedCommand) %8)))), encodedCommand, CommandLine , strlen(encodedCommand)\n| extend EfectiveCommand = iff(isnotempty(encodedCommand), decodedCommand, CommandLine)\n| where EfectiveCommand matches regex regexEmpire\n| project timestamp = TimeGenerated, Computer, SubjectUserName, SubjectDomainName, FileName = Process, EfectiveCommand, decodedCommand, encodedCommand, CommandLine, ParentProcessName\n| extend HostName = split(Computer, '.', 0)[0], DnsDomain = strcat_array(array_slice(split(Computer, '.'), 1, -1), '.')\n),\n(WindowsEvent\n| where EventID == 4688\n| where EventData has_any (\"-encodedCommand\", \"powershell.exe\",\"powershell_ise.exe\",\"pwsh.exe\")\n| where not(EventData has_any ('gc_worker.exe', 'gc_service.exe'))\n//consider filtering on filename if perf issues occur\n//extend NewProcessName = tostring(EventData.NewProcessName)\n//extend Process=tostring(split(NewProcessName, '\\\\')[-1])\n//FileName = Process\n//where FileName in~ (\"powershell.exe\",\"powershell_ise.exe\",\"pwsh.exe\")\n| extend ParentProcessName = tostring(EventData.ParentProcessName)\n| where not(ParentProcessName has_any ('gc_worker.exe', 'gc_service.exe'))\n| extend CommandLine = tostring(EventData.CommandLine)\n| where CommandLine has \"-encodedCommand\"\n| parse kind=regex flags=i CommandLine with * \"-EncodedCommand \" encodedCommand\n| extend encodedCommand = iff(encodedCommand has \" \", tostring(split(encodedCommand, \" \")[0]), encodedCommand)\n// Note: currently the base64_decode_tostring function is limited to supporting UTF8\n| extend decodedCommand = translate('\\0','', base64_decode_tostring(substring(encodedCommand, 0, strlen(encodedCommand) -  (strlen(encodedCommand) %8)))), encodedCommand, CommandLine , strlen(encodedCommand)\n| extend EfectiveCommand = iff(isnotempty(encodedCommand), decodedCommand, CommandLine)\n| where EfectiveCommand matches regex regexEmpire\n| extend SubjectUserName = tostring(EventData.SubjectUserName)\n| extend SubjectDomainName = tostring(EventData.SubjectDomainName)\n| extend NewProcessName = tostring(EventData.NewProcessName)\n| extend Process=tostring(split(NewProcessName, '\\\\')[-1])\n| project timestamp = TimeGenerated, Computer, SubjectUserName, SubjectDomainName, FileName = Process, EfectiveCommand, decodedCommand, encodedCommand, CommandLine, ParentProcessName\n| extend HostName = split(Computer, '.', 0)[0], DnsDomain = strcat_array(array_slice(split(Computer, '.'), 1, -1), '.')\n))"
      },
      {
        "name": "a11bf869-458e-49fd-be03-58021b14be15 — CyberArkEPM - MSBuild usage as LOLBin",
        "description": "Detects usage of msbuild tool as LOLBin.' (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "CyberArkEPM\n| where EventSubType != 'AttackAttempt'\n| where ActingProcessName endswith @'msbuild.exe'\n| where ActingProcessCommandLine has_any ('xml', 'csproj', 'vcxproj', 'vbproj', 'fsproj')\n| extend AccountCustomEntity = ActorUsername"
      },
      {
        "name": "5c2bb446-926f-4160-a233-21e335c2c290 — Trusted Developer Utilities Proxy Execution",
        "description": "This detection looks at process executions - in some cases with specific command line attributes to filter a lot of common noise. (Source: Microsoft's official Azure-Sentinel Detections (MIT licensed).)",
        "query": "let Timeframe = 1h;\nDeviceProcessEvents\n| where Timestamp > ago(Timeframe)\n| where (FileName has_any (\"msbuild.exe\", \"msxsl.exe\")\nor (FileName has_any (\"vbc.exe\",\"csc.exe\",\"jsc.exe\") and ProcessCommandLine has_any (\"/exe\",\"/dll\",\"/pe64\",\"-exe\",\"-dll\",\"-pe64\"))\nor (FileName == (\"ilsasm.exe\") and ProcessCommandLine has_any (\"out\",\"target\",\"t:\",\"reference\",\"r:\")))\n// Filter initations by Visual Studio since this is expected behavior.\n  and not(FolderPath startswith \"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\" \n  or InitiatingProcessFolderPath startswith \"C:\\\\Program Files (x86)\\\\Microsoft Visual Studio\" \n  and (InitiatingProcessFileName == \"devenv.exe\" or InitiatingProcessFileName == \"WDExpress.exe\"))"
      }
    ],
    "spl": [],
    "esql": [
      {
        "name": "e516bf56-d51b-43e8-91ec-9e276331f433 — Network Activity to a Suspicious Top Level Domain",
        "description": "(EQL) Identifies DNS queries to commonly abused Top Level Domains by common LOLBINs or executables running from world writable directories or unsigned binaries. This behavior matches on common malware C2 abusing less formal domain names. (Source: Elastic's official detection-rules repository (Elastic License v2).)",
        "query": "network where host.os.type == \"windows\" and dns.question.name != null and\n (\n  process.name : (\"MSBuild.exe\", \"mshta.exe\", \"wscript.exe\", \"powershell.exe\", \"pwsh.exe\", \"msiexec.exe\", \"rundll32.exe\",\n                  \"bitsadmin.exe\", \"InstallUtil.exe\", \"python.exe\", \"regsvr32.exe\", \"dllhost.exe\", \"node.exe\", \"curl.exe\",\n                  \"java.exe\", \"javaw.exe\", \"*.pif\", \"*.com\", \"*.scr\") or\n  (?process.code_signature.trusted == false or ?process.code_signature.exists == false) or\n  ?process.code_signature.subject_name : (\"AutoIt Consulting Ltd\", \"OpenJS Foundation\", \"Python Software Foundation\") or\n  ?process.executable : (\n    \"?:\\\\Users\\\\Public\\\\*.exe\", \"?:\\\\ProgramData\\\\*.exe\", \"?:\\\\Users\\\\*\\\\Downloads\\\\*.exe\",\n    \"\\\\Device\\\\HarddiskVolume*\\\\Users\\\\Public\\\\*.exe\", \"\\\\Device\\\\HarddiskVolume*\\\\ProgramData\\\\*.exe\", \"\\\\Device\\\\HarddiskVolume*\\\\Users\\\\*\\\\Downloads\\\\*.exe\"\n  )\n ) and\ndns.question.name regex \"\"\".*\\.(top|buzz|xyz|rest|ml|cf|gq|ga|onion|monster|cyou|quest|cc|bar|cfd|click|cam|surf|tk|shop|club|icu|pw|ws|online|fun|life|boats|store|hair|skin|motorcycles|christmas|lol|makeup|mom|bond|beauty|biz|live|work|zip|country|accountant|date|party|science|loan|win|men|faith|review|racing|download|host|zone)\"\"\" and\n\nnot process.executable : (\n    \"?:\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\platform\\\\*\\\\*.exe\",\n    \"\\\\Device\\\\HarddiskVolume*\\\\ProgramData\\\\Microsoft\\\\Windows Defender\\\\platform\\\\*\\\\*.exe\"\n)"
      },
      {
        "name": "9d110cb3-5f4b-4c9a-b9f5-53f0a1707ae5 — Potential Credential Access via Trusted Developer Utility",
        "description": "(EQL) An instance of MSBuild, the Microsoft Build Engine, loaded DLLs (dynamically linked libraries) responsible for Windows credential management. This technique is sometimes used for credential dumping. (Source: Elastic's official detection-rules repository (Elastic License v2).)",
        "query": "sequence by process.entity_id\n [process where host.os.type == \"windows\" and event.type == \"start\" and (process.name : \"MSBuild.exe\" or process.pe.original_file_name == \"MSBuild.exe\")]\n [library where host.os.type == \"windows\" and dll.name : (\"vaultcli.dll\", \"SAMLib.DLL\")]"
      }
    ]
  },
  "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": [
    "Trusted Developer Utilities Proxy Execution 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": "T1127 - Trusted Developer Utilities Proxy Execution Response Guidance",
    "labels": [
      "mitre",
      "attack",
      "d3fend",
      "secops",
      "basyrix"
    ],
    "sections": [
      "summary",
      "d3fend_mappings",
      "investigation_steps",
      "response_actions",
      "queries",
      "automation",
      "escalation_criteria",
      "false_positive_considerations"
    ]
  }
}