Skip to content

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

Siemphony’s repertoire

Kerberos ccache file named on a copy or transfer command line

Siemphony@siemphonymediumT1558.005unverified
AN0069's copy-and-carry leg: a process creation whose command line names a Kerberos credential cache — the `krb5cc_%UID%` files Linux writes into /tmp and the `krb5.ccache` form — while the executed binary is one of the copy, archive, encode or transfer utilities an operator reaches for when taking a ticket off the host. Both halves are required. The path alone is not a signal: every kerberised client on the box opens its own cache constantly, so `krb5cc_` on its own would match sssd, ssh, curl and kinit all day; the tool list alone is meaningless. MITRE's `AllowedProcesses` knob ("processes legitimately interacting with ccache, e.g. klist, kinit") is therefore implemented by omission — the kerberos utilities are simply not in the selector — and the tool list itself is authored here, not MITRE's. Vocabulary matters for this one. The brief maps auditd execve onto the `process_creation` / `linux` category, whose field names are the Sysmon for Linux and auditbeat vocabulary (`Image`, `CommandLine`); a raw auditd feed splits the same event into a SYSCALL record carrying `exe` and an EXECVE record carrying `a0`, `a1`, `a2`… and needs a field mapping before this rule can match anything on it. The analytic's other leg — an auditd open() on /tmp/krb5cc_* — is not attempted, because auditd emits PATH and SYSCALL as separate records, so the reading process cannot be gated inside one selection, and an ungated watch on the cache path matches every kerberised daemon on the host. The macOS arm AN0070 is not attempted either: its unifiedlog and osquery sources have no standardised Sigma field names, and the macOS default cache is `API:{uuid}` held in memory, so there is no file path to name. Limits and prerequisite. Check the ccache backend before trusting this rule: a file-based cache is only the *libkrb5 compiled default*, and the RHEL/CentOS/Fedora family and any host running sssd-kcm ship a `default_ccache_name` of `KEYRING:persistent:%{uid}` or `KCM:` in /etc/krb5.conf, which keeps the ticket in the kernel keyring or the KCM daemon and writes no /tmp file at all. On those hosts nothing matches this rule no matter what the adversary does, and zero rows reads as quiet when it means blind — the theft there is `kcmtool`/keyctl or a KCM socket call, which is a different rule. Debian and Ubuntu leave the FILE default in place, which is where this rule works. A cache relocated through `KRB5CCNAME` to a path that contains neither `krb5cc_` nor `krb5.ccache` is invisible for the same reason — that is MITRE's `CcachePathBaseline` knob, and a site that relocates its caches must add its own path here. Anything that reads the file through libkrb5 or its own code rather than a shell utility writes no matching command line at all. Linux process creation is not collected by default: this needs Sysmon for Linux, auditbeat, or an auditd execve rule feeding a pipeline that maps into the fields above, and until one is in place the rule returns zero rows. UNVERIFIED AS AUTHORED — derived from MITRE ATT&CK DET0024, 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.

DeviceProcessEvents| where ((ProcessCommandLine contains "krb5cc_" or ProcessCommandLine contains "krb5.ccache") and (FolderPath endswith "/cp" or FolderPath endswith "/mv" or FolderPath endswith "/dd" or FolderPath endswith "/cat" or FolderPath endswith "/tar" or FolderPath endswith "/base64" or FolderPath endswith "/xxd" or FolderPath endswith "/od" or FolderPath endswith "/scp" or FolderPath endswith "/rsync" or FolderPath endswith "/curl" or FolderPath endswith "/wget" or FolderPath endswith "/nc" or FolderPath endswith "/ncat" or FolderPath endswith "/socat" or FolderPath endswith "/gzip" or FolderPath endswith "/zip" or FolderPath endswith "/openssl"))

Splunk · SPL

Run this as a search.

index=* ((CommandLine="*krb5cc_*" OR CommandLine="*krb5.ccache*") AND (Image="*/cp" OR Image="*/mv" OR Image="*/dd" OR Image="*/cat" OR Image="*/tar" OR Image="*/base64" OR Image="*/xxd" OR Image="*/od" OR Image="*/scp" OR Image="*/rsync" OR Image="*/curl" OR Image="*/wget" OR Image="*/nc" OR Image="*/ncat" OR Image="*/socat" OR Image="*/gzip" OR Image="*/zip" OR Image="*/openssl"))

Elastic · ES|QL

Run this as a search.

FROM logs-*| WHERE ((TO_LOWER(process.command_line) LIKE "*krb5cc_*" OR TO_LOWER(process.command_line) LIKE "*krb5.ccache*") AND (TO_LOWER(process.executable) LIKE "*/cp" OR TO_LOWER(process.executable) LIKE "*/mv" OR TO_LOWER(process.executable) LIKE "*/dd" OR TO_LOWER(process.executable) LIKE "*/cat" OR TO_LOWER(process.executable) LIKE "*/tar" OR TO_LOWER(process.executable) LIKE "*/base64" OR TO_LOWER(process.executable) LIKE "*/xxd" OR TO_LOWER(process.executable) LIKE "*/od" OR TO_LOWER(process.executable) LIKE "*/scp" OR TO_LOWER(process.executable) LIKE "*/rsync" OR TO_LOWER(process.executable) LIKE "*/curl" OR TO_LOWER(process.executable) LIKE "*/wget" OR TO_LOWER(process.executable) LIKE "*/nc" OR TO_LOWER(process.executable) LIKE "*/ncat" OR TO_LOWER(process.executable) LIKE "*/socat" OR TO_LOWER(process.executable) LIKE "*/gzip" OR TO_LOWER(process.executable) LIKE "*/zip" OR TO_LOWER(process.executable) LIKE "*/openssl"))

Wazuh · XML rule

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

<group name="sigma,linux,process_creation,">  <!-- 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 linux so this only evaluates relevant events. -->    <field name="CommandLine" type="pcre2">(?i)(krb5cc_|krb5\.ccache)</field>    <field name="Image" type="pcre2">(?i)(/cp$|/mv$|/dd$|/cat$|/tar$|/base64$|/xxd$|/od$|/scp$|/rsync$|/curl$|/wget$|/nc$|/ncat$|/socat$|/gzip$|/zip$|/openssl$)</field>    <description>Kerberos ccache file named on a copy or transfer command line</description>    <mitre>      <id>T1558.005</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.

No comments yet. Someone who deploys this will have something to say about it.