sudo cscli collections install PumbaLP/cowrieInstalls 2 parsers and 4 scenarios.
View Cowrie Honeypot →sudo cscli parsers install PumbaLP/cowrie-json-logsThen reload CrowdSec: sudo systemctl reload crowdsec
Sign in to see which of your engines run it →Hover a line or a note to see what each field does.
onsuccess: next_stagename: PumbaLP/cowrie-json-logsdescription: "Parse Cowrie honeypot JSON logs (cowrie.json)"# The line is decoded once into evt.Unmarshaled.cowrie. Lines that are not a# JSON object (for example Cowrie text logs, handled by crowdsecurity/cowrie-logs)# are skipped before decoding.filter: >-evt.Parsed.program == 'cowrie' &&evt.Parsed.message startsWith '{' &&UnmarshalJSON(evt.Parsed.message, evt.Unmarshaled, 'cowrie') in ['', nil] &&(evt.Unmarshaled.cowrie.eventid ?? '') startsWith 'cowrie.' &&(evt.Unmarshaled.cowrie.src_ip ?? '') != ''statics:- target: evt.StrTimeexpression: evt.Unmarshaled.cowrie.timestamp# Cowrie writes "%Y-%m-%dT%H:%M:%S.%fZ" (TZ=UTC) or "%Y-%m-%dT%H:%M:%S.%f%z"- target: evt.StrTimeFormatvalue: "2006-01-02T15:04:05Z0700"- meta: source_ipexpression: evt.Unmarshaled.cowrie.src_ip- meta: dest_ipexpression: evt.Unmarshaled.cowrie.dst_ip- meta: dest_portexpression: "evt.Unmarshaled.cowrie.dst_port != nil ? string(int(evt.Unmarshaled.cowrie.dst_port)) : nil"- meta: target_userexpression: evt.Unmarshaled.cowrie.username# Cowrie >= 2.9.0 sets "protocol" on every event; older releases only on cowrie.session.connect- meta: serviceexpression: "evt.Unmarshaled.cowrie.protocol in ['ssh', 'telnet'] ? evt.Unmarshaled.cowrie.protocol : 'cowrie'"# Telnet connections and SSH failed logins reuse the log_type of the hub# telnet/sshd parsers so crowdsecurity/telnet-bf and crowdsecurity/ssh-bf apply.# Every other event becomes cowrie_<eventid suffix>, e.g. cowrie_command_input.# A file_download without a URL is a file written by shell redirection.- meta: log_typeexpression: |let eventid = evt.Unmarshaled.cowrie.eventid;let protocol = evt.Unmarshaled.cowrie.protocol ?? '';eventid == 'cowrie.session.connect' && protocol == 'telnet' ? 'telnet_new_session' :eventid == 'cowrie.login.failed' && protocol == 'ssh' ? 'ssh_failed-auth' :eventid == 'cowrie.session.file_download' && (evt.Unmarshaled.cowrie.url ?? '') == '' ? 'cowrie_session_file_redirect' :
Sign in to see the Security Engines that run this log parser, the version they run and whether it was modified locally.
Parses the JSON event log of the Cowrie SSH and telnet honeypot (cowrie.json, one JSON object per line). Each line is decoded once into evt.Unmarshaled.cowrie, so every Cowrie field (for example input, url, shasum, hassh) is available to scenarios and alert contexts.
Lines that are not a JSON object with a cowrie.* eventid and a src_ip are ignored, so the parser can share type: cowrie with crowdsecurity/cowrie-logs, which parses Cowrie's text log.
| Meta | Source |
|---|---|
source_ip | src_ip |
dest_ip, dest_port | dst_ip, dst_port |
target_user | username (login events) |
service | protocol (ssh or telnet), cowrie when absent |
log_type | see below |
The event time is taken from timestamp (UTC ...Z or local ...+hhmm format).
| Cowrie event | log_type |
|---|---|
cowrie.session.connect over telnet | telnet_new_session (as crowdsecurity/cowrie-logs, used by crowdsecurity/telnet-bf) |
cowrie.login.failed over SSH | ssh_failed-auth (as crowdsecurity/sshd-logs, used by crowdsecurity/ssh-bf and crowdsecurity/ssh-slow-bf) |
cowrie.session.file_download without a url (file written by shell redirection) | cowrie_session_file_redirect |
any other cowrie.<a>.<b> event | cowrie_<a>_<b>, e.g. cowrie_login_success, cowrie_login_failed, cowrie_command_input, cowrie_session_file_download, cowrie_session_file_download_failed, cowrie_session_file_upload |
Cowrie 2.9.0 and later record protocol on every event. With older releases only cowrie.session.connect carries it, and other events get service: cowrie.
1filenames:2 - /home/cowrie/cowrie/var/log/cowrie/cowrie.json3labels:4 type: cowrie