dockercontainersalertauditfalco

How to define a rule to capture alerts when any manual command gets executed inside the container on Falco


Installed Falco drivers on the host.

Able to capture alerts for specific conditions like when there is a process spawned or if any script is getting executed inside the container. But the requirement is to trigger an alert whenever any manual command gets executed inside the container.

Is there any custom condition we use to generate an alert whenever any command gets executed inside a container?

Expecting the below condition should capture an alert whenever command line contains newline char or pressed enter inside a container or the command executed contains any .sh but this didn't work.

- rule: shell_in_container
  desc: notice shell activity within a container
  condition: >
    container.id != host and
    proc.cmdline contains "\n" or
    proc.cmdline endswith ".sh"

  output: >
    shell in a container
    (user=%user.name container_id=%container.id container_name=%container.name
    shell=%proc.name parent=%proc.pname source_ip=%fd.rip  cmdline=%proc.cmdline)
  priority: WARNING

Solution

  • Below rule is generating alerts whenever there is a manual command executed inside container (exec with bash or sh) with all the required fields in the output. Support for pod ip to be present in falco version 0.35. work is in progress. https://github.com/falcosecurity/libs/pull/708 and will be called container.ip (but effectively it is the Pod_IP since all containers share the network stack of the pod) and container.cni.json for a complete view in case you have dual-stack and multiple interfaces.

    - rule: shell_in_container
      desc: notice shell activity within a container
      condition: >
        container.id != host and
        evt.type = execve and
        (proc.pname = bash or
        proc.pname = sh) and
        proc.cmdline != bash
    
      output: >
        (user=%user.name  command=%proc.cmdline timestamp=%evt.datetime.s container_id=%container.id container_name=%container.name pod_name=%k8s.pod.name proc_name=%proc.name proc_pname=%proc.pname res=%evt.res)
      priority: informational