Compare commits

...

31 Commits

Author SHA1 Message Date
Leonardo Di Giovanna
2e041f50a0 docs: update CHANGELOG.md to Falco 0.43.0
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-28 16:50:14 +01:00
Leonardo Di Giovanna
cc4cf3d102 chore(cmake): bump falcoctl dependency version to 0.12.2
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-28 12:19:12 +01:00
Leonardo Grasso
6a9531a0f7 fix(userspace)!: show source config path only in debug builds
Starting from Falco 0.40, the `falco --help` output incorrectly showed
  the source config path (e.g., /home/runner/work/falco/falco/falco.yaml)
  in release packages. This path was intended only for local development.

  The issue was introduced when RelWithDebInfo build type support was
  added (commit 6bf33ffd). The existing code checked for BUILD_TYPE_RELEASE
  to determine release behavior, but RelWithDebInfo builds defined
  BUILD_TYPE_RELWITHDEBINFO instead, causing them to fall into the
  debug code path.

  This fix introduces BUILD_TYPE_DEBUG and changes the conditionals to
  enable dev features only when CMAKE_BUILD_TYPE is explicitly "debug".
  Both Release and RelWithDebInfo builds now correctly show only
  /etc/falco/falco.yaml.

  Fixes the regression introduced in 0.40.0

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-23 16:58:48 +01:00
Leonardo Di Giovanna
0faba29165 docs: add deprecation notice for legacy eBPF in pkg install dialog
DEPRECATION NOTICE: add deprecation notice for legacy eBPF in pkg
  install dialog

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-23 14:23:47 +01:00
Leonardo Di Giovanna
f589cd3a6c chore(userspace): deprecate --gvisor-generate-config CLI option
DEPRECATION NOTICE: deprecate `--gvisor-generate-config` CLI option

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-23 14:23:47 +01:00
Leonardo Di Giovanna
d60a50ee70 ci: disable build-win32-package
Chocolatey registries are currently unavailable, and this is blocking
the release process. Disable the win32 build in CI, in the release
branch, to allow to move forward.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-22 13:16:39 +01:00
Leonardo Di Giovanna
4eb0acb706 chore(cmake): bump container plugin version to 0.6.1
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-22 11:47:39 +01:00
Leonardo Di Giovanna
79ed8aae9f chore(cmake): bump falcoctl dependency version to 0.12.1
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-22 11:47:39 +01:00
Leonardo Grasso
a653a576de fix(userspace/engine): missing closing quote in deprecated field warning
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-22 11:47:39 +01:00
cannarelladev
0e6867310b fix: add update_repo to publish-rpm script
Signed-off-by: cannarelladev <cannarella.dev@gmail.com>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-22 11:47:39 +01:00
Leonardo Grasso
979348eab2 fix: consolidate RPM signing logic into publish-rpm
Co-authored-by: irozzo-1A <iacopo@sysdig.com>
Co-authored-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-22 11:47:39 +01:00
Leonardo Di Giovanna
da8644b73e chore(cmake): bump libs/drivers to 0.23.1/9.1.0+driver
The previously used driver version was already the `9.1.0+driver`:
simply replace the commit SHA with the release name.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-14 14:27:57 +01:00
Leonardo Grasso
c93a6a8bd9 revert: chore(.github): temporary action for GPG key roation
This reverts commit edcb7a5dca.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-14 12:05:56 +01:00
irozzo-1A
c72a8151e5 chore(cmake): bump container plugin version to 0.6.0
Signed-off-by: irozzo-1A <iacopo@sysdig.com>
2026-01-14 11:19:56 +01:00
Leonardo Grasso
edcb7a5dca chore(.github): temporary action for GPG key roation
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-12 17:10:44 +01:00
Kevin Vu
3dabda4b7d fix: prevent NULL pointer crash in program_output on popen failure
Signed-off-by: Kevin Vu <vietcgi@gmail.com>
2026-01-12 09:31:44 +01:00
Leonardo Grasso
2ddcb51ebf fix(docker/falco-debian/Dockerfile): remove extra blank line
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-09 12:51:23 +01:00
Leonardo Grasso
8009d71bb2 chore(docker/driver-loader-buster): align to other Dockerfiles
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-09 12:51:23 +01:00
Leonardo Grasso
e7a68bde45 chore(docker/driver-loader-buster): align to other Dockerfiles
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-09 12:51:23 +01:00
Leonardo Grasso
3d603af362 chore(docker/driver-loader-buster): align to other Dockerfiles
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-09 12:51:23 +01:00
Leonardo Grasso
ab5a1fc1ea chore(docker/falco-debian): clean up ENV var
Co-authored-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-09 12:51:23 +01:00
Leonardo Grasso
66555b9f4a chore(docker/falco/Dockerfile): cleanup comment
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2026-01-09 12:51:23 +01:00
Raul Leite
b463f30ff9 Update docker/falco/Dockerfile
Co-authored-by: Leonardo Grasso <me@leonardograsso.com>
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Raul Leite
2d06fa0963 Update docker/falco-debian/Dockerfile
Co-authored-by: Leonardo Grasso <me@leonardograsso.com>
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Raul Leite
697a807b55 Restored FALCO_VERSION_URLENCODED as noted
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Raul Leite
9616b6945d Fixed ARGS and ./config to config fqdn path
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Raul Leite
879455453d Improved ENV Variable falco/diver-loader-buster/Dockerfile
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Raul Leite
600a256f1f Improved ENV Variable falco/Dockerfile
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Raul Leite
0c039bc163 Removed ca-certificates duplicity; Improved ENV Variable
Signed-off-by: Raul Leite <sp4wn.root@gmail.com>
2026-01-09 12:51:23 +01:00
Leonardo Di Giovanna
8b01753f6e chore(userspace): deprecate legacy eBPF probe, gVisor engine and gRPC
DEPRECATION NOTICE: deprecate legacy eBPF, gVisor and gRPC

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-08 15:50:17 +01:00
Leonardo Di Giovanna
d41a95ab11 docs: add deprecation notice for legacy eBPF, gVisor and gRPC usage
DEPRECATION NOTICE: add notice for legacy eBPF, gVisor and gRPC

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2026-01-08 15:50:17 +01:00
23 changed files with 202 additions and 106 deletions

View File

@@ -344,44 +344,6 @@ jobs:
path: |
${{ github.workspace }}/build/falco-${{ inputs.version }}-wasm.tar.gz
build-win32-package:
if: ${{ inputs.arch == 'x86_64' }}
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@8ade135a41bc03ea155e62e844d188df1ea18608 # v4.1.0
with:
fetch-depth: 0
- name: Install NSIS
run: choco install nsis -y
# NOTE: Backslash doesn't work as line continuation on Windows.
- name: Prepare project
run: |
cmake -B build -S . -DCMAKE_BUILD_TYPE=Release -DMINIMAL_BUILD=On -DUSE_BUNDLED_DEPS=On -DBUILD_FALCO_UNIT_TESTS=On -DFALCO_VERSION=${{ inputs.version }}
- name: Build project
run: |
cmake --build build --target package --config Release
- name: Run unit Tests
run: |
build/unit_tests/Release/falco_unit_tests.exe
- name: Upload Falco win32 installer
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: falco-installer-Release-win32.exe
path: build/falco-*.exe
- name: Upload Falco win32 package
uses: actions/upload-artifact@65c4c4a1ddee5b72f698fdd19549f0f0fb45cf08 # v4.6.0
with:
name: falco-Release-win32.exe
path: |
${{ github.workspace }}/build/userspace/falco/Release/falco.exe
build-macos-package:
if: ${{ inputs.arch == 'x86_64' }}
runs-on: macos-latest

View File

@@ -82,11 +82,6 @@ jobs:
GPG_KEY: ${{ secrets.GPG_KEY }}
run: printenv GPG_KEY | gpg --import -
- name: Sign rpms
run: |
rpmsign --define '_gpg_name Falcosecurity Package Signing' --addsign /tmp/falco-build-rpm/falco-*.rpm
rpm -qp --qf '%|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{(none)}|}|\n' /tmp/falco-build-rpm/falco-*.rpm
- name: Publish wasm
run: |
./scripts/publish-wasm -f /tmp/falco-wasm/falco-${{ inputs.version }}-wasm.tar.gz

View File

@@ -1,5 +1,65 @@
# Change Log
## v0.43.0
Released on 2026-01-28
### Breaking Changes :warning:
* fix(userspace)!: show source config path only in debug builds [[#3787](https://github.com/falcosecurity/falco/pull/3787)] - [@leogr](https://github.com/leogr)
### Minor Changes
* chore(userspace): deprecate `--gvisor-generate-config` CLI option [[#3784](https://github.com/falcosecurity/falco/pull/3784)] - [@ekoops](https://github.com/ekoops)
* docs: add deprecation notice for legacy eBPF in pkg install dialog [[#3786](https://github.com/falcosecurity/falco/pull/3786)] - [@ekoops](https://github.com/ekoops)
* chore: [NOTICE] The GPG key used to sign DEB/RPM packages has been rotated, and all existing packages have been re-signed. New key fingerprint: `478B2FBBC75F4237B731DA4365106822B35B1B1F` [[#3753](https://github.com/falcosecurity/falco/pull/3753)] - [@leogr](https://github.com/leogr)
* chore(scripts/falcoctl): increase follow interval to 1 week [[#3757](https://github.com/falcosecurity/falco/pull/3757)] - [@leogr](https://github.com/leogr)
* docs: add deprecation notice for legacy eBPF, gVisor and gRPC usage [[#3763](https://github.com/falcosecurity/falco/pull/3763)] - [@ekoops](https://github.com/ekoops)
* chore(userspace): deprecate legacy eBPF probe, gVisor engine and gRPC [[#3763](https://github.com/falcosecurity/falco/pull/3763)] - [@ekoops](https://github.com/ekoops)
* chore(engine): emit warning when the deprecated `evt.latency` field family is used in a rule condition or output [[#3744](https://github.com/falcosecurity/falco/pull/3744)] - [@irozzo-1A](https://github.com/irozzo-1A)
### Bug Fixes
* fix: prevent null pointer crash on `popen()` failure in output_program [[#3722](https://github.com/falcosecurity/falco/pull/3722)] - [@vietcgi](https://github.com/vietcgi)
* fix: correct falcoctl.yaml path in debian conffiles [[#3745](https://github.com/falcosecurity/falco/pull/3745)] - [@leogr](https://github.com/leogr)
### Non user-facing changes
* chore(cmake): bump falcoctl dependency version to `0.12.2` [[#3790](https://github.com/falcosecurity/falco/pull/3790)] - [@ekoops](https://github.com/ekoops)
* chore(cmake): bump falcoctl dependency version to `0.12.1` [[#3777](https://github.com/falcosecurity/falco/pull/3777)] - [@ekoops](https://github.com/ekoops)
* chore(cmake): bump container plugin version to `0.6.1` [[#3780](https://github.com/falcosecurity/falco/pull/3780)] - [@ekoops](https://github.com/ekoops)
* fix(userspace/engine): missing closing quote in deprecated field warning [[#3779](https://github.com/falcosecurity/falco/pull/3779)] - [@leogr](https://github.com/leogr)
* chore(.github): Put back gpg key rotation workflow [[#3772](https://github.com/falcosecurity/falco/pull/3772)] - [@irozzo-1A](https://github.com/irozzo-1A)
* chore(cmake): bump libs/drivers to `0.23.1`/`9.1.0+driver` [[#3769](https://github.com/falcosecurity/falco/pull/3769)] - [@ekoops](https://github.com/ekoops)
* revert: chore(.github): temporary action for GPG key rotation [[#3766](https://github.com/falcosecurity/falco/pull/3766)] - [@leogr](https://github.com/leogr)
* chore(cmake): bump container plugin version to 0.6.0 [[#3768](https://github.com/falcosecurity/falco/pull/3768)] - [@irozzo-1A](https://github.com/irozzo-1A)
* docs(proposals): add proposal for legacy probe, gVisor engine and gRPC output deprecation [[#3755](https://github.com/falcosecurity/falco/pull/3755)] - [@ekoops](https://github.com/ekoops)
* chore(cmake): bump libs/drivers to `0.23.0`/`9.1.0+driver` [[#3760](https://github.com/falcosecurity/falco/pull/3760)] - [@ekoops](https://github.com/ekoops)
* update(cmake): update libs and driver to latest master [[#3754](https://github.com/falcosecurity/falco/pull/3754)] - [@github-actions[bot]](https://github.com/apps/github-actions)
* fix(metrics): Add null check for state.outputs in metrics collection [[#3740](https://github.com/falcosecurity/falco/pull/3740)] - [@adduali1310](https://github.com/adduali1310)
* chore(cmake): bump libs to `0.23.0-rc2` [[#3759](https://github.com/falcosecurity/falco/pull/3759)] - [@ekoops](https://github.com/ekoops)
* chore(cmake): bump libs/drivers to `0.23.0-rc1`/`9.1.0-rc1+driver` [[#3758](https://github.com/falcosecurity/falco/pull/3758)] - [@ekoops](https://github.com/ekoops)
* fix(ci): revert changes to mitigate rate-limitar change [[#3752](https://github.com/falcosecurity/falco/pull/3752)] - [@irozzo-1A](https://github.com/irozzo-1A)
* update(cmake): update libs and driver to latest master [[#3723](https://github.com/falcosecurity/falco/pull/3723)] - [@github-actions[bot]](https://github.com/apps/github-actions)
* Reduce image size [[#3746](https://github.com/falcosecurity/falco/pull/3746)] - [@jfcoz](https://github.com/jfcoz)
* docs(RELEASE.md): specify target branch association upon release creation [[#3717](https://github.com/falcosecurity/falco/pull/3717)] - [@ekoops](https://github.com/ekoops)
* docs(RELEASE.md): fix `rn2md` cmd generating changelogs [[#3709](https://github.com/falcosecurity/falco/pull/3709)] - [@ekoops](https://github.com/ekoops)
* docs(RELEASE.md): fix PRs filtering expr for checking release notes [[#3708](https://github.com/falcosecurity/falco/pull/3708)] - [@ekoops](https://github.com/ekoops)
* docs(RELEASE.md): fix PRs filtering expression text [[#3707](https://github.com/falcosecurity/falco/pull/3707)] - [@ekoops](https://github.com/ekoops)
### Statistics
| MERGED PRS | NUMBER |
|-----------------|--------|
| Not user-facing | 21 |
| Release note | 11 |
| Total | 32 |
## v0.42.0
Released on 2025-10-22

View File

@@ -288,6 +288,12 @@ if(NOT WIN32
AND NOT MUSL_OPTIMIZED_BUILD
)
include(falcoctl)
set(CONTAINER_VERSION "0.6.1")
if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
set(CONTAINER_HASH "008989992ed1f31b3ffb94ba6b64ca5a8e2f91611a10c9d6213c5c0a499d0679")
else() # arm64
set(CONTAINER_HASH "f90a700b4c2b411b23e7cc461b61a316b242994aad853c3e6baf12481fb6f6c9")
endif()
include(container_plugin)
# Generate a binary_dir/falco.yaml that automatically enables the plugin to be used for local

View File

@@ -23,6 +23,7 @@ endif()
string(TOLOWER "${CMAKE_BUILD_TYPE}" CMAKE_BUILD_TYPE)
if(CMAKE_BUILD_TYPE STREQUAL "debug")
set(KBUILD_FLAGS "${FALCO_EXTRA_DEBUG_FLAGS} ${FALCO_EXTRA_FEATURE_FLAGS}")
add_definitions(-DBUILD_TYPE_DEBUG)
elseif(CMAKE_BUILD_TYPE STREQUAL "relwithdebinfo")
set(KBUILD_FLAGS "${FALCO_EXTRA_FEATURE_FLAGS}")
add_definitions(-DBUILD_TYPE_RELWITHDEBINFO)

View File

@@ -35,9 +35,9 @@ else()
# FALCOSECURITY_LIBS_VERSION. In case you want to test against another driver version (or
# branch, or commit) just pass the variable - ie., `cmake -DDRIVER_VERSION=dev ..`
if(NOT DRIVER_VERSION)
set(DRIVER_VERSION "9e6a8ccd4e4f5796f45ad486decd00b4996129b7")
set(DRIVER_VERSION "9.1.0+driver")
set(DRIVER_CHECKSUM
"SHA256=87902814e29718529094b89ff2a3ddbd4ee7aa77da824d4acbaad0d863e04ce9"
"SHA256=14cba5b610bf48cd0a0a94b1156ed86bfb552c7ed24b68b1028360fa3af18cbb"
)
endif()

View File

@@ -20,16 +20,16 @@ option(ADD_FALCOCTL_DEPENDENCY "Add falcoctl dependency while building falco" ON
if(ADD_FALCOCTL_DEPENDENCY)
string(TOLOWER ${CMAKE_HOST_SYSTEM_NAME} FALCOCTL_SYSTEM_NAME)
set(FALCOCTL_VERSION "0.11.4")
set(FALCOCTL_VERSION "0.12.2")
message(STATUS "Building with falcoctl: ${FALCOCTL_VERSION}")
if(${CMAKE_HOST_SYSTEM_PROCESSOR} STREQUAL "x86_64")
set(FALCOCTL_SYSTEM_PROC_GO "amd64")
set(FALCOCTL_HASH "8015cadcb4328abcbf140c3ca88031cd46426f7f3279d2802f0937ab1e41d66c")
set(FALCOCTL_HASH "7e0e232aa73825383d3382b3af8a38466289a768f9c1c7f25bd7e11a3ed6980a")
else() # aarch64
set(FALCOCTL_SYSTEM_PROC_GO "arm64")
set(FALCOCTL_HASH "246874f1168abb7a8463509c6191ede460e5a2b8a39058ef5c4a17b67cb86c85")
set(FALCOCTL_HASH "9b7dd75189f997da6423bcdb5dfe68840f20c56f95d30d323d26d0c4bd75a8e3")
endif()
ExternalProject_Add(

View File

@@ -42,9 +42,9 @@ else()
# version (or branch, or commit) just pass the variable - ie., `cmake
# -DFALCOSECURITY_LIBS_VERSION=dev ..`
if(NOT FALCOSECURITY_LIBS_VERSION)
set(FALCOSECURITY_LIBS_VERSION "9e6a8ccd4e4f5796f45ad486decd00b4996129b7")
set(FALCOSECURITY_LIBS_VERSION "0.23.1")
set(FALCOSECURITY_LIBS_CHECKSUM
"SHA256=87902814e29718529094b89ff2a3ddbd4ee7aa77da824d4acbaad0d863e04ce9"
"SHA256=38c580626b072ed24518e8285a629923c8c4c6d6794b91b3b93474db7fd85cf7"
)
endif()

View File

@@ -17,11 +17,12 @@ LABEL usage="docker run -i -t --privileged -v /root/.falco:/root/.falco -v /proc
ARG TARGETARCH
ARG VERSION_BUCKET=deb
ENV VERSION_BUCKET=${VERSION_BUCKET}
ENV FALCO_VERSION=${FALCO_VERSION}
ENV HOST_ROOT=/host
ENV HOME=/root
ARG HOST_ROOT=/host
ARG HOME=/root
ENV FALCO_VERSION="${FALCO_VERSION}" \
VERSION_BUCKET="${VERSION_BUCKET}" \
HOST_ROOT="${HOST_ROOT}" \
HOME="${HOME}"
RUN cp /etc/skel/.bashrc /root && cp /etc/skel/.profile /root
@@ -136,6 +137,6 @@ RUN curl -L -o binutils_2.30-22_${TARGETARCH}.deb https://download.falco.org/dep
&& dpkg -i *binutils*.deb \
&& rm -f *binutils*.deb
COPY ./docker/driver-loader-buster/docker-entrypoint.sh /
COPY docker/driver-loader-buster/docker-entrypoint.sh /
ENTRYPOINT ["/docker-entrypoint.sh"]

View File

@@ -15,14 +15,15 @@ LABEL org.opencontainers.image.authors='The Falco Authors https://falco.org' \
LABEL usage="docker run -i -t --privileged -v /var/run/docker.sock:/host/var/run/docker.sock -v /proc:/host/proc:ro -v /etc:/host/etc:ro falcosecurity/falco:latest-debian"
ARG VERSION_BUCKET=deb
ARG HOST_ROOT=/host
ARG HOME=/root
ENV FALCO_VERSION=${FALCO_VERSION}
ENV VERSION_BUCKET=${VERSION_BUCKET}
ENV FALCO_VERSION="${FALCO_VERSION}" \
VERSION_BUCKET="${VERSION_BUCKET}" \
HOST_ROOT="${HOST_ROOT}" \
HOME="${HOME}"
ENV HOST_ROOT=/host
ENV HOME=/root
RUN apt-get -y update && apt-get -y install ca-certificates curl jq ca-certificates gnupg2 \
RUN apt-get -y update && apt-get -y install curl jq ca-certificates gnupg2 \
&& apt clean -y && rm -rf /var/lib/apt/lists/*
WORKDIR /
@@ -35,6 +36,6 @@ RUN curl -s https://falco.org/repo/falcosecurity-packages.asc | apt-key add - \
&& rm -rf /var/lib/apt/lists/*
# Change the falco config within the container to enable ISO 8601 output.
ADD ./config/falco.iso8601_timeformat.yaml /etc/falco/config.d/
ADD config/falco.iso8601_timeformat.yaml /etc/falco/config.d/
CMD ["/usr/bin/falco"]

View File

@@ -16,22 +16,26 @@ LABEL usage="docker run -i -t --privileged -v /var/run/docker.sock:/host/var/run
# NOTE: for the "least privileged" use case, please refer to the official documentation
ARG VERSION_BUCKET=bin
ARG HOST_ROOT=/host
ARG HOME=/root
ENV FALCO_VERSION=${FALCO_VERSION}
ENV VERSION_BUCKET=${VERSION_BUCKET}
ENV HOST_ROOT=/host
ENV HOME=/root
ENV FALCO_VERSION="${FALCO_VERSION}" \
VERSION_BUCKET="${VERSION_BUCKET}" \
HOST_ROOT="${HOST_ROOT}" \
HOME="${HOME}"
RUN apk update && apk add curl ca-certificates jq libstdc++
WORKDIR /
RUN FALCO_VERSION_URLENCODED=$(echo -n ${FALCO_VERSION}|jq -sRr @uri) && \
RUN ARCH=$(uname -m) && \
FALCO_VERSION_URLENCODED=$(echo -n "${FALCO_VERSION}" | jq -sRr @uri) && \
echo "Downloading Falco ${FALCO_VERSION} for ${ARCH}" && \
curl -L -o falco.tar.gz \
https://download.falco.org/packages/${VERSION_BUCKET}/$(uname -m)/falco-${FALCO_VERSION_URLENCODED}-$(uname -m).tar.gz && \
https://download.falco.org/packages/${VERSION_BUCKET}/${ARCH}/falco-${FALCO_VERSION_URLENCODED}-${ARCH}.tar.gz && \
tar -xvf falco.tar.gz && \
rm -f falco.tar.gz && \
mv falco-${FALCO_VERSION}-$(uname -m) falco && \
mv falco-${FALCO_VERSION}-${ARCH} falco && \
rm -rf /falco/usr/src/falco-* && \
cp -r /falco/* / && \
rm -rf /falco && \
@@ -39,6 +43,6 @@ RUN FALCO_VERSION_URLENCODED=$(echo -n ${FALCO_VERSION}|jq -sRr @uri) && \
# Change the falco config within the container to enable ISO 8601 output.
ADD ./config/falco.iso8601_timeformat.yaml /etc/falco/config.d/
ADD config/falco.iso8601_timeformat.yaml /etc/falco/config.d/
CMD ["/usr/bin/falco"]

View File

@@ -70,9 +70,9 @@
# file_output [Stable]
# http_output [Stable]
# program_output [Stable]
# grpc_output [Stable]
# grpc_output [Deprecated]
# Falco exposed services
# grpc [Stable]
# grpc [Deprecated]
# webserver [Stable]
# Falco logging / alerting / metrics related to software functioning (basic)
# log_stderr [Stable]
@@ -282,12 +282,14 @@ rules_files:
#
# -- Falco supports different engines to generate events.
# Choose the appropriate engine kind based on your system's configuration and requirements.
# DEPRECATION NOTICE: the Legacy eBPF probe and the gVisor engine are currently deprecated. Consider using other
# engines.
#
# Available engines:
# - `kmod`: Kernel Module
# - `ebpf`: Legacy eBPF probe
# - `ebpf`: Legacy eBPF probe (deprecated)
# - `modern_ebpf`: Modern eBPF (CO-RE eBPF probe)
# - `gvisor`: gVisor sandbox
# - `gvisor`: gVisor sandbox (deprecated)
# - `replay`: Replay a scap trace file
# - `nodriver`: No driver is injected into the system.
# This is useful to debug and to run plugins with 'syscall' source.
@@ -438,7 +440,8 @@ engine:
kmod:
buf_size_preset: 4
drop_failed_exit: false
# -- Engine-specific configuration for Legacy eBPF (ebpf) engine.
# -- Engine-specific configuration for Legacy eBPF (ebpf) engine. DEPRECATION NOTICE: the Legacy eBPF engine is
# deprecated.
ebpf:
# -- Path to the elf file to load.
probe: ${HOME}/.falco/falco-bpf.o
@@ -453,7 +456,7 @@ engine:
replay:
# -- Path to the capture file to replay (eg: /path/to/file.scap)
capture_file: ""
# -- Engine-specific configuration for gVisor (gvisor) engine.
# -- Engine-specific configuration for gVisor (gvisor) engine. DEPRECATION NOTICE: the gVisor engine is deprecated.
gvisor:
# -- A Falco-compatible configuration file can be generated with
# '--gvisor-generate-config' and utilized for both runsc and Falco.
@@ -798,7 +801,7 @@ append_output:
# Falco outputs channels #
##########################
# Falco supports various output channels, such as syslog, stdout, file, gRPC,
# Falco supports various output channels, such as syslog, stdout, file, gRPC (deprecated),
# webhook, and more. You can enable or disable these channels as needed to
# control where Falco alerts and log messages are directed. This flexibility
# allows seamless integration with your preferred logging and alerting systems.
@@ -894,14 +897,14 @@ program_output:
# -- The program to execute.
program: "jq '{text: .output}' | curl -d @- -X POST https://hooks.slack.com/services/XXX"
# [Stable] `grpc_output`
# [Deprecated] `grpc_output`
#
# -- Use gRPC as an output service.
# -- Use gRPC as an output service. DEPRECATION NOTICE: The gRPC output is deprecated. Consider using other outputs.
#
# gRPC is a modern and high-performance framework for remote procedure calls
# (RPC). It utilizes protocol buffers for efficient data serialization. The gRPC
# output in Falco provides a modern and efficient way to integrate with other
# systems. By default the setting is turned off. Enabling this option stores
# systems. By default, the setting is turned off. Enabling this option stores
# output events in memory until they are consumed by a gRPC client. Ensure that
# you have a consumer for the output events or leave it disabled.
grpc_output:
@@ -912,7 +915,10 @@ grpc_output:
# Falco exposed services #
##########################
# [Stable] `grpc`
# [Deprecated] `grpc`
#
# -- A gRPC server (needed by the gRPC output). DEPRECATION NOTICE: The gRPC server is deprecated as a consequence of
# the gRPC output deprecation.
#
# Falco provides support for running a gRPC server using two main binding types:
# 1. Over the network with mandatory mutual TLS authentication (mTLS), which

View File

@@ -60,7 +60,7 @@ if [ "$1" = "configure" ]; then
1 "Manual configuration (no unit is started)" \
2 "Automatic selection" \
3 "Kmod" \
4 "eBPF" \
4 "eBPF (deprecated)" \
5 "Modern eBPF" \
2>&1 >/dev/tty)
fi

View File

@@ -14,6 +14,16 @@ check_program() {
fi
}
# Sign RPM packages with embedded GPG signature using rpmsign
#
# $@: paths of RPM files to sign.
rpmsign_packages() {
echo "Signing RPM packages with rpmsign..."
rpmsign --define '_gpg_name Falcosecurity Package Signing' --resign "$@"
echo "Verifying RPM signatures..."
rpm -qp --qf '%{NAME}-%{VERSION}-%{RELEASE}.%{ARCH}: %|DSAHEADER?{%{DSAHEADER:pgpsig}}:{%|RSAHEADER?{%{RSAHEADER:pgpsig}}:{(none)}|}|\n' "$@"
}
# Updates the signature of a RPM package in the local repository
#
# $1: path of the repository.
@@ -127,6 +137,8 @@ fi
check_program createrepo
check_program gpg
check_program aws
check_program rpmsign
check_program rpm
# settings
s3_bucket_repo="s3://falco-distribution/packages/${repo}"
@@ -140,19 +152,32 @@ aws s3 cp ${s3_bucket_repo} ${tmp_repo_path} --recursive
# update signatures for all existing packages
if [ "${sign_all}" ]; then
# collect all RPM files
rpm_files=()
for file in ${tmp_repo_path}/*; do
if [ -f "$file" ]; then # exclude directories, symlinks, etc...
if [[ ! $file == *.asc ]]; then # exclude signature files
package=$(basename -- ${file})
echo "Signing ${package}..."
sign_rpm ${tmp_repo_path} ${file}
echo "Syncing ${package}.asc to ${s3_bucket_repo}..."
aws s3 cp ${tmp_repo_path}/${package}.asc ${s3_bucket_repo}/${package}.asc --acl public-read
fi
if [ -f "$file" ] && [[ $file == *.rpm ]]; then
rpm_files+=("$file")
fi
done
# sign all RPM packages with embedded GPG signature
if [ ${#rpm_files[@]} -gt 0 ]; then
rpmsign_packages "${rpm_files[@]}"
fi
# create detached signatures and upload
for file in "${rpm_files[@]}"; do
package=$(basename -- ${file})
echo "Creating detached signature for ${package}..."
sign_rpm ${tmp_repo_path} ${file}
echo "Syncing ${package} and ${package}.asc to ${s3_bucket_repo}..."
aws s3 cp ${tmp_repo_path}/${package} ${s3_bucket_repo}/${package} --acl public-read
aws s3 cp ${tmp_repo_path}/${package}.asc ${s3_bucket_repo}/${package}.asc --acl public-read
done
aws cloudfront create-invalidation --distribution-id ${AWS_CLOUDFRONT_DIST_ID} --paths ${cloudfront_path}/*.rpm
aws cloudfront create-invalidation --distribution-id ${AWS_CLOUDFRONT_DIST_ID} --paths ${cloudfront_path}/*.asc
update_repo ${tmp_repo_path}
sign_repo ${tmp_repo_path}
fi
@@ -161,8 +186,9 @@ if [[ ${repo} == "rpm-dev" ]]; then
reduce_dir_size ${tmp_repo_path} 10 rpm
fi
# update the repo by adding new packages
# sign and add new packages to the repo
if ! [ ${#files[@]} -eq 0 ]; then
rpmsign_packages "${files[@]}"
for file in "${files[@]}"; do
echo "Adding ${file}..."
add_rpm ${tmp_repo_path} ${file}

View File

@@ -59,7 +59,7 @@ if [ $1 -ge 1 ]; then
1 "Manual configuration (no unit is started)" \
2 "Automatic selection" \
3 "Kmod" \
4 "eBPF" \
4 "eBPF (deprecated)" \
5 "Modern eBPF" \
2>&1 >/dev/tty)
fi

View File

@@ -215,7 +215,8 @@ struct deprecated_field_warning : warning {
df(df) {}
std::string as_string() const override {
return warning::as_string() + ": field '" + falco::load_result::deprecated_field_str(df);
return warning::as_string() + ": field '" + falco::load_result::deprecated_field_str(df) +
"'";
};
std::string description() const override {
return warning::description() + ": " + falco::load_result::deprecated_field_desc(df);

View File

@@ -78,14 +78,14 @@ falco::app::run_result falco::app::actions::load_config(const falco::app::state&
falco::app::run_result falco::app::actions::require_config_file(const falco::app::state& s) {
#ifndef __EMSCRIPTEN__
if(s.options.conf_filename.empty()) {
#ifndef BUILD_TYPE_RELEASE
#ifdef BUILD_TYPE_DEBUG
return run_result::fatal(std::string("You must create a config file at ") +
FALCO_SOURCE_CONF_FILE + ", " + FALCO_INSTALL_CONF_FILE +
" or by passing -c");
#else // BUILD_TYPE_RELEASE
#else
return run_result::fatal(std::string("You must create a config file at ") +
FALCO_INSTALL_CONF_FILE + " or by passing -c");
#endif // BUILD_TYPE_RELEASE
#endif
}
#endif // __EMSCRIPTEN__
return run_result::ok();

View File

@@ -17,6 +17,7 @@ limitations under the License.
#include "config_falco.h"
#include "actions.h"
#include "logger.h"
using namespace falco::app;
using namespace falco::app::actions;
@@ -26,6 +27,10 @@ falco::app::run_result falco::app::actions::print_generated_gvisor_config(falco:
return run_result::ok();
}
falco_logger::log(falco_logger::level::WARNING,
"Using feature for deprecated gVisor engine. Please consider switching to "
"another engine.");
sinsp i;
std::string gvisor_config =
i.generate_gvisor_config(s.options.gvisor_generate_config_with_socket);

View File

@@ -51,7 +51,7 @@ bool options::parse(int argc, char **argv, std::string &errstr) {
return false;
}
} else {
#ifndef BUILD_TYPE_RELEASE
#ifdef BUILD_TYPE_DEBUG
conf_stream.open(FALCO_SOURCE_CONF_FILE);
if(conf_stream.is_open()) {
conf_filename = FALCO_SOURCE_CONF_FILE;
@@ -93,7 +93,7 @@ void options::define(cxxopts::Options& opts)
{
opts.add_options()
("h,help", "Print this help list and exit.", cxxopts::value(help)->default_value("false"))
#ifdef BUILD_TYPE_RELEASE
#ifndef BUILD_TYPE_DEBUG
("c", "Configuration file. If not specified uses " FALCO_INSTALL_CONF_FILE ".", cxxopts::value(conf_filename), "<path>")
#else
("c", "Configuration file. If not specified tries " FALCO_SOURCE_CONF_FILE ", " FALCO_INSTALL_CONF_FILE ".", cxxopts::value(conf_filename), "<path>")
@@ -104,7 +104,7 @@ void options::define(cxxopts::Options& opts)
("dry-run", "Run Falco without processing events. It can help check that the configuration and rules do not have any errors.", cxxopts::value(dry_run)->default_value("false"))
("enable-source", "Enable a specific <event_source>. By default, all loaded sources get enabled. Available sources are 'syscall' plus all sources defined by loaded plugins supporting the event sourcing capability. This option can be passed multiple times. When using this option, only the event sources specified by it will be enabled. This option can not be mixed with --disable-source. This option has no effect when reproducing events from a capture file.", cxxopts::value(enable_sources), "<event_source>")
#ifdef HAS_GVISOR
("gvisor-generate-config", "Generate a configuration file that can be used for gVisor and exit. See --gvisor-config for more details.", cxxopts::value<std::string>(gvisor_generate_config_with_socket)->implicit_value("/run/falco/gvisor.sock"), "<socket_path>")
("gvisor-generate-config", "DEPRECATED: Generate a configuration file that can be used for gVisor and exit.", cxxopts::value<std::string>(gvisor_generate_config_with_socket)->implicit_value("/run/falco/gvisor.sock"), "<socket_path>")
#endif
("i", "Print those events that are ignored by default for performance reasons and exit.", cxxopts::value(print_ignored_events)->default_value("false"))
("L", "Show the name and description of all rules and exit. If json_output is set to true, it prints details about all rules, macros, and lists in JSON format.", cxxopts::value(describe_all_rules)->default_value("false"))
@@ -117,7 +117,7 @@ void options::define(cxxopts::Options& opts)
("N", "Only print field names when used in conjunction with the --list option. It has no effect when used with other options.", cxxopts::value(names_only)->default_value("false"))
("o,option", "Set the value of option <opt> to <val>. Overrides values in the configuration file. <opt> can be identified using its location in the configuration file using dot notation. Elements of list entries can be accessed via square brackets [].\n E.g. base.id = val\n base.subvalue.subvalue2 = val\n base.list[1]=val", cxxopts::value(cmdline_config_options), "<opt>=<val>")
("plugin-info", "Print info for the plugin specified by <plugin_name> and exit.\nThis includes all descriptive information like name and author, along with the\nschema format for the init configuration and a list of suggested open parameters.\n<plugin_name> can be the plugin's name or its configured 'library_path'.", cxxopts::value(print_plugin_info), "<plugin_name>")
("p,print", "DEPRECATED: use -o append_output... instead. Print additional information in the rule's output.\nUse -pc or -pcontainer to append container details to syscall events.\nUse -pk or -pkubernetes to add both container and Kubernetes details to syscall events.\nIf using gVisor, choose -pcg or -pkg variants (or -pcontainer-gvisor and -pkubernetes-gvisor, respectively).\nThe details will be directly appended to the rule's output.\nAlternatively, use -p <output_format> for a custom format. In this case, the given <output_format> will be appended to the rule's output without any replacement to all events, including plugin events.", cxxopts::value(print_additional), "<output_format>")
("p,print", "DEPRECATED: use -o append_output... instead. Print additional information in the rule's output.\nUse -pc or -pcontainer to append container details to syscall events.\nUse -pk or -pkubernetes to add both container and Kubernetes details to syscall events.\nThe details will be directly appended to the rule's output.\nAlternatively, use -p <output_format> for a custom format. In this case, the given <output_format> will be appended to the rule's output without any replacement to all events, including plugin events.", cxxopts::value(print_additional), "<output_format>")
("P,pidfile", "Write PID to specified <pid_file> path. By default, no PID file is created.", cxxopts::value(pidfilename)->default_value(""), "<pid_file>")
("r", "Rules file or directory to be loaded. This option can be passed multiple times. Falco defaults to the values in the configuration file when this option is not specified. Only files with .yml or .yaml extension are considered.", cxxopts::value<std::vector<std::string>>(), "<rules_file>")
("support", "Print support information, including version, rules files used, loaded configuration, etc., and exit. The output is in JSON format.", cxxopts::value(print_support)->default_value("false"))

View File

@@ -254,6 +254,12 @@ void falco_configuration::load_engine_config(const std::string &config_name) {
driver_mode_str + "' is not a valid kind.");
}
if(m_engine_mode == engine_kind_t::EBPF || m_engine_mode == engine_kind_t::GVISOR) {
falco_logger::log(falco_logger::level::WARNING,
"Using deprecated engine '" + driver_mode_str +
"'. Please consider switching to another engine.");
}
switch(m_engine_mode) {
case engine_kind_t::KMOD:
m_kmod.m_buf_size_preset = m_config.get_scalar<int16_t>("engine.kmod.buf_size_preset",
@@ -473,6 +479,11 @@ void falco_configuration::load_yaml(const std::string &config_name) {
}
m_grpc_enabled = m_config.get_scalar<bool>("grpc.enabled", false);
if(m_grpc_enabled) {
falco_logger::log(falco_logger::level::WARNING,
"Using deprecated gRPC server (deprecated as consequence of gRPC output "
"deprecation).");
}
m_grpc_bind_address = m_config.get_scalar<std::string>("grpc.bind_address", "0.0.0.0:5060");
m_grpc_threadiness = m_config.get_scalar<uint32_t>("grpc.threadiness", 0);
if(m_grpc_threadiness == 0) {
@@ -488,8 +499,13 @@ void falco_configuration::load_yaml(const std::string &config_name) {
falco::outputs::config grpc_output;
grpc_output.name = "grpc";
const auto grpc_output_enabled = m_config.get_scalar<bool>("grpc_output.enabled", true);
if(grpc_output_enabled) {
falco_logger::log(falco_logger::level::WARNING,
"Using deprecated gRPC output. Please consider using other outputs.");
}
// gRPC output is enabled only if gRPC server is enabled too
if(m_config.get_scalar<bool>("grpc_output.enabled", true) && m_grpc_enabled) {
if(grpc_output_enabled && m_grpc_enabled) {
m_outputs.push_back(grpc_output);
}

View File

@@ -16,12 +16,22 @@ limitations under the License.
*/
#include "outputs_program.h"
#include "logger.h"
#include <stdio.h>
#include <cerrno>
#include <cstring>
void falco::outputs::output_program::open_pfile() {
if(m_pfile == nullptr) {
m_pfile = popen(m_oc.options["program"].c_str(), "w");
if(m_pfile == nullptr) {
falco_logger::log(falco_logger::level::ERR,
"Failed to open program output: " + m_oc.options["program"] +
" (error: " + std::string(std::strerror(errno)) + ")");
return;
}
if(!m_buffered) {
setvbuf(m_pfile, NULL, _IONBF, 0);
}
@@ -31,7 +41,9 @@ void falco::outputs::output_program::open_pfile() {
void falco::outputs::output_program::output(const message *msg) {
open_pfile();
fprintf(m_pfile, "%s\n", msg->msg.c_str());
if(m_pfile != nullptr) {
fprintf(m_pfile, "%s\n", msg->msg.c_str());
}
if(m_oc.options["keep_alive"] != "true") {
cleanup();

View File

@@ -32,7 +32,7 @@ class output_program : public abstract_output {
private:
void open_pfile();
FILE *m_pfile;
FILE *m_pfile = nullptr;
};
} // namespace outputs