Skip to content

Add three MCP detections to the Suspicious MCP Activities story#4128

Open
eeee2345 wants to merge 1 commit into
splunk:developfrom
eeee2345:detections/mcp-suspicious-activities-expansion
Open

Add three MCP detections to the Suspicious MCP Activities story#4128
eeee2345 wants to merge 1 commit into
splunk:developfrom
eeee2345:detections/mcp-suspicious-activities-expansion

Conversation

@eeee2345

Copy link
Copy Markdown

This extends the Suspicious MCP Activities analytic story (created in #3895) with three contentctl-ng detections over the existing mcp:jsonrpc data source and the splunk/attack_data mcp.log dataset:

  • MCP Webhook Persistence Creation (create_webhook to an external URL; persistence / exfiltration channel; T1546)
  • MCP Suspicious File Deletion (delete_file, e.g. removing SECURITY.md; data destruction / defense evasion; T1485)
  • MCP Source Code Secret Search (search_code for credential patterns; credential harvesting; T1552.001)

Each detection uses the flat contentctl-ng schema, ends with its auto-named filter macro, joins the existing story via analytic_story, and ships a unit test that replays against mcp.log. ATR is cited only in references as URLs; rule counts are read from the live repo, not hard-coded.

Local validation

  • scripts/validate_yaml.py (yamllint + yamlfmt) PASS on all three files
  • contentctl-ng 0.7.0 build succeeds (schema, filter macros, uuid uniqueness, filename==name, HttpUrl references, real ATT&CK ids)
  • each search returns rows against mcp.log (5 / 5 / 16) so the unit-test replay has data to match

Note: the unit-test replay runs inside a Splunk container in CI. I verified the searches return rows against the dataset locally but could not run the container here, so that single check is confirmed only at the dataset-match level.

Disclosure: I maintain the open-source ATR project referenced in the detections.

Extends the Suspicious MCP Activities analytic story (created in splunk#3895) with
three contentctl-ng detections over the existing mcp:jsonrpc data source and
mcp.log dataset:

  - MCP Webhook Persistence Creation (create_webhook to an external URL -
    persistence / exfiltration channel, T1546)
  - MCP Suspicious File Deletion (delete_file, e.g. removing SECURITY.md -
    data destruction / defense evasion, T1485)
  - MCP Source Code Secret Search (search_code for credential patterns -
    credential harvesting, T1552.001)

Each detection follows the flat contentctl-ng schema, ends with its auto-named
filter macro, and includes a unit test that replays against the existing
splunk/attack_data mcp.log. Threat-rule context is referenced via the open,
MIT-licensed Agent Threat Rules project (rule counts read at runtime, not
hard-coded).

Validated locally: validate_yaml.py (yamllint + yamlfmt) PASS and
contentctl-ng 0.7.0 build succeeds; each search returns rows against mcp.log.

Signed-off-by: Adam Lin <adam@agentthreatrule.org>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant