Which credentials got attackers in

Which username and password pairs logged in successfully, how often, and from how many sources?

T1078 T1110.001

The textbook brute-force pattern is "many failures, then a success" from one source. On this honeypot that pattern almost never appears: Cowrie accepts nearly any password, so on a typical day every source that tries gets in at the first attempt, and only one or two ever fail. A detection tuned for the textbook pattern would stay silent here. Know your data before you trust a rule.

The useful question is therefore which credentials attackers bring. Count successful logins per username and password pair, and the number of distinct sources using each. A pair used by dozens of unrelated sources comes from a shared wordlist (default IoT and router passwords); a pair used by one source only may be something an attacker learned elsewhere.

Watch out for empty values: an empty username or password is a real attempt, but Wazuh's JSON decoder drops empty fields, so in Wazuh they are missing, not empty. Without "missing": "" the Wazuh query silently loses those rows.

Queries

All 3 tools returned the same rows (same count, same username, password, logins, sources values).

Splunk SPL

verified 2026-11-11 data · 79 rows · Splunk 10.4.5
index=honeypot_demo sourcetype=cowrie:json eventid="cowrie.login.success"
| stats count AS logins dc(src_ip) AS sources by username password
| sort - sources - logins

Microsoft Sentinel KQL

verified 2026-11-11 data · 79 rows · Microsoft Sentinel (Log Analytics)
HP_Cowrie
| where eventid == "cowrie.login.success"
| summarize logins = count(), sources = array_length(make_set(src_ip)) by username, password
| sort by sources desc, logins desc

Wazuh DQL + OpenSearch query

verified 2026-11-11 data · 79 rows · Wazuh 4.14.9

Discover filter (DQL)

rule.id:100101

Aggregation (OpenSearch query DSL, Dev Tools or API)

{
  "query": { "term": { "rule.id": "100101" } },
  "aggs": {
    "username": { "terms": { "field": "data.username", "size": 10000, "missing": "" },
      "aggs": {
        "password": { "terms": { "field": "data.password", "size": 10000, "missing": "" },
          "aggs": {
            "logins":  { "value_count": { "field": "rule.id" } },
            "sources": { "cardinality": { "field": "data.src_ip", "precision_threshold": 40000 } }
          } }
      } }
  }
}