Skip to content

Siemphony is in beta and still being built. What ships today, and what does not.

Siemphony’s repertoire

Unsigned module loaded into a hybrid identity agent process

Siemphony@siemphonymediumT1556.007unverified
AN0814 names "injection or tampering of DLLs in hybrid identity agents (e.g., AzureADConnectAuthenticationAgentService)" as its Windows signal. This rule expresses that literally on Sysmon EventID 7 (image_load): `Image` is the hybrid-identity process the module is loading into, and `Signed: false` is the tamper signal, the same field T1014's rule uses — but scoped here to a specific short list of processes rather than applied system-wide, which is what keeps this a distinct observable from T1014 rather than a re-tagged copy of it. `AzureADConnectAuthenticationAgentService.exe` is MITRE's own named example (the Pass-Through Authentication agent); `miiserver.exe` (the Azure AD Connect sync engine, which brokers Password Hash Sync) and `Microsoft.IdentityServer.ServiceHost.exe` (the AD FS service host) are this rule's own additions, not MITRE's, added because an attacker hooking either agent to harvest or bypass credentials — the documented behaviour behind public PTA-hooking proof-of-concept tooling — produces the identical unsigned-image-load observable in a different process. `Signed: false` inherits Sysmon's own signing-check caveat already documented against T1014: a genuinely Microsoft-signed module can still report unsigned if the load-time WinVerifyTrust catalog check cannot complete, most commonly on a host with no path to the certificate- revocation service. The registry/configuration leg of AN0814, mapped to Security EventID 5136, is not attempted: MITRE's description ("registry or configuration changes tied to PTA/AD FS") names no concrete object class, attribute or registry key the way this brief does for other 5136-based analytics (T1484's rule matches ObjectClass groupPolicyContainer and trustedDomain by name), and this pipeline has no reliable, sourced knowledge of AD FS's own directory or registry footprint to invent one honestly — a guessed ObjectClass or key path would be exactly the plausible-looking-but-dead selector this corpus exists to avoid. MITRE's `WatchedServices` knob is populated here with that process list, only the PTA agent entry actually named by MITRE — the other two are this rule's own additions as already noted above. `TimeWindow` (correlating the module load with a later logon anomaly) is not implemented, since lib/sigma has no cross-event join. Sysmon is not installed by default, and image_load (EventID 7) is the noisiest Sysmon category by volume, so most deployments that do run Sysmon explicitly exclude or throttle it in their config — on a host without Sysmon, or one that filters EventID 7, this rule returns nothing, which reads as quiet rather than as the blind spot it actually is. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0293, not hand-written and not tested by its author. Any lab result is on this rule's own page.Full description

The detection

The 4 SIEM queries below are previews produced by Siemphony’s own translator, not pySigma, and none has been executed against a real backend — review before you deploy.

detection.yml

Sentinel · KQL

Run this as a search.

DeviceImageLoadEvents| where ((InitiatingProcessFolderPath endswith "\\AzureADConnectAuthenticationAgentService.exe" or InitiatingProcessFolderPath endswith "\\miiserver.exe" or InitiatingProcessFolderPath endswith "\\Microsoft.IdentityServer.ServiceHost.exe") and Signed =~ "false")

Splunk · SPL

Run this as a search.

index=* ((Image="*\\AzureADConnectAuthenticationAgentService.exe" OR Image="*\\miiserver.exe" OR Image="*\\Microsoft.IdentityServer.ServiceHost.exe") AND Signed="false")

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.executable) LIKE "*\\\\azureadconnectauthenticationagentservice.exe" OR TO_LOWER(process.executable) LIKE "*\\\\miiserver.exe" OR TO_LOWER(process.executable) LIKE "*\\\\microsoft.identityserver.servicehost.exe") AND TO_LOWER(file.code_signature.signed) == "false")

Wazuh · XML rule

Deploy to your manager — this is a rule, not a search.

<group name="sigma,windows,image_load,">  <!-- Rule ids must be unique on your manager; 100000+ is the user range. -->  <rule id="100000" level="7">    <!-- Set <if_sid> to the decoder/base rule for windows so this only evaluates relevant events. -->    <field name="Image" type="pcre2">(?i)(\\AzureADConnectAuthenticationAgentService\.exe$|\\miiserver\.exe$|\\Microsoft\.IdentityServer\.ServiceHost\.exe$)</field>    <field name="Signed" type="pcre2">(?i)^false$</field>    <description>Unsigned module loaded into a hybrid identity agent process</description>    <mitre>      <id>T1556.007</id>    </mitre>  </rule></group>

Verdicts · reactions · comments

Community

Verdicts from engineers who actually deployed it, and the conversation around it.

Log in to react
Not yet reported on

Nobody has run this in a real environment and said what happened.

Verdicts from engineers who deployed it

0 cast

No verdicts reported yet. The first one is worth more than the tenth — say what you ran it against.

Log in to report a verdict.

Log in to join the discussion.

1 thread

  • @hana-kobayashi

    miiserver.exe and the AD FS service host are not in MITRE's example and I am glad they are here — a PTA-agent-only rule would miss the two processes an attacker in a hybrid estate actually reaches for. Marking them explicitly as the rule's own additions rather than MITRE's is the kind of bookkeeping that decides whether I can defend a detection to an auditor six months later.