text code block:FROM logs-endpoint.events.process-* METADATA _id, _version, _index | WHERE host.os.type in ("linux", "macos") and event.type == "start" and TO_LOWER(process.parent.name) like "python*" and process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish", "busybox") and KQL("""event.action:"exec" and process.args:("-c" or "-cl" or "-lc")""") // truncate timestamp to 1-minute window | EVAL Esql.time_window_date_trunc = DATE_TRUNC(1 minutes, @timestamp) | EVAL Esql.process_command_line_patterns = CASE( process.command_line like "*grep*", "grep", process.command_line like "*find*", "find", process.command_line like "*curl*", "curl", process.command_line like "*env *", "environment_enumeration", process.command_line like "*wget*", "wget", process.command_line like "*whoami*" or process.command_line like "*uname*" or process.command_line like "*hostname*", "discovery", "other" ) | KEEP @timestamp, _id, _index, _version, Esql.process_command_line_patterns, Esql.time_window_date_trunc, host.os.type, event.type, event.action, process.parent.name, process.working_directory, process.parent.working_directory, process.name, process.executable, process.command_line, process.parent.executable, process.parent.entity_id, agent.id, host.name, event.dataset, data_stream.namespace | STATS Esql.process_command_line_count_distinct = COUNT_DISTINCT(process.command_line), Esql.patterns_count_distinct = COUNT_DISTINCT(Esql.process_command_line_patterns), Esql.process_command_line_values = VALUES(process.command_line), Esql.host_name_values = values(host.name), Esql.agent_id_values = values(agent.id), Esql.event_dataset_values = values(event.dataset), Esql.data_stream_namespace_values = values(data_stream.namespace) BY process.parent.entity_id, agent.id, host.name, Esql.time_window_date_trunc | SORT Esql.process_command_line_count_distinct DESC | WHERE Esql.process_command_line_count_distinct >= 5 AND Esql.patterns_count_distinct >= 4
Install detection rules in Elastic Security
Detect Suspicious Python Shell Command Execution in the Elastic Security detection engine by installing this rule into your Elastic Stack.
To setup this rule, check out the installation guide for Prebuilt Security Detection Rules(external, opens in a new tab or window).