T1587 Splunk · SPL

Detect Develop Capabilities in Splunk

This detection identifies indicators that adversaries have deployed custom-developed capabilities within the target environment. Because T1587 (Develop Capabilities) occurs outside the victim network during the adversary lifecycle, direct detection is impossible; instead, this rule focuses on second-order indicators: unsigned or self-signed executables executing from non-standard paths, low-prevalence binaries making network connections, and novel tooling patterns associated with bespoke malware frameworks. Groups such as Kimsuky, Moonstone Sleet, and Contagious Interview are known to develop custom tools—including malicious NPM packages, spearphishing toolkits, and custom implants—that exhibit these characteristics upon deployment. The detection correlates signature anomalies, environmental prevalence, and behavioral signals to surface likely custom-developed tools used in targeted intrusions.

MITRE ATT&CK

Tactic
Resource Development
Technique
T1587 Develop Capabilities
Canonical reference
https://attack.mitre.org/techniques/T1587/

SPL Detection Query

Splunk (SPL)
spl
| union
[
  search index=* sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=7
  | where Signed="false" OR SignatureStatus IN ("Unavailable", "Invalid", "Expired")
  | where NOT match(ImageLoaded, "(?i)(C:\\\\Windows\\\\System32|C:\\\\Windows\\\\SysWOW64|C:\\\\Program Files|C:\\\\Windows\\\\WinSxS)")
  | eval EventType="ImageLoad", SuspiciousBinary=ImageLoaded, LoadingProcess=Image
  | fields _time, Computer, User, EventType, SuspiciousBinary, LoadingProcess, Signed, SignatureStatus, Hashes
],
[
  search index=* sourcetype="XmlWinEventLog:Microsoft-Windows-Sysmon/Operational" EventCode=1
  | where match(Image, "(?i)(\\\\AppData\\\\Local\\\\Temp|\\\\Downloads|\\\\ProgramData|C:\\\\Temp)")
  | eval EventType="ProcessCreate", SuspiciousBinary=Image, LoadingProcess=ParentImage
  | fields _time, Computer, User, EventType, SuspiciousBinary, LoadingProcess, CommandLine, Hashes
]
| rex field=Hashes "SHA256=(?<SHA256>[A-Fa-f0-9]{64})"
| eval RiskScore=case(
    EventType=="ImageLoad" AND (SignatureStatus=="Invalid" OR SignatureStatus=="Expired"), 35,
    EventType=="ImageLoad" AND Signed=="false", 25,
    EventType=="ProcessCreate" AND match(SuspiciousBinary, "(?i)\\\\Temp\\\\"), 30,
    EventType=="ProcessCreate" AND match(SuspiciousBinary, "(?i)\\\\Downloads\\\\"), 25,
    true(), 10
)
| where RiskScore >= 25
| stats
    count as EventCount,
    dc(Computer) as UniqueHosts,
    values(Computer) as HostList,
    min(_time) as FirstSeen,
    max(_time) as LastSeen,
    values(User) as Users,
    values(LoadingProcess) as LoadingProcesses,
    max(RiskScore) as MaxRisk
    by SuspiciousBinary, SHA256, EventType
| where UniqueHosts < 5
| eval FirstSeen=strftime(FirstSeen, "%Y-%m-%d %H:%M:%S"), LastSeen=strftime(LastSeen, "%Y-%m-%d %H:%M:%S")
| sort - MaxRisk UniqueHosts
| table SuspiciousBinary, SHA256, EventType, UniqueHosts, HostList, Users, LoadingProcesses, EventCount, MaxRisk, FirstSeen, LastSeen
high severity low confidence

Correlates Sysmon EventCode 7 (Image Load) for unsigned or invalid-signature DLLs and executables with EventCode 1 (Process Create) for processes spawning from suspicious paths. Low environmental prevalence (fewer than 5 unique hosts) is used as a signal to distinguish custom-developed tooling from widespread legitimate software. Results are scored and ranked by risk to prioritize analyst review.

Data Sources

Sysmon

Required Sourcetypes

XmlWinEventLog:Microsoft-Windows-Sysmon/Operational

False Positives & Tuning

  • Portable open-source tools (nmap, Wireshark portable, Python executables) compiled without code signing
  • Developer workstations running locally built binaries during normal software development
  • IT automation scripts packaged as standalone executables (PyInstaller, pkg, nexe) without signing certificates
  • Vendor diagnostic or support tools distributed as unsigned binaries
  • Security research tools executed from analyst workstations during threat hunting exercises
Download portable Sigma rule (.yml)

Other platforms for T1587


Testing Methodology

Validate this detection against 3 adversary techniques from Atomic Red Team. Each test below lists the behaviour to exercise and the telemetry you should expect to see. Executable commands and cleanup steps are available with Pro.

  1. Test 1Execute Self-Signed Binary from User-Writable Path (Windows)

    Expected signal: DeviceProcessEvents: FileName=custom_capability_test.exe, ProcessSignatureStatus=SignedByUntrustedCertificate, FolderPath contains \AppData\Local\Temp. DeviceImageLoadEvents showing DLLs loaded with self-signed parent process.

  2. Test 2Deploy Malicious NPM Post-Install Script (Cross-Platform)

    Expected signal: Sysmon EventCode=1 (Linux auditd execve): process spawned with ParentImage=/usr/bin/node, Image=/bin/sh or /bin/id. audit.log entries showing execve syscall from node process with working directory in node_modules path.

  3. Test 3Compile and Execute Custom ELF Binary with Network Connection (Linux)

    Expected signal: auditd: EXECVE record for /tmp/atomic_custom_tool with ppid matching shell. SOCKADDR audit record showing connect() call to 192.0.2.1:4444. Sysmon for Linux EventCode=3 (Network Connect) if deployed. /proc/<pid>/exe pointing to /tmp path.

Unlock Pro Content

Get the full detection package for T1587 including response playbook, investigation guide, and atomic red team tests.

Response PlaybookInvestigation GuideHunting QueriesAtomic Red Team TestsTuning Guidance

Related Detections