falco

O falco é uma ferramenta desenvolvida pela empresa sysdig e tem a função de detectar ameaças em near real time na cloud, em workloads executando no kubernetes e containers.

O falco pode monitorar eventos de várias origens como por exemplo o kernel do Linux, Kubernetes API, containers e outros. O falco permite você fazer intregação com ferrramentas de mensagens como slack e teams como também permite você integrar com o prometheus para isso é necessário a utilização de um daemon do falco que se chama falcosidekick.

Para mais informações do falco consultar os links abaixo:

O falco também é um dos tópicos abordados no exame de certificação CKS (Certified Kubernetes Security Specialist) para quem pretende tirar.

Pré Requisitos

Nessa demostração do funcionamento do falco vamos necessitar os seguintes pré requitios:

  • Cluster kubernetes local pode ser criado através do kind. Mais informações nesse link. Também criei esse artigo para ajudar no processo de criação de um cluster local.
  • Helm instalado. Mais informações nesse link.
  • kubectl instalado. Mais informações nesse link.

Instalação

Antes de fazer a instalação do falco você deve adicionar o repositório do falco no helm executando os comandos abaixo:

helm repo add falcosecurity https://falcosecurity.github.io/charts
helm repo update

Também deve ser criado um namespace separado para a instalação do falco usando o comando abaixo:

kubectl create namespace falco

Agora vamos efetuar a instalação do falco executando o comando abaixo:

helm install falco -n falco --set driver.kind=ebpf --set tty=true falcosecurity/falco

Para verificar se o falco subiu corretamente executar o comando abaixo:

kubectl get pods -n falco

Deverá apresentar uma saída conforme a imagem abaixo:

falco-2

Será criado um daemonset do falco com isso será executado um pod em cada node do seu cluster no meu caso há 3 pods do falco. Para verificar executar o comando abaixo:

kubectl get daemonset -n falco

Agora vamos verificar os logs do pods do falco para isso vamos executar o comando abaixo:

kubectl logs -f daemonset/falco -n falco

Deverá aparecer uma saída similar a abaixo:

falco-3

Demonstração

Agora vamos simular o funcionamento do falco criando um pod, conectando nesse pod usando o kubectl e verificar os logs do falco.

Abaixo comando para criar um pod para esse teste:

kubectl run alpine --image alpine -- sh -c "sleep infinity"

Agora vamos conectar no pod criado usando o comando abaixo:

kubectl exec -it alpine -- sh

Verificando os logs do falco terá uma saída simlar com a abaixo:

15:27:42.692441989: Notice A shell was spawned in a container with an attached terminal (evt_type=execve user=root user_uid=0 user_loginuid=-1 process=sh proc_exepath=/bin/busybox parent=runc command=sh terminal=34816 exe_flags=EXE_WRITABLE container_id=cf009dcc3814 container_image=<NA> container_image_tag=<NA> container_name=<NA> k8s_ns=<NA> k8s_pod_name=<NA>)

Através do evento acima podemos constatar que alguém conectou no terminal do container com o id cf009dcc3814.

Conclusão

O objetivo desse artigo foi fazer a instalação e a demonstração da ferramenta falco usando um cluster local do kubernetes.

O falco também pode ser instalado em uma máquina virtual executando Linux pretendo fazer essa demonstração em um próximo artigo.