Slide 1

Slide 1 text

Falco runtime security analysis through syscalls BSides Athens 2020

Slide 2

Slide 2 text

A timeline always works fine Falco created to parse libsinsp events! May 2016 Accepted as a CNCF incubation level hosted project Jan 2020 Sysdig Inc. donated Falco to the CNCF Oct 2018 2 May 2019 Falco Community Calls start!

Slide 3

Slide 3 text

whoami Leonardo Di Donato Open Source Software Engineer Falco Maintainer @leodido 3 extra points to who spots the meaning of this Italian hand-gesture!

Slide 4

Slide 4 text

Contents 4 The problem Take a look at where everything starts and everything ends. The Falco approach Last line of defense: runtime security. Detect them! Playtime 1 2 3 @leodido

Slide 5

Slide 5 text

Security 5 Use policies to change the behavior of a process by preventing syscalls from succeeding (also killing the process sometimes). DETECTION Use policies to monitor the behavior of a process and notify when its behavior steps outside the policy. PREVENTION @leodido

Slide 6

Slide 6 text

Security 6 sandboxing, access control ● seccomp ● seccomp-bpf ● SELinux ● AppArmor AUDITING behavioral monitoring, intrusion & anomaly detection, forensics ● auditd ● Falco ● ... ● a lot still to be done in this space! ENFORCEMENT PREVENTION IS NOT ENOUGH. COMPLEMENTARY, NOT MUTUALLY EXCLUSIVE APPROACHES @leodido

Slide 7

Slide 7 text

I have locks on my doors but if I don’t use them, or if someone breaks a window I’m also glad I have an intruder alarm to alert me. Runtime Security

Slide 8

Slide 8 text

“The system call is the fundamental interface between an application and the Linux kernel.” 8 — man syscalls 2 @leodido

Slide 9

Slide 9 text

Why syscalls? 9 KERNEL Here’s happening all the interesting stuff OS KUBERNETES APPLICATIONS When you run a program you are making system calls. System calls are how a program enters the kernel to perform some task. ● processes ● network ● file IO ● much more...

Slide 10

Slide 10 text

Unique challenges ● E_TOOMANY_SYSCALLS ● Millions per second ● Hard to manage in userspace ● Another syscall to know the time of an event 10

Slide 11

Slide 11 text

Still not enough... 11 CONTEXT Timing Arguments CONTAINERS Did the event originated in a container? What’s the container name and ID? What’s the container image? ORCHESTRATOR In which cluster it is running? On which node? What’s the container runtime interface in use? @leodido

Slide 12

Slide 12 text

KERNEL MODULE Pros: very efficient, implement almost anything Cons: kernel panics, not always suitable EBPF PROBE Pros: program the kernel without risking to break it Cons: newer kernels PDIG Pros: (almost) unprivileged Cons: really hackish, ~20% slower Other methods? Future inputs/drivers? 12 How to get syscalls to userspace?

Slide 13

Slide 13 text

Syscalls from Falco Kernel Module 13 kernel space user space libsinsp libscap kernel module ring buffer /dev/falco0 … /dev/falcoN @leodido

Slide 14

Slide 14 text

Syscalls from Falco eBPF probe 14 kernel space user space libsinsp libscap eBPF VM eBPF maps eBPF probe @leodido

Slide 15

Slide 15 text

Falco is a while(true). @leodido

Slide 16

Slide 16 text

Falco rules are YAML. See it in action! @leodido

Slide 17

Slide 17 text

Detect Kubernetes CVE-2020-8555 An attacker with permissions to create a pod with certain built-in volume types (GlusterFS, Quobyte, StorageFS, ScaleIO) or permissions to create a StorageClass can cause kube-controller-manager to make GET or POST requests from the master’s host network. kube-controller-manager < 1.15.11 / 1.16.0 - 1.16.8 / 1.17.0 - 1.17.4 / 1.18.0 How to detect? Write two Falco rules using Kubernetes audit logs as input to: 1. detect if the StorageClass object is created with one of the volume types 2. detect if pods are created using one of the volume types @leodido

Slide 18

Slide 18 text

Detect Kubernetes CVE-2020-8555 @leodido

Slide 19

Slide 19 text

Detect Kubernetes CVE-2020-8555 @leodido

Slide 20

Slide 20 text

Resources ● eBPF and Falco - Leonardo Di Donato ● Linux Observability With BPF: Advanced Programming for Performance Analysis and Networking - Fontana, Calavera ● The ring buffer definition ● Kernel module fillers: ○ f_sys_execve_e ○ f_sys_open_x ● eBPF probe fillers: ○ f_sys_execve_e ○ f_sys_open_x ● Falco default rule set ● Kubernetes CVE 2020-8555 ● 20 @leodido

Slide 21

Slide 21 text

Does anyone have any question? 21 Thanks! ❏ twitter.com/leodido ❏ github.com/leodido ❏ github.com/falcosecurity/falco ❏ slack.k8s.io, #falco channel