
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:

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:

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.