skip to Main Content

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

2

Answers


  1. Chosen as BEST ANSWER

    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
    

  2. Your question made me go and read about falco(I learned a new lesson today). After installing falco and reading its documentation, I found a solution that seems to work.

    - rule: shell_in_container
      desc: notice shell activity within a container
      condition: >
        container.id != host and
        proc.cmdline != ""
    
      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
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search