<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Falco – Tutorial</title><link>https://v0-43--falcosecurity.netlify.app/tags/tutorial/</link><description>Recent content in Tutorial on Falco</description><generator>Hugo -- gohugo.io</generator><language>en</language><lastBuildDate>Tue, 20 Sep 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://v0-43--falcosecurity.netlify.app/tags/tutorial/feed.xml" rel="self" type="application/rss+xml"/><item><title>Blog: Running Falco on Apple Silicon</title><link>https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/</link><pubDate>Tue, 20 Sep 2022 00:00:00 +0000</pubDate><guid>https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/</guid><description>
&lt;p&gt;Hello, Falcoers!&lt;/p&gt;
&lt;p&gt;Do you want to run Falco on Apple ARM M1 CPUs? Since &lt;a href="https://github.com/falcosecurity/falco/releases/tag/0.32.1"&gt;Falco 0.32.1&lt;/a&gt;, you can! It requires a Linux virtual machine (VM) since Falco doesn't run on OSX, but it is pretty straightforward.&lt;/p&gt;
&lt;p&gt;Let's go step by step:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#setting-up-the-environment"&gt;Setting up the environment&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#creating-a-vm"&gt;Creating a VM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#creating-an-emulated-x86_64-vm"&gt;Creating an Emulated &lt;code&gt;x86_64&lt;/code&gt; VM&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#lima-tips"&gt;Lima Tips&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#installing-falco"&gt;Installing Falco&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#installing-the-falco-driver"&gt;Installing the Falco driver&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#running-falco"&gt;Running Falco&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#falco-on-m1-on-kubernetes"&gt;Falco on M1 on Kubernetes&lt;/a&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#creating-a-kubernetes-cluster"&gt;Creating a Kubernetes cluster&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#deploying-falco-via-helm"&gt;Deploying Falco via Helm&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a href="https://v0-43--falcosecurity.netlify.app/blog/falco-apple-silicon/#conclusion"&gt;Conclusion&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="setting-up-the-environment"&gt;Setting up the environment&lt;/h3&gt;
&lt;p&gt;There are a few ways to create a Linux VM on OSX using Apple Silicon, using &lt;a href="https://mac.getutm.app/"&gt;UTM&lt;/a&gt;, &lt;a href="https://www.vmware.com/products/fusion/fusion-evaluation.html"&gt;VMWare Fusion&lt;/a&gt;, or &lt;a href="https://www.parallels.com/es/"&gt;Parallels&lt;/a&gt;. In this case we are going to use &lt;a href="https://github.com/lima-vm/lima"&gt;Lima&lt;/a&gt;, an open source project based on QEMU with lots of features, including the ability to run ARM VMs on Apple Silicon (hint: &lt;a href="https://rancherdesktop.io/"&gt;Rancher Desktop&lt;/a&gt; is based on Lima).&lt;/p&gt;
&lt;p&gt;To install Lima, it is required to install Homebrew first. If you have Homebrew already installed, you can just skip those steps.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NOTE:&lt;/strong&gt; It is highly recommended to read the &lt;a href="https://docs.brew.sh/Installation"&gt;installation options&lt;/a&gt; before copying and pasting random commands. :)&lt;/p&gt;
&lt;p&gt;Open the macOS terminal and paste the following snippet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ /bin/bash -c &lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After Homebrew is added, install lima as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ brew install lima
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="creating-a-vm"&gt;Creating a VM&lt;/h4&gt;
&lt;p&gt;Lima has different &lt;a href="https://lima-vm.io/docs/templates/"&gt;templates&lt;/a&gt; already available to choose from:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl start --list-templates
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;almalinux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;alpine
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;archlinux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;buildkit
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;centos-stream
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;debian
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;default
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;deprecated/centos-7
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker-rootful
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;docker
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/9p
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/almalinux-9
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/apptainer
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/centos-stream-9
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/opensuse-tumbleweed
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/oraclelinux-9
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/riscv64
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;experimental/rocky-9
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;faasd
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;fedora
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;k3s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;k8s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;nomad
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;opensuse
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;oraclelinux
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;podman
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;rocky
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;singularity
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ubuntu-lts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;ubuntu
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;vmnet
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;You can see the definition of those templates &lt;a href="https://github.com/lima-vm/lima/tree/master/examples"&gt;here&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;For this exercise, we are going to launch a Fedora machine named 'falco-fedora' as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl start --name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco-fedora template://fedora
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The previous command allows you to edit the template, choose a different one, or just deploy the VM (hint: you can skip that step using the &lt;code&gt;--tty=false&lt;/code&gt; flag).&lt;/p&gt;
&lt;p&gt;After a few seconds, you have a Fedora VM already available! Let's connect into it:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl shell falco-fedora
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ uname -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Linux lima-falco-fedora 6.5.6-300.fc39.aarch64 &lt;span style="color:#080;font-style:italic"&gt;#1 SMP PREEMPT_DYNAMIC Fri Oct 6 19:36:57 UTC 2023 aarch64 GNU/Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cat /etc/fedora-release
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Fedora release &lt;span style="color:#666"&gt;39&lt;/span&gt; &lt;span style="color:#666"&gt;(&lt;/span&gt;Thirty Nine&lt;span style="color:#666"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Before moving forward, let's update the packages to the most recent versions and reboot the VM to use the latest kernel available:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo bash -c &lt;span style="color:#b44"&gt;&amp;#34;dnf clean all &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; dnf update -y &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; reboot&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After a few minutes, the VM is updated and rebooted. Now it is time to install Falco!&lt;/p&gt;
&lt;h4 id="creating-an-emulated-x86-64-vm"&gt;Creating an Emulated &lt;code&gt;x86_64&lt;/code&gt; VM&lt;/h4&gt;
&lt;p&gt;Would you like to test in an emulated &lt;code&gt;x86_64&lt;/code&gt; VM? Let's set up the same Fedora VM for the &lt;code&gt;x86_64&lt;/code&gt; architecture.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl start --vm-type&lt;span style="color:#666"&gt;=&lt;/span&gt;qemu --arch&lt;span style="color:#666"&gt;=&lt;/span&gt;x86_64 --name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco-fedora-x86_64 template://fedora
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Drop into the VM interactively:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl shell falco-fedora-x86_64
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ uname -a
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Linux lima-falco-fedora-x8664 6.5.6-300.fc39.x86_64 &lt;span style="color:#080;font-style:italic"&gt;#1 SMP PREEMPT_DYNAMIC Fri Oct 6 19:57:21 UTC 2023 x86_64 GNU/Linux&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ cat /etc/fedora-release
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Fedora release &lt;span style="color:#666"&gt;39&lt;/span&gt; &lt;span style="color:#666"&gt;(&lt;/span&gt;Thirty Nine&lt;span style="color:#666"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;strong&gt;NOTE&lt;/strong&gt; : You can always install your own custom kernel and reboot the VM into that new kernel.&lt;/p&gt;
&lt;h4 id="lima-tips"&gt;Lima Tips&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;Checkout the &lt;a href="https://lima-vm.io/docs/examples/#advanced-configuration"&gt;Advanced Configuration&lt;/a&gt;. For example, using additional flags such as &lt;code&gt;--memory 8 --cpus 8 --mount-type &amp;quot;reverse-sshfs&amp;quot; --mount-writable&lt;/code&gt; when starting the VM allows for easy testing of your custom rules since your cwd from your macOS host is automatically mounted.&lt;/li&gt;
&lt;li&gt;After rebooting the VM, we observed that mounts may not work anymore. However, leveraging &lt;a href="https://lima-vm.io/docs/reference/limactl_edit/"&gt;limactl edit&lt;/a&gt; can fix it.&lt;/li&gt;
&lt;li&gt;If you encounter issues, you can force stop and delete the VM, and then rebuild it. For instance, you can use the following commands: &lt;code&gt;limactl stop -f falco-fedora-x86_64 || true; limactl delete falco-fedora-x86_64 || true;&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id="installing-falco"&gt;Installing Falco&lt;/h3&gt;
&lt;p&gt;Let's connect to the VM again and install Falco following the &lt;a href="https://falco.org/docs/getting-started/installation/#centos-rhel"&gt;official documentation&lt;/a&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl shell falco-fedora
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo bash -c &lt;span style="color:#b44"&gt;&amp;#34;rpm --import https://falco.org/repo/falcosecurity-packages.asc &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; curl -s -o /etc/yum.repos.d/falcosecurity.repo https://falco.org/repo/falcosecurity-rpm.repo &amp;amp;&amp;amp; \
&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b44"&gt; dnf install falco -y&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will install the Falco repository and signature and then install the Falco binaries and dependencies (including make and the kernel headers).&lt;/p&gt;
&lt;h4 id="installing-the-falco-driver"&gt;Installing the Falco Driver&lt;/h4&gt;
&lt;p&gt;Falco depends on a driver that taps into the stream of system calls on a machine and passes them to user space. This driver can be either a kernel module or an eBPF probe (see the &lt;a href="https://falco.org/docs/event-sources/drivers/"&gt;driver official documentation&lt;/a&gt; for more information).&lt;/p&gt;
&lt;p&gt;In this exercise, we are going to go the eBPF route. But first, let's see if we have BPF JIT enabled (see &lt;a href="https://falco.org/docs/getting-started/installation/#install-driver"&gt;here&lt;/a&gt; why it is recommended):&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ grep &lt;span style="color:#b8860b"&gt;CONFIG_BPF_JIT&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt; /boot/config-&lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;uname -r&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#b8860b"&gt;CONFIG_BPF_JIT&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;y
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sysctl -n net.core.bpf_jit_enable
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#666"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Great, now let's install some packages required to build the eBPF probe:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo dnf install -y clang llvm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Finally, let's run the &lt;code&gt;falco-driver-loader&lt;/code&gt; script to build the eBPF probe using the &lt;code&gt;bpf&lt;/code&gt; command argument as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo falco-driver-loader bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The output should look like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;* Running falco-driver-loader for: falco version=0.32.2, driver version=2.0.0+driver
* Running falco-driver-loader with: driver=bpf, compile=yes, download=yes
* Mounting debugfs
* Trying to download a prebuilt eBPF probe from https://download.falco.org/driver/2.0.0%2Bdriver/aarch64/falco_fedora_5.19.8-200.fc36.aarch64_1.o
curl: (22) The requested URL returned error: 404
Unable to find a prebuilt falco eBPF probe
* Trying to compile the eBPF probe (falco_fedora_5.19.8-200.fc36.aarch64_1.o)
...
* eBPF probe located in /root/.falco/falco_fedora_5.19.8-200.fc36.aarch64_1.o
* Success: eBPF probe symlinked to /root/.falco/falco-bpf.o
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The eBPF probe has been built and we are ready to go!&lt;/p&gt;
&lt;h3 id="running-falco"&gt;Running Falco&lt;/h3&gt;
&lt;p&gt;The last step is to run Falco as a service as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo systemctl &lt;span style="color:#a2f"&gt;enable&lt;/span&gt; --now falco
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;The journalctl logs should look like:&lt;/p&gt;
&lt;pre tabindex="0"&gt;&lt;code&gt;$ sudo journalctl -fu falco
Sep 15 11:07:41 lima-falco-fedora systemd[1]: Starting falco.service - Falco: Container Native Runtime Security...
Sep 15 11:07:41 lima-falco-fedora systemd[1]: Started falco.service - Falco: Container Native Runtime Security.
Sep 15 11:07:41 lima-falco-fedora falco[21290]: Falco version 0.32.2
Sep 15 11:07:41 lima-falco-fedora falco[21290]: Falco initialized with configuration file /etc/falco/falco.yaml
Sep 15 11:07:41 lima-falco-fedora falco[21290]: Loading rules from file /etc/falco/falco_rules.yaml:
Sep 15 11:07:41 lima-falco-fedora falco[21290]: Loading rules from file /etc/falco/falco_rules.local.yaml:
Sep 15 11:07:41 lima-falco-fedora falco[21290]: Starting internal webserver, listening on port 8765
Sep 15 11:07:54 lima-falco-fedora falco[21290]: 11:07:54.233793746: Warning Sensitive file opened for reading by non-trusted program (user=root user_loginuid=-1 program=systemd-userwor command=systemd-userwor file=/etc/shadow parent=systemd-userdbd gparent=systemd ggparent=&amp;lt;NA&amp;gt; gggparent=&amp;lt;NA&amp;gt; container_id=host image=&amp;lt;NA&amp;gt;)
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Profit!!!&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The last line in the output shows a Falco rule has already been triggered by running the previous systemctl command, so everything is working as it should. Yay!&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h3 id="falco-on-m1-on-kubernetes"&gt;Falco on M1 on Kubernetes&lt;/h3&gt;
&lt;p&gt;Running Falco on a single host is great, but what about running it in Kubernetes on your Apple hardware? Let's do it!&lt;/p&gt;
&lt;h4 id="creating-a-kubernetes-cluster"&gt;Creating a Kubernetes cluster&lt;/h4&gt;
&lt;p&gt;This time, we will leverage the &lt;a href="https://github.com/lima-vm/lima/blob/master/examples/k8s.yaml"&gt;k8s&lt;/a&gt; Lima template (basically, a vanilla Ubuntu 22.04 VM plus what is required to run Kubernetes via &lt;a href="https://kubernetes.io/docs/setup/production-environment/tools/kubeadm/install-kubeadm/"&gt;kubeadm&lt;/a&gt;) to have a single node Kubernetes cluster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl start --name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco-k8s template://k8s --tty&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#a2f"&gt;false&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;After a few minutes, our Kubernetes cluster is ready to be used. But first, let's get the Kubeconfig file needed to interact with the cluster:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mkdir -p &lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;HOME&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#b44"&gt;/.lima/falco-k8s/conf&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ &lt;span style="color:#a2f"&gt;export&lt;/span&gt; &lt;span style="color:#b8860b"&gt;KUBECONFIG&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;&lt;span style="color:#b44"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;HOME&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;&lt;span style="color:#b44"&gt;/.lima/falco-k8s/conf/kubeconfig.yaml&amp;#34;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ limactl shell falco-k8s sudo cat /etc/kubernetes/admin.conf &amp;gt;&lt;span style="color:#b8860b"&gt;$KUBECONFIG&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ chmod &lt;span style="color:#666"&gt;0600&lt;/span&gt; &lt;span style="color:#b68;font-weight:bold"&gt;${&lt;/span&gt;&lt;span style="color:#b8860b"&gt;KUBECONFIG&lt;/span&gt;&lt;span style="color:#b68;font-weight:bold"&gt;}&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, we are ready to go:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl get pods -A
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;NAMESPACE NAME READY STATUS RESTARTS AGE
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-flannel kube-flannel-ds-rjk74 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 17s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system coredns-565d847f94-5277n 0/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 17s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system coredns-565d847f94-spkgc 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 17s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system etcd-lima-falco-k8s 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 31s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system kube-apiserver-lima-falco-k8s 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 31s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system kube-controller-manager-lima-falco-k8s 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 32s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system kube-proxy-265h6 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 17s
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;kube-system kube-scheduler-lima-falco-k8s 1/1 Running &lt;span style="color:#666"&gt;0&lt;/span&gt; 33s
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h4 id="deploying-falco-via-helm"&gt;Deploying Falco via Helm&lt;/h4&gt;
&lt;p&gt;We leverage &lt;a href="https://helm.sh"&gt;Helm&lt;/a&gt; to deploy Falco on our Kubernetes cluster using the official &lt;a href="https://github.com/falcosecurity/charts/tree/master/charts/falco"&gt;Falco helm chart&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;To install Helm, we can use brew as:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ brew install helm
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Then, we need to add the &lt;code&gt;falcosecurity&lt;/code&gt; helm repository and install the &lt;code&gt;falcosecurity/falco&lt;/code&gt; chart.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;For this basic example we are just going to enable eBPF as we did before, but there are tons of parameters and configurations that can be tweaked. Check the &lt;a href="https://github.com/falcosecurity/charts/tree/master/charts/falco"&gt;official documentation&lt;/a&gt; to know more.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ helm repo add falcosecurity https://falcosecurity.github.io/charts
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ helm repo update
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ helm install falco falcosecurity/falco --namespace falco --create-namespace --set driver.kind&lt;span style="color:#666"&gt;=&lt;/span&gt;modern-bpf
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This will trigger the deployment of Falco on your Kubernetes cluster. The &lt;code&gt;falco-driver-loader&lt;/code&gt; init container will perform all the steps required to build the eBPF probe (hint: the kernel headers are already included in the VM) as you can see with the following snippet:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl logs -n falco &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;kubectl get po -n falco -l app.kubernetes.io/name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco -o name&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; -c falco-driver-loader
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;* Setting up /usr/src links from host
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;* Running falco-driver-loader &lt;span style="color:#a2f;font-weight:bold"&gt;for&lt;/span&gt;: falco &lt;span style="color:#b8860b"&gt;version&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;0.32.2, driver &lt;span style="color:#b8860b"&gt;version&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;2.0.0+driver
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;* Running falco-driver-loader with: &lt;span style="color:#b8860b"&gt;driver&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;bpf, &lt;span style="color:#b8860b"&gt;compile&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;yes, &lt;span style="color:#b8860b"&gt;download&lt;/span&gt;&lt;span style="color:#666"&gt;=&lt;/span&gt;yes
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;...
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;* eBPF probe located in /root/.falco/falco_ubuntu-generic_5.15.0-47-generic_51.o
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;* Success: eBPF probe symlinked to /root/.falco/falco-bpf.o
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;And then, the falco pod should be running:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="background-color:#f8f8f8;-moz-tab-size:4;-o-tab-size:4;tab-size:4;"&gt;&lt;code class="language-shell" data-lang="shell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ kubectl logs -n falco &lt;span style="color:#a2f;font-weight:bold"&gt;$(&lt;/span&gt;kubectl get po -n falco -l app.kubernetes.io/name&lt;span style="color:#666"&gt;=&lt;/span&gt;falco -o name&lt;span style="color:#a2f;font-weight:bold"&gt;)&lt;/span&gt; -c falco
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Thu Sep &lt;span style="color:#666"&gt;15&lt;/span&gt; 13:03:03 2022: Falco version 0.32.2
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Thu Sep &lt;span style="color:#666"&gt;15&lt;/span&gt; 13:03:03 2022: Falco initialized with configuration file /etc/falco/falco.yaml
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Thu Sep &lt;span style="color:#666"&gt;15&lt;/span&gt; 13:03:03 2022: Loading rules from file /etc/falco/falco_rules.yaml:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Thu Sep &lt;span style="color:#666"&gt;15&lt;/span&gt; 13:03:04 2022: Loading rules from file /etc/falco/falco_rules.local.yaml:
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Thu Sep &lt;span style="color:#666"&gt;15&lt;/span&gt; 13:03:04 2022: Starting internal webserver, listening on port &lt;span style="color:#666"&gt;8765&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Yay!&lt;/p&gt;
&lt;h3 id="conclusion"&gt;Conclusion&lt;/h3&gt;
&lt;p&gt;You have learned how to set up a Linux VM to run Falco with the help of Lima in your ARM-powered Apple hardware.&lt;/p&gt;
&lt;p&gt;You can find us in the &lt;a href="https://github.com/falcosecurity/community"&gt;Falco community&lt;/a&gt;. Please feel free to reach out to us for any questions, suggestions, or just a friendly chat!&lt;/p&gt;
&lt;p&gt;If you would like to find out more about Falco:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Get started in &lt;a href="http://falco.org/"&gt;Falco.org&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Check out the &lt;a href="https://github.com/falcosecurity/falco"&gt;Falco project in GitHub&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Get involved in the &lt;a href="https://falco.org/community/"&gt;Falco community&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Meet the maintainers on the &lt;a href="https://kubernetes.slack.com/?redir=%2Farchives%2FCMWH3EH32"&gt;Falco Slack&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Follow &lt;a href="https://twitter.com/falco_org"&gt;@falco_org on Twitter&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;</description></item></channel></rss>