Compare commits

...

1085 Commits

Author SHA1 Message Date
Angelo Puglisi 421197c142 chore(plugins/container): inline container_health_probe
Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-08-05 15:47:58 +02:00
Angelo Puglisi 755ec40b44 update(plugins/container): bump to 0.3.6
Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-08-05 09:39:56 +02:00
Angelo Puglisi ffdf1e221c fix(plugins/container): container_info to_json
Fix flat container info json.

Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-08-05 09:39:56 +02:00
dependabot[bot] 13b5a52f14 build(deps): bump the actions group with 2 updates
Bumps the actions group with 2 updates: [github/codeql-action](https://github.com/github/codeql-action) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer).


Updates `github/codeql-action` from 3.29.2 to 3.29.4
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](181d5eefc2...4e828ff8d4)

Updates `sigstore/cosign-installer` from 3.9.1 to 3.9.2
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](398d4b0eee...d58896d6a1)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.29.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: sigstore/cosign-installer
  dependency-version: 3.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-08-04 12:41:48 +02:00
Federico Di Pierro 411f0f7387 fix(plugins/container): do not use async methods in scap replay mode (ie: when async ctx is null).
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-08-04 12:39:48 +02:00
Federico Di Pierro beabb1f661 cleanup(plugins/container): always use `procexit` logic to cleanup containers cache.
Container plugin stops relying upon `removed` notification for container engine SDKs too,
and always use the `procexit` logic.

The go-worker still has the ability to attach `removed` listeners,
but it's only used by worker test executable and go-worker tests now.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-08-04 12:39:48 +02:00
Federico Di Pierro 78247e761a new(plugins/container): properly send `container_removed` events for bpm,lxc,libvirt_lxc too.
Let the async event cleanup the cache for us.
This way, other plugins can get notified even when we are
removing a bpm/lxc container.

Also, bump plugin version to 0.3.5.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-08-04 12:39:48 +02:00
Federico Di Pierro e31be591a1 update(plugins): updated CHANGELOGS.
Also, added new dummy_rs changelog.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-08-01 09:54:27 +02:00
Federico Di Pierro 885c18ef5f update(plugins/container): bump to 0.3.4.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-31 12:23:25 +02:00
Federico Di Pierro b029bc3910 chore(plugins/k8smeta): drop experimental status.
Also, bump to 0.3.1.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-31 12:23:25 +02:00
Federico Di Pierro 11c7d16688 chore(plugins/container): move error log to debug level.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-31 12:23:25 +02:00
Federico Di Pierro 0275c81b60 chore(plugins/container): added some tests around workerLoop().
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
Federico Di Pierro 4bcabb2efa chore(plugins/container): improve exit strategy for goroutine workers when stream of events is closed.
Exit the goroutine and stop polling its outChannel from workerLoop.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
Federico Di Pierro dd90663b10 chore(plugins/container): fixed a log.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
Federico Di Pierro 4684790780 fix(plugins/container): fixed build under recent gcc by including `algorithm`.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
Federico Di Pierro 2487f7c71b chore(plugins/container): move `containerEventsErrorTimeout` to cri.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
Federico Di Pierro 2fc5772dcc cleanup(plugins/container): podman `system.Events` now returns error synchronously.
Also, it spawns its own goroutine to fetch stream of events.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
Federico Di Pierro f9da9fa465 chore(plugins/container): port docker engine away from deprecated APIs.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-30 11:50:17 +02:00
dependabot[bot] a76335d70f build(deps): bump the cargo group across 2 directories with 4 updates
Bumps the cargo group with 3 updates in the /plugins/dummy_rs directory: [rand](https://github.com/rust-random/rand), [serde_json](https://github.com/serde-rs/json) and [cc](https://github.com/rust-lang/cc-rs).
Bumps the cargo group with 3 updates in the /plugins/krsi directory: [serde_json](https://github.com/serde-rs/json), [tokio](https://github.com/tokio-rs/tokio) and [cc](https://github.com/rust-lang/cc-rs).


Updates `rand` from 0.9.1 to 0.9.2
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/rand_core-0.9.1...rand_core-0.9.2)

Updates `serde_json` from 1.0.140 to 1.0.141
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.140...v1.0.141)

Updates `cc` from 1.2.29 to 1.2.30
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.29...cc-v1.2.30)

Updates `serde_json` from 1.0.140 to 1.0.141
- [Release notes](https://github.com/serde-rs/json/releases)
- [Commits](https://github.com/serde-rs/json/compare/v1.0.140...v1.0.141)

Updates `tokio` from 1.46.1 to 1.47.0
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.46.1...tokio-1.47.0)

Updates `cc` from 1.2.29 to 1.2.30
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.29...cc-v1.2.30)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.9.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: serde_json
  dependency-version: 1.0.141
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.30
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: serde_json
  dependency-version: 1.0.141
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: tokio
  dependency-version: 1.47.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.30
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-29 09:40:07 +02:00
Klaus Wagner 7bb3847f0a Podman init will expose nil on the error channel if init was successful
Signed-off-by: Klaus Wagner <Klaus.Wagner@erstegroup.com>
2025-07-29 09:34:07 +02:00
Klaus Wagner 59ae99b4a9 Optimize pull request - avoid unnecessary go routines and move constant definition
Signed-off-by: Klaus Wagner <Klaus.Wagner@erstegroup.com>
2025-07-29 09:34:07 +02:00
Klaus Wagner 4a03991a30 Update plugins/container/src/plugin.cpp
Co-authored-by: Federico Di Pierro <nierro92@gmail.com>
Signed-off-by: Klaus Wagner <nenioscio@gmail.com>
2025-07-29 09:34:07 +02:00
Klaus Wagner b58dd18c4a Apply suggestions from code review
Co-authored-by: Federico Di Pierro <nierro92@gmail.com>
Signed-off-by: Klaus Wagner <nenioscio@gmail.com>
2025-07-29 09:34:07 +02:00
Klaus Wagner d37f218356 Container plugin workaround fixing issues #3610 and #3630 for cri-o and podman engines
Signed-off-by: Klaus Wagner <Klaus.Wagner@erstegroup.com>
2025-07-29 09:34:07 +02:00
Klaus Wagner f4d1772d1f Container plugin workaround fixing cri-o issues #3610 and #3630
Signed-off-by: Klaus Wagner <Klaus.Wagner@erstegroup.com>
2025-07-29 09:34:07 +02:00
Willian Wang 33523cb75f fix `lastEventTime` not being updated
Signed-off-by: Willian Wang <git@willian.wang>
2025-07-28 17:30:07 +02:00
Willian Wang f1e0615a45 fix variable context
Signed-off-by: Willian Wang <git@willian.wang>
2025-07-28 09:20:03 +02:00
Willian Wang 474d8c9b25 typo
Signed-off-by: Willian Wang <git@willian.wang>
2025-07-28 09:20:03 +02:00
Willian Wang ffc6ea4e12 Improve handling of events with the same timestamp
Signed-off-by: Willian Wang <git@willian.wang>
2025-07-28 09:20:03 +02:00
Leonardo Grasso 5ca391e79e update(plugins/container): bump to v0.3.3
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-07-24 14:46:40 +02:00
Angelo Puglisi f28adb7d19 fix(plugins/container): parse_exit_process_event
Apply the same logic of libs ~user_group_updater

Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-07-24 14:29:40 +02:00
Angelo Puglisi a97e226962 chore(container/make): add CMAKE_EXPORT_COMPILE_COMMANDS
Generate the compile commands by default, to improve the development
experience (e.g. with clangd)

Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-07-24 14:22:40 +02:00
poiana e36b06de3f docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2025-07-24 11:26:39 +02:00
Federico Di Pierro 29644ec0c8 update(docs): update plugins changelogs.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-24 11:07:39 +02:00
Yuki Nakamura 19896b7931 feat: Add plugin for AWS ELB Access Log
Signed-off-by: Yuki Nakamura <yuki.nakamura@mapbox.com>
2025-07-24 11:06:40 +02:00
Federico Di Pierro 92ec4dcb6e chore(plugins/container): add a trace log when removing container from procexit.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-24 09:54:39 +02:00
Federico Di Pierro 6a7598280d update(plugins/container): bump version to 0.3.2.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-24 09:54:39 +02:00
Federico Di Pierro 1f8a375a12 fix(plugins/container): properly cleanup stale container cache entries for exiting containers.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-24 09:54:39 +02:00
Federico Di Pierro 2f4b632705 chore(plugins/container): properly cleanup fetchCh in test.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-23 11:56:33 +02:00
Federico Di Pierro 42fe4e2f36 update(docs): updated container plugin readme.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-23 11:56:33 +02:00
Leonardo Di Giovanna b71146b6bb docs: add `ekoops` as maintainer
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-07-23 11:12:34 +02:00
dependabot[bot] d086d34cf8 build(deps): bump golang.org/x/oauth2 in /build/registry
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.26.0 to 0.27.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.26.0...v0.27.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.27.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-22 15:02:29 +02:00
Federico Di Pierro 1c135e36d3 chore(plugins/container): let async_ctx own the fetcher channel.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-07-21 12:59:27 +02:00
dependabot[bot] f212d50c02 build(deps): bump golang.org/x/oauth2 in /build/changelog
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.11.0 to 0.27.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.11.0...v0.27.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.27.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 10:43:32 +02:00
dependabot[bot] d3305f8555 build(deps): bump github.com/containers/podman/v5
Bumps [github.com/containers/podman/v5](https://github.com/containers/podman) from 5.4.1 to 5.5.2.
- [Release notes](https://github.com/containers/podman/releases)
- [Changelog](https://github.com/containers/podman/blob/main/RELEASE_NOTES.md)
- [Commits](https://github.com/containers/podman/compare/v5.4.1...v5.5.2)

---
updated-dependencies:
- dependency-name: github.com/containers/podman/v5
  dependency-version: 5.5.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-21 10:41:32 +02:00
Angelo Puglisi 6e02f917aa chore(plugins/container): drop fulfilled TODOs
m_container_ip and m_container_user are already exposed in table.cpp

Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-07-17 15:59:03 +02:00
Angelo Puglisi e8745cf12c chore(plugins/container): introduce and use container_info::ptr_t
Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-07-17 15:59:03 +02:00
Angelo Puglisi db2b9c9c51 chore(plugins/container): headers cleanup
Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-07-17 15:59:03 +02:00
Angelo Puglisi 283cb87012 chore(ci): clang-format in pre-commit
Signed-off-by: Angelo Puglisi <angelopuglisi86@gmail.com>
2025-07-17 15:35:04 +02:00
dependabot[bot] de2204270f build(deps): bump cargo_metadata
Bumps the cargo group with 1 update in the /plugins/krsi directory: [cargo_metadata](https://github.com/oli-obk/cargo_metadata).


Updates `cargo_metadata` from 0.20.0 to 0.21.0
- [Release notes](https://github.com/oli-obk/cargo_metadata/releases)
- [Changelog](https://github.com/oli-obk/cargo_metadata/blob/main/CHANGELOG.md)
- [Commits](https://github.com/oli-obk/cargo_metadata/compare/0.20.0...0.21.0)

---
updated-dependencies:
- dependency-name: cargo_metadata
  dependency-version: 0.21.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-15 09:42:45 +02:00
Angelo Puglisi a7da58ce0b chore(plugins/container): avoid building unneeded RE-flex targets
Building the container plugin without specifying the `container` target
makes it build `reflex` too, which is not needed, and fails too:
```
❯ cmake -B build -S .
...
❯ cmake --build build --parallel
...
[ 98%] Linking CXX executable reflex
/usr/bin/ld: libreflex_static_lib.a(unicode.cpp.o): in function `reflex::Unicode::toupper(int)':
unicode.cpp:(.text+0x6d5): undefined reference to `reflex::Unicode::Tables::toupper(int)'
/usr/bin/ld: libreflex_static_lib.a(unicode.cpp.o): in function `reflex::Unicode::tolower(int)':
unicode.cpp:(.text+0x6e5): undefined reference to `reflex::Unicode::Tables::tolower(int)'
collect2: error: ld returned 1 exit status
gmake[2]: *** [_deps/reflex-build/CMakeFiles/Reflex.dir/build.make:98: _deps/reflex-build/reflex] Error 1
gmake[1]: *** [CMakeFiles/Makefile2:271: _deps/reflex-build/CMakeFiles/Reflex.dir/all] Error 2
gmake[1]: *** Waiting for unfinished jobs....
[100%] Linking CXX shared library libreflex_shared_lib.so
[100%] Built target ReflexLib
gmake: *** [Makefile:136: all] Error 2
```

Signed-off-by: Angelo Puglisi <Angelo Puglisi angelopuglisi86@gmail.com>
2025-07-10 09:24:15 +02:00
dependabot[bot] 847bcafbba build(deps): bump the cargo group across 2 directories with 2 updates
Bumps the cargo group with 1 update in the /plugins/dummy_rs directory: [cc](https://github.com/rust-lang/cc-rs).
Bumps the cargo group with 2 updates in the /plugins/krsi directory: [tokio](https://github.com/tokio-rs/tokio) and [cc](https://github.com/rust-lang/cc-rs).


Updates `cc` from 1.2.27 to 1.2.29
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.27...cc-v1.2.29)

Updates `tokio` from 1.45.1 to 1.46.1
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.45.1...tokio-1.46.1)

Updates `cc` from 1.2.27 to 1.2.29
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.27...cc-v1.2.29)

---
updated-dependencies:
- dependency-name: cc
  dependency-version: 1.2.29
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: tokio
  dependency-version: 1.46.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.29
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-09 10:23:08 +02:00
Iacopo Rozzo e281227c36 fix(container): detect libpod container ids with cgroups mode split
Fix detection of the container ID for libpod containers using the split
cgroups mode.

Signed-off-by: Iacopo Rozzo <iacopo@sysdig.com>
2025-07-04 16:47:42 +02:00
dependabot[bot] 22aa85a720 build(deps): bump the actions group across 1 directory with 3 updates
Bumps the actions group with 3 updates in the / directory: [github/codeql-action](https://github.com/github/codeql-action), [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) and [Swatinem/rust-cache](https://github.com/swatinem/rust-cache).


Updates `github/codeql-action` from 3.29.0 to 3.29.2
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](ce28f5bb42...181d5eefc2)

Updates `sigstore/cosign-installer` from 3.8.2 to 3.9.1
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](3454372f43...398d4b0eee)

Updates `Swatinem/rust-cache` from 2.7.8 to 2.8.0
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](9d47c6ad4b...98c8021b55)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.29.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: sigstore/cosign-installer
  dependency-version: 3.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: Swatinem/rust-cache
  dependency-version: 2.8.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-07-01 15:41:22 +02:00
dependabot[bot] f39b7194d5 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.236.0 to 0.238.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.236.0...v0.238.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.238.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-30 14:41:17 +02:00
dependabot[bot] c8f34c51c2 build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.235.0 to 0.238.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.235.0...v0.238.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.238.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-30 14:40:17 +02:00
dependabot[bot] 89bfe52e89 build(deps): bump the cargo group across 2 directories with 3 updates
Bumps the cargo group with 2 updates in the /plugins/dummy_rs directory: [zerocopy](https://github.com/google/zerocopy) and [libc](https://github.com/rust-lang/libc).
Bumps the cargo group with 2 updates in the /plugins/krsi directory: [zerocopy](https://github.com/google/zerocopy) and [libc](https://github.com/rust-lang/libc).


Updates `zerocopy` from 0.8.25 to 0.8.26
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.25...v0.8.26)

Updates `zerocopy-derive` from 0.8.25 to 0.8.26
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.25...v0.8.26)

Updates `libc` from 0.2.173 to 0.2.174
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.174/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.173...0.2.174)

Updates `zerocopy` from 0.8.25 to 0.8.26
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.25...v0.8.26)

Updates `zerocopy-derive` from 0.8.25 to 0.8.26
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.25...v0.8.26)

Updates `libc` from 0.2.173 to 0.2.174
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.174/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.173...0.2.174)

---
updated-dependencies:
- dependency-name: zerocopy
  dependency-version: 0.8.26
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: zerocopy-derive
  dependency-version: 0.8.26
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: libc
  dependency-version: 0.2.174
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: zerocopy
  dependency-version: 0.8.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: zerocopy-derive
  dependency-version: 0.8.26
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: libc
  dependency-version: 0.2.174
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-30 14:39:17 +02:00
Federico Di Pierro 398db32970 new(plugins/container): add test around null healthcheck in container json.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-25 09:17:48 +02:00
Federico Di Pierro ab266f5072 fix(plugins/container): fix healthcheck probe args retrieval since they can be null.
Also, bump container plugin to 0.3.1.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-25 09:17:48 +02:00
Leonardo Grasso 2f09a401de update(plugins/k8saudit-ovh): bump to v0.3.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:25:46 +02:00
Leonardo Grasso 8cb2bc8472 update(plugins/k8saudit-gke): bump to v0.6.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:25:46 +02:00
Leonardo Grasso ecadcf828d update(plugins/k8saudit-eks): bump to v0.9.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:25:46 +02:00
Leonardo Grasso 785bf34808 update(plugins/k8saudit-aks): bump to v0.3.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:25:46 +02:00
Leonardo Grasso 341801e663 build(plugins/k8saudit-*): bulk update for k8saudit v0.15.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:25:46 +02:00
Leonardo Grasso ba51c07d5f docs(plugins/k8saudit): changelog for v0.15.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:24:47 +02:00
Leonardo Grasso ebf9702547 docs(plugins/k8saudit): improve README.md
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-06-17 21:24:47 +02:00
dependabot[bot] 5d23e77c8b build(deps): bump the gomod group across 1 directory with 5 updates
Bumps the gomod group with 4 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2` from 1.36.3 to 1.36.4
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.3...v1.36.4)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.14 to 1.29.16
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.14...config/v1.29.16)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.77 to 1.17.79
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.77...feature/s3/manager/v1.17.79)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.80.0 to 1.80.2
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.80.0...service/s3/v1.80.2)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.5 to 1.38.7
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.5...service/ecr/v1.38.7)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-version: 1.36.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.29.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.79
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.80.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-version: 1.38.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 16:09:45 +02:00
dependabot[bot] 5ff53a686b build(deps): bump the cargo group across 2 directories with 4 updates
Bumps the cargo group with 3 updates in the /plugins/dummy_rs directory: [libc](https://github.com/rust-lang/libc), [cc](https://github.com/rust-lang/cc-rs) and [cfg-if](https://github.com/rust-lang/cfg-if).
Bumps the cargo group with 4 updates in the /plugins/krsi directory: [libc](https://github.com/rust-lang/libc), [bindgen](https://github.com/rust-lang/rust-bindgen), [cc](https://github.com/rust-lang/cc-rs) and [cfg-if](https://github.com/rust-lang/cfg-if).


Updates `libc` from 0.2.172 to 0.2.173
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.173/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.172...0.2.173)

Updates `cc` from 1.2.25 to 1.2.27
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.25...cc-v1.2.27)

Updates `cfg-if` from 1.0.0 to 1.0.1
- [Release notes](https://github.com/rust-lang/cfg-if/releases)
- [Changelog](https://github.com/rust-lang/cfg-if/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cfg-if/compare/1.0.0...v1.0.1)

Updates `libc` from 0.2.172 to 0.2.173
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.173/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.172...0.2.173)

Updates `bindgen` from 0.71.1 to 0.72.0
- [Release notes](https://github.com/rust-lang/rust-bindgen/releases)
- [Changelog](https://github.com/rust-lang/rust-bindgen/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/rust-bindgen/compare/v0.71.1...v0.72.0)

Updates `cc` from 1.2.25 to 1.2.27
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.25...cc-v1.2.27)

Updates `cfg-if` from 1.0.0 to 1.0.1
- [Release notes](https://github.com/rust-lang/cfg-if/releases)
- [Changelog](https://github.com/rust-lang/cfg-if/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cfg-if/compare/1.0.0...v1.0.1)

---
updated-dependencies:
- dependency-name: libc
  dependency-version: 0.2.173
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.27
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cfg-if
  dependency-version: 1.0.1
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: libc
  dependency-version: 0.2.173
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: bindgen
  dependency-version: 0.72.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cfg-if
  dependency-version: 1.0.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 16:08:45 +02:00
dependabot[bot] c133d6700a build(deps): bump golang.org/x/time in /shared/go/azure/eventhub
Bumps [golang.org/x/time](https://github.com/golang/time) from 0.11.0 to 0.12.0.
- [Commits](https://github.com/golang/time/compare/v0.11.0...v0.12.0)

---
updated-dependencies:
- dependency-name: golang.org/x/time
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 16:07:45 +02:00
dependabot[bot] 09c0f73f11 build(deps): bump github.com/falcosecurity/plugins/plugins/k8saudit
Bumps [github.com/falcosecurity/plugins/plugins/k8saudit](https://github.com/falcosecurity/plugins) from 0.13.0 to 0.14.0.
- [Release notes](https://github.com/falcosecurity/plugins/releases)
- [Changelog](https://github.com/falcosecurity/plugins/blob/main/release.md)
- [Commits](https://github.com/falcosecurity/plugins/compare/plugins/k8saudit/v0.13.0...plugins/k8saudit/v0.14.0)

---
updated-dependencies:
- dependency-name: github.com/falcosecurity/plugins/plugins/k8saudit
  dependency-version: 0.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 16:06:45 +02:00
dependabot[bot] e29787d19e build(deps): bump github.com/falcosecurity/plugins/plugins/k8saudit
Bumps [github.com/falcosecurity/plugins/plugins/k8saudit](https://github.com/falcosecurity/plugins) from 0.13.0 to 0.14.0.
- [Release notes](https://github.com/falcosecurity/plugins/releases)
- [Changelog](https://github.com/falcosecurity/plugins/blob/main/release.md)
- [Commits](https://github.com/falcosecurity/plugins/compare/plugins/k8saudit/v0.13.0...plugins/k8saudit/v0.14.0)

---
updated-dependencies:
- dependency-name: github.com/falcosecurity/plugins/plugins/k8saudit
  dependency-version: 0.14.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 16:05:45 +02:00
Zaulao 65cb0781a4 fix(extract.go): renaming variables to match context
Signed-off-by: Zaulao <sauloguilhermino@gmail.com>
2025-06-17 15:07:45 +02:00
Zaulao 3fcea87969 new(k8saudit): add extraction of container command and args from pods
Signed-off-by: Zaulao <saulo.guilhermino@incognia.com>
2025-06-17 15:07:45 +02:00
dependabot[bot] 299d65b4fb build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.235.0 to 0.236.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.235.0...v0.236.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.236.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 15:06:45 +02:00
dependabot[bot] 00ea9d3924 build(deps): bump golang.org/x/time in /plugins/k8saudit-aks
Bumps [golang.org/x/time](https://github.com/golang/time) from 0.11.0 to 0.12.0.
- [Commits](https://github.com/golang/time/compare/v0.11.0...v0.12.0)

---
updated-dependencies:
- dependency-name: golang.org/x/time
  dependency-version: 0.12.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 15:05:45 +02:00
dependabot[bot] 4749762c8b build(deps): bump github/codeql-action in the actions group
Bumps the actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 3.28.18 to 3.28.19
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](ff0a06e83c...fca7ace96b)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.19
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 15:04:44 +02:00
dependabot[bot] 7e2c91b7dd build(deps): bump dtolnay/rust-toolchain
Bumps [dtolnay/rust-toolchain](https://github.com/dtolnay/rust-toolchain) from 888c2e1ea69ab0d4330cbf0af1ecc7b68f368cc1 to b3b07ba8b418998c39fb20f53e8b695cdcc8de1b.
- [Release notes](https://github.com/dtolnay/rust-toolchain/releases)
- [Commits](888c2e1ea6...b3b07ba8b4)

---
updated-dependencies:
- dependency-name: dtolnay/rust-toolchain
  dependency-version: b3b07ba8b418998c39fb20f53e8b695cdcc8de1b
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-17 15:03:44 +02:00
Leonardo Di Giovanna 51f25cc840 docs(plugins): update container plugin changelog
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-06-16 14:44:36 +02:00
Federico Di Pierro 2b5f8a8feb update(plugins/container): bump plugin version to 0.3.0
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-13 12:37:16 +02:00
Federico Di Pierro 5cfa3780e6 chore(plugins/container): set an unexisted tid on generated asyncevents.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-13 12:37:16 +02:00
Leonardo Di Giovanna 8f7f35638b docs(plugins): update plugins changelogs
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-06-11 11:38:05 +02:00
Jason Dellaluce db8f4121a8 chore(k8saudit): update readme with new field
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2025-06-09 10:35:53 +02:00
Jason Dellaluce 03b1df33d9 update(k8saudit): bump version to 0.14.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2025-06-09 10:35:53 +02:00
Jason Dellaluce 59af3f9abf new(k8saudit): add field for extracting container names from pods
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2025-06-09 10:35:53 +02:00
Federico Di Pierro f01e70d6a4 update(plugins/container): bump container plugin to 0.2.6.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-05 14:16:30 +02:00
Federico Di Pierro 5fcee14c54 fix(plugins/container): avoid possible nil ptr dereference in cri and containerd engines.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-05 13:55:30 +02:00
Federico Di Pierro 2bb872eed8 fx(plugins/container): do not override containers_image_openpgp tag in `exe` target.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-03 14:10:13 +02:00
Federico Di Pierro 1fe9569c93 chore(ci,plugins/container): use `-tags containers_image_openpgp ` for test make target too.
This allows us to drop libgpgme-dev dep from test ci.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-06-03 14:10:13 +02:00
dependabot[bot] 0e0737ef3b build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.234.0 to 0.235.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.234.0...v0.235.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.235.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 14:08:13 +02:00
dependabot[bot] a214622241 build(deps): bump github.com/aws/aws-lambda-go in /plugins/cloudtrail
Bumps [github.com/aws/aws-lambda-go](https://github.com/aws/aws-lambda-go) from 1.48.0 to 1.49.0.
- [Release notes](https://github.com/aws/aws-lambda-go/releases)
- [Commits](https://github.com/aws/aws-lambda-go/compare/v1.48.0...v1.49.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-lambda-go
  dependency-version: 1.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 14:07:13 +02:00
Leonardo Di Giovanna 576b1c9ffc fix(plugins/container): redefine port binding port and IP as integers
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-06-03 14:06:13 +02:00
dependabot[bot] 77e6472f5a build(deps): bump the cargo group across 2 directories with 2 updates
Bumps the cargo group with 1 update in the /plugins/dummy_rs directory: [cc](https://github.com/rust-lang/cc-rs).
Bumps the cargo group with 2 updates in the /plugins/krsi directory: [num_cpus](https://github.com/seanmonstar/num_cpus) and [cc](https://github.com/rust-lang/cc-rs).


Updates `cc` from 1.2.24 to 1.2.25
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.24...cc-v1.2.25)

Updates `num_cpus` from 1.16.0 to 1.17.0
- [Release notes](https://github.com/seanmonstar/num_cpus/releases)
- [Changelog](https://github.com/seanmonstar/num_cpus/blob/master/CHANGELOG.md)
- [Commits](https://github.com/seanmonstar/num_cpus/compare/v1.16.0...v1.17.0)

Updates `cc` from 1.2.24 to 1.2.25
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.24...cc-v1.2.25)

---
updated-dependencies:
- dependency-name: cc
  dependency-version: 1.2.25
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: num_cpus
  dependency-version: 1.17.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.25
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 14:00:13 +02:00
dependabot[bot] af68b7e66d build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.234.0 to 0.235.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.234.0...v0.235.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.235.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 10:03:10 +02:00
Leonardo Di Giovanna 8d44358d01 build(plugins/krsi): bump `cargo_metadata` from 0.19.0 to 0.20.0
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-06-03 10:01:10 +02:00
dependabot[bot] a48093f0c2 build(deps): bump the gomod group across 1 directory with 2 updates
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.76 to 1.17.77
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.76...feature/s3/manager/v1.17.77)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.79.4 to 1.80.0
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.79.4...service/s3/v1.80.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.77
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.80.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-06-03 10:00:10 +02:00
matteopasa e1a0753f92 bump version
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2025-05-29 16:11:27 +02:00
matteopasa f7dca71dbb add time field extract
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2025-05-29 16:11:27 +02:00
dependabot[bot] 0cdc099774 build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.233.0 to 0.234.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.233.0...v0.234.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.234.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 12:18:11 +02:00
dependabot[bot] 8c3cbb2a2d build(deps): bump the cargo group across 2 directories with 2 updates
Bumps the cargo group with 1 update in the /plugins/dummy_rs directory: [cc](https://github.com/rust-lang/cc-rs).
Bumps the cargo group with 2 updates in the /plugins/krsi directory: [tokio](https://github.com/tokio-rs/tokio) and [cc](https://github.com/rust-lang/cc-rs).


Updates `cc` from 1.2.23 to 1.2.24
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.23...cc-v1.2.24)

Updates `tokio` from 1.45.0 to 1.45.1
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.45.0...tokio-1.45.1)

Updates `cc` from 1.2.23 to 1.2.24
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.23...cc-v1.2.24)

---
updated-dependencies:
- dependency-name: cc
  dependency-version: 1.2.24
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: tokio
  dependency-version: 1.45.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.24
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 12:11:11 +02:00
dependabot[bot] 3c32e67f77 build(deps): bump the gomod group across 1 directory with 2 updates
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.75 to 1.17.76
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.75...feature/s3/manager/v1.17.76)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.79.3 to 1.79.4
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.79.3...service/s3/v1.79.4)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.76
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.79.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 12:10:11 +02:00
dependabot[bot] 898b3cb9d5 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.233.0 to 0.234.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.233.0...v0.234.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.234.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-27 12:02:11 +02:00
Leonardo Di Giovanna d4e8eb2ff6 feat(plugins/krsi): add initial `renameat` parsing/extraction support
Add initial `renameat` parsing and extraction support. The support
must be completed by updating the sinsp status leveraging the parsing
support.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-27 12:01:11 +02:00
Leonardo Di Giovanna 9fd1d28b47 refactor(plugins/krsi): remove redundant parts and rephrase README.md
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-26 16:27:06 +02:00
Leonardo Di Giovanna 56ec9a81be refactor(plugins/krsi): rename example file as `example_rules.yaml`
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-26 16:27:06 +02:00
Leonardo Di Giovanna c358225d6e refactor(plugins/krsi/krsi): split event parsing into dedicated funcs
Reorganize code handling event parsing and field extraction
capabilities into separate functions.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-26 16:26:06 +02:00
Luca Guerra b1a5800b17 chore(plugins/container): bump version to 0.2.4
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-05-22 16:35:40 +02:00
dependabot[bot] 4792bca6a6 build(deps): bump github.com/containerd/containerd/v2
Bumps [github.com/containerd/containerd/v2](https://github.com/containerd/containerd) from 2.0.4 to 2.0.5.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v2.0.4...v2.0.5)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd/v2
  dependency-version: 2.0.5
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-22 11:13:39 +02:00
Leonardo Di Giovanna b56ce0aabd refactor(plugins/krsi/krsi): fix extracted field desc formatting
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-21 10:09:34 +02:00
Leonardo Di Giovanna f697f53526 refactor(plugins/krsi/krsi-ebpf): use slices in `auxbuf` code
Replace usage of offsets with slices. This enables better compile-time
checks thanks to the native support for slice types.

In order to restore a previous auxbuf writer state, the user must
first cache its state using the `Writer::save()` and
`AuxiliaryBuffer::save_writer_state()` APIs; then it can restore it
using the `AuxiliaryBuffer::resume_writer()` API.

Moreover, make constants governing the auxbuf limits more precise,
and add documentation related to some auxbuf APIs.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-20 18:43:53 +02:00
Leonardo Di Giovanna afb97f6ff7 refactor(plugins/krsi/krsi-ebpf): avoid `auxbuf` repetition in paths
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-20 18:43:53 +02:00
Goutam Tadi 319bdd4e94 able to get pod security policy violations from audit events
Signed-off-by: Goutam Tadi <gtadi@astronomer.io>
2025-05-20 18:43:30 +02:00
dependabot[bot] 576b4394ee build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.232.0 to 0.233.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.232.0...v0.233.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.233.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-20 18:42:29 +02:00
dependabot[bot] e4e1edf481 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.232.0 to 0.233.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.232.0...v0.233.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.233.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-20 14:25:28 +02:00
dependabot[bot] 6ef6f85c3f build(deps): bump github.com/segmentio/kafka-go
Bumps the gomod group with 1 update in the /plugins/kafka directory: [github.com/segmentio/kafka-go](https://github.com/segmentio/kafka-go).


Updates `github.com/segmentio/kafka-go` from 0.4.47 to 0.4.48
- [Release notes](https://github.com/segmentio/kafka-go/releases)
- [Commits](https://github.com/segmentio/kafka-go/compare/v0.4.47...v0.4.48)

---
updated-dependencies:
- dependency-name: github.com/segmentio/kafka-go
  dependency-version: 0.4.48
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-20 14:24:28 +02:00
dependabot[bot] 896d6bd3d0 build(deps): bump the actions group with 3 updates
Bumps the actions group with 3 updates: [actions/setup-go](https://github.com/actions/setup-go), [github/codeql-action](https://github.com/github/codeql-action) and [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials).


Updates `actions/setup-go` from 5.4.0 to 5.5.0
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](0aaccfd150...d35c59abb0)

Updates `github/codeql-action` from 3.28.17 to 3.28.18
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](60168efe1c...ff0a06e83c)

Updates `aws-actions/configure-aws-credentials` from 4.1.0 to 4.2.1
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](ececac1a45...b475783126)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-version: 5.5.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: github/codeql-action
  dependency-version: 3.28.18
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: aws-actions/configure-aws-credentials
  dependency-version: 4.2.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-20 14:22:28 +02:00
dependabot[bot] dd775b54bc build(deps): bump the cargo group across 2 directories with 4 updates
Bumps the cargo group with 3 updates in the /plugins/dummy_rs directory: [zerocopy](https://github.com/google/zerocopy), [bitflags](https://github.com/bitflags/bitflags) and [cc](https://github.com/rust-lang/cc-rs).
Bumps the cargo group with 2 updates in the /plugins/krsi directory: [bitflags](https://github.com/bitflags/bitflags) and [cc](https://github.com/rust-lang/cc-rs).


Updates `zerocopy` from 0.8.23 to 0.8.25
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.23...v0.8.25)

Updates `zerocopy-derive` from 0.8.23 to 0.8.25
- [Release notes](https://github.com/google/zerocopy/releases)
- [Changelog](https://github.com/google/zerocopy/blob/main/CHANGELOG.md)
- [Commits](https://github.com/google/zerocopy/compare/v0.8.23...v0.8.25)

Updates `bitflags` from 2.9.0 to 2.9.1
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/2.9.0...2.9.1)

Updates `cc` from 1.2.22 to 1.2.23
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.22...cc-v1.2.23)

Updates `bitflags` from 2.9.0 to 2.9.1
- [Release notes](https://github.com/bitflags/bitflags/releases)
- [Changelog](https://github.com/bitflags/bitflags/blob/main/CHANGELOG.md)
- [Commits](https://github.com/bitflags/bitflags/compare/2.9.0...2.9.1)

Updates `cc` from 1.2.22 to 1.2.23
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.22...cc-v1.2.23)

---
updated-dependencies:
- dependency-name: zerocopy
  dependency-version: 0.8.25
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: zerocopy-derive
  dependency-version: 0.8.25
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: bitflags
  dependency-version: 2.9.1
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.23
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: bitflags
  dependency-version: 2.9.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.23
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-20 10:56:27 +02:00
Leonardo Di Giovanna 400cdcbbcd fix(plugins/krsi): properly handle `auxbuf` writing errors
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-19 12:07:01 +02:00
Leonardo Di Giovanna 53ba10dd75 refactor(plugins/krsi): remove `auxbuf` unsafe code using `zerocopy`
Remove unsafe code from `auxbuf` by using `zerocopy` crate to perform
conversions between bytes and structs as well as unaligned read and
write operations.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-19 11:17:01 +02:00
Federico Di Pierro c64a5c8427 chore(docs): updated plugin container readme.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-19 10:10:00 +02:00
Federico Di Pierro 74b643add4 chore(src): fix formatting.
Also bump plugin version to 0.2.3.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-19 10:10:00 +02:00
Leonardo Grasso bc645a814f docs(plugins/container): deprecation message for old `k8s` fields
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-16 16:08:46 +02:00
dependabot[bot] 5dd873d6b1 build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.231.0 to 0.232.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.231.0...v0.232.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.232.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-16 10:51:46 +02:00
dependabot[bot] 5842a338fb build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.231.0 to 0.232.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.231.0...v0.232.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.232.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-15 18:18:41 +02:00
dependabot[bot] fe732fc242 build(deps): bump github.com/invopop/jsonschema in /plugins/k8saudit-eks
Bumps [github.com/invopop/jsonschema](https://github.com/invopop/jsonschema) from 0.8.0 to 0.13.0.
- [Commits](https://github.com/invopop/jsonschema/compare/v0.8.0...v0.13.0)

---
updated-dependencies:
- dependency-name: github.com/invopop/jsonschema
  dependency-version: 0.13.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-15 17:23:40 +02:00
dependabot[bot] 8a00cd0c3a build(deps): bump oras.land/oras-go/v2 in /build/registry
Bumps [oras.land/oras-go/v2](https://github.com/oras-project/oras-go) from 2.5.0 to 2.6.0.
- [Release notes](https://github.com/oras-project/oras-go/releases)
- [Commits](https://github.com/oras-project/oras-go/compare/v2.5.0...v2.6.0)

---
updated-dependencies:
- dependency-name: oras.land/oras-go/v2
  dependency-version: 2.6.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-15 17:20:41 +02:00
dependabot[bot] 994245aacf build(deps): bump the cargo group across 2 directories with 2 updates
Bumps the cargo group with 1 update in the /plugins/dummy_rs directory: [cc](https://github.com/rust-lang/cc-rs).
Bumps the cargo group with 2 updates in the /plugins/krsi directory: [tokio](https://github.com/tokio-rs/tokio) and [cc](https://github.com/rust-lang/cc-rs).


Updates `cc` from 1.2.21 to 1.2.22
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.21...cc-v1.2.22)

Updates `tokio` from 1.44.2 to 1.45.0
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.44.2...tokio-1.45.0)

Updates `cc` from 1.2.21 to 1.2.22
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.21...cc-v1.2.22)

---
updated-dependencies:
- dependency-name: cc
  dependency-version: 1.2.22
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: tokio
  dependency-version: 1.45.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.22
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-15 17:18:41 +02:00
Leonardo Di Giovanna bacfc08fa0 refactor(plugins/krsi/krsi-ebpf): move extraction logic out of auxbuf
Move data extraction logic out of auxbuf by providing a generic way
of storing fixed-length parameters and a generic way of storing
variable-length parameters. The two main helpers are
`auxbuf::Writer::store_fixed_len_param()` and
`auxbuf::Writer::store_var_len_param()`. Both these helpers
accept some sort of length parameters, allowing to reserve memory on
the buffer, and a `write_fn`, allowing to build the parameter content.
`write_fn` receives an `auxbuf::ParamWriter` as parameter: this
object allows to build the parameter content by providing a way to
write chunks of data.

The data extraction logic now resides in a separate
`operations::writer_helpers` module.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-15 17:02:41 +02:00
Federico Di Pierro 298b671a66 chore(plugins/container): avoid useless req.set_value of empty string.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-13 14:29:29 +02:00
Federico Di Pierro 6e458f9fdd update(plugins/k8smeta): bump k8smeta to 0.3.0 final.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-13 14:28:29 +02:00
Leonardo Grasso 8f55be8aec revert: update(plugins/k8saudit-gke): bump to v0.6.0
Since v0.5.0 has not been released yet.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-13 10:10:28 +02:00
Leonardo Grasso 089e4bb36a docs(plugins/k8saudit-*): bulk update READMEs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso ef1682ccf8 docs(plugins/k8saudit-ovh): add files header
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso 53db6b4a6d update(plugins/k8saudit-ovh): bump to v0.2.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso a116c381f6 update(plugins/k8saudit-gke): bump to v0.6.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso a2af2f414a update(plugins/k8saudit-eks): bump to v0.8.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso 2a07283f0b update(plugins/k8saudit-aks): bump to v0.2.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso de3f2e5a51 update(plugins/k8saudit-gke): upgrade to k8saudit v0.13
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso 3933adc6d4 update(plugins/k8saudit-eks): upgrade to k8saudit v0.13 and other deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso f195192f04 update(plugins/k8saudit-aks): upgrade to k8saudit v0.13
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso e3e4d0ca95 docs(plugins/k8saudit): update README
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Grasso 1b1c65ff10 docs(plugins/k8saudit): update changelog
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 16:46:23 +02:00
Leonardo Di Giovanna 3f35135b52 refactor(plugins/krsi/krsi-ebpf): reorder `auxbuf` module code
Use a consistent order in `auxbuf` module code by listing the
private methods right after their usage.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-12 14:31:23 +02:00
Leonardo Di Giovanna 379f998ee1 refactor(plugins/krsi/krsi-ebpf): remove auxbuf dep on shared_state
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-12 14:31:23 +02:00
Leonardo Grasso 9dcac81d76 docs(plugins/k8saudit): update changelog
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 13:30:22 +02:00
Leonardo Grasso f046209944 update(plugins/k8saudit): bump to v0.13.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-12 13:30:22 +02:00
Leonardo Di Giovanna 40ffcae272 refactor(plugins/krsi/krsi-ebpf): introduce auxbuf writer abstraction
Introduce auxbuf writer abstraction to split data container from
business logic writing into them.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-12 12:53:23 +02:00
Leonardo Di Giovanna 730e3fcbdb refactor(plugins/krsi/krsi-ebpf): remove auxbuf dep on ringbuf
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-10 12:41:09 +02:00
Leonardo Di Giovanna c5f52708c7 refactor(plugins/krsi/krsi-ebpf): change auxbuf internal naming conv
Change the internal auxbuf methods' naming convention from using
`push*` to `write*`

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-09 17:28:04 +02:00
Leonardo Di Giovanna 3a4c46adb8 refactor(plugins/krsi/krsi-ebpf): rename `auxmap` to `auxbuf`
Replace "auxiliary map" with "auxiliary buffer", as the name fits
more its purpose.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-09 16:52:03 +02:00
Leonardo Di Giovanna 54c828718e fix(plugins/krsi): use safe ring buffer events parsing logic
Replace unsafe ring buffer events parsing logic with safe one.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
Co-authored-by: Grzegorz Nosek <grzegorz.nosek@sysdig.com>
2025-05-09 15:28:03 +02:00
Leonardo Di Giovanna 2e7dff5a1d refactor(plugins/krsi/krsi): use macros for field extraction
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-09 15:28:03 +02:00
Leonardo Di Giovanna 3b144477c2 fix(plugins/krsi/krsi-ebpf): send only interesting payload
Instead of sending the entire auxiliary map buffer, send only data
the populated sub-part.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-08 11:51:55 +02:00
dependabot[bot] 4b9a35e6a8 build(deps): bump golang.org/x/net in /build/registry
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.37.0 to 0.38.0.
- [Commits](https://github.com/golang/net/compare/v0.37.0...v0.38.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.38.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-08 11:45:55 +02:00
poiana 729baed0ba docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2025-05-07 17:27:50 +02:00
Goutam Tadi 4b6e9f313f able to get validation failure message from a Validating admission policy
Signed-off-by: Goutam Tadi <gtadi@astronomer.io>
2025-05-07 17:25:50 +02:00
dependabot[bot] be90a9810b build(deps): bump github.com/aws/aws-sdk-go-v2/feature/s3/manager
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.74 to 1.17.75
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.74...feature/s3/manager/v1.17.75)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.75
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-07 17:24:50 +02:00
Leonardo Grasso 6d6d44c092 docs(plugins/collector): add example rule
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-07 16:13:50 +02:00
Leonardo Grasso 95ced3e185 update(registry.yaml): add collector plugin
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-07 16:13:50 +02:00
Leonardo Grasso f2dcd4d7b5 docs(plugins/collector): intial README and CHANGELOG
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-07 16:13:50 +02:00
Leonardo Grasso c9cbb98077 new(plugins): add collector plugin
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-05-07 16:13:50 +02:00
Federico Di Pierro 9c1c488086 fix(plugins/container): use `C.GoString()` in `AskForContainerInfo`.
Since the c string comes from a stack variable `.c_str()`,
and the go string will be used async, `ptr.GoString()` does not
guarantee that the string is kept alive for all its duration,
leading to bogus reads.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-06 17:03:45 +02:00
Federico Di Pierro c1e1c8f4b6 cleanup(ci): use provided reusable workflow by libs for container plugin e2e tests.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-06 17:03:45 +02:00
Federico Di Pierro b9092985a4 update(plugins/container): bumped plugin container to 0.2.2.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-06 17:03:45 +02:00
Federico Di Pierro a5840d1629 fix(plugins/container): use an unique ctx for fetcher.
Podman relies upon context to store its connection infos.
Using same ctx already used by the real Podman engine means that
we are going to tamper with its connection info stored in the main ctx.

Instead, fetcher should use its own context.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-05-06 11:46:44 +02:00
dependabot[bot] 6ac5f7589f build(deps): bump golang.org/x/oauth2 in /plugins/github
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.29.0 to 0.30.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.29.0...v0.30.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.30.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 10:09:43 +02:00
dependabot[bot] 75e6c2d9d0 build(deps): bump the cargo group across 2 directories with 7 updates
Bumps the cargo group with 5 updates in the /plugins/dummy_rs directory:

| Package | From | To |
| --- | --- | --- |
| [rand](https://github.com/rust-random/rand) | `0.8.5` | `0.9.1` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.97` | `1.0.98` |
| [libc](https://github.com/rust-lang/libc) | `0.2.171` | `0.2.172` |
| [log](https://github.com/rust-lang/log) | `0.4.26` | `0.4.27` |
| [cc](https://github.com/rust-lang/cc-rs) | `1.2.16` | `1.2.21` |

Bumps the cargo group with 6 updates in the /plugins/krsi directory:

| Package | From | To |
| --- | --- | --- |
| [falco_plugin](https://github.com/falcosecurity/plugin-sdk-rs) | `0.4.2` | `0.4.3` |
| [anyhow](https://github.com/dtolnay/anyhow) | `1.0.97` | `1.0.98` |
| [env_logger](https://github.com/rust-cli/env_logger) | `0.11.7` | `0.11.8` |
| [libc](https://github.com/rust-lang/libc) | `0.2.171` | `0.2.172` |
| [log](https://github.com/rust-lang/log) | `0.4.26` | `0.4.27` |
| [cc](https://github.com/rust-lang/cc-rs) | `1.2.16` | `1.2.21` |



Updates `rand` from 0.8.5 to 0.9.1
- [Release notes](https://github.com/rust-random/rand/releases)
- [Changelog](https://github.com/rust-random/rand/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-random/rand/compare/0.8.5...rand_core-0.9.1)

Updates `anyhow` from 1.0.97 to 1.0.98
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.97...1.0.98)

Updates `libc` from 0.2.171 to 0.2.172
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.172/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.171...0.2.172)

Updates `log` from 0.4.26 to 0.4.27
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.26...0.4.27)

Updates `cc` from 1.2.16 to 1.2.21
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.16...cc-v1.2.21)

Updates `falco_plugin` from 0.4.2 to 0.4.3
- [Release notes](https://github.com/falcosecurity/plugin-sdk-rs/releases)
- [Commits](https://github.com/falcosecurity/plugin-sdk-rs/compare/v0.4.2...v0.4.3)

Updates `anyhow` from 1.0.97 to 1.0.98
- [Release notes](https://github.com/dtolnay/anyhow/releases)
- [Commits](https://github.com/dtolnay/anyhow/compare/1.0.97...1.0.98)

Updates `env_logger` from 0.11.7 to 0.11.8
- [Release notes](https://github.com/rust-cli/env_logger/releases)
- [Changelog](https://github.com/rust-cli/env_logger/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-cli/env_logger/compare/v0.11.7...v0.11.8)

Updates `libc` from 0.2.171 to 0.2.172
- [Release notes](https://github.com/rust-lang/libc/releases)
- [Changelog](https://github.com/rust-lang/libc/blob/0.2.172/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/libc/compare/0.2.171...0.2.172)

Updates `log` from 0.4.26 to 0.4.27
- [Release notes](https://github.com/rust-lang/log/releases)
- [Changelog](https://github.com/rust-lang/log/blob/master/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/log/compare/0.4.26...0.4.27)

Updates `cc` from 1.2.16 to 1.2.21
- [Release notes](https://github.com/rust-lang/cc-rs/releases)
- [Changelog](https://github.com/rust-lang/cc-rs/blob/main/CHANGELOG.md)
- [Commits](https://github.com/rust-lang/cc-rs/compare/cc-v1.2.16...cc-v1.2.21)

---
updated-dependencies:
- dependency-name: rand
  dependency-version: 0.9.1
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: cargo
- dependency-name: anyhow
  dependency-version: 1.0.98
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: libc
  dependency-version: 0.2.172
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: log
  dependency-version: 0.4.27
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.21
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: falco_plugin
  dependency-version: 0.4.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: anyhow
  dependency-version: 1.0.98
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: env_logger
  dependency-version: 0.11.8
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: libc
  dependency-version: 0.2.172
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: log
  dependency-version: 0.4.27
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
- dependency-name: cc
  dependency-version: 1.2.21
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: cargo
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 10:08:43 +02:00
dependabot[bot] b698fa73a9 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.230.0 to 0.231.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.230.0...v0.231.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.231.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 10:05:43 +02:00
Leonardo Di Giovanna e53b45e96c docs(plugins/krsi): add `ekoops` as maintainer
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-06 09:49:44 +02:00
dependabot[bot] a8b91211cb build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.230.0 to 0.231.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.230.0...v0.231.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.231.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 09:33:43 +02:00
dependabot[bot] 5f82db4d59 build(deps): bump the actions group with 3 updates
Bumps the actions group with 3 updates: [github/codeql-action](https://github.com/github/codeql-action), [actions/download-artifact](https://github.com/actions/download-artifact) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer).


Updates `github/codeql-action` from 3.28.15 to 3.28.16
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](45775bd823...28deaeda66)

Updates `actions/download-artifact` from 4.2.1 to 4.3.0
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](95815c38cf...d3f86a106a)

Updates `sigstore/cosign-installer` from 3.8.1 to 3.8.2
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](d7d6bc7722...3454372f43)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.16
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: actions/download-artifact
  dependency-version: 4.3.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: sigstore/cosign-installer
  dependency-version: 3.8.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-06 09:32:43 +02:00
Leonardo Di Giovanna f91ed60792 feat(plugins/krsi): add `protocol` field extraction support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-05 12:46:37 +02:00
Leonardo Di Giovanna 3225dab268 ci: add config for dependabot to handle `cargo` dependencies
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-05 12:36:37 +02:00
dependabot[bot] 48d71023bb build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.229.0 to 0.230.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.229.0...v0.230.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.230.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 12:35:37 +02:00
dependabot[bot] 81b7e1df62 build(deps): bump github.com/testcontainers/testcontainers-go/modules/kafka
Bumps [github.com/testcontainers/testcontainers-go/modules/kafka](https://github.com/testcontainers/testcontainers-go) from 0.36.0 to 0.37.0.
- [Release notes](https://github.com/testcontainers/testcontainers-go/releases)
- [Commits](https://github.com/testcontainers/testcontainers-go/compare/v0.36.0...v0.37.0)

---
updated-dependencies:
- dependency-name: github.com/testcontainers/testcontainers-go/modules/kafka
  dependency-version: 0.37.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-05-05 12:34:37 +02:00
Leonardo Di Giovanna 199b754965 perf(plugins/krsi/krsi-ebpf): improve memory mgt by sharing state map
Use a single map to save the state that operations share among
multiple programs. Using a single map has a lower impact on the system
memory wrt the approach leveraging a single map per operation.

A single program can save, for the current thread, some information
that wants to share with other programs aiming to collect data for a
given operation. Since a single thread, in a given moment, can only
execute a single operation, the shared information can be encoded
using enum and their variants, a single variant representing the info
of a single operation. Notice that variants are single-element tuple
struct: this decision was made to keep the data access more ergonomic.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-05 09:35:36 +02:00
Leonardo Di Giovanna f85ec1bbb7 refactor(krsi-ebpf): rename `shared_maps` to `shared_state`
Rename `shared_maps` to `shared_state` and align getters to naming
convention.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-05 09:35:36 +02:00
Leonardo Di Giovanna fe408536dd chore: enforce coding style in `dummy_rs` plugin
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-02 14:26:21 +02:00
Leonardo Di Giovanna 212bb3bc48 chore: add `pre-commit` hooks for enforcing coding style and policies
Enforce global coding style and policies by leveraging the
`pre-commit` framework. Move the `krsi` plugin's specific `pre-commit`
configuration in the root of the project, tweaking the `rustfmt.toml`
file to enforce the `rustfmt` tool's edition on a plugin-basis instead
of enforcing it globally in the `pre-commit` hook. Update the `krsi`
plugin's `README.md` to point to the new project's `README.md`
section.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-05-02 14:26:21 +02:00
dependabot[bot] 7db1914cb2 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.229.0 to 0.230.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.229.0...v0.230.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.230.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 16:28:10 +02:00
dependabot[bot] 6d9cd7543c build(deps): bump the gomod group across 4 directories with 4 updates
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).
Bumps the gomod group with 1 update in the /plugins/k8saudit-aks directory: [github.com/Azure/azure-sdk-for-go/sdk/storage/azblob](https://github.com/Azure/azure-sdk-for-go).
Bumps the gomod group with 1 update in the /shared/go/aws/cloudwatchlogs directory: [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go).
Bumps the gomod group with 1 update in the /shared/go/aws/session directory: [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go).


Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.72 to 1.17.74
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.72...feature/s3/manager/v1.17.74)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.79.2 to 1.79.3
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.79.2...service/s3/v1.79.3)

Updates `github.com/Azure/azure-sdk-for-go/sdk/storage/azblob` from 1.6.0 to 1.6.1
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.6.0...sdk/azcore/v1.6.1)

Updates `github.com/aws/aws-sdk-go` from 1.55.6 to 1.55.7
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG_PENDING.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.55.6...v1.55.7)

Updates `github.com/aws/aws-sdk-go` from 1.55.6 to 1.55.7
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG_PENDING.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.55.6...v1.55.7)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.74
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.79.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
  dependency-version: 1.6.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go
  dependency-version: 1.55.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go
  dependency-version: 1.55.7
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 16:26:10 +02:00
dependabot[bot] ae39190fc9 build(deps): bump tokio from 1.44.0 to 1.44.2 in /plugins/krsi
Bumps [tokio](https://github.com/tokio-rs/tokio) from 1.44.0 to 1.44.2.
- [Release notes](https://github.com/tokio-rs/tokio/releases)
- [Commits](https://github.com/tokio-rs/tokio/compare/tokio-1.44.0...tokio-1.44.2)

---
updated-dependencies:
- dependency-name: tokio
  dependency-version: 1.44.2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 16:25:10 +02:00
dependabot[bot] d65c37986e build(deps): bump github.com/testcontainers/testcontainers-go
Bumps [github.com/testcontainers/testcontainers-go](https://github.com/testcontainers/testcontainers-go) from 0.36.0 to 0.37.0.
- [Release notes](https://github.com/testcontainers/testcontainers-go/releases)
- [Commits](https://github.com/testcontainers/testcontainers-go/compare/v0.36.0...v0.37.0)

---
updated-dependencies:
- dependency-name: github.com/testcontainers/testcontainers-go
  dependency-version: 0.37.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-30 16:22:10 +02:00
Leonardo Di Giovanna eb349205da doc: add support for `krsi` plugin field extraction doc auto-gen
Add support for automatic generation of `krsi` plugin's field
extraction. Moreover, add support for handling multi-line field
extraction descriptions.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-30 15:53:10 +02:00
Leonardo Grasso abe12da694 docs(plugins): bulk changelogs update
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-30 10:35:09 +02:00
Leonardo Grasso af547e21ee docs(plugins/github): update readme
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-30 10:35:09 +02:00
Leonardo Grasso 17dfd80d7a docs(plugins/dummy_rs): update readme
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-30 10:35:09 +02:00
Leonardo Di Giovanna 6cce9247e0 fix(plugins/dummy_rs): sync `Cargo.lock`
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-30 10:22:09 +02:00
Leonardo Di Giovanna a7705eb261 ci: trigger CI
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 17:52:06 +02:00
poiana 9264813c27 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2025-04-29 17:51:05 +02:00
Leonardo Di Giovanna 28618ac28e fix(plugins/krsi): fix plugin version
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 17:00:05 +02:00
Leonardo Grasso d09985d5d5 fix(plugins/krsi): correct multi-arch char type handling
Co-authored-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-29 16:01:06 +02:00
Leonardo Grasso b9c6b0a47a fix(.github): pin deps to build rust ebpf
Co-authored-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-29 16:01:06 +02:00
Leonardo Grasso 40f892bf3f fix(plugins/krsi): correct makefile
Co-authored-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>

Co-authored-by: Leonardo Di Giovanna <41296180+ekoops@users.noreply.github.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 70562d8500 new(krsi): add registry entry
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Luca Guerra 6da6129061 cleanup(krsi): add license text, remove leftover
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 3c8710effc chore: add `Makefile`
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 303fd1eb9c doc: populate `README.md`
Signed-off-by: Luca Guerra <luca@guerra.sh>
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
Co-authored-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 9b6951aab9 feat: add example rule file
Signed-off-by: Luca Guerra <luca@guerra.sh>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 52a089c55c feat(ebpf): add `unlink` and `unlinkat` syscall support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 178a7a3d1d fix(ebpf): prevent `symlinkat` syscall evt gen if support is disabled
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna ce3c427139 fix(ebpf): prevent `renameat` syscall event gen if support is disabled
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 6070c05ca0 fix(ebpf): prevent `mkdirat` syscall event gen if support is disabled
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 99f0e94b26 fix(ebpf): prevent `linkat` syscall event gen if support is disabled
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 53542abc38 feat: add plugin options support
Signed-off-by: Luca Guerra <luca@guerra.sh>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 2b5e4c5d54 feat(krsi): add connect operation and thread fields support
Signed-off-by: Luca Guerra <luca@guerra.sh>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna e9a9999d4a test(ebpf): add `load_and_attach_programs` test
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 4022aa5d31 refactor(ebpf): remove unneded vmlinux module
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 93bfe63036 feat(ebpf): use CO-RE approach to evaluate inode upper dentry
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna e53017b841 refactor(ebpf): remove some vmlinux references
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna f5b6730482 feat(ebpf): replace non-CO-RE access to `f_path` with CO-RE one
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 280f318d09 feat(ebpf): add iou_ret field to open event
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna ec628cf542 feat(ebpf): add partial bind operations support
Provide support for `bind` syscall, as well as `IORING_OP_BIND`
io_uring operation. Even if provided, the support for the io_uring
operation is not enabled.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 0bf13c4a0a feat(test): add Dockerfile
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 5e5486055d feat: integrate plugin with eBPF and add userspace fields handling
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 010a67eca6 refactor: cleanup code
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 4e4bb8c798 feat(ebpf): replace io_uring structs accesses with CO-RE equivalents
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 270cae323e feat(ebpf): replace `file->private_data` access with CO-RE equivalent
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna a6c5e954d3 refactor(ebpf): remove unused `file_name` non-CO-RE extractor
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 21eebf5ca0 feat(ebpf): replace `filename_name` non-CO-RE extractor
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 1a584742cf feat(ebpf): use CO-RE accessors for some sockets accesses
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna adafbd2285 feat(ebpf): use CO-RE accessors for some files accesses
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 751ae3bcaa feat(ebpf): add C binding infrastructure enabling CO-RE
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 1e88c07ca5 refactor(ebpf): move extraction in `extractors` and `getters` crates
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 8a7be7f6f5 refactor(ebpf): add sockets::extract crate
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna abca308d48 feat(ebpf): add renameat operations support
Provide support for `renamat2`, `renameat` and `rename` syscalls, as
well as `IORING_OP_RENAMEAT` io_uring operation.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 8ac597feff feat(ebpf): add mkdirat operations support
Provide support for `mkdirat` and `mkdir` syscalls, as well as
`IORING_OP_MKDIRAT` io_uring operation.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 036828b964 refactor(ebpf): use declarative approach to load and attach programs
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Grzegorz Nosek da57e8df35 fix: safe parse_ringbuf_event
Signed-off-by: Grzegorz Nosek <grzegorz.nosek@sysdig.com>

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna a301d3e70d style: apply code-formatting
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 0354b3d568 chore: add `pre-commit` hooks for enforcing coding style and policies
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 4903b391ee feat(ebpf): add unlinkat io_uring operation support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna b4feb0b199 feat(ebpf): add linkat operations support
Provide support for `linkat` and `link` syscalls, as well as
`IORING_OP_LINKAT` io_uring operation.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 24629d8867 refactor(ebpf): move file-related extraction logics to separate crate
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna b9a0d7f200 refactor(ebpf): align symlinkat operation map name
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 2dec5194fd refactor(ebpf): align connect operation handling code naming
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 53dc445907 refactor(ebpf): cleanup open operation handling code
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna db523d8831 refactor(ebpf): rename open operation's pids map
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 0afb3c6bdb feat: move ebpf support in different crate and introduce feature flags
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 4bbea658b6 fix: adjust open's `name` param output positioning
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna b991bac366 feat: add testing program
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 32629e6780 feat(ebpf): add symlinkat operations support
Provide support for `symlinkat` and `symlink` syscalls, as well as
`IORING_OP_SYMLINKAT` io_uring operation.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna b9b04078a1 feat(ebpf): export `iou_ret` in connect operation
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna a8e7d5f309 feat(ebpf): add socket operations support
Provide support for `socket` and `socketcall` syscalls, as well as
`IORING_OP_SOCKET` io_uring operation.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna d4985b5277 feat(ebpf): introduce `iouring` module from data extraction
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 803bca3af3 feat(ebpf): avoid sending fd/file_index if not present
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna ba8d9aefd8 feat(ebpf): remove need for socket permanent file descriptors tracking
Use a different path for tracking socket connection, removing the
need for monitoring sockets creation and for storing
`(sock_ptr, tgid) -> fd` associations.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna ce568f4135 refactor(ebpf): split eBPF programs by operation
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 129e5c1c9e feat(ebpf): drop some `unsafe` method qualifiers in auxmap
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 9b06ae20b7 feat(ebpf): add support for io_uring connect operation
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 22f21ad72b feat(ebpf): add io_uring's `IORING_OPENAT{2}` `file_index` support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 68aa11b9f9 feat(ebpf): add non-blocking connect operations support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 96d7746eb6 style(ebpf): remove non idiomatic `_ptr` suffixes
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna cc549664b7 feat(ebpf): add connect support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 99c7f3ddb8 refactor(ebpf): replace `tid` with `pid`
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 4c444157bf feat(ebpf): add socket creation monitoring support
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 0cea86b2ba fix(ebpf): reintroduce support for io_uring openat* operations
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra d245d66c25 refactor(krsi): cleanup
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 0913bfa768 doc(ebpf): fix `open` module documentation
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna f0a399d789 fix(ebpf): fix auxiliary map index calculation
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 11e69492af fix(ebpf): fix timestamp calculation by including boot time
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna c8596ce0f8 refactor(ebpf): move file opening extraction in separate module
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 2d9f21ce49 fix(ebpf): handle `fd_install` invocations only in open context
Ensure that `fd_install` invocations are handled only if the current
thread is trying to open a file: this means hooking at
`do_sys_openat2`'s entry and exit point to mark the file opening
procedure as started and finished.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 75cc932fd8 feat(krsi): populate fd table
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Luca Guerra a690118a1f feat: handle io_uring thread
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna 9661fe7d94 feat(ebpf): export tgid together with pid in event header
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna e348237e93 fix(ebpf): remove early return behaviour
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 8ff297c8c0 feat(krsi): add extractor fields
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna b084b02f21 feat(ebpf): enable full path resolution
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna c70b746ed0 feat(ebpf): align the auxiliary maps number to the number of CPUs
Set the number of `AUXILIARY_MAPS` entries to the number of
available CPUs. Moreover, reduce the size of each auxiliary map.

Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra 91e307c1b4 feat: add integration between eBPF and plugin
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Leonardo Di Giovanna cb6f03c05d feat: add eBPF source
Signed-off-by: Leonardo Di Giovanna <leonardodigiovanna1@gmail.com>
2025-04-29 16:01:06 +02:00
Luca Guerra ddf3f6cfda feat: initial scaffolding and plugin setup
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-04-29 16:01:06 +02:00
Federico Di Pierro 7fef864e20 new(plugins/container): suggest more output fields.
Specifically:
* `%container.image.repository`
* `%container.image.tag`
* `%k8s.ns.name`
* `%k8s.pod.name`

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-29 12:25:05 +02:00
Federico Di Pierro b8140c8aa1 chore(plugins/container): bump version to 0.2.1.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-28 17:03:01 +02:00
Federico Di Pierro c122ed409d chore(plugins/container): make ASYNC cap resilient to multiple calls.
Static-storage variables are correctly checked.
This can happend in 2 scenarios:
* sinsp erratingly calls multiple times start async API (should be a bug but better safe than sorry)
* Falco hot reload dry-run checks

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-28 17:03:01 +02:00
Federico Di Pierro e25a1f8a19 cleanup(plugins/container): drop `async_ctx` static variable.
Make it a class member.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-28 17:03:01 +02:00
Aldo Lacuku 3f714b93b3 chore(k8smeta): bump k8smeta version to 0.3.0-rc1
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2025-04-23 10:28:23 +02:00
dependabot[bot] ea1149164f build(deps): bump golang.org/x/net in /plugins/container/go-worker
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.36.0 to 0.38.0.
- [Commits](https://github.com/golang/net/compare/v0.36.0...v0.38.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.38.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-23 10:03:24 +02:00
dependabot[bot] 8b4767feec build(deps): bump golang.org/x/net in /build/changelog
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.33.0 to 0.38.0.
- [Commits](https://github.com/golang/net/compare/v0.33.0...v0.38.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-version: 0.38.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-17 17:37:49 +02:00
Federico Di Pierro 0d595a2275 new(plugins/container): added fetcher tests.
Also, fixed a small bug in cri engine `get()` method.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-17 17:36:49 +02:00
Leonardo Grasso ecff28f894 update(cloudtrail): bump to v0.13.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-17 11:34:50 +02:00
Federico Di Pierro 89712a554e fix(plugin/container): avoid overwriting host container info when loading pre-existing containers.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-17 10:42:49 +02:00
Federico Di Pierro ab18fe1517 fix(plugins/k8smeta): fixed newlines at end of files.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-17 10:41:49 +02:00
Federico Di Pierro c3b79f5508 fix(plugins/k8smeta): fixed `CLONE_FORK_TEST` tests.
Clone exit for the parent must already have correct cgroup for the child,
since we are not going to overwrite it in libs parsers.
Also, it makes sense.

Finally, added a test to check that listening CAP is correctly writing pod_uid.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-17 10:41:49 +02:00
Federico Di Pierro 033304290e fix(plugins/k8smeta): write pod_uid using correct thread_entry.
Also, always use cgroups read from thread table instead of relying upon
the syscalls param.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-17 10:41:49 +02:00
Leonardo Grasso d69e7013ed update(github): bump to v0.9.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-17 10:13:50 +02:00
Leonardo Grasso 97df3bbc42 new(gitub): add fileds for `added` and `removed` files
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-04-17 10:13:50 +02:00
Federico Di Pierro ff332cb3c1 fix(plugins/container): fixed CRI listing filter.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-16 15:17:46 +02:00
dependabot[bot] 3dbc627f4a build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.228.0 to 0.229.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.228.0...v0.229.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.229.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-16 12:38:46 +02:00
dependabot[bot] 794c76fd17 build(deps): bump the gomod group across 3 directories with 5 updates
Bumps the gomod group with 3 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).
Bumps the gomod group with 1 update in the /plugins/k8saudit-aks directory: [github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs](https://github.com/Azure/azure-sdk-for-go).
Bumps the gomod group with 1 update in the /shared/go/azure/eventhub directory: [github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs](https://github.com/Azure/azure-sdk-for-go).


Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.13 to 1.29.14
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.13...config/v1.29.14)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.71 to 1.17.72
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.71...feature/s3/manager/v1.17.72)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.79.1 to 1.79.2
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.79.1...service/s3/v1.79.2)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.4 to 1.38.5
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.4...service/s3/v1.38.5)

Updates `github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs` from 1.3.1 to 1.3.2
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.3.1...sdk/storage/azblob/v1.3.2)

Updates `github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs` from 1.3.1 to 1.3.2
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.3.1...sdk/storage/azblob/v1.3.2)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.29.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.72
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.79.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-version: 1.38.5
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs
  dependency-version: 1.3.2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-16 12:37:45 +02:00
dependabot[bot] 37dc1a6ae9 build(deps): bump cloud.google.com/go/pubsub in /plugins/k8saudit-gke
Bumps [cloud.google.com/go/pubsub](https://github.com/googleapis/google-cloud-go) from 1.48.1 to 1.49.0.
- [Release notes](https://github.com/googleapis/google-cloud-go/releases)
- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.48.1...pubsub/v1.49.0)

---
updated-dependencies:
- dependency-name: cloud.google.com/go/pubsub
  dependency-version: 1.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-16 12:36:45 +02:00
Federico Di Pierro ec5d8553f3 chore(plugins/k8smeta): broaden exception mgmt.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-16 12:10:45 +02:00
Federico Di Pierro 5b374f75bf new(plugins/container): immediately enrich plugin cache with pre-existing containers.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-16 12:09:45 +02:00
Federico Di Pierro ca2c56066f new(plugins/container): print a debug log with all connected engine sockets.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-16 12:09:45 +02:00
Federico Di Pierro 37fdf54e61 cleanup(plugins/container/go-worker): dropped inotifier support.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-16 12:09:45 +02:00
dependabot[bot] 27f663b2ab build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.228.0 to 0.229.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.228.0...v0.229.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.229.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 10:23:38 +02:00
dependabot[bot] ce4e3fcf04 build(deps): bump github.com/aws/aws-lambda-go in /plugins/cloudtrail
Bumps [github.com/aws/aws-lambda-go](https://github.com/aws/aws-lambda-go) from 1.47.0 to 1.48.0.
- [Release notes](https://github.com/aws/aws-lambda-go/releases)
- [Commits](https://github.com/aws/aws-lambda-go/compare/v1.47.0...v1.48.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-lambda-go
  dependency-version: 1.48.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 10:19:38 +02:00
dependabot[bot] 6837ad9cf7 build(deps): bump cloud.google.com/go/pubsub in /plugins/gcpaudit
Bumps [cloud.google.com/go/pubsub](https://github.com/googleapis/google-cloud-go) from 1.48.1 to 1.49.0.
- [Release notes](https://github.com/googleapis/google-cloud-go/releases)
- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.48.1...pubsub/v1.49.0)

---
updated-dependencies:
- dependency-name: cloud.google.com/go/pubsub
  dependency-version: 1.49.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 10:15:38 +02:00
dependabot[bot] a78b09641f build(deps): bump github/codeql-action in the actions group
Bumps the actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 3.28.14 to 3.28.15
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](fc7e4a0fa0...45775bd823)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.15
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-15 10:14:38 +02:00
Federico Di Pierro d6e6c6ee4e chore(plugins/container): broaden exceptions management.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-14 16:37:33 +02:00
poiana 86e4d26ba2 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2025-04-11 12:37:12 +02:00
RRadziejewski e33a030f10 docs: fix incorrect cloud provider reference (AWS → Azure) for AKS
Signed-off-by: RRadziejewski <32438378+RRadziejewski@users.noreply.github.com>
2025-04-11 11:58:11 +02:00
Willian Wang 65c9973a06 chore(cloudtrail): allow SQSOwnerAccount parameter
Signed-off-by: Willian Wang <git@willian.wang>
Signed-off-by: Willian Wang <willian.wang@incognia.com>
2025-04-11 10:38:11 +02:00
Federico Di Pierro e318e18254 chore(plugins/container): bump container plugin to 0.2.0.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-11 10:37:11 +02:00
dependabot[bot] 09c8a93eea build(deps): bump github/codeql-action in the actions group
Bumps the actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 3.28.13 to 3.28.14
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](1b549b9259...fc7e4a0fa0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-version: 3.28.14
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-08 10:14:48 +02:00
dependabot[bot] d4e288aa55 build(deps): bump github.com/onsi/gomega in /build/registry
Bumps [github.com/onsi/gomega](https://github.com/onsi/gomega) from 1.36.3 to 1.37.0.
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.36.3...v1.37.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/gomega
  dependency-version: 1.37.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-08 10:11:48 +02:00
dependabot[bot] 4bcb38b510 build(deps): bump golang.org/x/oauth2 in /plugins/github
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.28.0 to 0.29.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.28.0...v0.29.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-version: 0.29.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-08 10:10:48 +02:00
dependabot[bot] 3d2e23dc98 build(deps): bump the gomod group across 4 directories with 6 updates
Bumps the gomod group with 1 update in the /build/registry directory: [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo).
Bumps the gomod group with 3 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).
Bumps the gomod group with 1 update in the /plugins/gcpaudit directory: [cloud.google.com/go/pubsub](https://github.com/googleapis/google-cloud-go).
Bumps the gomod group with 1 update in the /plugins/k8saudit-gke directory: [cloud.google.com/go/pubsub](https://github.com/googleapis/google-cloud-go).


Updates `github.com/onsi/ginkgo/v2` from 2.23.3 to 2.23.4
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.23.3...v2.23.4)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.12 to 1.29.13
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.12...config/v1.29.13)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.70 to 1.17.71
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.70...feature/s3/manager/v1.17.71)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.79.0 to 1.79.1
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.79.0...service/s3/v1.79.1)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.3 to 1.38.4
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.3...service/s3/v1.38.4)

Updates `cloud.google.com/go/pubsub` from 1.48.0 to 1.48.1
- [Release notes](https://github.com/googleapis/google-cloud-go/releases)
- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.48.0...pubsub/v1.48.1)

Updates `cloud.google.com/go/pubsub` from 1.48.0 to 1.48.1
- [Release notes](https://github.com/googleapis/google-cloud-go/releases)
- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.48.0...pubsub/v1.48.1)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-version: 2.23.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.29.13
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.71
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.79.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-version: 1.38.4
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: cloud.google.com/go/pubsub
  dependency-version: 1.48.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: cloud.google.com/go/pubsub
  dependency-version: 1.48.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-08 09:20:47 +02:00
Federico Di Pierro d81c8c504e fix(plugins/container): fixed config tests.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 15:15:43 +02:00
Federico Di Pierro 911e33d85a chore(plugins/container): updated readme.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 15:15:43 +02:00
Federico Di Pierro adec84aaa1 new(plugins/container): allow to specify which hook to be attached between {"create", "start"}
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 15:15:43 +02:00
dependabot[bot] 9a50a76571 build(deps): bump the gomod group across 1 directory with 2 updates
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.69 to 1.17.70
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.69...feature/s3/manager/v1.17.70)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.78.2 to 1.79.0
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.78.2...service/s3/v1.79.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-version: 1.17.70
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.79.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 15:14:43 +02:00
dependabot[bot] 937aba6da5 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.227.0 to 0.228.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.227.0...v0.228.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-version: 0.228.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 15:13:43 +02:00
dependabot[bot] 5875b85fd0 build(deps): bump github.com/testcontainers/testcontainers-go/modules/kafka
Bumps [github.com/testcontainers/testcontainers-go/modules/kafka](https://github.com/testcontainers/testcontainers-go) from 0.35.0 to 0.36.0.
- [Release notes](https://github.com/testcontainers/testcontainers-go/releases)
- [Commits](https://github.com/testcontainers/testcontainers-go/compare/v0.35.0...v0.36.0)

---
updated-dependencies:
- dependency-name: github.com/testcontainers/testcontainers-go/modules/kafka
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-04-07 15:12:43 +02:00
Federico Di Pierro e80fd67259 chore(src): add a deprecation warning for hostProc.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
Federico Di Pierro 4c41b3912d fix(plugins/k8smeta): fixed a couple of tests.
Moreover, dropped proc-scan related tests.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
Federico Di Pierro d8fd49fef7 chore(plugins/k8smeta): bump libs to 0.20.0.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
Federico Di Pierro b0fcd6fba1 update(ci): bump falco image to 0.40.0 and falcoctl to 0.11.0.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
Federico Di Pierro 41d2b399d5 chore(plugins/k8smeta): update README.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
Federico Di Pierro e10eef70f5 chore(plugins/k8smeta): apply formatting.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
Federico Di Pierro 67c4870552 new(plugins/k8smeta): update k8smeta plugin to require plugin API version 3.9.0.
Implement the suggested output fields feature,
by suggesting `k8smeta.pod.name` and `k8smeta.ns.name` as output fields.

Also, entirely avoid the proc scan, instead relying on the listening CAPability to
initially loop over the thread table to attach pod_uid to threads.

`hostProc` initConfig key is now deprecated and unused.

Moved the plugin to 0.3.0 too.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-04-07 10:57:46 +02:00
dependabot[bot] d3f0850baf build(deps): bump the gomod group across 1 directory with 3 updates
Bumps the gomod group with 3 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.10 to 1.29.12
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.10...config/v1.29.12)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.67 to 1.17.69
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.67...feature/s3/manager/v1.17.69)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.38.1 to 1.38.3
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.38.1...service/s3/v1.38.3)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-28 18:36:41 +01:00
dependabot[bot] 0b7065dd25 build(deps): bump the gomod group across 5 directories with 7 updates
Bumps the gomod group with 4 updates in the /build/registry directory: [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo), [github.com/onsi/gomega](https://github.com/onsi/gomega), [k8s.io/api](https://github.com/kubernetes/api) and google.golang.org/protobuf.
Bumps the gomod group with 2 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).
Bumps the gomod group with 1 update in the /plugins/gcpaudit directory: google.golang.org/protobuf.
Bumps the gomod group with 1 update in the /plugins/k8saudit-gke directory: google.golang.org/protobuf.
Bumps the gomod group with 1 update in the /plugins/kafka directory: google.golang.org/protobuf.


Updates `github.com/onsi/ginkgo/v2` from 2.23.0 to 2.23.3
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.23.0...v2.23.3)

Updates `github.com/onsi/gomega` from 1.36.2 to 1.36.3
- [Release notes](https://github.com/onsi/gomega/releases)
- [Changelog](https://github.com/onsi/gomega/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/gomega/compare/v1.36.2...v1.36.3)

Updates `k8s.io/api` from 0.32.2 to 0.32.3
- [Commits](https://github.com/kubernetes/api/compare/v0.32.2...v0.32.3)

Updates `k8s.io/apimachinery` from 0.32.2 to 0.32.3
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.32.2...v0.32.3)

Updates `google.golang.org/protobuf` from 1.36.5 to 1.36.6

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.9 to 1.29.10
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.9...config/v1.29.10)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.66 to 1.17.67
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.66...feature/s3/manager/v1.17.67)

Updates `google.golang.org/protobuf` from 1.36.5 to 1.36.6

Updates `google.golang.org/protobuf` from 1.36.5 to 1.36.6

Updates `google.golang.org/protobuf` from 1.36.5 to 1.36.6

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/onsi/gomega
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: k8s.io/api
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: k8s.io/apimachinery
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-27 18:03:35 +01:00
dependabot[bot] ad1c759adb build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.226.0 to 0.227.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.226.0...v0.227.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-27 18:02:35 +01:00
dependabot[bot] 7c7cb4bd13 build(deps): bump github.com/containerd/containerd/v2
Bumps [github.com/containerd/containerd/v2](https://github.com/containerd/containerd) from 2.0.0-rc.6 to 2.0.4.
- [Release notes](https://github.com/containerd/containerd/releases)
- [Changelog](https://github.com/containerd/containerd/blob/main/RELEASES.md)
- [Commits](https://github.com/containerd/containerd/compare/v2.0.0-rc.6...v2.0.4)

---
updated-dependencies:
- dependency-name: github.com/containerd/containerd/v2
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-27 18:01:35 +01:00
dependabot[bot] 9656d5ef7d build(deps): bump the actions group with 6 updates
Bumps the actions group with 6 updates:

| Package | From | To |
| --- | --- | --- |
| [actions/setup-go](https://github.com/actions/setup-go) | `5.3.0` | `5.4.0` |
| [github/codeql-action](https://github.com/github/codeql-action) | `3.28.11` | `3.28.13` |
| [actions/upload-artifact](https://github.com/actions/upload-artifact) | `4.4.3` | `4.6.2` |
| [actions/download-artifact](https://github.com/actions/download-artifact) | `4.1.8` | `4.2.1` |
| [jidicula/clang-format-action](https://github.com/jidicula/clang-format-action) | `4.14.0` | `4.15.0` |
| [Swatinem/rust-cache](https://github.com/swatinem/rust-cache) | `2.7.7` | `2.7.8` |


Updates `actions/setup-go` from 5.3.0 to 5.4.0
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v5.3.0...0aaccfd150d50ccaeb58ebd88d36e91967a5f35b)

Updates `github/codeql-action` from 3.28.11 to 3.28.13
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](6bb031afdd...1b549b9259)

Updates `actions/upload-artifact` from 4.4.3 to 4.6.2
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](https://github.com/actions/upload-artifact/compare/v4.4.3...ea165f8d65b6e75b540449e92b4886f43607fa02)

Updates `actions/download-artifact` from 4.1.8 to 4.2.1
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](https://github.com/actions/download-artifact/compare/v4.1.8...95815c38cf2ff2164869cbab79da8d1f422bc89e)

Updates `jidicula/clang-format-action` from 4.14.0 to 4.15.0
- [Release notes](https://github.com/jidicula/clang-format-action/releases)
- [Commits](d05cecd4a1...4726374d1a)

Updates `Swatinem/rust-cache` from 2.7.7 to 2.7.8
- [Release notes](https://github.com/swatinem/rust-cache/releases)
- [Changelog](https://github.com/Swatinem/rust-cache/blob/master/CHANGELOG.md)
- [Commits](f0deed1e0e...9d47c6ad4b)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: jidicula/clang-format-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: Swatinem/rust-cache
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-26 10:22:27 +01:00
dependabot[bot] 6ad48d7e1c build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.226.0 to 0.227.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.226.0...v0.227.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-26 10:21:27 +01:00
Federico Di Pierro 00f6c771e0 cleanup(registry): drop newline.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-03-24 12:31:17 +01:00
Federico Di Pierro 103b5b232c update(build,plugins): bump plugin-sdk-go to 0.7.5.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-03-24 10:15:17 +01:00
Leonardo Grasso 80c962f16e fix(build): prevent race condition when dlopening a Go runtime embedded into an .so
When building a shared library (.so) that contains CGO, it embeds its own instance of the Go runtime. When later the we dlopen that library from a Go program (which already has its own Go runtime) both copies of the runtime are loaded into the same process. Go’s runtime is designed to be a singleton, and having two instances leads to conflicts during the execution of the library’s global init functions, ultimately causing a segfault.
This error was noticed for the first time with the `container` plugin, which makes use of the Podman package, which in turn makes massive use of Go `init()` functions.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-21 17:11:32 +01:00
Federico Di Pierro d8a42ad50c chore(docs): updated container plugin readme through readme tool.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-03-21 15:15:32 +01:00
Federico Di Pierro a7a7974c6c chore(docs): updated registry and readme.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-03-21 15:15:32 +01:00
Federico Di Pierro 955cc10c60 new(ci): added container-ci.
Also, fixed reusable-build-packages.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-03-21 15:15:32 +01:00
Federico Di Pierro 9a6f285ce7 new(plugins): initial import of container plugin.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-03-21 15:15:32 +01:00
poiana dcc78b76e2 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2025-03-21 14:41:31 +01:00
Leonardo Grasso 39666c0566 chore(registry.yaml): small change to trigger the CI
See https://github.com/falcosecurity/test-infra/pull/1796

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-21 12:23:31 +01:00
Leonardo Grasso 18fed960de docs(README.md): modernize README
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-21 12:13:31 +01:00
Leonardo Grasso 9bab8034c9 docs(docs): move "Registering a plugin" to its own document
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-21 12:13:31 +01:00
Leonardo Grasso adccf6c2f4 chore(registry.yaml): small change to trigger the CI
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-19 17:43:21 +01:00
Leonardo Grasso 3bdbfb462d docs(plugins/dummy_rs): remove leftover
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 14ba7228ae update(plugins/dummy_rs): pin SDK to 0.4
Co-authored-by: Grzegorz Nosek <grzegorz.nosek@sysdig.com>

Co-authored-by: Grzegorz Nosek <grzegorz.nosek@sysdig.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 9064007daf fix(plugins/dummy_rs): typo in comment
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 4c88069901 docs: add dummy_rs to the registry
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 5689000c17 docs(plugins/dummy_rs): readme
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 20c607bfaf chore(plugins/dummy_rs): add Carco.lock
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 1e67a44bfb new(plugins): dummy_rs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso a20d2dfdfe new(plugins): initial dummy_rs skeleton
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 085e627d2d update(.github): add Rust support in reusable build job
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-18 16:04:16 +01:00
Leonardo Grasso 691014574c update(shared/go/azure): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso 471dd904c2 update(plugins/kafka): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso 7ba8f84884 update(plugins/k8saudit-gke): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso f00e48efe5 update(plugins/k8saudit-aks): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso 8094fa32a8 chore(plugins): bulk go mod tidy
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso b2135b1cc8 update(Makefile): add bulk go mod tidy
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso 563729cf4b update(plugins/github): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso bb1d3ec149 update(plugins/gcpaudit): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
Leonardo Grasso ba252e31d7 update(plugins/cloudtrail): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-17 15:43:07 +01:00
dependabot[bot] 2986623460 build(deps): bump golang.org/x/net in /build/registry
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.35.0 to 0.36.0.
- [Commits](https://github.com/golang/net/compare/v0.35.0...v0.36.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-17 11:11:06 +01:00
dependabot[bot] dfdc424baf build(deps): bump docker/login-action in the actions group
Bumps the actions group with 1 update: [docker/login-action](https://github.com/docker/login-action).


Updates `docker/login-action` from 3.3.0 to 3.4.0
- [Release notes](https://github.com/docker/login-action/releases)
- [Commits](9780b0c442...74a5d14239)

---
updated-dependencies:
- dependency-name: docker/login-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-14 18:35:53 +01:00
Leonardo Grasso a56d432475 chore(github): go mod tidy
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-14 18:31:53 +01:00
dependabot[bot] 3fcacd1bc9 build(deps): bump golang.org/x/oauth2 in /plugins/github
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.26.0 to 0.28.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.26.0...v0.28.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-14 18:31:53 +01:00
Leonardo Grasso 8558865819 revert: fix(.github): add go mod tidy for dependabot.yml
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-14 18:22:53 +01:00
Leonardo Grasso a59561cfb6 fix(.github): add go mod tidy for dependabot.yml
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-03-14 17:51:53 +01:00
dependabot[bot] e09e250fe0 build(deps): bump the actions group across 1 directory with 2 updates
Bumps the actions group with 2 updates in the / directory: [github/codeql-action](https://github.com/github/codeql-action) and [actions/download-artifact](https://github.com/actions/download-artifact).


Updates `github/codeql-action` from 3.28.10 to 3.28.11
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](b56ba49b26...6bb031afdd)

Updates `actions/download-artifact` from 4.1.8 to 4.1.9
- [Release notes](https://github.com/actions/download-artifact/releases)
- [Commits](fa0a91b85d...cc20338598)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: actions/download-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-13 10:33:44 +01:00
dependabot[bot] 429430412b build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.222.0 to 0.224.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.222.0...v0.224.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 10:51:36 +01:00
Uli Heilmeier f2fe57d142 update(plugins/cloudtrail): support pre-ControlTower organization trails
Some pre-ControlTower organization Cloutrail trails are missing the OrgId
in the AWSLogs S3 path. Making the OrgId optional gives them the option
to use S3AccountList.

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2025-03-11 10:35:35 +01:00
dependabot[bot] 391b7cdecd build(deps): bump github.com/aws/aws-sdk-go-v2/service/sqs
Bumps [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) from 1.37.15 to 1.38.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/service/s3/v1.38.1/CHANGELOG.md)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.15...service/s3/v1.38.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 09:45:35 +01:00
dependabot[bot] d9ccf1b41f build(deps): bump github.com/onsi/ginkgo/v2 in /build/registry
Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.22.2 to 2.23.0.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.22.2...v2.23.0)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 09:38:35 +01:00
dependabot[bot] 2b5d40db53 build(deps): bump the gomod group across 1 directory with 3 updates
Bumps the gomod group with 2 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.8 to 1.29.9
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.8...config/v1.29.9)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.64 to 1.17.65
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.64...feature/s3/manager/v1.17.65)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.78.0 to 1.78.1
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.78.0...service/s3/v1.78.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-11 09:30:34 +01:00
dependabot[bot] b68e48ce8f build(deps): bump the gomod group across 1 directory with 4 updates
Bumps the gomod group with 3 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2` from 1.36.2 to 1.36.3
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.2...v1.36.3)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.7 to 1.29.8
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.7...config/v1.29.8)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.63 to 1.17.64
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.63...feature/s3/manager/v1.17.64)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.77.1 to 1.78.0
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.77.1...service/s3/v1.78.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-03-10 17:14:33 +01:00
dependabot[bot] 947abb0fab build(deps): bump the actions group with 3 updates
Bumps the actions group with 3 updates: [github/codeql-action](https://github.com/github/codeql-action), [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer) and [actions/upload-artifact](https://github.com/actions/upload-artifact).


Updates `github/codeql-action` from 3.28.9 to 3.28.10
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](9e8d0789d4...b56ba49b26)

Updates `sigstore/cosign-installer` from 3.8.0 to 3.8.1
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](c56c2d3e59...d7d6bc7722)

Updates `actions/upload-artifact` from 4.6.0 to 4.6.1
- [Release notes](https://github.com/actions/upload-artifact/releases)
- [Commits](65c4c4a1dd...4cec3d8aa0)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: sigstore/cosign-installer
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: actions/upload-artifact
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 12:39:21 +01:00
dependabot[bot] 7295c7b6f9 build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.221.0 to 0.222.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.221.0...v0.222.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-25 11:11:21 +01:00
Leonardo Grasso 2ea10833b9 update(plugins/cloudtrail): upgrade direct deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-19 12:36:43 +01:00
dependabot[bot] 7377728ee3 build(deps): bump github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs
Bumps [github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs](https://github.com/Azure/azure-sdk-for-go) from 1.2.3 to 1.3.0.
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/messaging/azeventhubs/v1.2.3...sdk/azcore/v1.3.0)

---
updated-dependencies:
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 16:14:39 +01:00
Leonardo Grasso a472cb1eff fix(build/registry): switch to RootDigest
This is required as a consequence of the falcoctl v0.11 upgrade.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-18 15:01:38 +01:00
dependabot[bot] d4f5aaf300 build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.220.0 to 0.221.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.220.0...v0.221.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 12:45:38 +01:00
dependabot[bot] 6aa12f87d7 build(deps): bump github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs
Bumps [github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs](https://github.com/Azure/azure-sdk-for-go) from 1.2.3 to 1.3.0.
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/messaging/azeventhubs/v1.2.3...sdk/azcore/v1.3.0)

---
updated-dependencies:
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/messaging/azeventhubs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 11:21:37 +01:00
dependabot[bot] c68b87944a build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.220.0 to 0.221.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.220.0...v0.221.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 11:20:37 +01:00
dependabot[bot] 55ac30593e build(deps): bump the gomod group across 2 directories with 5 updates
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2).
Bumps the gomod group with 2 updates in the /plugins/k8saudit-gke directory: [k8s.io/api](https://github.com/kubernetes/api) and [k8s.io/apiserver](https://github.com/kubernetes/apiserver).


Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.61 to 1.17.62
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/feature/s3/manager/v1.17.61...feature/s3/manager/v1.17.62)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.76.1 to 1.77.0
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.76.1...service/s3/v1.77.0)

Updates `k8s.io/api` from 0.32.1 to 0.32.2
- [Commits](https://github.com/kubernetes/api/compare/v0.32.1...v0.32.2)

Updates `k8s.io/apimachinery` from 0.32.1 to 0.32.2
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.32.1...v0.32.2)

Updates `k8s.io/apiserver` from 0.32.1 to 0.32.2
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.32.1...v0.32.2)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod
- dependency-name: k8s.io/api
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 11:05:37 +01:00
Leonardo Grasso 7feb90ca5b fix(build/registry): use new falcoctl v0.11 API to check repo existence
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-18 11:04:38 +01:00
Leonardo Grasso c133e5ff42 update(build/registry): upgrade deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-18 11:04:38 +01:00
dependabot[bot] ddfd6d9b98 build(deps): bump aws-actions/configure-aws-credentials
Bumps the actions group with 1 update: [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials).


Updates `aws-actions/configure-aws-credentials` from 4.0.3 to 4.1.0
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](4fc4975a85...ececac1a45)

---
updated-dependencies:
- dependency-name: aws-actions/configure-aws-credentials
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-18 10:03:37 +01:00
dependabot[bot] 2e669631b1 build(deps): bump golang.org/x/time in /shared/go/azure/eventhub
Bumps [golang.org/x/time](https://github.com/golang/time) from 0.8.0 to 0.10.0.
- [Commits](https://github.com/golang/time/compare/v0.8.0...v0.10.0)

---
updated-dependencies:
- dependency-name: golang.org/x/time
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-17 16:07:33 +01:00
dependabot[bot] 6d5a24e4fb build(deps): bump github.com/testcontainers/testcontainers-go/modules/kafka
Bumps [github.com/testcontainers/testcontainers-go/modules/kafka](https://github.com/testcontainers/testcontainers-go) from 0.31.0 to 0.35.0.
- [Release notes](https://github.com/testcontainers/testcontainers-go/releases)
- [Commits](https://github.com/testcontainers/testcontainers-go/compare/v0.31.0...v0.35.0)

---
updated-dependencies:
- dependency-name: github.com/testcontainers/testcontainers-go/modules/kafka
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 12:36:09 +01:00
dependabot[bot] eb95ab9c27 build(deps): bump github.com/aws/aws-sdk-go in /shared/go/aws/session
Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.44.51 to 1.55.6.
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG_PENDING.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.44.51...v1.55.6)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 12:24:10 +01:00
dependabot[bot] 8fe42f8ecd build(deps): bump github.com/aws/aws-sdk-go
Bumps [github.com/aws/aws-sdk-go](https://github.com/aws/aws-sdk-go) from 1.44.51 to 1.55.6.
- [Release notes](https://github.com/aws/aws-sdk-go/releases)
- [Changelog](https://github.com/aws/aws-sdk-go/blob/main/CHANGELOG_PENDING.md)
- [Commits](https://github.com/aws/aws-sdk-go/compare/v1.44.51...v1.55.6)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 12:15:10 +01:00
dependabot[bot] b512a7f243 build(deps): bump golang.org/x/time in /plugins/k8saudit-aks
Bumps [golang.org/x/time](https://github.com/golang/time) from 0.9.0 to 0.10.0.
- [Commits](https://github.com/golang/time/compare/v0.9.0...v0.10.0)

---
updated-dependencies:
- dependency-name: golang.org/x/time
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 12:14:11 +01:00
dependabot[bot] 36fa7370b6 build(deps): bump github.com/testcontainers/testcontainers-go
Bumps [github.com/testcontainers/testcontainers-go](https://github.com/testcontainers/testcontainers-go) from 0.31.0 to 0.35.0.
- [Release notes](https://github.com/testcontainers/testcontainers-go/releases)
- [Commits](https://github.com/testcontainers/testcontainers-go/compare/v0.31.0...v0.35.0)

---
updated-dependencies:
- dependency-name: github.com/testcontainers/testcontainers-go
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 12:13:10 +01:00
dependabot[bot] 0baafb0afc build(deps): bump golang.org/x/oauth2 in /plugins/github
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.25.0 to 0.26.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.25.0...v0.26.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-13 12:12:10 +01:00
dependabot[bot] 467f7c74a7 build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.219.0 to 0.220.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.219.0...v0.220.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 09:55:57 +01:00
dependabot[bot] 1224a37c0f build(deps): bump golang.org/x/net in /build/changelog
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.23.0 to 0.33.0.
- [Commits](https://github.com/golang/net/compare/v0.23.0...v0.33.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 09:46:57 +01:00
dependabot[bot] eedd891449 build(deps): bump the gomod group across 3 directories with 6 updates
Bumps the gomod group with 4 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).
Bumps the gomod group with 1 update in the /plugins/gcpaudit directory: google.golang.org/protobuf.
Bumps the gomod group with 1 update in the /plugins/k8saudit-gke directory: google.golang.org/protobuf.


Updates `github.com/aws/aws-sdk-go-v2` from 1.36.0 to 1.36.1
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.36.0...v1.36.1)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.4 to 1.29.6
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.4...config/v1.29.6)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.57 to 1.17.61
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.17.57...feature/s3/manager/v1.17.61)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.75.2 to 1.76.1
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.75.2...service/s3/v1.76.1)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.37.12 to 1.37.14
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.12...service/kms/v1.37.14)

Updates `google.golang.org/protobuf` from 1.36.4 to 1.36.5

Updates `google.golang.org/protobuf` from 1.36.4 to 1.36.5

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 09:29:57 +01:00
dependabot[bot] ade9618de3 build(deps): bump the actions group with 2 updates
Bumps the actions group with 2 updates: [github/codeql-action](https://github.com/github/codeql-action) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer).


Updates `github/codeql-action` from 3.28.8 to 3.28.9
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](dd746615b3...9e8d0789d4)

Updates `sigstore/cosign-installer` from 3.7.0 to 3.8.0
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](dc72c7d5c4...c56c2d3e59)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: sigstore/cosign-installer
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-11 09:28:57 +01:00
Leonardo Grasso 10390ff969 docs(plugins): bulk changelogs update
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-11 09:27:57 +01:00
Leonardo Grasso c1d32cd196 docs(plugins/k8saudit-ovh): update README
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-11 09:27:57 +01:00
Leonardo Grasso 9201ea7c45 docs(plugins/k8saudit-eks): update README
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-11 09:27:57 +01:00
Leonardo Grasso b124ff0b47 docs(plugins/k8saudit-aks): update README
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-11 09:27:57 +01:00
Leonardo Grasso ceba133311 fix(plugins/k8saudit-ovh): add README generation in Makefile
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-11 09:27:57 +01:00
Leonardo Grasso 63d9dd663f fix(changelog-gen.sh): support both the old and new tag formats for first version
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-11 09:27:57 +01:00
Leonardo Grasso 2b5e19f5c0 chore(registry.yaml): update registry to trigger the CI
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-06 18:04:36 +01:00
Leonardo Grasso cf27666b64 chore(registry.yaml): update registry to trigger the CI
See https://github.com/falcosecurity/test-infra/blob/master/config/jobs/build-plugins/build-plugins.yaml We need the job to run to update the falcoctl index.

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-06 16:02:36 +01:00
Leonardo Grasso 7214ed99de update(plugins/k8saudit-*): bump k8saudit plugin dep to v0.12
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-06 11:16:32 +01:00
Leonardo Grasso 1da1fc0d10 update(plugins/k8saudit): bump to v0.12.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 18:46:22 +01:00
Leonardo Grasso e5a4c209c6 update(plugins/k8saudit): update `required_plugin_versions` in ruleset
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 18:46:22 +01:00
Leonardo Grasso f321ad743c update(plugins/k8saudit-gke): bump to v0.5.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 18:46:22 +01:00
Leonardo Grasso 275672a759 update(plugins/k8saudit-eks): bump to v0.7.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 18:46:22 +01:00
dependabot[bot] 87da20ca07 build(deps): bump google.golang.org/api in /plugins/k8saudit-gke
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.184.0 to 0.220.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.184.0...v0.220.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 18:11:22 +01:00
dependabot[bot] dff7758074 build(deps): bump cloud.google.com/go/pubsub in /plugins/k8saudit-gke
Bumps [cloud.google.com/go/pubsub](https://github.com/googleapis/google-cloud-go) from 1.38.0 to 1.47.0.
- [Release notes](https://github.com/googleapis/google-cloud-go/releases)
- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.38.0...pubsub/v1.47.0)

---
updated-dependencies:
- dependency-name: cloud.google.com/go/pubsub
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 17:59:22 +01:00
dependabot[bot] 17b55be12a build(deps): bump k8s.io/apiserver in /plugins/k8saudit-gke
Bumps [k8s.io/apiserver](https://github.com/kubernetes/apiserver) from 0.30.2 to 0.32.1.
- [Commits](https://github.com/kubernetes/apiserver/compare/v0.30.2...v0.32.1)

---
updated-dependencies:
- dependency-name: k8s.io/apiserver
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 17:46:22 +01:00
Leonardo Grasso e56b80dbb1 docs(plugins): bulk update changelogs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 17:38:22 +01:00
Leonardo Grasso d3120a4ce9 update(changelog-gen.sh): skip empty dev section in changelogs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 17:38:22 +01:00
Leonardo Grasso fdb08c41de update(plugins/k8saudit-gke): bump to go 1.23.0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 17:30:22 +01:00
dependabot[bot] 28582b7bc8 build(deps): bump k8s.io/apimachinery in /plugins/k8saudit-gke
Bumps [k8s.io/apimachinery](https://github.com/kubernetes/apimachinery) from 0.30.2 to 0.32.1.
- [Commits](https://github.com/kubernetes/apimachinery/compare/v0.30.2...v0.32.1)

---
updated-dependencies:
- dependency-name: k8s.io/apimachinery
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 17:30:22 +01:00
dependabot[bot] 1dc00aea3b build(deps): bump google.golang.org/api in /plugins/gcpaudit
Bumps [google.golang.org/api](https://github.com/googleapis/google-api-go-client) from 0.184.0 to 0.219.0.
- [Release notes](https://github.com/googleapis/google-api-go-client/releases)
- [Changelog](https://github.com/googleapis/google-api-go-client/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-api-go-client/compare/v0.184.0...v0.219.0)

---
updated-dependencies:
- dependency-name: google.golang.org/api
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 16:00:22 +01:00
Leonardo Grasso 06371c1050 update(plugins/gcpaudit): bump to go 1.22.7
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-02-05 15:44:23 +01:00
dependabot[bot] 7cfd78bb2b build(deps): bump cloud.google.com/go/pubsub in /plugins/gcpaudit
Bumps [cloud.google.com/go/pubsub](https://github.com/googleapis/google-cloud-go) from 1.38.0 to 1.47.0.
- [Release notes](https://github.com/googleapis/google-cloud-go/releases)
- [Changelog](https://github.com/googleapis/google-cloud-go/blob/main/CHANGES.md)
- [Commits](https://github.com/googleapis/google-cloud-go/compare/pubsub/v1.38.0...pubsub/v1.47.0)

---
updated-dependencies:
- dependency-name: cloud.google.com/go/pubsub
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-05 15:44:23 +01:00
dependabot[bot] 50aae7ab40 build(deps): bump the actions group with 2 updates
Bumps the actions group with 2 updates: [github/codeql-action](https://github.com/github/codeql-action) and [aws-actions/configure-aws-credentials](https://github.com/aws-actions/configure-aws-credentials).


Updates `github/codeql-action` from 3.28.5 to 3.28.8
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](f6091c0113...dd746615b3)

Updates `aws-actions/configure-aws-credentials` from 4.0.2 to 4.0.3
- [Release notes](https://github.com/aws-actions/configure-aws-credentials/releases)
- [Changelog](https://github.com/aws-actions/configure-aws-credentials/blob/main/CHANGELOG.md)
- [Commits](e3dd6a429d...4fc4975a85)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: aws-actions/configure-aws-credentials
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 17:09:15 +01:00
dependabot[bot] 69948acd22 build(deps): bump github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
Bumps [github.com/Azure/azure-sdk-for-go/sdk/storage/azblob](https://github.com/Azure/azure-sdk-for-go) from 1.5.0 to 1.6.0.
- [Release notes](https://github.com/Azure/azure-sdk-for-go/releases)
- [Changelog](https://github.com/Azure/azure-sdk-for-go/blob/main/documentation/release.md)
- [Commits](https://github.com/Azure/azure-sdk-for-go/compare/sdk/azcore/v1.5.0...sdk/azcore/v1.6.0)

---
updated-dependencies:
- dependency-name: github.com/Azure/azure-sdk-for-go/sdk/storage/azblob
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 17:03:14 +01:00
dependabot[bot] fde5100c7d build(deps): bump the gomod group across 5 directories with 5 updates
Bumps the gomod group with 1 update in the /build/changelog directory: [github.com/spf13/pflag](https://github.com/spf13/pflag).
Bumps the gomod group with 1 update in the /build/readme directory: [github.com/spf13/pflag](https://github.com/spf13/pflag).
Bumps the gomod group with 1 update in the /build/registry directory: [github.com/spf13/pflag](https://github.com/spf13/pflag).
Bumps the gomod group with 1 update in the /build/utils directory: [github.com/spf13/pflag](https://github.com/spf13/pflag).
Bumps the gomod group with 3 updates in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2), [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) and [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/spf13/pflag` from 1.0.5 to 1.0.6
- [Release notes](https://github.com/spf13/pflag/releases)
- [Commits](https://github.com/spf13/pflag/compare/v1.0.5...v1.0.6)

Updates `github.com/spf13/pflag` from 1.0.5 to 1.0.6
- [Release notes](https://github.com/spf13/pflag/releases)
- [Commits](https://github.com/spf13/pflag/compare/v1.0.5...v1.0.6)

Updates `github.com/spf13/pflag` from 1.0.5 to 1.0.6
- [Release notes](https://github.com/spf13/pflag/releases)
- [Commits](https://github.com/spf13/pflag/compare/v1.0.5...v1.0.6)

Updates `github.com/spf13/pflag` from 1.0.5 to 1.0.6
- [Release notes](https://github.com/spf13/pflag/releases)
- [Commits](https://github.com/spf13/pflag/compare/v1.0.5...v1.0.6)

Updates `github.com/aws/aws-sdk-go-v2/config` from 1.29.2 to 1.29.4
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.29.2...config/v1.29.4)

Updates `github.com/aws/aws-sdk-go-v2/feature/s3/manager` from 1.17.54 to 1.17.57
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/credentials/v1.17.54...credentials/v1.17.57)

Updates `github.com/aws/aws-sdk-go-v2/service/s3` from 1.74.1 to 1.75.2
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.74.1...service/s3/v1.75.2)

Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.37.10 to 1.37.12
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.10...service/kms/v1.37.12)

---
updated-dependencies:
- dependency-name: github.com/spf13/pflag
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/spf13/pflag
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/spf13/pflag
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/spf13/pflag
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: gomod
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-02-04 17:01:15 +01:00
dependabot[bot] 1171418cf1 build(deps): bump github.com/aws/aws-sdk-go-v2/service/sqs
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2).


Updates `github.com/aws/aws-sdk-go-v2/service/sqs` from 1.37.9 to 1.37.10
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/kms/v1.37.9...service/kms/v1.37.10)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 11:01:36 +01:00
dependabot[bot] 6c27356af3 build(deps): bump golang.org/x/oauth2 in /plugins/github
Bumps [golang.org/x/oauth2](https://github.com/golang/oauth2) from 0.21.0 to 0.25.0.
- [Commits](https://github.com/golang/oauth2/compare/v0.21.0...v0.25.0)

---
updated-dependencies:
- dependency-name: golang.org/x/oauth2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 11:00:34 +01:00
dependabot[bot] 5b45ddc55a build(deps): bump github.com/aws/aws-sdk-go-v2/feature/s3/manager
Bumps [github.com/aws/aws-sdk-go-v2/feature/s3/manager](https://github.com/aws/aws-sdk-go-v2) from 1.16.15 to 1.17.54.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.16.15...credentials/v1.17.54)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/feature/s3/manager
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 10:53:34 +01:00
dependabot[bot] 935102282f build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3
Bumps [github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2) from 1.53.1 to 1.74.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.53.1...service/s3/v1.74.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 10:25:34 +01:00
dependabot[bot] 9663407521 build(deps): bump github.com/aws/aws-sdk-go-v2 in /plugins/cloudtrail
Bumps [github.com/aws/aws-sdk-go-v2](https://github.com/aws/aws-sdk-go-v2) from 1.33.0 to 1.34.0.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/v1.33.0...v1.34.0)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 10:23:33 +01:00
dependabot[bot] 47b7f90951 build(deps): bump github/codeql-action in the actions group
Bumps the actions group with 1 update: [github/codeql-action](https://github.com/github/codeql-action).


Updates `github/codeql-action` from 3.28.4 to 3.28.5
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](ee117c905a...f6091c0113)

---
updated-dependencies:
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-28 10:08:33 +01:00
Leonardo Grasso b53587bedf update(plugins/kafka): bump to v0.1.4
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-24 16:31:14 +01:00
Leonardo Grasso 2d52d84d75 update(plugins/github): bump to v0.8.1
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-24 16:31:14 +01:00
Leonardo Grasso ff835b2b5d update(plugins/gcpaudig): bump to v0.5.2
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-24 16:31:14 +01:00
Leonardo Grasso f6e5098d76 update(plugins/cloudtrail): bump to v0.12.3
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-24 16:31:14 +01:00
Leonardo Grasso fc7d613cd8 fix(build/registry): downgrade to oras.land/oras-go/v2@v2.2.1
go: downgraded github.com/falcosecurity/driverkit v0.20.4 => v0.14.0
go: downgraded github.com/falcosecurity/falcoctl v0.10.1 => v0.6.2
go: downgraded oras.land/oras-go/v2 v2.5.0 => v2.2.1
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-24 16:03:14 +01:00
dependabot[bot] 56c0599ebf build(deps): bump github.com/invopop/jsonschema in /plugins/cloudtrail
Bumps [github.com/invopop/jsonschema](https://github.com/invopop/jsonschema) from 0.12.0 to 0.13.0.
- [Commits](https://github.com/invopop/jsonschema/compare/v0.12.0...v0.13.0)

---
updated-dependencies:
- dependency-name: github.com/invopop/jsonschema
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 15:27:14 +01:00
dependabot[bot] 69956e9338 build(deps): bump github.com/invopop/jsonschema in /plugins/k8saudit-eks
Bumps [github.com/invopop/jsonschema](https://github.com/invopop/jsonschema) from 0.12.0 to 0.13.0.
- [Commits](https://github.com/invopop/jsonschema/compare/v0.12.0...v0.13.0)

---
updated-dependencies:
- dependency-name: github.com/invopop/jsonschema
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 15:21:14 +01:00
dependabot[bot] 3cb67a923d build(deps): bump github.com/aws/aws-sdk-go-v2/service/sqs
Bumps [github.com/aws/aws-sdk-go-v2/service/sqs](https://github.com/aws/aws-sdk-go-v2) from 1.31.4 to 1.37.9.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Changelog](https://github.com/aws/aws-sdk-go-v2/blob/main/changelog-template.json)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/fis/v1.31.4...service/kms/v1.37.9)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/sqs
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 15:20:14 +01:00
dependabot[bot] 980adfd2ec build(deps): bump github.com/onsi/ginkgo/v2 in /build/registry
Bumps [github.com/onsi/ginkgo/v2](https://github.com/onsi/ginkgo) from 2.10.0 to 2.22.2.
- [Release notes](https://github.com/onsi/ginkgo/releases)
- [Changelog](https://github.com/onsi/ginkgo/blob/master/CHANGELOG.md)
- [Commits](https://github.com/onsi/ginkgo/compare/v2.10.0...v2.22.2)

---
updated-dependencies:
- dependency-name: github.com/onsi/ginkgo/v2
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 15:19:13 +01:00
dependabot[bot] 281847c959 build(deps): bump github.com/falcosecurity/falcoctl in /build/registry
Bumps [github.com/falcosecurity/falcoctl](https://github.com/falcosecurity/falcoctl) from 0.6.1 to 0.10.1.
- [Release notes](https://github.com/falcosecurity/falcoctl/releases)
- [Changelog](https://github.com/falcosecurity/falcoctl/blob/main/.goreleaser.yml)
- [Commits](https://github.com/falcosecurity/falcoctl/compare/v0.6.1...v0.10.1)

---
updated-dependencies:
- dependency-name: github.com/falcosecurity/falcoctl
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 15:10:13 +01:00
dependabot[bot] bdedf0d4c5 build(deps): bump github.com/stretchr/testify in /build/registry
Bumps [github.com/stretchr/testify](https://github.com/stretchr/testify) from 1.8.4 to 1.10.0.
- [Release notes](https://github.com/stretchr/testify/releases)
- [Commits](https://github.com/stretchr/testify/compare/v1.8.4...v1.10.0)

---
updated-dependencies:
- dependency-name: github.com/stretchr/testify
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 14:52:13 +01:00
dependabot[bot] 342a3474a3 build(deps): bump the gomod group across 5 directories with 3 updates
Bumps the gomod group with 1 update in the /build/readme directory: [github.com/falcosecurity/plugin-sdk-go](https://github.com/falcosecurity/plugin-sdk-go).
Bumps the gomod group with 1 update in the /build/registry directory: [github.com/falcosecurity/plugin-sdk-go](https://github.com/falcosecurity/plugin-sdk-go).
Bumps the gomod group with 1 update in the /plugins/cloudtrail directory: [github.com/falcosecurity/plugin-sdk-go](https://github.com/falcosecurity/plugin-sdk-go).
Bumps the gomod group with 1 update in the /plugins/github directory: [github.com/sethvargo/go-password](https://github.com/sethvargo/go-password).
Bumps the gomod group with 1 update in the /plugins/k8saudit-gke directory: [k8s.io/klog/v2](https://github.com/kubernetes/klog).


Updates `github.com/falcosecurity/plugin-sdk-go` from 0.7.3 to 0.7.4
- [Release notes](https://github.com/falcosecurity/plugin-sdk-go/releases)
- [Changelog](https://github.com/falcosecurity/plugin-sdk-go/blob/main/release.md)
- [Commits](https://github.com/falcosecurity/plugin-sdk-go/compare/v0.7.3...v0.7.4)

Updates `github.com/falcosecurity/plugin-sdk-go` from 0.7.3 to 0.7.4
- [Release notes](https://github.com/falcosecurity/plugin-sdk-go/releases)
- [Changelog](https://github.com/falcosecurity/plugin-sdk-go/blob/main/release.md)
- [Commits](https://github.com/falcosecurity/plugin-sdk-go/compare/v0.7.3...v0.7.4)

Updates `github.com/falcosecurity/plugin-sdk-go` from 0.7.3 to 0.7.4
- [Release notes](https://github.com/falcosecurity/plugin-sdk-go/releases)
- [Changelog](https://github.com/falcosecurity/plugin-sdk-go/blob/main/release.md)
- [Commits](https://github.com/falcosecurity/plugin-sdk-go/compare/v0.7.3...v0.7.4)

Updates `github.com/sethvargo/go-password` from 0.3.0 to 0.3.1
- [Commits](https://github.com/sethvargo/go-password/compare/v0.3.0...v0.3.1)

Updates `k8s.io/klog/v2` from 2.130.0 to 2.130.1
- [Release notes](https://github.com/kubernetes/klog/releases)
- [Changelog](https://github.com/kubernetes/klog/blob/main/RELEASE.md)
- [Commits](https://github.com/kubernetes/klog/compare/v2.130.0...v2.130.1)

---
updated-dependencies:
- dependency-name: github.com/falcosecurity/plugin-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/falcosecurity/plugin-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/falcosecurity/plugin-sdk-go
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: github.com/sethvargo/go-password
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: gomod
- dependency-name: k8s.io/klog/v2
  dependency-type: indirect
  update-type: version-update:semver-patch
  dependency-group: gomod
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 14:50:13 +01:00
dependabot[bot] 094873bedc build(deps): bump actions/setup-go from 4.0.0 to 5.3.0
Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4.0.0 to 5.3.0.
- [Release notes](https://github.com/actions/setup-go/releases)
- [Commits](https://github.com/actions/setup-go/compare/v4...f111f3307d8850f501ac008e886eec1fd1932a34)

---
updated-dependencies:
- dependency-name: actions/setup-go
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-24 10:02:12 +01:00
dependabot[bot] fae2b7903e build(deps): bump the actions group with 4 updates
Bumps the actions group with 4 updates: [actions/checkout](https://github.com/actions/checkout), [github/codeql-action](https://github.com/github/codeql-action), [jidicula/clang-format-action](https://github.com/jidicula/clang-format-action) and [sigstore/cosign-installer](https://github.com/sigstore/cosign-installer).


Updates `actions/checkout` from 4.1.1 to 4.2.2
- [Release notes](https://github.com/actions/checkout/releases)
- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)
- [Commits](https://github.com/actions/checkout/compare/v4.1.1...11bd71901bbe5b1630ceea73d27597364c9af683)

Updates `github/codeql-action` from 3.28.3 to 3.28.4
- [Release notes](https://github.com/github/codeql-action/releases)
- [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md)
- [Commits](dd196fa9ce...ee117c905a)

Updates `jidicula/clang-format-action` from 4.11.0 to 4.14.0
- [Release notes](https://github.com/jidicula/clang-format-action/releases)
- [Commits](f62da5e3d3...d05cecd4a1)

Updates `sigstore/cosign-installer` from 3.5.0 to 3.7.0
- [Release notes](https://github.com/sigstore/cosign-installer/releases)
- [Commits](59acb6260d...dc72c7d5c4)

---
updated-dependencies:
- dependency-name: actions/checkout
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: github/codeql-action
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
- dependency-name: jidicula/clang-format-action
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
- dependency-name: sigstore/cosign-installer
  dependency-type: direct:production
  update-type: version-update:semver-minor
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-23 18:35:08 +01:00
cpanato 5c061397dc clean up update ci and add dependabot config
Signed-off-by: cpanato <ctadeu@gmail.com>
2025-01-23 18:27:08 +01:00
Thomas Labarussias 42e49c7d89 fix the rule to detect the exec in EKS
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2025-01-22 17:48:04 +01:00
dependabot[bot] 7e92fd6e3e build(deps): bump golang.org/x/net in /plugins/gcpaudit
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.26.0 to 0.33.0.
- [Commits](https://github.com/golang/net/compare/v0.26.0...v0.33.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-22 13:03:03 +01:00
dependabot[bot] 288bc5c0a2 build(deps): bump golang.org/x/net in /shared/go/azure/eventhub
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.27.0 to 0.33.0.
- [Commits](https://github.com/golang/net/compare/v0.27.0...v0.33.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-20 12:22:48 +01:00
Leonardo Grasso 02eb75a3c1 fix(.github/workflows): address race condition on terminal "upload-pr-info" job
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-17 13:36:33 +01:00
Leonardo Grasso 515d40a276 fix(.github): avoid OCI repo validation before its creation
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-17 13:36:33 +01:00
Leonardo Grasso b59b03a06a docs(plugins): bulk update readmes
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-17 13:36:33 +01:00
Leonardo Grasso e1e6d5e2a1 docs: bulk update changelogs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2025-01-17 13:36:33 +01:00
Thomas Labarussias 12e3afe13f upgrade the deps for k8saudit-aks and run go mod tidy to clean up the go.mod and fix the failing step in the CI
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2025-01-17 13:10:33 +01:00
Federico Di Pierro 1dc8b8272f chore(ci): switch to use github provided arm runner.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2025-01-17 10:33:32 +01:00
poiana 04bda84841 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2025-01-16 18:26:28 +01:00
scraly e7e5531d16 feat: Add k8saudiovh plugin in falcosecurity repo
Signed-off-by: scraly <scraly@gmail.com>
2025-01-16 17:43:28 +01:00
Aurelie Vache 11ab7cb31b feat: add k8saudit-ovh in registry.yaml file
Signed-off-by: scraly <scraly@gmail.com>
2025-01-16 17:43:28 +01:00
Aurelie Vache 453dd87b3c Add k8saudit-ovh plugin
Signed-off-by: Aurelie Vache <scraly@gmail.com>
2025-01-16 17:43:28 +01:00
Luca Guerra 208b2b4707 update(ci): upgrade golang to 1.23
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-01-16 16:55:27 +01:00
Luca Guerra a383f07d13 new(plugins/k8saudit): add subject name fields
Signed-off-by: Luca Guerra <luca@guerra.sh>
2025-01-13 10:42:38 +01:00
dependabot[bot] 35ec8874c0 build(deps): bump golang.org/x/crypto in /plugins/kafka
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.24.0 to 0.31.0.
- [Commits](https://github.com/golang/crypto/compare/v0.24.0...v0.31.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2025-01-07 17:10:35 +01:00
Igor Eulalio 34dac6163c chore: update docs
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Igor Eulalio 7da2323aa0 feat: refactor it to use init config instead environment variables, add plugin max event size configuration
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Igor Eulalio fd257f2d50 fix: add waitgroup to prevent sending messages on closed channels
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Igor Eulalio a476fb5a48 chore: fix license description on all files, remove test rules file, fix typo on README
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Igor Eulalio c53998860c chore: remove unused print
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Igor Eulalio 78c9bc9c8d feat: handling channel closenes in order
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Igor Eulalio d28ea19f5e feat: refactor to remove print logs, add .envrc to .gitignore, configure proper resource shutdown for partitionClient
Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Francesco Pirrò fa297815dd feat(plugins/aksaudit): add aks audit logs plugin
Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>

update(plugins/gcpaudit): bump plugin version to 0.5.0

Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>

chore(plugins/gcpaudit): update changelogs with v0.5.0 changes

Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>

add initial plugin structure

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

add processor function, refactor workflow to leverage channels

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

refactoring main function to handle Process in underlying package, introducing channels

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

add makefile

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

update regisry + readme for k8saudit-aks

Signed-off-by: Thomas Labarussias <issif+github@gadz.org>

add owners

Signed-off-by: Thomas Labarussias <issif+github@gadz.org>

fix Open method arg

Signed-off-by: Thomas Labarussias <issif+github@gadz.org>

refactor code to handle the channel logic, add Makefile helpers, add new rule

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

add logs using proper plugin, finish configuration

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

feat: add .envrc to gitignore

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>

feat: add .envrc to gitignore

Signed-off-by: Igor Eulalio <igor.eulalio@sysdig.com>
2025-01-07 17:07:35 +01:00
Leonardo Grasso 3a2f821596 docs(plugings): update changelogs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-12-17 12:10:38 +01:00
Leonardo Grasso 8b30c001b4 update(k8saudit-gke): bump to v0.4.1
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-12-17 12:10:38 +01:00
Leonardo Grasso b9c5f803b6 update(gcpaudit): bump to v0.5.1
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-12-17 12:10:38 +01:00
Leonardo Grasso 2fbea5932c update(kafka): bump to v0.1.3
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-12-17 12:10:38 +01:00
dependabot[bot] bb9801e7fa build(deps): bump golang.org/x/crypto in /plugins/k8saudit-gke
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.24.0 to 0.31.0.
- [Commits](https://github.com/golang/crypto/compare/v0.24.0...v0.31.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-17 11:24:38 +01:00
dependabot[bot] 59018d7090 build(deps): bump golang.org/x/crypto in /plugins/gcpaudit
Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.24.0 to 0.31.0.
- [Commits](https://github.com/golang/crypto/compare/v0.24.0...v0.31.0)

---
updated-dependencies:
- dependency-name: golang.org/x/crypto
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-12-17 11:15:38 +01:00
Francesco Pirrò e61c52a3a9 chore(plugins/gcpaudit): update changelogs with v0.5.0 changes
Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>
2024-11-21 09:59:21 +01:00
Francesco Pirrò 8f06b508dd update(plugins/gcpaudit): bump plugin version to 0.5.0
Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>
2024-11-20 18:21:19 +01:00
Francesco Pirrò b63c0efc82 chore(plugins/gcpaudit): update readme with new field
Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>
2024-11-20 18:21:19 +01:00
Francesco Pirrò 13e3d11a55 feat(plugins/gcpaudit): add gcp.resourceLabels field
Signed-off-by: Francesco Pirrò <francesco.pirro@sysdig.com>
2024-11-20 18:21:19 +01:00
Leonardo Grasso fc03215e93 update(k8saudit-gke): upgrade base plugin version
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-19 16:47:17 +01:00
Leonardo Grasso 26e55fa80f update(k8saudit-eks): upgrade base plugin version
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-19 16:47:17 +01:00
Andrea Terzolo 0890696b32 update: improve k8smeta logging
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-11-19 16:34:18 +01:00
Leonardo Grasso 5ddea47f5b fix(ci): add libelf-dev system dep for building packages
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-19 15:59:17 +01:00
Leonardo Grasso 45e716e8c4 update(k8saudit): bump to v0.11
Since https://github.com/falcosecurity/plugins/pull/528 is introducing a backward incompatible change within the ruleset

Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-19 15:45:17 +01:00
Melissa Kilby 406c51778f update(anomalydetection): tweak inits when count_min_sketch disabled + better comments/docs clarity
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby cb0fdb1493 update(anomalydetection): update documentation
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 79c085e498 update(anomalydetection): helper new filtercheck / output field anomaly.falco.duration_ns
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 489ef6d788 update(anomalydetection): ability to reset data structures w/ timers
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby d4e72b8710 update(anomalydetection): more usage safeguards and info log messages
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 23bf05eebf update(anomalydetection): add some fallbacks / evt param extraction in cases of missing fd table entry
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 1e8052c840 update(anomalydetection): add some custom behavior profile short-cut fields options
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 6a448c2e4b update(anomalydetection): add MutexGuard (adopted from libs) to sketches data structures
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby f720e4ac87 update(anomalydetection): finish currently supported behavior profile filterchecks 3/n
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 14a58d3257 update(anomalydetection): add lastevent_fd + enhance robustness / tests + start fd related filterchecks 2/n
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 27747ebf57 update(anomalydetection): unit tests for proc lineage + add filterchecks 1/n
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Jason Dellaluce fa2c05e80b update(anomalydetection): populate info for proc args
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2024-11-13 22:41:54 +01:00
Jason Dellaluce faf66360b7 update(anomalydetection): sync plugin to latest SDK changes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 6a834a368b new(anomalydetection): init config + start behavior profile extraction
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 73c11bd3af new(anomalydetection): start unit tests + bump libs and sdk
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby f77892214d cleanup(anomalydetection): cms class updates
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Melissa Kilby 6b89390238 new(anomalydetection): init plugin / start dev
Signed-off-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2024-11-13 22:41:54 +01:00
Aldo Lacuku aceb2c2f78 chore(k8smeta): bump k8smeta version to 0.2.1
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-11-08 11:35:27 +01:00
Aldo Lacuku 8df5a6b2c9 chore(k8smeta): adjust logging level
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-11-07 14:50:24 +01:00
Aldo Lacuku 8aeeaa53c5 fix(k8smeta): handle missing directories/files during /proc scan
std::filesystem::directory_iterator works by retrieving entries on-the-fly as it iterates over them,
rather than preloading all entries. This implies that entries could indeed disappear (or appear)
between iterations, especially in highly dynamic directories such as /proc/.
The loop continues processing other entries even if an exception occurs,
allowing for robust and uninterrupted iteration.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-11-07 12:23:27 +01:00
Aldo Lacuku b5b9a4db2f fix(proc/scan): scan all existing threads
By scanning only /proc we missed the threads of a given process.
It scans all threads under a given process in /proc/pid/task.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-11-07 09:18:23 +01:00
Leonardo Grasso 0a8a799e22 update(.github/workflows): switching to github-arm64-2c-8gb
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-06 15:58:18 +01:00
Leonardo Grasso b095b5d69e update(.github/workflows): upgrade to actions/download-artifact@v4
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-06 15:58:18 +01:00
Leonardo Grasso acb73c757e update(.github/workflows): upgrade to actions/upload-artifact@v4
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-11-06 15:58:18 +01:00
Luca Guerra 2e570d125c update(docs): add LucaGuerra to owners
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-11-06 11:50:16 +01:00
dependabot[bot] 183bc0b1d0 build(deps): bump github.com/docker/docker in /build/changelog
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 24.0.9+incompatible to 25.0.6+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v24.0.9...v25.0.6)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-08 17:52:10 +02:00
dependabot[bot] 520d1678b5 build(deps): bump github.com/docker/docker in /build/registry
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 26.1.4+incompatible to 26.1.5+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v26.1.4...v26.1.5)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-08 17:30:09 +02:00
dependabot[bot] 6f493c3d49 build(deps): bump github.com/docker/docker in /plugins/kafka
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 27.1.0+incompatible to 27.1.1+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v27.1.0...v27.1.1)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-10-04 11:26:49 +02:00
Thomas Labarussias e94e21f9b4 update the falco version used in the CI
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-10-02 14:53:40 +02:00
Thomas Labarussias 7403eee735 [github plugin] split the field github.repo into github.repo.name and github.repo.url for easier to write rules + fix bad indentation in the registry table
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>

update the upload-artifact action version

Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-10-02 14:53:40 +02:00
pyama cea76009a0 fix:Do not output information that contains confidential data.
Signed-off-by: Kazuhiko Yamashita <www.kazu.com@gmail.com>
2024-09-18 10:19:52 +02:00
poiana 6d1d58031d docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2024-09-16 09:42:46 +02:00
Mattia Forcellese ece830a668 feat: Added keycloak plugin
Signed-off-by: Mattia Forcellese <mattiaforc@gmail.com>
2024-09-13 11:26:36 +02:00
poiana b8f9e32ef9 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2024-07-31 10:14:44 +02:00
dependabot[bot] 2277f83d2f build(deps): bump google.golang.org/grpc in /plugins/gcpaudit
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.64.0...v1.64.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-30 18:12:40 +02:00
andy 8e2cb63141 Update registry.yaml
Signed-off-by: andy <127995147+an1245@users.noreply.github.com>
2024-07-30 18:10:40 +02:00
andy ac3e8a9d58 Update registry.yaml
Signed-off-by: andy <127995147+an1245@users.noreply.github.com>
2024-07-30 18:10:40 +02:00
dependabot[bot] 5fbfe1fc4b build(deps): bump github.com/docker/docker in /build/registry
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 24.0.9+incompatible to 26.1.4+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v24.0.9...v26.1.4)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-30 18:09:40 +02:00
dependabot[bot] f1a7628df8 build(deps): bump github.com/docker/docker in /plugins/kafka
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 27.0.0+incompatible to 27.1.0+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/commits/v27.1.0)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-30 17:31:40 +02:00
Andrea Terzolo 40bbf69cd0 chore(k8smeta): bump k8smeta plugin version
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-07-24 17:22:10 +02:00
Andrea Terzolo 1c569c449d cleanup: complete the /proc scan
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-07-24 17:06:10 +02:00
Andrea Terzolo 4585f3ba6d fix(k8smeta): introduce proc-scan to recover the initial host state
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-07-24 17:06:10 +02:00
dependabot[bot] a00cc75bc8 build(deps): bump google.golang.org/grpc in /plugins/k8saudit-gke
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.64.0...v1.64.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-12 14:07:52 +02:00
dependabot[bot] c011440fa6 build(deps): bump google.golang.org/grpc in /plugins/kafka
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.64.0 to 1.64.1.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.64.0...v1.64.1)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-07-11 21:02:48 +02:00
Leonardo Grasso 84340ee760 docs(plugins/k8saudit-gke): update changelog
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-18 11:38:03 +02:00
Leonardo Grasso c9b77f5998 docs(plugins/k8saudit-eks): update changelog
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-18 11:38:03 +02:00
Leonardo Grasso b90a4917de update(plugins/k8saudit-gke): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-18 10:39:03 +02:00
Leonardo Grasso 7310bbe40c update(plugins/k8saudit-eks): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-18 10:39:03 +02:00
Leonardo Grasso b69d0d0912 docs: bulk update for changelogs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 19:08:00 +02:00
Gerald Combs fbd9f4833d update(cloudtrail): Update ct.resources handling
Generalize our array length check. Use strings.TrimSuffix in order to
avoid a potential string under-read.

Signed-off-by: Gerald Combs <gerald@wireshark.org>
2024-06-17 18:27:00 +02:00
Leonardo Grasso b31ad613da docs(plugins): update README.md
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso 0f93bb46ee update(plugins/okta): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso c13c93dfc9 docs(plugins/kafka): add SPDXID and file headers for license
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso 9490f6264c update(plugins/kafka): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso 56e3a81094 update(plugins/k8saudit): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso 85f956a9fd update(plugins/json): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso 980fa2e46c update(plugins/github): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso 92ee2d33f5 update(plugins/gcpaudit): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Leonardo Grasso e99e98caa1 update(plugins/dummy): upgrade sdk and deps
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-06-17 16:12:00 +02:00
Sanja Kosier bc831863a0 update(plugins/gcpaudit): bump version to 0.4.0
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-06-17 10:15:04 +02:00
Sanja Kosier 9c1cab5ac7 feat(plugins/gcpaudit): introduce optional UseAsync field in gcpaudit plugin
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-06-17 10:15:04 +02:00
Sanja Kosier ea17a79ccc feat(plugins/okta): introduce optional UseAsync field in okta plugin
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-06-17 10:14:00 +02:00
Luca Guerra ef2a608365 chore(ci): update cosign-installer to v3.5.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-06-05 11:13:19 +02:00
Luca Guerra 512f1ff361 chore(build): add comment about upgrading debian version
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-22 18:03:21 +02:00
Luca Guerra f1c64d727a update(plugins): update changelogs
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-22 18:02:20 +02:00
Luca Guerra ed9790a965 fix(build): fix changelog script with double digit versions
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-22 16:14:20 +02:00
Luca Guerra c9e92164f9 update(plugins/k8sauditeks,plugins/k8sauditgke): bump versions
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-22 15:15:20 +02:00
Luca Guerra cee5818f42 chore(plugins): update k8saudit to 0.10.0 in gke and eks
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-22 15:15:20 +02:00
Luca Guerra aaee539faf chore(plugins): bump versions
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-22 11:19:19 +02:00
Luca Guerra 5e23552779 chore(plugins/k8saudit): use rc tag
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-21 16:49:13 +02:00
Luca Guerra 63b7093365 chore(plugin/cloudtrail): bump cloudtrail version to 0.10.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-21 16:49:13 +02:00
Luca Guerra 867b844462 fix(ci): build plugins on debian bullseye
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-05-21 16:18:13 +02:00
Sanja Kosier e66527da1a add field info fields list
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-21 16:08:13 +02:00
Sanja Kosier ab63a13b72 feat(plugins/k8saudit): extract pod name
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-21 16:08:13 +02:00
Sanja Kosier 1a559ef56f apply feedback; add field into fields.go
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-21 15:26:13 +02:00
Sanja Kosier 31c2f535d1 feat(plugins/k8saudit): extract cluster name
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-21 15:26:13 +02:00
Sverre Boschman a492a54ea1 build: use plugin event source as alternative commit scope for changelog generation
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-21 10:42:13 +02:00
Sverre Boschman 4686bf8320 build: include dependabot commits in changelog
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-21 10:42:13 +02:00
Sverre Boschman bd22a53b90 build: support go-compatible git tag convention in changelog generation
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-21 10:42:13 +02:00
Aldo Lacuku 04f6e543ec fix(CI): use the repo URL as source of truth for plugin's owner
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-05-14 16:51:47 +02:00
Leonardo Grasso 0e7ef76987 docs(plugins/kafka): update description and contact
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-05-14 10:09:45 +02:00
poiana 563eea578b docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2024-05-10 09:32:03 +02:00
Hunter Madison d486cb06fa Add a Readme and Owners
Signed-off-by: Hunter Madison <hunter.madison@ibm.com>
2024-05-10 09:23:03 +02:00
Hunter Madison e08db5a112 Register plugin as ID 18
Signed-off-by: Hunter Madison <hunter.madison@ibm.com>
2024-05-10 09:23:03 +02:00
Hunter Madison e2d7458b72 Support reading events from Kafka
Signed-off-by: Hunter Madison <hunter.madison@ibm.com>
2024-05-10 09:23:03 +02:00
Hunter Madison f56b5f8e41 Update Golang build environment to 1.22
Signed-off-by: Hunter Madison <hunter.madison@ibm.com>
2024-05-10 09:23:03 +02:00
Sverre Boschman ba30578c64 ci: bump checkout and setup-go actions
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-09 18:53:59 +02:00
Sverre Boschman 7c1f048c61 ci: bump codeql-action/analyze to v3
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-09 18:53:59 +02:00
Sverre Boschman 565d1bb281 ci: bump codeql-action/autobuild to v3
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-09 18:53:59 +02:00
Sverre Boschman 5cdf91322b ci: bump CodeQL to v3
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-09 18:53:59 +02:00
Nuno Adrego c4ed2ca417 chore(plugins/cloudtrail): update changelog
Signed-off-by: Nuno Adrego <55922671+nunoadrego@users.noreply.github.com>
2024-05-08 11:02:53 +02:00
Nuno Adrego d775f538c8 chore(cloudtrail): replace moved package
Signed-off-by: Nuno Adrego <55922671+nunoadrego@users.noreply.github.com>
2024-05-08 11:02:53 +02:00
Nuno Adrego f43ca43326 chore(cloudtrail): update Go and dependencies
Signed-off-by: Nuno Adrego <55922671+nunoadrego@users.noreply.github.com>
2024-05-08 11:02:53 +02:00
Klaus Wagner 65aed62a38 Add ka.auth.openshift.decision and ka.auth.openshift.username as fields to allow processing of events in openshift clusters regarding authentication
Signed-off-by: Klaus Wagner <neniscio@gmail.com>
2024-05-08 10:50:53 +02:00
Sanja Kosier db113db628 apply feedback; bump plugin version in a right way
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-07 13:11:48 +02:00
Sanja Kosier 737f336d49 chore(k8saudit-gke): bump version
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-07 13:11:48 +02:00
Sanja Kosier 274f99a590 apply feedback; add method comment
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-06 17:46:46 +02:00
Sanja Kosier 06814a7908 plugins(k8saudit-gke): export ConvertLogEntry method
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-05-06 17:46:46 +02:00
Sverre Boschman 42fcdae988 chore(plugins/k8saudit): bump plugin version to 0.9.0
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-03 11:00:02 +02:00
Sverre Boschman 472fd1fc53 fix(plugins/k8saudit/rules): split rbac rules by individual rbac object
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-03 11:00:02 +02:00
Sverre Boschman d2e1605236 chore(k8saudit-gke): bump version to 0.1.1
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-02 16:22:57 +02:00
Sverre Boschman 23728c61c8 chore(k8saudit-gke): add changelog
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-05-02 16:22:57 +02:00
sumgang45 6ec224e29a Missing new line indicator
missing a character here. makes the command fail without

Signed-off-by: sumgang45 <102499046+sumgang45@users.noreply.github.com>
2024-05-02 14:55:56 +02:00
Aldo Lacuku 15e3a94824 fix(ci): do not build tag, but use it as got from git
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-05-02 14:52:57 +02:00
Aldo Lacuku 5008a791de feat(CI): extend compare-rule-files to multiple rule files
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-05-02 14:52:57 +02:00
Aldo Lacuku acd2641a02 fix(ci): correctly fetch repository head
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-24 18:04:25 +02:00
dependabot[bot] 1f2fa778b3 build(deps): bump golang.org/x/net in /plugins/k8saudit-gke
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.20.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.20.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-24 15:57:25 +02:00
Aldo Lacuku e45070ffde fix(release/rules): ignore symlinks when releasing rulesfiles
k8saudit-gke ships a rulesfiles that overrides the k8saudit rules. To make the
CI happy we have a symlink of the original k8saudit rules in k8saudit-gke/rules
directory. This commit filters out the symlinks when releasing the rulesfiles.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-24 14:52:25 +02:00
Aldo Lacuku 83d5b928e5 fix(ci): correctly retrieve plugin version from tag
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-24 14:47:25 +02:00
Aldo Lacuku 9298bcb5f8 update(github): bump version to 0.7.3
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-23 15:55:20 +02:00
Aldo Lacuku e2565ed24b update(gcpaudit): bump version to 0.3.2
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-23 13:00:18 +02:00
dependabot[bot] 80bfc71eb0 build(deps): bump golang.org/x/net in /plugins/gcpaudit
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.17.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-23 10:12:17 +02:00
dependabot[bot] 6f7ef799af build(deps): bump golang.org/x/net in /plugins/github
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.17.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-23 10:11:17 +02:00
dependabot[bot] ee22f2e5cc build(deps): bump golang.org/x/net in /build/registry
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.17.0 to 0.23.0.
- [Commits](https://github.com/golang/net/compare/v0.17.0...v0.23.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-04-23 10:08:18 +02:00
Aldo Lacuku abea0e4cb6 new(CI): add registry.yaml validator
Before adding an entry to the registry.yaml file we check that
the OCI artifact for that entry has been released.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-22 17:23:14 +02:00
Sverre Boschman 4a3da4848d chore(k8saudit): bump version to 0.8.0 to release rule changes
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-04-22 14:31:22 +02:00
Leonardo Grasso bf6e917f09 fix(plugins/gcpaudit/rules): required version
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-04-12 12:30:31 +02:00
Uli Heilmeier fb4eb7a5bd feat(gcpaudit): Add Display attribute for fields
The Falco Bridge plugin of another tool is using the 'Display' value to have a
name for the field. => Adding 'Display' to all fields so that this plugin is usable.

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-04-12 12:30:31 +02:00
Aldo Lacuku 7b26d6e3aa fix(CI): extract info from plugin tag
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-12 12:06:32 +02:00
Aldo Lacuku 3e04dc2cda update(dummy): bump version for ci testing purpose
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-12 11:46:31 +02:00
Aldo Lacuku 225ba6148c update(CI): change release tag format
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-12 11:12:32 +02:00
poiana 155732cfcf docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2024-04-09 15:52:14 +02:00
Grzegorz Nosek 09a006e0d0 update(registry.yaml): register journald plugin
Signed-off-by: Grzegorz Nosek <grzegorz.nosek@sysdig.com>
2024-04-09 15:36:15 +02:00
Aldo Lacuku 42e09c0c1b fix(registry.yaml): add maintainers for k8saudit-gke and k8saudit-eks
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-03 14:47:50 +02:00
Aldo Lacuku 8be5e08630 cleanup: remove registry binary
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-03 13:46:51 +02:00
Aldo Lacuku 90c73b83e6 fix(ci): support release of plugins with same prefix
Cases such k8saudit and k8saudit-gke need special handling
when pushing artifacts.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-03 12:41:50 +02:00
Aldo Lacuku 774b6c6ffd update(docs): update release docs
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-04-02 12:01:44 +02:00
Sverre Boschman 5ab853d403 docs(k8saudit-gke): describe scaling options for high audit log volumes
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-04-02 12:00:45 +02:00
Sverre Boschman ec37c953b3 docs(k8saudit-gke): Explain Pub/Sub setup alternatives
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-28 16:46:16 +01:00
Luca Guerra b0f3f0bf00 chore(plugins): bump dummy plugin version
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-28 15:58:16 +01:00
Leonardo Grasso ba8a0e8389 docs: update default branch to `main`
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-03-28 15:38:16 +01:00
Leonardo Grasso a394acb695 update(.github): rename main workflow file
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-03-28 15:38:16 +01:00
Leonardo Grasso 33c740c36c update(registry.yaml): switch to `main` branch
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-03-28 15:38:16 +01:00
Leonardo Grasso 9f5c9806fc update(build): switch to `main` branch
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-03-28 15:38:16 +01:00
Leonardo Grasso a71cbc2cb5 update(.github): switch to `main` branch
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-03-28 15:38:16 +01:00
Leonardo Grasso 4358dfcde1 docs(README.md): switching to `main` branch
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2024-03-28 15:38:16 +01:00
Aldo Lacuku f37dd7487f chore(github): bump version to 0.7.2
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 12:08:15 +01:00
Aldo Lacuku ee3cd60031 fix(ci): set empty string as a flag when not specified by the ci
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 11:53:15 +01:00
Aldo Lacuku 456f306b17 fix(oci): fix dependencies for publish-oci-artifacts workflow
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 11:36:15 +01:00
Aldo Lacuku 4fafb03bdd chore(dummy): bump version
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 11:28:15 +01:00
Luca Guerra efc5971644 update(ci): update cosign version
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-28 11:06:15 +01:00
Aldo Lacuku e9ad6a671e fix(CI): fix command in oci artifacts
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 10:43:15 +01:00
Aldo Lacuku 6083be8fa2 fix(CI): add suffix input to oci workflow
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 10:00:15 +01:00
Aldo Lacuku 20a0f25b7e new(CI): publish oci artifacts for main branch and releases
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 09:28:16 +01:00
Aldo Lacuku d957f8958a feat(build/registry): drop dependency from s3 bucket for oci artifacts
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-28 09:28:16 +01:00
Sanja Kosier 2ec47c414c bump plugin version
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-03-27 15:06:14 +01:00
Sanja Kosier b0a27351dc fix(plugins/github): add length check in if statement
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2024-03-27 15:06:14 +01:00
Farid Driouch 1523297cc7 Squashing commits
Signed-off-by: Farid Driouch <farid.driouch@employinc.com>

Fix application name extraction issue

Fix application name extraction issue

Signed-off-by: Farid Driouch <farid.driouch@employinc.com>

Updated version number and CHANGELOG
Signed-off-by: Farid Driouch <farid.driouch@employinc.com>
2024-03-26 15:59:12 +01:00
Sverre Boschman 3d7ce9e274 docs: add k8saudit-gke to registry.yaml
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-25 15:00:06 +01:00
dependabot[bot] 5aceeb642e build(deps): bump github.com/docker/docker in /build/registry
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 24.0.7+incompatible to 24.0.9+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v24.0.7...v24.0.9)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-22 13:43:53 +01:00
Uli Heilmeier b31948c140 refactor(cloudtrail): Get S3 keys concurrently
To speed up the process of getting all the keys, divide the inputParams
array into chunks and get the keys for each item in the chunk concurrently.

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-03-15 14:30:27 +01:00
Thomas Labarussias f6775232d6 add Issif as owner of the okta plugin for the PR approvals
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-03-14 14:46:26 +01:00
dependabot[bot] 3924e28c03 build(deps): bump google.golang.org/protobuf in /build/registry
Bumps google.golang.org/protobuf from 1.31.0 to 1.33.0.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-14 12:35:25 +01:00
Luca Guerra 24e9f229e0 update(plugins/k8s_audit): rename more falco_ lists
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-14 12:34:25 +01:00
Luca Guerra 0879a81384 update(plugins/k8s_audit): k8s_* -> k8s_audit_*
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-14 12:34:25 +01:00
Luca Guerra 2f2e62467f update(rules): remove references to k8s.io
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-14 12:34:25 +01:00
dependabot[bot] 2a71ea8605 build(deps): bump google.golang.org/protobuf in /plugins/gcpaudit
Bumps google.golang.org/protobuf from 1.30.0 to 1.33.0.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-14 12:33:25 +01:00
dependabot[bot] 8d3dd24c73 chore(deps): bump google.golang.org/protobuf in /plugins/k8saudit-gke
Bumps google.golang.org/protobuf from 1.32.0 to 1.33.0.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: direct:production
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-14 11:27:25 +01:00
dependabot[bot] 5e2953f873 build(deps): bump google.golang.org/protobuf in /plugins/github
Bumps google.golang.org/protobuf from 1.28.0 to 1.33.0.

---
updated-dependencies:
- dependency-name: google.golang.org/protobuf
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2024-03-14 11:10:24 +01:00
Sverre Boschman 16da99d297 fix(k8saudit-gke): update rules with #431
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman aeaef3a2e7 fix(k8saudit-gke): remove falco stable rules dep
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Luca Guerra 2c4a275766 cleanup(plugins/k8s_audit): make the rulesefile self-referenced
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-14 11:03:24 +01:00
Luca Guerra a99691aa7a cleanup(plugins/gcp_auditlog): lint
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-03-14 11:03:24 +01:00
Sverre Boschman e45db30295 fix(k8saudit-gke): engine version != falco version
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman dc604e1268 chore(k8saudit-gke): remove modern_pbf setting as it is not applicable
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman 451cbb59e6 chore(k8saudit-gke): use same project/subscription example id as readme
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman a13d908da4 docs(k8saudit-gke): fix some errors in the readme
Co-authored-by: Thomas Labarussias <issif+github@gadz.org>
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman 192c79c868 chore(k8saudit-gke): fix copyright header
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman 7aca8fe0ad chore(k8saudit-gke): set required engine version to 0.37
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman f42b948865 chore(k8saudit-gke): add required_plugin_versions to rules
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman b51d7ae65f ci(k8saudit-gke): try symlink to base k8saudit rules
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman 0f850be287 docs(k8saudit-gke): add note about log sink exclusion filters
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman d0312cc491 chore(k8saudit-gke): publish gke specific rule overrides
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman 3292c48761 ci: bump golang to 1.21
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman af1580eeba chore(k8saudit-gke): set officially assigned PluginID
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman ef07168841 chore(k8saudit): add k8saudit-gke as plugin alternative
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman c61b4db83d fix(k8saudit-gke): prefix resourname with a slash to create uri
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Sverre Boschman d91805f13f feat(k8saudit-gke): initial k8saudit-gke plugin code
Signed-off-by: Sverre Boschman <1142569+sboschman@users.noreply.github.com>
2024-03-14 11:03:24 +01:00
Aldo Lacuku 110e6651a5 fix(CI): correctly extract dependencies for alternatives plugins
When running the CI for a plugin which is set as an alternative
in the rules files, it is correctly set as a dependency.

Furthermore, the dependency extraction logic from rulesfiles
has been unified for all the use cases and supports multiple
rulesfiles at once.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-03-13 16:19:22 +01:00
Uli Heilmeier 9920d3558f feat(cloudtrail): support accounts for org trails
Support accounts for organization trails. When open parameter is
's3://bucket_name/prefix_name/AWSLogs/O-ID/' and 'S3AccountList' is not set
get all events for all accounts in the organization CloudTrail bucket.

If 'S3AccountList' is configured get events for the account IDs specified
in the comma separated list.

S3Interval also works for organisation trails.

Fixes: #423

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-03-12 09:15:16 +01:00
Thomas Labarussias ff78f42187 update the versions of falco and falcoctl in the CI
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-03-07 14:50:59 +01:00
Uli Heilmeier 746ea983c7 feat(cloudtrail): Support for organization trails
Add support for organization trail path as documented at
https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-find-log-files.html

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-03-07 11:49:58 +01:00
Andrea Terzolo 256f94cb3f docs: update k8smeta doc
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-02-28 17:00:28 +01:00
Uli Heilmeier 9a1f86a15f feat(cloudtrail): Add generic additionalEventData field
Similar to ct.request, all values should also be available for
additionalEventData.

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-02-23 12:19:08 +01:00
Uli Heilmeier 0e4a68736c feat(cloudtrail): Add ct.response and ct.request field
Adding CloudTrail fields requestParameters as ct.request and responseElements
as ct.response.

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-02-21 16:27:04 +01:00
matteopasa 4b93e5658f fix s3.cnt.other condition
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2024-02-16 15:13:37 +01:00
matteopasa 29fa24d109 remove s3 extract fields
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2024-02-16 15:12:37 +01:00
Uli Heilmeier 6a99500af7 feat: add more Cloudtrail fields
Add more fields as defined at
https://docs.aws.amazon.com/awscloudtrail/latest/userguide/cloudtrail-event-reference-record-contents.html

Signed-off-by: Uli Heilmeier <uh@heilmeier.eu>
2024-02-16 15:10:37 +01:00
Aldo Lacuku 0c21c8a589 update(k8saudit/docs): add k8s configuration files
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-02-16 15:02:38 +01:00
Lorenzo Susini 1212700d7b fix(pkg/oci): trim spaces when handling required_engine_version
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
2024-02-12 11:47:15 +01:00
matteopasa 195752b7b9 Update plugins/cloudtrail/rules/aws_cloudtrail_rules.yaml
Co-authored-by: Jason Dellaluce <jasondellaluce@gmail.com>
Signed-off-by: matteopasa <146732818+matteopasa@users.noreply.github.com>
2024-02-06 10:59:53 +01:00
matteopasa c298b2504e bump cloudtrail plugin version to 0.11.0
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2024-02-06 10:59:53 +01:00
Mike Coleman f57f32e326 fixed formatting errors
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-02-05 15:35:50 +01:00
Mike Coleman 5968c364f3 Update plugins/gcpaudit/walkthrough.md
Co-authored-by: Thomas Labarussias <issif+github@gadz.org>
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-02-05 15:35:50 +01:00
Mike Coleman 0c02e9f48b Update plugins/gcpaudit/walkthrough.md
Co-authored-by: Thomas Labarussias <issif+github@gadz.org>
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-02-05 15:35:50 +01:00
Mike Coleman 93725a3731 Update plugins/gcpaudit/walkthrough.md
Co-authored-by: Thomas Labarussias <issif+github@gadz.org>
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-02-05 15:35:50 +01:00
Mike Coleman e83e4d779f Update plugins/gcpaudit/walkthrough.md
Co-authored-by: Thomas Labarussias <issif+github@gadz.org>
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-02-05 15:35:50 +01:00
Mike Coleman bf5bded38b initial commit of GCP Audit logs walkthrough
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-02-05 15:35:50 +01:00
matteopasa 7a9233d1df add size to s3.bytes
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2024-02-05 11:16:49 +01:00
matteopasa b31e54a0f0 extract from s3 notification message
Signed-off-by: matteopasa <matteo.pasina@sysdig.com>
2024-02-05 11:16:49 +01:00
poiana 980c55493c docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2024-01-29 11:00:28 +01:00
andy 00cc76ffbd Registering Box plugin in registry.yaml
Signed-off-by: andy <127995147+an1245@users.noreply.github.com>
2024-01-29 10:56:27 +01:00
Aldo Lacuku bb67db7e26 update(registry.yaml): update the copyright
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2024-01-26 10:24:18 +01:00
Andrea Terzolo 3a459ef882 tests: bump libs to 0.14.1
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-22 11:04:06 +01:00
Andrea Terzolo 03d563552d chore(k8smeta): bump to 0.1.0
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-22 11:04:06 +01:00
Luca Guerra e1047e145d update(plugins): okta-rules:0.10.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Luca Guerra 03ca9e9518 update(plugins): k8saudit-eks-0.4.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Luca Guerra 9275406585 update(plugins): github-0.7.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Luca Guerra 466eab065a update(plugins): gcpaudit-0.3.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Luca Guerra b3a924863d update(plugins): dummy-0.10.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Luca Guerra 080583cfab update(plugins): cloudtrail-0.10.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Luca Guerra 091c6bb680 update(plugins): k8saudit-0.7.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 17:25:00 +01:00
Lorenzo Susini 192fb5829f update(build): create new engine_version_semver string for new plugin rulesfiles artifact configs
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 11:35:59 +01:00
Luca Guerra b3cd036e35 fix(ci): fix remote tag deletion/skipping
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-19 09:44:59 +01:00
Luca Guerra 0503497165 Revert "update(build): create new engine_version_semver string for new plugin rulesfiles artifact configs"
This reverts commit eaa8fb10b9.

Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-18 17:22:57 +01:00
Luca Guerra 6c0d1bcc3a update(plugins/okta): bump version to 0.10.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-17 17:58:55 +01:00
Luca Guerra 2d1476315e fix(ci): add debug for not semver
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-17 16:23:55 +01:00
Andrea Terzolo 8671386064 fix: move a log after verbosity initialization
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-16 15:28:51 +01:00
Luca Guerra 48c0a0b32b chore(plugins): bump dummy to 0.10.0-rc1
Signed-off-by: Luca Guerra <luca@guerra.sh>
2024-01-16 15:16:52 +01:00
Lorenzo Susini eaa8fb10b9 update(build): create new engine_version_semver string for new plugin rulesfiles artifact configs
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
2024-01-16 15:07:51 +01:00
Thomas Labarussias 612f126219 change the method to detect the truncate
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-01-16 14:43:51 +01:00
Thomas Labarussias 0fb4ee322e add a log line with the auditID of the truncated line
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-01-16 14:43:51 +01:00
Thomas Labarussias 21cd9b9b38 ignore truncated lines to avoid parsing errors
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-01-16 14:43:51 +01:00
lorenzo merici b450d15fb2 Bump json version to 0.7.2
Signed-off-by: lorenzo-merici <lorenzo.merici@sysdig.com>
2024-01-12 11:51:39 +01:00
lorenzo merici f3a617ff51 fix crash on empty json field arg
Signed-off-by: lorenzo-merici <lorenzo.merici@sysdig.com>
2024-01-12 10:29:38 +01:00
Mike Coleman 8fe6a6f409 fixed formatting errors
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-01-11 12:49:38 +01:00
Mike Coleman bc869996c9 general rules clean up
Signed-off-by: Mike Coleman <mikegcoleman@gmail.com>
2024-01-11 12:49:38 +01:00
Thomas Labarussias d41172a321 add refresh_interval parameter
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2024-01-09 11:50:34 +01:00
poiana ed61a322a2 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2024-01-09 10:20:33 +01:00
andy 293a7ede8c Update registry.yaml
Signed-off-by: andy <127995147+an1245@users.noreply.github.com>
2024-01-09 10:07:33 +01:00
andy 31ad3a9a61 Update registry.yaml
Signed-off-by: andy <127995147+an1245@users.noreply.github.com>
2024-01-09 10:07:33 +01:00
Andrea Terzolo 936a819073 docs(k8smeta): update README.md
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-08 12:08:27 +01:00
Andrea Terzolo 91119e92d7 chore(k8smeta): bump libs to 0.14.0
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-08 12:08:27 +01:00
Andrea Terzolo 445079397b fix(k8smeta)!: use `nodeName` instead of `nodename`
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-08 12:08:27 +01:00
Andrea Terzolo 08b6424cc5 cleanup(k8smeta): rename some variables
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-08 12:08:27 +01:00
Andrea Terzolo ac5c8fbf6f update(k8smeta): add a retry log
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-08 12:08:27 +01:00
Andrea Terzolo 93b643c5d3 update(k8smeta): change log verbosity for a log
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2024-01-08 12:08:27 +01:00
poiana 7d049b7ee5 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2023-12-19 09:02:06 +01:00
Andrea Terzolo b58f56095f update(k8smeta): change plugin version to `0.1.0-alpha`
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 17:55:02 +01:00
Andrea Terzolo e49c6cca04 update(registry): add `k8smeta` plugin to the registry
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 17:28:01 +01:00
Andrea Terzolo 1f80134ed7 update(k8smeta): remove a wrong log
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 15:40:01 +01:00
Andrea Terzolo 21eaf331e7 cleanup: fix clang-format issues
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 11:49:00 +01:00
Andrea Terzolo ee4e90e710 cleanup: rename `.id` into `.uid`
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
Co-authored-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2023-12-18 11:49:00 +01:00
Andrea Terzolo e23a1c4457 cleanup(k8smeta): rename `k8sres.*` into `k8smeta.*`
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
Co-authored-by: Melissa Kilby <melissa.kilby.oss@gmail.com>
2023-12-18 11:49:00 +01:00
Andrea Terzolo e994cbd42f new(CI): add a new workflow for `k8smeta` plugin
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 11:49:00 +01:00
Andrea Terzolo 4f883bc7ee chore(CI): adapt CI to build `k8smeta` plugin
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 11:49:00 +01:00
Andrea Terzolo 9b54c04d01 new(plugins): introduce new `k8smeta` plugin
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-18 11:49:00 +01:00
Andrea Terzolo f1e9c79316 chore(CI): use CodeQL autobuild only for golang
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-11 16:59:39 +01:00
Andrea Terzolo 3c98eaa8ac new(ci): add new CI workflow for dummy_c plugin
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-11 16:59:39 +01:00
Andrea Terzolo 08197b7499 style(dummy_c): adapt dummy_c to the new clang-format
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-11 16:59:39 +01:00
Andrea Terzolo b8f27f6b62 new: add a `clang-format` that will be used by cpp plugins
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-11 16:59:39 +01:00
Andrea Terzolo 3a58f91f03 chore(CI): bump Falco and Falcoctl to latest versions
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-11 16:58:39 +01:00
Federico Di Pierro f19d52bd53 new(ci): use actuated arm nodes.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-12-06 15:51:26 +01:00
Andrea Terzolo a287031613 update(version): add the binary to the gitignore
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Andrea Terzolo 3be7bb76b2 fix(version): adapt the go tool to the cpp sdk behavior
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Andrea Terzolo 5611cae344 cleanup: try to uniform the behavior of `dummy` plugins
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Andrea Terzolo ef328a3499 fix: use the correct plugin id for dummy_c
According to the registry the id of dummy_c is `4` not `999`

Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Andrea Terzolo c30586ff77 new(readme): add readme binary to gitignore
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Andrea Terzolo ee0903e296 new(dummy_c): add a rule file for dummy_c
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Andrea Terzolo c4cc4a250f plugins(dummy_c): update dummy_c plugin to use the latest sdk
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-12-05 18:42:25 +01:00
Richard Tweed 028fa19288 feat(plugins/k8saudit/rules) add detection for portforwarding
Signed-off-by: Richard Tweed <RichardoC@users.noreply.github.com>
2023-11-27 18:15:00 +01:00
Jason Dellaluce 042f3f28bf update(plugins/gcpaudit): replace json values with new fields in rules
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-11-15 17:11:16 +01:00
Jason Dellaluce d17ea2d592 chore(plugins/gcpaudit): use new fields in example
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-11-15 17:11:16 +01:00
Jason Dellaluce eff2054cac update(plugins): generate fresh changelogs and readmes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-11-15 17:11:16 +01:00
dependabot[bot] 68467e3213 build(deps): bump github.com/docker/docker in /build/registry
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 24.0.5+incompatible to 24.0.7+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v24.0.5...v24.0.7)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-15 17:10:16 +01:00
dependabot[bot] 87ca5d0e2e build(deps): bump google.golang.org/grpc in /plugins/gcpaudit
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.53.0 to 1.56.3.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.53.0...v1.56.3)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-11-15 17:09:16 +01:00
Luca Guerra 16306f2ff8 update(cloudtrail): bump version to 0.9.1
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-10-30 14:39:56 +01:00
Sanja Kosier 66c77bebf5 fix(plugins/cloudtrail): remove wrong return statement when extracting recipientAccountId
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-10-30 09:51:55 +01:00
poiana 5445aa1fb8 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2023-10-13 14:21:49 +02:00
Leonardo Grasso 79795f288e update(build/registry): ID max limit and handle 0 special case
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-10-13 14:17:50 +02:00
Leonardo Grasso 48b6b75881 update(registry.yaml): add special case for source id=0
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-10-13 14:17:50 +02:00
Leonardo Grasso 7d54bfaa20 docs: spec and blocks for plugin IDs
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-10-13 14:17:50 +02:00
Saad Javed 3a7f1b1920 fix(plugins/github): add a check that before and after commit IDs aren't null and fix some typos
Signed-off-by: saadjaved <saadjaved3@yahoo.com>
2023-10-13 11:46:49 +02:00
dependabot[bot] 81ccd91dfa build(deps): bump golang.org/x/net in /plugins/github
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.7.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.7.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 15:18:46 +02:00
dependabot[bot] c588b06431 build(deps): bump golang.org/x/net in /plugins/gcpaudit
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.8.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.8.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 11:57:46 +02:00
dependabot[bot] e86bb5f07a build(deps): bump golang.org/x/net in /build/registry
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.14.0 to 0.17.0.
- [Commits](https://github.com/golang/net/compare/v0.14.0...v0.17.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-10-12 11:56:46 +02:00
Leonardo Grasso 0bac0be282 docs(plugins/gcpauidit): add license headers
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-10-11 18:14:45 +02:00
Leonardo Grasso 34ab875e20 docs: add SPDX license identifier
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-10-11 18:14:45 +02:00
Thomas Labarussias 2605da1c3f update k8saudit-eks readme to explain how to deploy in EKS
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2023-09-22 14:38:49 +02:00
lorenzo-merici 9e0afdb008 update gcp plugin version to 0.2.2
Signed-off-by: lorenzo-merici <lorenzo.merici@sysdig.com>
2023-09-21 17:21:47 +02:00
lorenzo-merici 2fd8cf9882 fix conversion error for empty zone
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-21 17:07:48 +02:00
Federico Di Pierro 69618af916 update(plugins): bump to-be-released plugin versions.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-09-20 16:57:44 +02:00
lorenzo-merici b68b2d353e update gcp version to 0.2.1
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-20 13:01:44 +02:00
Luca Guerra 95a98f26a7 update(registry): add signature info for all official plugins
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-20 12:02:44 +02:00
lorenzo-merici 60ac2672e3 add missing string conversions
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-20 12:00:44 +02:00
Luca Guerra ecb1d6f016 update(registry): enforce signature for k8saudit
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-20 11:30:44 +02:00
Luca Guerra ff6dd19ccd new(registry): add signature for gcpaudit
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-19 18:52:33 +02:00
Massimiliano Giovagnoli 166e0c0194 deps: bump falcoctl to v0.6.1
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-09-19 18:20:34 +02:00
Massimiliano Giovagnoli 40910f1418 test(pkg/distribution): add initial index entry signature unit test
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-09-19 18:20:34 +02:00
Massimiliano Giovagnoli f00e485078 test(pkg/distribution): add initial index-update black box unit tests
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-09-19 18:20:34 +02:00
Massimiliano Giovagnoli a4b8b8bc09 feat(pkg/distribution): generate index with signature from registry model
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-09-19 18:20:34 +02:00
Massimiliano Giovagnoli 4145f48fd5 feat(pkg/registry): add index entry signature to registry model
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-09-19 18:20:34 +02:00
maxgio92 af1e0685fd disable release.yml trigger
Signed-off-by: maxgio92 <me@maxgio.it>
2023-09-19 18:20:34 +02:00
Jason Dellaluce cb72c55996 update(plugins/gcpaudit): bump version to 0.2.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-09-19 17:36:34 +02:00
Luca Guerra 4298ca0939 cleanup(build): remove sign older plugins
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-19 17:31:33 +02:00
Federico Di Pierro b274350962 fix(plugins/gcpaudit): check open params.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-09-19 15:38:33 +02:00
Luca Guerra 1684fe6dac update(build): temporarily add a job to sign older plugins
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-19 15:31:33 +02:00
lorenzo-merici 573df5af9d Revert "add scaffold for unit testing"
This reverts commit b7bb2f1ada.
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-19 12:44:32 +02:00
lorenzo-merici ce0ef95d43 Add missing string conversions
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-19 12:44:32 +02:00
lorenzo-merici 3f859d80f6 add scaffold for unit testing
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-19 12:44:32 +02:00
lorenzo-merici af20dc663d add nil checks for optional fields
Signed-off-by: Lorenzo Merici <lorenzo.merici@sysdig.com>
2023-09-19 12:44:32 +02:00
Luca Guerra 5688145300 fix(build): skip non-semver tags during oci publishing
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-19 11:38:32 +02:00
Luca Guerra 8c6083244e update(plugins/dummy): update version to 0.10.0-rc1
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-18 17:21:48 +02:00
Luca Guerra a9a97aac38 fix(build): fix empty REGISTRY_UPDATE_STATUS
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-18 15:01:48 +02:00
Luca Guerra dc3891f695 update(gcpaudit): bump version to 0.1.3
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-15 18:25:33 +02:00
Luca Guerra 0906cb2ca2 fix(build): add permissions for push step
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-14 15:44:27 +02:00
Luca Guerra d48d801e1e update(build): update to falcoctl 0.6.0
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-14 15:21:27 +02:00
Gerald Combs 3156ed577d fix(plugins/cloudtrail): Generate the correct interval values
Use the correct format for generating start and stop times.

Signed-off-by: Gerald Combs <gerald@zing.org>
2023-09-14 14:24:43 +02:00
Luca Guerra 373756e29f fix(build): do not halt the build on missing rules repository
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-14 14:23:43 +02:00
Luca Guerra 0c7ac73d01 fix(gha): catch registry update errors during OCI updates
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-09-14 10:31:43 +02:00
Sanja Kosier 01209e3e95 feat(plugins/gcp): extract more gcp fields
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-09-12 18:58:36 +02:00
Jason Dellaluce 54e75bf30a fix(plugins/gcpaudit): properly import gcpaudit package
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-09-12 16:56:35 +02:00
Leonardo Grasso 61926b66f4 fix(plugins/gcpaudit) correct module name
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-09-12 15:43:35 +02:00
Andrea Terzolo 7e5a4a7de4 new(dummy): add an example rule for the dummy plugin
Signed-off-by: Andrea Terzolo <andreaterzolo3@gmail.com>
2023-09-08 17:25:03 +02:00
Leonardo Grasso 14ae3c9083 build: bump plugin-sdk-go to v0.7.3
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-08-30 18:43:26 +02:00
Jason Dellaluce 61b877e573 fix(ci): solve vcs stamping issue when building during validation
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-30 11:06:25 +02:00
Jason Dellaluce 7590e96535 fix(ci): solve validation workflow issues
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 20:31:22 +02:00
Jason Dellaluce f135dd290c fix(ci): validate in container to satisfy glibc requirements
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 18:54:21 +02:00
Jason Dellaluce 7ee9d9f6d7 fix(ci): solve bash failure when validating released plugin
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 18:12:21 +02:00
Jason Dellaluce 317cdef57b fix(ci): load plugins when comparing rulesets
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 17:59:22 +02:00
Jason Dellaluce 916fb57e1b fix(ci): make rules suggestion checks use built plugins
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 17:59:22 +02:00
Jason Dellaluce c7bc1e9b06 chore(plugins): update readmes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 17:25:22 +02:00
Jason Dellaluce 440c2349a5 fix(plugins): adopt cgocheck=1 in debug mode
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 17:25:22 +02:00
Jason Dellaluce 1dc527245d fix(ci): solve bash issues
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 38c559264d fix(ci): bump get-changed-files action
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce fdcae28c54 fix(ci): copy temp rules file during rules checks
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 1119a0da90 chore: trigger CI validations
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 8d52dcb975 refactor(ci): use GHA outputs instead of env
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce abb77e6ea6 fix(ci): use locally-built plugin when falcoctl fails during validation
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 1e04b36d8b refactor(ci): isolate plugin latest version retrieval logic
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 151f995ceb chore(plugins/gcpaudit): trigger CI validation
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 46a7d96817 fix(ci): built temp required plugins in release validation workflow
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce bf00275da7 chore(ci): increase package build concurrency
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Jason Dellaluce 5df7fad902 refactor(ci): further modularize validation workflows
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 16:44:22 +02:00
Federico Di Pierro cdbcf9c9d2 chore: bump codeql actions to v2.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-08-29 14:49:23 +02:00
Federico Di Pierro 25d74e4293 chore: bumped build/registry go to 1.21.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-08-29 14:49:23 +02:00
Federico Di Pierro 742eebc171 chore(build/registry): updated go deps.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-08-29 14:49:23 +02:00
Jason Dellaluce c5e0c28582 chore(plugins/gcpaudit): minor improvements
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 10:35:21 +02:00
Jason Dellaluce 30526f311b refactor(plugins/gcpaudit): improve error reporting
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 10:35:21 +02:00
Jason Dellaluce 57e0881b7b refactor(plugins/gcpaudit): shorten receivers var name
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 10:35:21 +02:00
Jason Dellaluce c019a02fb5 refactor(plugins/gcpaudit): polish init config and open params
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-08-29 10:35:21 +02:00
poiana 647ffca95d docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2023-08-10 11:23:42 +02:00
Thomas Labarussias 0f1a1fa5f2 add Issif as approvers for k8saudit-eks plugin
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2023-08-10 11:22:42 +02:00
m.nabokikh dc289d1f2c Add syslogsrv plugin
Signed-off-by: m.nabokikh <maksim.nabokikh@flant.com>
2023-08-10 11:19:42 +02:00
Jason Dellaluce f68b75dec1 fix(ci): solve issues with docker
see: https://github.com/moby/buildkit/pull/4043
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-21 09:40:44 +02:00
poiana db20118cac docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2023-07-20 19:04:42 +02:00
Jason Dellaluce 9e06fd77a3 update(plugins/gcpaudit): remove warnings from rules
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-20 13:46:41 +02:00
Jason Dellaluce faa95d21f3 fix(ci): solve CI failures
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-20 13:46:41 +02:00
Jason Dellaluce 779b746f13 chore(plugins/gcpaudit): rename ruleset for consistency
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-20 13:46:41 +02:00
Jason Dellaluce e3a86691f3 update(plugins/gcpaudit): assign ID and add to registry
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-20 13:46:41 +02:00
Jason Dellaluce 5cc2855007 update(plugins/gcp): add ahmedameenaim to approvers
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-20 13:46:41 +02:00
Jason Dellaluce c7d49d7ddb refactor(plugins/gcpaudit): rename gcp plugin to gcpaudit
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-20 13:46:41 +02:00
ahmedameenaim 86d6d04f21 Contributing GCP plugin
Signed-off-by: ahmedameenaim <run_2005_2005@yahoo.com>
2023-07-20 13:46:41 +02:00
Gerald Combs 5bbc3102bd update(plugins/cloudtrail): Make our default interval ""
Make our default interval "" (which fetches all logs) instead of "24h".

Signed-off-by: Gerald Combs <gerald@wireshark.org>
2023-07-17 10:45:22 +02:00
Gerald Combs 431bcf8fc6 update(plugins/cloudtrail): Remove a dependency
Remove our dependency on str2duration. Fix our interval regex.

Signed-off-by: Gerald Combs <gerald@wireshark.org>
2023-07-17 10:45:22 +02:00
Gerald Combs ef52d3cd87 update(plugins/cloudtrail): Fix a time comparison
Time.Compare was added in go 1.20.

Signed-off-by: Gerald Combs <gerald@wireshark.org>
2023-07-17 10:45:22 +02:00
Gerald Combs c02b076d1a update(plugins/cloudtrail): Add an S3Interval option
Add an "S3Interval" option, which limits log downloads to the specified
time interval. Intervals can be a simple "relative time in the past to
now", "an absolute timestamp until now", or a range of those two
formats.

The interval is applied at the far end using the StartAfter parameter
and locally to filter log pathnames. In my informal testing here the
time from capture start to first event is ~2s.

Signed-off-by: Gerald Combs <gerald@wireshark.org>
2023-07-17 10:45:22 +02:00
Gerald Combs 4b1156b6eb update(plugins/cloudtrail): Add dependencies to our Makefile
Signed-off-by: Gerald Combs <gerald@wireshark.org>
2023-07-17 10:45:22 +02:00
Massimiliano Giovagnoli 513968f2c4 chore(.github/workflows/upload-oci-artifacts): remove print
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Luca Guerra 0fbe6b5f96 remove error for empty matrix
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-07-10 15:50:58 +02:00
Luca Guerra 2db7ad3a02 login to ghcr before signing
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli 42978359b1 ci: create and publish artifact signatures with cosign
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli afe4b8adbd refactor(build/registry): add support for context with options
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli 91dcd05e9e chore(build/registry): add license headers
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli c8f1c854e3 ci(upload-oci-artifacts): print registry update status
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli 2c4b8f1a4f refactor(build/registry): delegate presentation to command
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli 1b0727d715 test(build/registry): add push metadata printing unit tests
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli 57190f5eca refactor(build/registry/pkg/registry): add push metadata list type
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Massimiliano Giovagnoli 433f2355c2 new(build/registry): add support for oci artifact metadata
Signed-off-by: Massimiliano Giovagnoli <me@maxgio.it>
2023-07-10 15:50:58 +02:00
Jason Dellaluce cced3065a4 chore(plugins): trigger sample CI checks
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce ecb7c7009e chore(ci): point to mainline falcosecurity/rules
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce 313d5208ff update(ci): add jon for rules version suggestions
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce 5042e29dec fix(ci): solve validation workflow issues
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce e979b8950c update(ci): integrate plugins and rules validatin in ci, master, and release workflows
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce 5da95b5b11 fix(ci): handle concurrency in codeql job
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce f3d98daf71 new(ci): add reusable worflow for validating plugins and their rules
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce 9de9c5469f new(ci): add reusable worflow for building the rules validation tool
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Jason Dellaluce bb8b28a6ce new(ci): add reusable worflow for getting changed plugins
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-07-05 17:48:32 +02:00
Gerald Combs 9a0ec0d3bf update(plugins/cloudtrail): Increase our default S3 concurrency
Change the default value of S3DownloadConcurrency from 1 to 32. This
improves performance noticeably here.

Signed-off-by: Gerald Combs <gerald@zing.org>
2023-06-29 12:19:00 +02:00
Leonardo Grasso 8eeb48bb0c docs(README.md): add scope and status badges
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-06-06 16:59:40 +02:00
Jason Dellaluce 5aea6027a9 update(ci/release.yaml): setup per-plugin release concurrency
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-06-05 12:14:32 +02:00
Jason Dellaluce c750c22f0d update(ci/release.yaml): avoid cancelling concurrent release jobs
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-06-05 11:49:33 +02:00
Jason Dellaluce 96800110f5 fix(ci/release.yaml): fix release version check on publish
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-06-05 11:36:33 +02:00
Jason Dellaluce 81ffddd1e0 update(plugins): bump to-be-released plugin versions
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-05-25 10:15:10 +02:00
Luca Guerra 9166d80f35 update(plugins): bump plugin-go-sdk to v0.7.1
Signed-off-by: Luca Guerra <luca@guerra.sh>
2023-05-24 23:10:08 +02:00
Sanja Kosier 753a91296c Revert "fix(plugins/github): fix type field extraction"
This reverts commit 409260abd6.

Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-05-24 11:44:06 +02:00
Thomas Labarussias d9f98762e5 add keywords for k8saudit-plugin
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2023-05-23 11:40:34 +02:00
Aldo Lacuku d7f15553e5 fix(registry/index): do not add artifact name to keywords if already present
The artifact name is added to the list of keywords when generating the index.yaml
file. It could happen that the list of keywords in registry.yaml already contains
the artifact name. This fix checks if the artifact name is contained in the keywords,
if not adds it.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-05-22 17:22:32 +02:00
poiana beef76c966 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2023-05-19 12:01:05 +02:00
Daniel Moloney 7b07a4b766 add dnscollector plugin
Signed-off-by: Daniel Moloney <daniel.moloney@sysdig.com>
2023-05-19 10:22:04 +02:00
Jason Dellaluce de7700514d update(plugins): re-bump sdk go to latest dev version
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-05-19 10:14:04 +02:00
Jason Dellaluce 852cf3cb3e chore(.gitignore): ignore dummy_c files
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-05-19 10:14:04 +02:00
Jason Dellaluce bec21471b6 update(plugins): bump sdk go to latest dev version
This just involves the plugins pulled-in by Falco to allow a dev build of
Falco to be successfully merged in mailine. Also acts as an experiment for the
new plugin API major version compliance.

Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-05-18 15:00:04 +02:00
Federico Di Pierro f5fba8fb65 new(ci): ported to use reusable workflows.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-05-11 10:55:15 +02:00
Federico Di Pierro 2ef269374b fix(ci): fix arm64 master and release ci push step.
Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-05-10 17:37:11 +02:00
Tim Schwenke 0c6922e3fc feat(plugins/k8saudit): include query params in health check endpoint exceptions
Fixes #241.

Signed-off-by: Tim Schwenke <tim@trallnag.com>
2023-05-10 14:35:10 +02:00
Roberto Scolaro 16df8169af fix(dummy_c): alligned with the dummy go version
Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
2023-05-10 14:34:11 +02:00
Roberto Scolaro f23c702552 update: dummy_c with new api
Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
2023-05-10 14:34:11 +02:00
Sanja Kosier 044d7d3e5d fix(plugins/github): fix small typo
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-05-10 14:26:10 +02:00
Sanja Kosier 4c220355a7 feat(plugins/github): add github tag to all rules in ruleset file
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-05-10 14:26:10 +02:00
Sanja Kosier 409260abd6 fix(plugins/github): fix type field extraction
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-05-10 14:25:10 +02:00
Federico Di Pierro 8f4323e605 fix(ci): properly use golang:1.18 image, that was the image used before, with the correct glibc version.
Moreover, fixed CI artifacts versioning.

Signed-off-by: Federico Di Pierro <nierro92@gmail.com>
2023-05-10 14:20:10 +02:00
Gerald Combs 9f362901d4 update(plugins/cloudtrail): Avoid duplicate event info
If ct.user and ct.srcip are the same, just add ct.user to the event info
string so that we return

    cloudtrail.amazonaws.com ← GetBucketAcl

instead of

    cloudtrail.amazonaws.com via cloudtrail.amazonaws.com ← GetBucketAcl

Signed-off-by: Gerald Combs <gerald@zing.org>
2023-04-26 09:19:13 +02:00
Roberto Scolaro e716f812fb chore(docs): more clear params
Signed-off-by: Roberto Scolaro <roberto.scolaro21@gmail.com>
2023-04-24 17:12:59 +02:00
cappellinsamuele 0d0c0c6ccf chore(release.md): updated CI documentation.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-21 16:07:40 +02:00
cappellinsamuele dd938891cc fix(ci): fixed quemu setup
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-21 15:05:39 +02:00
cappellinsamuele 5ea7304d02 fix(ci): added permissions for S3 upload and volume mount on qemu.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-21 15:05:39 +02:00
cappellinsamuele 3672d6cffd fix(ci): fixed branch name release pipeline.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-20 18:32:38 +02:00
cappellinsamuele 9321f8a0ab chore(plugins/dummy/pkg/dummy/dummy.go): bump dummy plugin version to test release gha.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-20 18:30:38 +02:00
cappellinsamuele 98189dde8f fix(ci): fixed semver matching release gha.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 22:32:32 +02:00
cappellinsamuele d249e47232 cleanup(ci): removed update_registry gha
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 14:27:30 +02:00
cappellinsamuele def0ed87e2 chore(ci): improved regex semver and cleanup
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 14:27:30 +02:00
cappellinsamuele 1bfc0f156a cleanup(ci): simplifications and refactoring
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 14:27:30 +02:00
cappellinsamuele 28c14e1398 fix(ci): jobs for x86 and arm64 builds.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 14:27:30 +02:00
cappellinsamuele 873b351474 new(ci): builds for arm64 via qemu.
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 14:27:30 +02:00
cappellinsamuele e83f1787bf new(ci): add release and registry pipelines
Signed-off-by: cappellinsamuele <cappellinsamuele@gmail.com>
2023-04-18 14:27:30 +02:00
Aldo Lacuku dc1e87e919 fix(plugins/github): fix ruleset dependencies
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-04-13 10:19:01 +02:00
Aldo Lacuku 3bac29625b fix(plugins/cloudtrail): fix ruleset dependencies
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-04-13 10:19:01 +02:00
Aldo Lacuku 89496553aa fix(plugins/k8saudit): fix dependencies in ruleset
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-04-13 10:19:01 +02:00
Aldo Lacuku 79d6f671d1 update(plugin-versions): bump plugins and rules versions
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-04-12 15:37:10 +02:00
Aldo Lacuku 6f965df721 fix(oci/CI): set arm architecture as "arm64" in manifests files
Use "arm64" as architecture for plugins build for the arm platform instead of "aarch64".

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-04-12 15:23:10 +02:00
Sanja Kosier c15abf98c0 fix(plugins/okta): return nil if field not present
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-07 11:23:01 +02:00
Sanja Kosier 1248d0235c fix(plugins/okta): adjust mappings in actor.id and client.zone
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-07 10:48:01 +02:00
Sanja Kosier edb96f4233 feature(plugins/okta): add published timestamp field
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-06 10:59:57 +02:00
Sanja Kosier b7cf5f27a4 check if list is empty
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-05 14:24:55 +02:00
Sanja Kosier 151b1dfab0 use ecr.imagetag instead ecr.image.tag
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-05 14:24:55 +02:00
Sanja Kosier 0c07efc25c feature(plugins/cloudtrail): add fields to plugin
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-05 14:24:55 +02:00
dependabot[bot] c2b4e9b33e build(deps): bump github.com/docker/docker in /build/registry
Bumps [github.com/docker/docker](https://github.com/docker/docker) from 20.10.18+incompatible to 20.10.24+incompatible.
- [Release notes](https://github.com/docker/docker/releases)
- [Commits](https://github.com/docker/docker/compare/v20.10.18...v20.10.24)

---
updated-dependencies:
- dependency-name: github.com/docker/docker
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-04-05 08:59:54 +02:00
Mukul Kolpe fef39f8a57 fix: Typo in README.md
Signed-off-by: Mukul Kolpe <mukulkolpe45@gmail.com>
2023-04-04 17:53:53 +02:00
Sanja Kosier 501f3511dc fix(plugins/cloudtrail): if accountId not present in userIdentity, set it to value of recipientAccountId
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-04-04 17:47:53 +02:00
Paolo Polidori 5a2b8ec0b8 fix(plugins/okta): typo on okta.target.{user,group}.alternateid
Signed-off-by: Paolo Polidori <polyp91@gmail.com>
2023-03-30 17:21:33 +02:00
Aldo Lacuku db416af610 update(oci/CI): fetch tags using checkout action
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-03-30 16:33:33 +02:00
Jason Dellaluce 3609efcba2 docs(plugins): generate changelogs
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-03-29 19:43:31 +02:00
Jason Dellaluce 6e35f16b2a update(plugins): bump plugins versions
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-03-29 19:43:31 +02:00
Jason Dellaluce 8ddaea1424 update(plugins): bump plugin-sdk-go to v0.6.2
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-03-29 19:43:31 +02:00
Sanja Kosier 60997d666e feature(plugins/okta): make api token and organization field optional
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-03-28 15:38:30 +02:00
Sanja Kosier e4334df8e2 feature(plugins/okta): add okta.org as available field
Signed-off-by: Sanja Kosier <sanja.kosier@sysdig.com>
2023-03-28 15:32:29 +02:00
dependabot[bot] 904f750ada build(deps): bump golang.org/x/net in /build/registry
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.2.0 to 0.7.0.
- [Release notes](https://github.com/golang/net/releases)
- [Commits](https://github.com/golang/net/compare/v0.2.0...v0.7.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-26 08:32:41 +01:00
dependabot[bot] f1bd3b4e22 build(deps): bump golang.org/x/net in /plugins/github
Bumps [golang.org/x/net](https://github.com/golang/net) from 0.0.0-20220524220425-1d687d428aca to 0.7.0.
- [Release notes](https://github.com/golang/net/releases)
- [Commits](https://github.com/golang/net/commits/v0.7.0)

---
updated-dependencies:
- dependency-name: golang.org/x/net
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-25 21:00:49 +01:00
cpanato 03daaf8e43 update k8s registry domain
Signed-off-by: cpanato <ctadeu@gmail.com>
2023-02-23 14:52:38 +01:00
dependabot[bot] 861547c3f4 build(deps): bump github.com/emicklei/go-restful in /build/registry
Bumps [github.com/emicklei/go-restful](https://github.com/emicklei/go-restful) from 2.9.5+incompatible to 2.16.0+incompatible.
- [Release notes](https://github.com/emicklei/go-restful/releases)
- [Changelog](https://github.com/emicklei/go-restful/blob/v3/CHANGES.md)
- [Commits](https://github.com/emicklei/go-restful/compare/v2.9.5...v2.16.0)

---
updated-dependencies:
- dependency-name: github.com/emicklei/go-restful
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
2023-02-09 18:09:31 +01:00
Jason Dellaluce f17b974954 fix(build/registry): add plugin name as a keyword in index
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2023-02-01 12:17:09 +01:00
Aldo Lacuku 254cd1888d chore(registry/oci): bump falcoctl package to v0.3.0-rc2
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-26 17:40:44 +01:00
Leonardo Grasso 428a961de4 docs(release.md): update the release process
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-01-20 12:33:06 +01:00
Leonardo Grasso 8afe420032 build(build/registry): bump falcoctl
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2023-01-20 11:54:06 +01:00
Tim Schwenke f5ebfb2432 chore: Add eks:addon-manager as well
Signed-off-by: Tim Schwenke <tim@trallnag.com>
2023-01-19 11:01:46 +01:00
Tim Schwenke 8ce5b5b3c9 feature(plugins/k8saudit/rules): Add two additional users to eks_allowed_k8s_users
Signed-off-by: Tim Schwenke <tim@trallnag.com>
2023-01-19 11:01:46 +01:00
Aldo Lacuku 3c22642e0d update(plugins/dummy): bump version to 8.0 for testing purpose
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-17 18:00:24 +01:00
Aldo Lacuku 9e623ef48b update(plugins/k8saudit): bump plugin version to v0.5.0
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-17 11:34:23 +01:00
Aldo Lacuku 972cca0b3d update(plugin/github): bump plugin version to v0.5.0
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-17 11:34:23 +01:00
Aldo Lacuku 3c6009b840 update(plugins/cloudtrail): bump plugin version to v0.7.0
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-17 11:34:23 +01:00
Tim Schwenke a2989d11d3 fix(plugin/k8saudit): Add missing comma
Signed-off-by: Tim Schwenke <tim@trallnag.com>
2023-01-16 18:11:22 +01:00
Aldo Lacuku 60341c125b update(ci/registry): temporary disable cron job for registry ci
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-16 12:18:20 +01:00
Tim Schwenke e9a1ef4e5c docs(plugins/k8saudit-eks): document required aws iam permissions
Signed-off-by: Tim Schwenke <tim@trallnag.com>
2023-01-16 10:24:19 +01:00
Aldo Lacuku dc16239560 update(build/registry): do not set the engine_version in semver format in the config file
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-13 17:59:56 +01:00
Aldo Lacuku 9a5d083333 update(rules/k8saudit): bump required_plugins_versions for k8saudit rules
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-10 18:30:45 +01:00
Aldo Lacuku 0b6e12b5b9 update(rules/github): bump required_plugins_versions for github rules
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-10 18:30:45 +01:00
Aldo Lacuku 8984655edb update(rules/cloudtrail): bump required_plugins_versions for cloudtrail rules
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-10 18:30:45 +01:00
Gerald Combs 505a3088d9 update(plugins/cloudtrail): More friendly error messages
Try to construct error messages from smithy.APIError and
smithy.OperationError, which gives us access to human-readable strings.

Signed-off-by: Gerald Combs <gerald@zing.org>
2023-01-05 11:04:20 +01:00
Aldo Lacuku 5e179806c2 update(build/registry): remove cgo code when extracting required api version from plugins
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-05 10:55:21 +01:00
Aldo Lacuku 2d3bb5af0c feat(build/registry): add config layer to artifacts when pushing to registry
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2023-01-04 11:49:15 +01:00
Aldo Lacuku 7cd58efb5c chore(build/registry): introduce common package to avoid import cycles
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-23 15:26:06 +01:00
Aldo Lacuku cf1d70aefe fix(build/registry): enforce to one the number of rulesfiles for a given version
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-21 17:47:02 +01:00
Aldo Lacuku d9078d9549 fix(ci/registry): push tags for artifacts in correct order
The order of the tags affects how the registries' UI shows the info
about an artifact.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-21 14:31:02 +01:00
Aldo Lacuku b4187bd860 update(build/registry): use latest falcoctl module
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-21 12:19:02 +01:00
Aldo Lacuku ae7034bf79 chore(build/registry): move oci and distribution packages to pkg folder
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 16:38:12 +01:00
Aldo Lacuku af0398a830 cleanup(build/registry): drop deprecated ioutil package in favor of os package
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 16:19:12 +01:00
Aldo Lacuku 633ae6316a refactor(build/registry): move table command from main package to table package
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 16:19:12 +01:00
Aldo Lacuku 4d8bdcd5d9 refactor(build/registry): move file table.go to pkg/table/table.go
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 16:19:12 +01:00
Aldo Lacuku 5d15643c46 refactor(build/registry): move check logic from main package to check package
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 15:41:12 +01:00
Aldo Lacuku 9beae0e205 refactor(build/registry): move index logic from main package to distribution package
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 14:56:12 +01:00
Aldo Lacuku b62034966d refactor(ci/build): make LoadRegistryFromFile function reusable across commands
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 14:09:12 +01:00
Aldo Lacuku 5508466475 chore(.gitignore): add .idea folder to .gitignore file
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 11:47:11 +01:00
Aldo Lacuku a3ac49fc7a chore(ci/cleanup): remove dead code from oci package
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-20 11:47:11 +01:00
Aldo Lacuku b0d797c068 fix(build/registry): do not error when no archives are found in s3 bucket
It could happen that for a given local tag in the git repo there is not a release.
We just log a warning and keep going with the other plugins.

Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-16 11:57:23 +01:00
Aldo Lacuku e6fa58588a fix(CI): fetch all tags befor pushing artifact to OCI repo
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-16 11:57:23 +01:00
Aldo Lacuku dd4e46c309 update(build/registry): use as source of truth for plugins and rulesfile registry.yaml
The CI parses the registry.yaml file and for each entry:
  * Plugins: checks if the plugin entry has already been pushed to the
    OCI registry. If found, retrieves the latest version otherwise
    do nothing. It checks if there have been released new versions
    of the plugin by checking the release tags in the local git repo.
    If yes, it searches and downloads the new released versions from
    the s3 bucket and pushes them to the OCI repo.
  * Rules: since the rules doe not have an entry in the registry.yaml
    file it checks if the plugins has a rulesfile url. If yes does the
    same thing as for the plugins but for the rulesfile associated to
    the plugin entry.

Furthermore, it adds the floating tags based on the major and minor number
of the semver for each artifact.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-16 09:55:23 +01:00
Aldo Lacuku f1b4aba5cf refactor(build/registry): move oci logic to a new package named oci
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-12-16 09:55:23 +01:00
poiana b5d6c8d91f docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2022-11-15 10:48:29 +01:00
Alberto Llamas 12563619e9 Register nomad plugin
Signed-off-by: Alberto Llamas <albertollamaso@gmail.com>
2022-11-15 09:32:28 +01:00
Jason Dellaluce 0809a56b54 fix(plugins/k8saudit): prevent panics while shutting down webserver
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-11 15:49:11 +01:00
AleksVAnd e306efbe0a Apply suggestions from code review
Co-authored-by: Jason Dellaluce <jasondellaluce@gmail.com>
Signed-off-by: AleksVAnd <58687337+AleksVAnd@users.noreply.github.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov a818875967 added the sort standard library and fixed the results slice to use an io.Reader{} interface
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov 02ad67064b changes after feedback
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov c339cc2723 fixed the single file logic
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov 337246a367 added custom struct and io.MultiReader
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov cdd782177d pruned unnecessary code
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov a47f56a969 forgot to add the filepath package
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov 5fdfe6b57a trim + construct the filepath and open before passing to the event stream
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Aleksandar V. Andonov 27982f3142 differentiate between single file and directory
Signed-off-by: Aleksandar V. Andonov <aleksv.andonov@protonmail.com>
2022-11-07 19:05:25 +01:00
Jason Dellaluce 9bd0bdfb8f update(README.md): support dash in plugin name regex
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce 38659d5a99 fix(build/utils): support plugin names with dash and same prefix
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce 36573a79df chore(plugins): generate changelogs
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce 3ae54162b4 fix(build/changelog): support plugin names with same prefix
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce 797e0cf7cc chore(plugins): generate readmes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce f4dcac294e update(plugins/k8saudit): bump version to 0.4.1 for patched ruleset
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce c83fb72b94 update(plugins/k8saudit): update ruleset to support k8saudit-eks alternative officially
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Jason Dellaluce fa60639f2d update(plugins/k8saudit-eks): point k8saudit dependency to latest stable tag
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-11-04 12:03:23 +01:00
Loris Degioanni e59c8043d9 refine the GitHub miner detection rule
Signed-off-by: Loris Degioanni <loris@sysdig.com>
2022-10-21 22:53:59 +02:00
Loris Degioanni fad7e88fab detect more miners + miner rule simplification
Signed-off-by: Loris Degioanni <loris@sysdig.com>
2022-10-21 17:31:18 +02:00
Loris Degioanni e5b0d282e3 initial implementation of miners in github actions
Signed-off-by: Loris Degioanni <loris@sysdig.com>
2022-10-21 17:31:18 +02:00
poiana 7e3173053b docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2022-10-21 16:16:18 +02:00
Luca Guerra c349be6e84 update(registry): update registry.yaml
Signed-off-by: Luca Guerra <luca@guerra.sh>
2022-10-18 19:26:37 +02:00
Aldo Lacuku bfc808d4b6 fix(oci-registry): correctly set repo value for plugin artifacts
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 19:16:36 +02:00
poiana c8b21d5149 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2022-10-18 19:12:37 +02:00
Lorenzo Susini 42d27f06cb chore: little modification to dummy_c description to test prow CI
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
2022-10-18 19:01:37 +02:00
Aldo Lacuku 6592a40033 fix(workflows): correctly set the cron job timer
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 15:57:02 +02:00
Aldo Lacuku d6e122b0b4 update(ci): add cron time to test the ci
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 15:04:02 +02:00
Aldo Lacuku 4d78bd18bc fix(registry): ignore reserved plugins in registry.yaml file
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 15:04:02 +02:00
Aldo Lacuku 3fd743be32 update(registry): change namespaces for plugin and ruleset artifacts
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 15:04:02 +02:00
Lorenzo Susini 851a8fa8d0 update: temporarily remove cron job when uploading OCI artifacts
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
2022-10-18 12:44:02 +02:00
Aldo Lacuku d0191ae2fe fix(ci): fix registry username to reflect the one of the organization
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 11:46:01 +02:00
Aldo Lacuku 1f87174dfb chore(ci): cleanup github actions workflow
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 11:28:01 +02:00
Lorenzo Susini d62fcaef89 update(ci): update github action with latest changes
Co-authored-by: Aldo Lacuku <aldo@lacuku.eu>
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
2022-10-18 11:28:01 +02:00
Aldo Lacuku 900eeb7538 feature(build/registry): check if oci artifacts exist while updating index.yaml
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 11:28:01 +02:00
Aldo Lacuku a797342ce7 refactor(oci-tool): move oci logic under the registry binary
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-18 11:28:01 +02:00
Jason Dellaluce 87bcb982b6 update(plugins): generate changelog
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-17 11:28:13 +02:00
Jason Dellaluce 73fec1eb27 update(changelog-gen.sh): discard -rc tags
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-17 11:28:13 +02:00
Aldo Lacuku 8f1a599ad3 fix(oci-tool/output): porperly populate the map entries when reading from file
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-13 12:30:17 +02:00
Aldo Lacuku f1279a077b new(build/oci): save to file the artifacts present in the OCI registry
The output file containes all the artifacts(rulefiles and plugins) that
are present in the remote registry. Usefuf for external tools that wants
to keep track of the packages.

Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-13 10:38:17 +02:00
Aldo Lacuku 379e7c89dc chore(build/oci): add .gitignore for the oci tool
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-13 10:38:17 +02:00
Aldo Lacuku 14c82d088c new(oci): add missing pieces for the oci tool
Co-authored-by: Lorenzo Susini <susinilorenzo1@gmail.com>
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-10-13 10:38:17 +02:00
Lorenzo Susini 7cec719d03 new(oci-CI): introducing oci tool
Signed-off-by: Lorenzo Susini <susinilorenzo1@gmail.com>
2022-10-13 10:38:17 +02:00
Jason Dellaluce 4ea1faf151 update(plugins/okta): update readme
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce 543a65791f update(plugins/okta): bump plugin version to v0.5.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce f4315ffaa6 update(plugins/k8saudit): bump plugin version to v0.4.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce cb30978528 update(plugins/json): bump plugin version to v0.6.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce 96547228a9 update(plugins/github): bump plugin version to v0.4.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce 2e161d7a0c update(plugins/dummy): bump plugin version to v0.7.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce 0571948fef update(plugins/cloudtrail): bump plugin version to v0.6.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce 028b3bd438 update(plugins): bump plugin-sdk-go to v0.6.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Jason Dellaluce 7305d23b60 update(build): bump plugin-sdk-go to v0.6.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-10-12 20:39:16 +02:00
Thomas Labarussias 88d4e51fda update lib for cloudwatch
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-10-12 10:17:21 +02:00
Gerald Combs 1db4264964 update(plugins/cloudtrail): Add a region setting.
Add a "region" configuration option which lets the user specify an AWS
region.

The jsonschema module was truncating descriptions with commas, so remove
them for now.

Signed-off-by: Gerald Combs <gerald@zing.org>
2022-10-04 22:51:18 +02:00
Thomas Labarussias de127d261d use the dedicated function for iteration over pages
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-10-04 22:34:18 +02:00
Thomas Labarussias 388aa72bf1 update gitignore to follow new name
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Thomas Labarussias 2929152fc2 change to dash for k8saudit-eks name
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Thomas Labarussias 39a2db9032 remove renamed folders
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Thomas Labarussias f3d2aa6fe8 update registry.yaml + respect naming convention
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Thomas Labarussias de0f7f2421 reserve the ID for k8saudit-eks
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Thomas Labarussias ff8045286a remove /rules folder
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Thomas Labarussias da3de1533d update github.com/falcosecurity/plugins/plugins/k8saudit dep to 0.3.0
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Issif d6f938a380 creation of a plugin for k8saudit logs of EKS clusters from Cloudwatch Logs
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-27 10:28:59 +02:00
Leonardo Grasso e47f23ba62 fix(okta): correct version (release candidate)
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-26 18:36:56 +02:00
Thomas Labarussias 7aa76d0278 add new fields with count of failed and denied MFA requests
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-09-26 15:29:55 +02:00
poiana 7b86e9d904 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2022-09-22 15:30:37 +02:00
Jason Dellaluce b9866951a3 refactor(plugins/cloudtrail): isolate AWS sdk config code logic
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-22 15:06:37 +02:00
Jason Dellaluce fa8e9571e5 chore(plugins/cloudtrail): use oop method declarations
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-22 15:06:37 +02:00
Jason Dellaluce 4df7a0583d update(plugins/cloudtrail): use custom sdk config files and profiles
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-22 15:06:37 +02:00
Jason Dellaluce 3032fd1fb8 update(plugins/cloudtrail): add aws client config overrides
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-22 15:06:37 +02:00
Jason Dellaluce 0306830ec8 update(plugins/cloudtraill): remove aws sdk v1 dependency
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-22 15:06:37 +02:00
Jason Dellaluce 8fc454f202 chore(registry.yaml): trigger the CI
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-22 12:23:57 +02:00
Aldo Lacuku c0729b4a00 chore(registry.yaml): triggering the CI
Signed-off-by: Aldo Lacuku <aldo@lacuku.eu>
2022-09-22 09:31:38 +02:00
Jason Dellaluce bfbd0ee697 chore(registry.yaml): triggering the CI
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-21 20:19:36 +02:00
Leonardo Grasso 7fb07f0503 build: split name and source regex
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 18:20:36 +02:00
Leonardo Grasso 2317cba3e2 docs(README.md): update metadata constraints
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 18:20:36 +02:00
Jason Dellaluce 56ec19fc5e chore(registry.yaml): dummy in upper case
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-21 16:37:35 +02:00
Leonardo Grasso 3f0233e442 chore(registry.yaml): dummy change just to trigger the CI
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 14:09:35 +02:00
poiana 7a22c28221 docs(README.md): update plugin registry table
Signed-off-by: poiana <51138685+poiana@users.noreply.github.com>
2022-09-21 14:05:35 +02:00
Leonardo Grasso cfee5bebc0 build(Makefile): add `update-index` target
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 12:33:34 +02:00
Leonardo Grasso 62275cd202 build: cmd to update a distribution index
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 12:33:34 +02:00
Leonardo Grasso 9fde818b11 update: extending registry.yaml with new metadata
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 12:33:34 +02:00
Leonardo Grasso 79e01784d2 update(build/registry): extend Plugin type
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-21 12:33:34 +02:00
Leonardo Grasso da5b4373d9 build: do not include README.md in packages
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-20 19:30:31 +02:00
Leonardo Grasso 256c669e33 docs(k8saudit): update README.md
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-20 19:16:30 +02:00
Hi120ki 41cd0f03c3 add containerd.sock to sensitive_vol_mount
Signed-off-by: Hi120ki <12624257+hi120ki@users.noreply.github.com>
2022-09-15 10:30:29 +02:00
Hi120ki 8efcec33df add ka.sourceips
Signed-off-by: Hi120ki <12624257+hi120ki@users.noreply.github.com>
2022-09-13 12:26:20 +02:00
Jason Dellaluce 6c38f20df2 update(plugins/json): bumo plugin version to 0.6.0-rc1
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-07 11:45:03 +02:00
Jason Dellaluce 3a6b9ec447 update(plugins/cloudtrail): bumo plugin version to 0.6.0-rc1
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-07 11:45:03 +02:00
Jason Dellaluce 3ff5e94c46 update(plugins/k8saudit): bumo plugin version to 0.4.0-rc1
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-09-07 11:45:03 +02:00
Leonardo Grasso a0fd4d57ee chore: bump plugin-sdk-go v0.6.0-rc2 (plugin API v2)
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-09-07 10:33:03 +02:00
Jason Dellaluce 9f3a5e0e39 chore(plugins/github): update readme
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-31 10:30:42 +02:00
Frank Jogeleit 84f30619bc feature(plugins/k8saudit/rules): Add ka.target.resource to each rule as default output
Signed-off-by: Frank Jogeleit <frank.jogeleit@lovoo.com>
2022-08-26 12:32:18 +02:00
Issif c23dc2a465 add shared libs for AWS Session + Cloudwatch
Signed-off-by: Thomas Labarussias <issif+github@gadz.org>
2022-08-24 13:57:09 +02:00
Adnan Kobir a0050c3441 fix: only init s3 once
Signed-off-by: Adnan Kobir <adnan.kobir@gmail.com>
2022-08-23 19:05:07 +02:00
adnankobir 9b0f15f13d feat: parse SNS originating from S3 (#1)
* feat: parse SNS originating from S3

* refactor: use s3Event struct

* chore: tidy

* docs: add useS3SNS details

Signed-off-by: Adnan Kobir <adnan.kobir@gmail.com>
2022-08-23 19:05:07 +02:00
Jason Dellaluce 4b1872c821 update(plugins): generate rea
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Jason Dellaluce 2d807a228f update(build/readme): add field arg info in tables
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Jason Dellaluce 6c9fd11571 update(plugins): generate readmes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Jason Dellaluce 550b3c378e update(plugins): add readme entry in makefiles
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Jason Dellaluce a2bebef6c5 update(makefile): edit readme everytime after building plugins
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Jason Dellaluce d142131538 update(plugins): add generator tags in readmes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Jason Dellaluce b0d25aa312 new(build): add a tool for plugin readme generation
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-22 13:00:59 +02:00
Gerald Combs 453d1ae479 update(plugins): Add titles and default values.
Add title and default values to the config schema properties for each
plugin.

Signed-off-by: Gerald Combs <gerald@zing.org>
2022-08-22 12:57:00 +02:00
Leonardo Grasso a3734f1527 docs(best-practices): update URL
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-08-19 18:55:49 +02:00
Jason Dellaluce 97329e4b1c update(makefile): support parallel makes
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce 7c1d7ce462 update(plugins/dummy_c): fix target dependencies
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce f6c48e3e32 update(plugins/okta): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce f90c4f68a7 update(plugins/k8saudit): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce 51f7376ef7 update(plugins/json): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce 0b7468a0dd update(plugins/github): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce 33a7768f7f update(plugins/dummy_c): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce fb20ebef0c update(plugins/dummy): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Jason Dellaluce fe2defae1b update(plugins/cloudtrail): fix makefile cleanup
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-08-12 10:21:26 +02:00
Leonardo Grasso fd296e843f update(OWNERS): move inactive maintainers to emeritus
Signed-off-by: Leonardo Grasso <me@leonardograsso.com>
2022-07-18 16:51:02 +02:00
Jason Dellaluce 1bf3df4c5c update(plugin/github): bump version to 0.3.1
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-07-18 14:19:00 +02:00
Jason Dellaluce cf809fa98d fix(plugins/github): correctly parse git diffs
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-07-18 14:19:00 +02:00
Jason Dellaluce 4c84fdfb7a update(plugins/dummy): update changelog
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 17:03:04 +02:00
Jason Dellaluce 3092c791d5 docs(plugins): generate changelogs
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:55:04 +02:00
Jason Dellaluce b1706e8a46 update(build/changelog): improve decoration of changelog lines
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:55:04 +02:00
Jason Dellaluce 7719df35bc update(makefile): add make option to generate changelogs
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:55:04 +02:00
Jason Dellaluce 2deef26de8 new(Makefile): add script for generating whole changelog for plugins
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:55:04 +02:00
Jason Dellaluce 5baab92bcd new(build/changelog): add tool to generate plugin changelogs from git history
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:55:04 +02:00
Jason Dellaluce ae6e3edb46 docs(plugins/dummy): update readme according to new plugin version
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:50:04 +02:00
Jason Dellaluce 95633975d1 update(plugins/dummy): bump plugin version to 0.6.0
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:50:04 +02:00
Jason Dellaluce aa9a20d504 refactor(plugins/dummy): modify plugin open parameters for modern SDK approaches
Signed-off-by: Jason Dellaluce <jasondellaluce@gmail.com>
2022-06-28 16:50:04 +02:00
434 changed files with 47482 additions and 1784 deletions

16
.clang-format Normal file
View File

@ -0,0 +1,16 @@
---
Language: Cpp
BasedOnStyle: LLVM
AccessModifierOffset: -8
BreakBeforeBraces: Allman
BreakConstructorInitializers: AfterColon
ColumnLimit: 80
ConstructorInitializerIndentWidth: 8
ContinuationIndentWidth: 8
DerivePointerAlignment: true
IndentWidth: 4
SortIncludes: Never
SpaceAfterTemplateKeyword: false
SpaceBeforeCtorInitializerColon: false
SpaceBeforeParens: Never
UseTab: Never

View File

@ -1,6 +1,6 @@
<!-- Thanks for sending a pull request! Here are some tips for you:
1. If this is your first time, please read our contributor guidelines in the [CONTRIBUTING.md](https://github.com/falcosecurity/.github/blob/master/CONTRIBUTING.md) file and learn how to compile Falco from source [here](https://falco.org/docs/source).
1. If this is your first time, please read our contributor guidelines in the [CONTRIBUTING.md](https://github.com/falcosecurity/.github/blob/main/CONTRIBUTING.md) file and learn how to compile Falco from source [here](https://falco.org/docs/source).
2. Please label this pull request according to what type of issue you are addressing.
3. Please add a release note!
4. If the PR is unfinished while opening it specify a wip in the title before the actual title, for example, "wip: my awesome feature"

67
.github/compare-rule-files.sh vendored Executable file
View File

@ -0,0 +1,67 @@
#!/bin/bash
RULES_DIR=$1
CONFIG_FILE=$2
PLUGIN_NAME=$3
RESULT_FILE=$4
CHECKER_TOOL=$5
FALCO_DOCKER_IMAGE=$6
LATEST_TAG=$7
set -e pipefail
rm -f $RESULT_FILE
touch $RESULT_FILE
extra_flags=""
loaded_plugins="$(cat $CONFIG_FILE | grep 'library_path: ' | cut -d ':' -f 2 | xargs)"
for plugin_lib in $loaded_plugins; do
extra_flags="${extra_flags} -f /usr/share/falco/plugins/${plugin_lib}"
done
cur_branch=`git rev-parse HEAD`
echo Current branch is \"$cur_branch\"
echo Checking version for rules file in dir \"$RULES_DIR\"...
# Get the rules files and save them.
# We sort the rules files but first we remove the file extension.
rules_files=$(ls ${RULES_DIR}/* | while read -r line; do echo "${line%.yaml}"; done | sort)
# Add the extension to the files.
# Append the .yaml extension back to the sorted strings
rules_files=$(echo "${rules_files}" | sed 's/$/.yaml/')
echo Rule files found: ${rules_files}
# We save the current rules files before going back to the previous
# version.
prefix="tmp-"
for rules_file in ${rules_files}; do
new_file="${prefix}$(basename "$rules_file")"
echo "Copying rules file ${rules_file} to temporary file ${new_file}"
cp "$rules_file" "$new_file"
tmp_rules+=" $new_file"
done
git checkout tags/$LATEST_TAG
chmod +x $CHECKER_TOOL
$CHECKER_TOOL \
compare \
--falco-image=$FALCO_DOCKER_IMAGE \
-c $CONFIG_FILE \
-l ${rules_files} \
-r ${tmp_rules} \
${extra_flags} \
1>tmp_res.txt
git switch --detach $cur_branch
echo '##' $(basename $RULES_DIR) >> $RESULT_FILE
echo Comparing \`$cur_branch\` with latest tag \`$LATEST_TAG\` >> $RESULT_FILE
echo "" >> $RESULT_FILE
if [ -s tmp_res.txt ]
then
cat tmp_res.txt >> $RESULT_FILE
else
echo "No changes detected" >> $RESULT_FILE
fi
echo "" >> $RESULT_FILE
rm -f ${tmp_rules}
rm -f tmp_res.txt

35
.github/dependabot.yml vendored Normal file
View File

@ -0,0 +1,35 @@
version: 2
updates:
- package-ecosystem: gomod
directories:
- ./build/*
- ./plugins/*
- ./shared/go/*/*
schedule:
interval: "weekly"
open-pull-requests-limit: 10
groups:
gomod:
update-types:
- "patch"
- package-ecosystem: cargo
directories:
- /plugins/*
schedule:
interval: "weekly"
open-pull-requests-limit: 10
groups:
cargo:
update-types:
- "minor"
- "patch"
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "weekly"
open-pull-requests-limit: 10
groups:
actions:
update-types:
- "minor"
- "patch"

View File

@ -0,0 +1,77 @@
#!/bin/bash
set -o errexit
set -o nounset
set -o pipefail
# Plugins for which we need to check if there exist as alternative plugin.
# If so, then we set them as a dependency. This is a must for rulesfiles
# that have multiple plugins that satisfy their requirements and the plugin we are
# checking is an alternative.
# It accepts a single value or coma separated values.
PLUGINS=$1
filtered_entries=()
# Extract plugins requirement from all files and save in a local file.
# Combine the sections from multiple files and save the output to file.
yq eval-all --no-doc '.[].required_plugin_versions | select(. != null and . != "")' ${@:2} > combined_requirements.yaml
# Remove duplicates from the top level.
yq eval-all --inplace 'unique_by(.name)' combined_requirements.yaml
#echo $(cat combined_requirements.yaml)
for YAML_FILE in "combined_requirements.yaml"; do
#echo "Processing file $YAML_FILE"
# Get the length of the entries list
length=$(yq eval '. | length' "$YAML_FILE")
# Iterate over each index in the entries list
for ((i = 0; i < length; i++)); do
# Access the entry by index using yq
entry=$(yq eval '.['"$i"']' "$YAML_FILE")
# Extract name and version from the entry
name=$(echo "$entry" | yq eval '.name' -)
version=$(echo "$entry" | yq eval '.version' -)
# If a plugin we are considering exists as an alternative of another one, then we just skip.
# This case could happen when we are processing multiple files and one of them overrides the
# plugin since it has some specific rules for that plugin.
to_be_skipped=false
for alternative in $(yq eval '.[].alternatives[].name' combined_requirements.yaml);do
if [[ "$alternative" == "$name" ]]; then
to_be_skipped=true
break
fi
done
if [ "$to_be_skipped" = true ];then
#echo "skipping plugin ${name} because already an alternative"
continue
fi
# Check if alternatives exist
alternatives=$(echo "$entry" | yq eval '.alternatives[]?')
if [ -n "$alternatives" ]; then
is_alternative=false
# Get the length of the alternatives list
alt_length=$(echo "$entry" | yq eval '.alternatives | length' -)
# Iterate over each alternative
for ((j = 0; j < alt_length; j++)); do
alt_entry=$(echo "$entry" | yq eval '.alternatives['"$j"']?' -)
alt_name=$(echo "$alt_entry" | yq eval '.name' -)
alt_version=$(echo "$alt_entry" | yq eval '.version' -)
# If our plugin is set as an alternative then we use it as a dependency.
if [[ " ${PLUGINS//,/ } " =~ " $alt_name " ]]; then
#echo "Preferring alternative plugin ${alt_name} over ${name}"
is_alternative=true
name=$alt_name
version=$alt_version
break
fi
done
fi
filtered_entries+=("$name:$version")
done
done
# Output the filtered entries
printf "%s\n" "${filtered_entries[@]}"

26
.github/get-latest-plugin-version.sh vendored Executable file
View File

@ -0,0 +1,26 @@
#!/bin/bash
PLUGIN=$1
set +e pipefail
echo Searching tag with prefix prefix \"${PLUGIN}-\"...
git fetch --tags origin
latest_tag=`git describe --match="${PLUGIN}-[0-9]*" --match="plugins/${PLUGIN}/v*" --abbrev=0 --tags`
set -e pipefail
latest_ver="0.0.0"
if [ -z "$latest_tag" ]
then
echo Not previous tag has been found
else
echo Most recent tag found is \"$latest_tag\"
if [[ "${latest_tag}" == "plugins/${PLUGIN}"* ]]; then
latest_ver="${latest_tag##*/v}"
else
latest_ver="${latest_tag##*-}"
fi
fi
echo Setting plugin version for "${PLUGIN}" to $latest_ver
echo "version=$latest_ver" >> $GITHUB_OUTPUT
echo "ref=${latest_tag}" >> $GITHUB_OUTPUT

39
.github/setup-plugin-config-rules.sh vendored Executable file
View File

@ -0,0 +1,39 @@
#!/bin/bash
PLUGIN=$1
# set expected paths for plugins' config and rules files
rules_dir="$GITHUB_WORKSPACE/plugins/${PLUGIN}/rules"
config_file="$GITHUB_WORKSPACE/plugins/${PLUGIN}/falco.yaml"
# set paths into step outputs
echo "rules_dir=${rules_dir}" >> "$GITHUB_OUTPUT"
echo "config_file=${config_file}" >> "$GITHUB_OUTPUT"
# craft a default falco.yaml if no custom one is available
if [ ! -f "$config_file" ]; then
# we assume that the current plugin is always a dependency
deps="$PLUGIN"
# we collect all plugin dependencies across all plugin rulesets
# todo(jasondellaluce): find a way to avoid ignoring alternatives
if [ -d "$rules_dir" ]; then
rules_files=$(ls $rules_dir/*)
echo Extracting plugin dependencies from rules file "${rules_files}"...
rules_deps=$($GITHUB_WORKSPACE/.github/extract-plugins-deps-from-rulesfile.sh $PLUGIN $rules_files)
echo "${rules_deps}"
fi
mkdir -p $(echo $config_file | sed 's:[^/]*$::')
touch $config_file
echo "plugins:" >> $config_file
for dep in $rules_deps; do
dep=$(echo $dep | tr -d '"' | cut -d ':' -f 1)
echo " - name: ${dep}" >> $config_file
echo " library_path: lib${dep}.so" >> $config_file
done
fi
echo Using config file "${config_file}"
cat ${config_file}
echo ""

22
.github/validate-rules.sh vendored Executable file
View File

@ -0,0 +1,22 @@
#!/bin/bash
falco_image=$1
checker_tool=$2
config_file=$3
rules_files=$4
# craft rules validation command
validation_flags=""
for rules_file in $rules_files; do
validation_flags="${validation_flags} -r ${rules_file}"
done
# append plugin files to validation command
configured_plugins="$(cat $config_file | grep 'library_path: ' | cut -d ':' -f 2 | xargs)"
for plugin_lib in $configured_plugins; do
validation_flags="${validation_flags} -f /usr/share/falco/plugins/${plugin_lib}"
done
chmod +x $checker_tool
echo $checker_tool validate -c $config_file $validation_flags
$checker_tool validate --falco-image=$falco_image -c $config_file $validation_flags

67
.github/workflows/ci.yaml vendored Normal file
View File

@ -0,0 +1,67 @@
name: Build Plugins PR
on:
pull_request:
branches: [main]
# Checks if any concurrent jobs under the same pull request or branch are being executed
# NOTE: this will cancel every workflow that is being ran against a PR as group is just the github ref (without the workflow name)
concurrency:
group: ci-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build-plugins:
uses: ./.github/workflows/reusable_build_packages.yaml
with:
makecommand: make packages -j4
suffix: ${{ github.event.number }}
secrets: inherit
get-changed-plugins:
uses: ./.github/workflows/reusable_get_changed_plugins.yaml
build-rules-tool:
needs: [get-changed-plugins]
if: needs.get-changed-plugins.outputs.changed-plugins != '[]' && needs.get-changed-plugins.outputs.changed-plugins != ''
uses: ./.github/workflows/reusable_build_rules_tool.yaml
with:
output: rules-checker
repository: falcosecurity/rules
validate-plugins:
needs: [build-plugins, get-changed-plugins, build-rules-tool]
if: needs.get-changed-plugins.outputs.changed-plugins != '[]' && needs.get-changed-plugins.outputs.changed-plugins != ''
strategy:
fail-fast: false
matrix:
plugin: ${{ fromJson(needs.get-changed-plugins.outputs.changed-plugins) }}
uses: ./.github/workflows/reusable_validate_plugins.yaml
with:
plugin: ${{ matrix.plugin }}
falcoctl-version: 0.11.0
falco-image: falcosecurity/falco:0.40.0
plugins-artifact: plugins-x86_64-${{ github.event.number }}.tar.gz
rules-checker: ./rules-checker
arch: x86_64
suggest-rules-version:
needs: [build-plugins, get-changed-plugins, build-rules-tool]
if: needs.get-changed-plugins.outputs.changed-plugins != '[]' && needs.get-changed-plugins.outputs.changed-plugins != ''
strategy:
fail-fast: false
matrix:
plugin: ${{ fromJson(needs.get-changed-plugins.outputs.changed-plugins) }}
uses: ./.github/workflows/reusable_suggest_rules_version.yaml
with:
plugin: ${{ matrix.plugin }}
falco-image: falcosecurity/falco:0.40.0
plugins-artifact: plugins-x86_64-${{ github.event.number }}.tar.gz
rules-checker: ./rules-checker
arch: x86_64
job-index: ${{ strategy.job-index }}
upload-pr-info:
needs: [suggest-rules-version]
if: needs.get-changed-plugins.outputs.changed-plugins != '[]' && needs.get-changed-plugins.outputs.changed-plugins != ''
uses: ./.github/workflows/reusable_upload_pr_info.yaml

View File

@ -9,17 +9,23 @@
# the `language` matrix defined below to confirm you have the correct set of
# supported CodeQL languages.
#
name: "CodeQL"
name: "Golang CodeQL"
on:
push:
branches: [ master ]
branches: [ main ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ master ]
branches: [ main ]
schedule:
- cron: '28 11 * * 2'
# Checks if any concurrent jobs under the same pull request or branch are being executed
# NOTE: this will cancel every workflow that is being ran against a PR as group is just the github ref (without the workflow name)
concurrency:
group: codeql-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
analyze:
name: Analyze
@ -31,25 +37,23 @@ jobs:
strategy:
fail-fast: false
matrix:
language: [ 'cpp', 'go' ]
# CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python' ]
# Learn more:
# https://docs.github.com/en/free-pro-team@latest/github/finding-security-vulnerabilities-and-errors-in-your-code/configuring-code-scanning#changing-the-languages-that-are-analyzed
steps:
- name: Checkout repository
uses: actions/checkout@v2
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Setup Go
uses: actions/setup-go@v2
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: 1.17.8
go-version: 1.21
# Initializes the CodeQL tools for scanning.
- name: Initialize CodeQL
uses: github/codeql-action/init@v1
uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
with:
languages: ${{ matrix.language }}
languages: go
# If you wish to specify custom queries, you can do so here or in a config file.
# By default, queries listed here will override any specified in a config file.
# Prefix the list here with "+" to use these queries and those in the config file.
@ -58,7 +62,7 @@ jobs:
# Autobuild attempts to build any compiled languages (C/C++, C#, or Java).
# If this step fails, then you should remove it and run the build manually (see below)
- name: Autobuild
uses: github/codeql-action/autobuild@v1
uses: github/codeql-action/autobuild@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
# Command-line programs to run using the OS shell.
# 📚 https://git.io/JvXDl
@ -72,4 +76,4 @@ jobs:
# make release
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v1
uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4

171
.github/workflows/container-ci.yaml vendored Normal file
View File

@ -0,0 +1,171 @@
name: Build and test container plugin
on:
pull_request:
branches: [ main ]
paths:
- 'plugins/container/**'
push:
branches: [ main ]
paths:
- 'plugins/container/**'
workflow_dispatch:
jobs:
build-others:
strategy:
fail-fast: false
matrix:
os: [ windows-latest, macos-latest ]
include:
- os: windows-latest
artifact-name: 'libcontainer-win'
artifact-path: 'plugins/container/container.dll'
- os: macos-latest
artifact-name: 'libcontainer-osx'
artifact-path: 'plugins/container/libcontainer.dylib'
runs-on: ${{ matrix.os }}
steps:
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
submodules: 'recursive'
- name: Setup Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version-file: plugins/container/go-worker/go.mod
cache-dependency-path: plugins/container/go-worker/go.sum
- name: Build plugin library
working-directory: plugins/container
run: make
- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: ${{ matrix.artifact-name }}
path: ${{ matrix.artifact-path }}
build-linux:
name: build-linux-${{ matrix.arch }}
runs-on: ${{ (matrix.arch == 'arm64' && 'ubuntu-22.04-arm') || 'ubuntu-22.04' }}
strategy:
fail-fast: false
matrix:
arch: [ amd64, arm64 ]
container: golang:1.23-bullseye
steps:
- name: Install plugin deps
run: apt-get update && apt-get install -y --no-install-recommends zip unzip ninja-build
- name: Install updated cmake version ⛓️
run: |
curl -L -o /tmp/cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.31.4/cmake-3.31.4-linux-$(uname -m).tar.gz
gzip -d /tmp/cmake.tar.gz
tar -xpf /tmp/cmake.tar --directory=/tmp
cp -R /tmp/cmake-3.31.4-linux-$(uname -m)/* /usr
rm -rf /tmp/cmake-3.31.4-linux-$(uname -m)
- name: Checkout
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
submodules: 'recursive'
- name: Safe directory
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Build plugin library
working-directory: plugins/container
run: make
- name: Upload artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: libcontainer-${{ matrix.arch }}
path: 'plugins/container/libcontainer.so'
test:
name: test-${{ matrix.arch }}
needs: [build-linux]
runs-on: ${{ (matrix.arch == 'arm64' && 'ubuntu-24.04-arm') || 'ubuntu-24.04' }}
strategy:
fail-fast: false
matrix:
arch: [ amd64, arm64 ]
steps:
# libbtrfs: needed by podman package - build dep.
- name: Install go test deps
run: sudo apt-get install -y --no-install-recommends libbtrfs-dev
- name: Checkout repo
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
submodules: 'recursive'
- name: Setup Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version-file: plugins/container/go-worker/go.mod
cache-dependency-path: plugins/container/go-worker/go.sum
- name: Build go-worker executable
working-directory: plugins/container
run: make -C go-worker exe
- name: Run tests
working-directory: plugins/container
run: |
systemctl --user start podman
make test
falco-tests:
needs: [build-linux]
name: falco-tests-${{ matrix.arch }}
runs-on: ${{ (matrix.arch == 'arm64' && 'ubuntu-22.04-arm') || 'ubuntu-22.04' }}
strategy:
fail-fast: false
matrix:
arch: [ amd64, arm64 ]
container:
image: falcosecurity/falco:master-debian
steps:
- name: Download library
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: libcontainer-${{ matrix.arch }}
path: /usr/share/falco/plugins/
- name: Run falcosecurity/testing Falco tests
uses: falcosecurity/testing@main
with:
test-falco: 'true'
test-falcoctl: 'false'
test-k8saudit: 'false'
test-dummy: 'false'
static: 'false'
test-drivers: 'false'
show-all: 'true'
sudo: ''
libs-tests:
needs: [build-linux]
uses: falcosecurity/libs/.github/workflows/reusable_e2e_tests.yaml@master
with:
container_plugin_artifact_name: 'libcontainer-amd64'
secrets: inherit
formatting-check:
runs-on: ubuntu-24.04
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run clang-format style check
uses: jidicula/clang-format-action@4726374d1aa3c6aecf132e5197e498979588ebc8 #v4.15.0
with:
clang-format-version: '18'
check-path: plugins/container
exclude-regex: 'plugin_config_schema.h'

54
.github/workflows/create-comment.yaml vendored Normal file
View File

@ -0,0 +1,54 @@
# NOTE: This has read-write repo token and access to secrets, so this must
# not run any untrusted code.
# see: https://securitylab.github.com/research/github-actions-preventing-pwn-requests/
name: Comment on the pull request
on:
workflow_run:
workflows: ["Build Plugins PR"]
types:
- completed
jobs:
upload:
runs-on: ubuntu-latest
if: github.event.workflow_run.event == 'pull_request'
steps:
- name: 'Download artifact'
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
var artifacts = await github.rest.actions.listWorkflowRunArtifacts({
owner: context.repo.owner,
repo: context.repo.repo,
run_id: ${{github.event.workflow_run.id }},
});
var matchArtifact = artifacts.data.artifacts.filter((artifact) => {
return artifact.name == "pr"
})[0];
var download = await github.rest.actions.downloadArtifact({
owner: context.repo.owner,
repo: context.repo.repo,
artifact_id: matchArtifact.id,
archive_format: 'zip',
});
var fs = require('fs');
fs.writeFileSync('${{github.workspace}}/pr.zip', Buffer.from(download.data));
- name: 'Unpack artifact'
run: unzip pr.zip
- name: 'Comment on PR'
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
github-token: ${{ secrets.GITHUB_TOKEN }}
script: |
var fs = require('fs');
var issue_number = Number(fs.readFileSync('./NR'));
var comment_body = fs.readFileSync('./COMMENT');
await github.rest.issues.createComment({
owner: context.repo.owner,
repo: context.repo.repo,
issue_number: issue_number,
body: comment_body.toString('utf8')
});

56
.github/workflows/dummy_c-ci.yaml vendored Normal file
View File

@ -0,0 +1,56 @@
name: Build dummy_c plugin
on:
pull_request:
branches: [ main ]
paths:
- 'plugins/dummy_c/**'
push:
branches: [ main ]
paths:
- 'plugins/dummy_c/**'
workflow_dispatch:
# Checks if any concurrent jobs under the same pull request or branch are being executed
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build:
name: build
runs-on: ubuntu-22.04
steps:
- name: Checkout ⤵️
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Install deps ⛓️
run: |
sudo apt update -y
sudo apt install -y --no-install-recommends build-essential
- name: Initialize CodeQL
uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
with:
languages: cpp
- name: Build dummy_c plugin 🏗️
run: |
cd plugins/dummy_c
make libdummy_c.so
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
formatting-check:
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run clang-format style check
uses: jidicula/clang-format-action@4726374d1aa3c6aecf132e5197e498979588ebc8 #v4.15.0
with:
clang-format-version: '14'
check-path: plugins/dummy_c

72
.github/workflows/k8smeta-ci.yaml vendored Normal file
View File

@ -0,0 +1,72 @@
name: Build K8smeta plugin
on:
pull_request:
branches: [ main ]
paths:
- 'plugins/k8smeta/**'
push:
branches: [ main ]
paths:
- 'plugins/k8smeta/**'
workflow_dispatch:
# Checks if any concurrent jobs under the same pull request or branch are being executed
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
build-and-test:
name: build-and-test
runs-on: ubuntu-22.04
steps:
- name: Checkout ⤵️
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: '1.21'
check-latest: true
- name: Install deps ⛓️
run: |
sudo apt update -y
sudo apt install -y --no-install-recommends cmake build-essential autoconf libtool pkg-config
- name: Initialize CodeQL
uses: github/codeql-action/init@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
with:
languages: cpp
- name: Build k8s meta plugin 🏗️
run: |
cd plugins/k8smeta
mkdir build
cd build && cmake -DCMAKE_BUILD_TYPE=Release ../
make k8smeta -j6
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@4e828ff8d448a8a6e532957b1811f387a63867e8 # v3.29.4
- name: Build and run tests 🏎️
run: |
cd plugins/k8smeta/build
make build-server
make build-tests
make run-server &
make run-tests
formatting-check:
runs-on: ubuntu-22.04
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Run clang-format style check
uses: jidicula/clang-format-action@4726374d1aa3c6aecf132e5197e498979588ebc8 #v4.15.0
with:
clang-format-version: '14'
check-path: plugins/k8smeta

61
.github/workflows/main.yaml vendored Normal file
View File

@ -0,0 +1,61 @@
name: Update Plugins-dev
on:
push:
branches: [ main ]
workflow_dispatch:
# Checks if any concurrent jobs is already being executed for main and cancel it.
concurrency:
group: ci-main
cancel-in-progress: true
jobs:
build-plugins-dev:
uses: falcosecurity/plugins/.github/workflows/reusable_build_packages.yaml@main
with:
makecommand: make packages -j4
suffix: dev
secrets: inherit
get-changed-plugins:
uses: ./.github/workflows/reusable_get_changed_plugins.yaml
build-rules-tool:
needs: [get-changed-plugins]
if: needs.get-changed-plugins.outputs.changed-plugins != '[]' && needs.get-changed-plugins.outputs.changed-plugins != ''
uses: ./.github/workflows/reusable_build_rules_tool.yaml
with:
output: rules-checker
repository: falcosecurity/rules
validate-plugins:
needs: [build-plugins-dev, get-changed-plugins, build-rules-tool]
if: needs.get-changed-plugins.outputs.changed-plugins != '[]' && needs.get-changed-plugins.outputs.changed-plugins != ''
strategy:
fail-fast: false
matrix:
plugin: ${{ fromJson(needs.get-changed-plugins.outputs.changed-plugins) }}
uses: ./.github/workflows/reusable_validate_plugins.yaml
with:
plugin: ${{ matrix.plugin }}
falcoctl-version: 0.11.0
falco-image: falcosecurity/falco:0.40.0
plugins-artifact: plugins-x86_64-dev.tar.gz
rules-checker: ./rules-checker
arch: x86_64
publish-plugins-dev:
needs: [build-plugins-dev, validate-plugins]
uses: falcosecurity/plugins/.github/workflows/reusable_publish_packages.yaml@main
with:
suffix: dev
secrets: inherit
publish-oci-artifacts-dev:
needs: [ build-plugins-dev, validate-plugins ]
uses: ./.github/workflows/reusable-publish-oci-artifacts.yaml
with:
dev-tag: main
suffix: dev
secrets: inherit

43
.github/workflows/registry.yaml vendored Normal file
View File

@ -0,0 +1,43 @@
name: Check registry.yaml
on:
pull_request:
branches: [main]
paths:
- "registry.yaml"
push:
branches: [main]
paths:
- "registry.yaml"
workflow_dispatch:
# Checks if any concurrent jobs under the same pull request or branch are being executed
concurrency:
group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
cancel-in-progress: true
jobs:
check-registry:
name: check-registry
runs-on: ubuntu-22.04
steps:
- name: Checkout ⤵️
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Setup Go
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "1.21"
check-latest: true
- name: Build registry artifact tool
working-directory: build/registry
run: make
# Formal validation only.
# When a new plugin is added and not yet released,
# its OCI repo has not been created yet, so we can't validate it.
- name: Verify the correctness of registry.yaml
working-directory: build/registry
run: ./bin/registry check ../../registry.yaml

70
.github/workflows/release.yml vendored Normal file
View File

@ -0,0 +1,70 @@
name: Release Plugins
on:
push:
tags:
# All tags
- '**'
# Checks if any concurrent jobs is running for release CI and eventually cancel it.
concurrency:
group: ci-release-${{ github.ref }}
cancel-in-progress: true
jobs:
extract-info:
runs-on: ubuntu-latest
outputs:
package: ${{ steps.regex-match.outputs.group1 }}
steps:
- name: Validate tag
uses: actions-ecosystem/action-regex-match@9e6c4fb3d5e898f505be7a1fb6e7b0a278f6665b # v2.0.2
id: regex-match
with:
text: ${{ github.ref_name }}
regex: '^plugins\/([a-z0-9_-]+)\/v(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?(?:\+([0-9a-zA-Z-]+(?:\.[0-9a-zA-Z-]+)*))?$'
- name: Fail on invalid tag
if: steps.regex-match.outputs.match == ''
run: exit 1
build-plugins:
needs: extract-info
uses: falcosecurity/plugins/.github/workflows/reusable_build_packages.yaml@main
with:
makecommand: make release/${{ needs.extract-info.outputs.package }} -j4
suffix: stable
secrets: inherit
build-rules-tool:
needs: [extract-info]
uses: ./.github/workflows/reusable_build_rules_tool.yaml
with:
output: rules-checker
repository: falcosecurity/rules
validate-plugins:
needs: [extract-info, build-plugins, build-rules-tool]
uses: ./.github/workflows/reusable_validate_plugins.yaml
with:
plugin: ${{ needs.extract-info.outputs.package }}
falcoctl-version: 0.11.0
falco-image: falcosecurity/falco:0.40.0
plugins-artifact: plugins-x86_64-stable.tar.gz
rules-checker: ./rules-checker
arch: x86_64
publish-plugins:
needs: [build-plugins, validate-plugins]
uses: falcosecurity/plugins/.github/workflows/reusable_publish_packages.yaml@main
with:
suffix: stable
secrets: inherit
publish-oci-artifacts:
needs: [ build-plugins, validate-plugins ]
uses: ./.github/workflows/reusable-publish-oci-artifacts.yaml
with:
suffix: stable
secrets: inherit

View File

@ -0,0 +1,98 @@
on:
workflow_call:
inputs:
dev-tag:
description: The tag used for oci artifacts published from the main branch.
required: false
type: string
suffix:
description: Suffix for uploading packages (dev or stable)
required: true
type: string
jobs:
publish-oci-artifacts:
runs-on: ubuntu-latest
permissions:
contents: read
packages: write
outputs:
matrix: ${{ steps.oci_build.outputs.REGISTRY_UPDATE_STATUS }}
steps:
- name: Download x86_64 plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: plugins-x86_64-${{ inputs.suffix }}.tar.gz
path: /tmp/plugins-x86_64
- name: Download aarch64 plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: plugins-aarch64-${{ inputs.suffix }}.tar.gz
path: /tmp/plugins-aarch64
- name: Checkout Plugins
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
- name: Setup Golang
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "^1.21"
- name: Build registry artifact tool
working-directory: build/registry
run: make
- name: Upload OCI artifacts to GitHub packages
id: oci_build
env:
REGISTRY: ghcr.io
REGISTRY_USER: ${{ github.repository_owner }}
REGISTRY_TOKEN: ${{ secrets.GITHUB_TOKEN }}
REPO_GITHUB: https://github.com/${{ github.repository_owner }}/plugins.git
working-directory: build/registry
run: |
REGISTRY_UPDATE_STATUS=$(./bin/registry update-oci-registry \
../../registry.yaml \
--plugins-amd64-path /tmp/plugins-x86_64 \
--plugins-arm64-path /tmp/plugins-aarch64 \
--rulesfiles-path /tmp/plugins-x86_64 \
--dev-tag "${{ inputs.dev-tag }}"
)
echo "REGISTRY_UPDATE_STATUS=${REGISTRY_UPDATE_STATUS}" >> $GITHUB_OUTPUT
# Create signatures of the plugin artifacts as OCI artifacts
sign-oci-artifacts:
needs: [publish-oci-artifacts]
runs-on: ubuntu-latest
if: ${{ needs.publish-oci-artifacts.outputs.matrix != '[]' }}
strategy:
matrix:
value: ${{ fromJson(needs.publish-oci-artifacts.outputs.matrix) }}
permissions:
contents: read
id-token: write
packages: write
steps:
- name: Install Cosign
uses: sigstore/cosign-installer@d58896d6a1865668819e1d91763c7751a165e159 # v3.9.2
- run: cosign version
- name: Log into ghcr.io
uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # v3.4.0
with:
registry: ghcr.io
username: ${{ github.repository_owner }}
password: ${{ secrets.GITHUB_TOKEN }}
- name: Sign the artifacts with GitHub OIDC Token
run: cosign sign --yes ${{ matrix.value.repository.ref }}@${{ matrix.value.artifact.digest }}

View File

@ -0,0 +1,74 @@
# This is a reusable workflow used by main and release CI
on:
workflow_call:
inputs:
makecommand:
description: Command used for make
required: true
type: string
suffix:
description: Suffix for uploading packages (dev or stable)
required: true
type: string
jobs:
build-packages:
name: build-packages-${{ matrix.arch }}
runs-on: ${{ (matrix.arch == 'aarch64' && 'ubuntu-22.04-arm') || 'ubuntu-22.04' }}
strategy:
matrix:
arch: [x86_64, aarch64]
# Upgrading to a newer debian version would make the build process generate
# binaries that require newer GLIBC version so we need to be based on bullseye for now
container: golang:1.23-bullseye
steps:
- name: Install deps
run: |
apt update
apt install -y --no-install-recommends awscli build-essential autoconf libelf-dev libtool autotools-dev \
automake zip unzip ninja-build wget lsb-release software-properties-common gnupg
- name: Install updated clang version ⛓️
run: |
wget https://apt.llvm.org/llvm.sh
chmod u+x llvm.sh
./llvm.sh 19
ln -s /usr/bin/clang-19 /usr/bin/clang
- name: Install updated cmake version ⛓️
run: |
curl -L -o /tmp/cmake.tar.gz https://github.com/Kitware/CMake/releases/download/v3.31.4/cmake-3.31.4-linux-$(uname -m).tar.gz
gzip -d /tmp/cmake.tar.gz
tar -xpf /tmp/cmake.tar --directory=/tmp
cp -R /tmp/cmake-3.31.4-linux-$(uname -m)/* /usr
rm -rf /tmp/cmake-3.31.4-linux-$(uname -m)
- name: Install Rust 🦀
uses: dtolnay/rust-toolchain@b3b07ba8b418998c39fb20f53e8b695cdcc8de1b # v1
with:
toolchain: "1.86.0"
- name: Install bpf-linker
run: |
cargo install bpf-linker@0.9.14
- name: Configure Rust cache
uses: Swatinem/rust-cache@98c8021b550208e191a6a3145459bfc9fb29c4c0 #v2
- name: Checkout Plugins ⤵️
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
fetch-depth: 0
submodules: "recursive"
- name: Safe directory
run: git config --global --add safe.directory $GITHUB_WORKSPACE
- name: Run build 🏗️
run: ${{ inputs.makecommand }}
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: plugins-${{ matrix.arch }}-${{ inputs.suffix }}.tar.gz
path: output/*.tar.gz

View File

@ -0,0 +1,43 @@
# This is a reusable workflow used by main and release CI
on:
workflow_call:
inputs:
output:
description: Name of the output binary
required: false
default: rules-check
type: string
repository:
description: Falco rules repository
required: false
default: falcosecurity/rules
type: string
jobs:
build-rules-checker:
runs-on: ubuntu-latest
steps:
- name: Setup Golang
uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
with:
go-version: "1.19.0"
- name: Checkout rules
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
repository: ${{ inputs.repository }}
- name: Build checker tool
working-directory: build/checker
run: go build -o ${{ inputs.output }}
- name: Test checker tool
working-directory: build/checker
run: go test ./... -cover
- name: Upload artifacts
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: rules-tool.tar.gz
path: build/checker/${{ inputs.output }}
retention-days: 1

View File

@ -0,0 +1,46 @@
# This is a reusable workflow used by main CI
on:
workflow_call:
outputs:
changed-plugins:
description: "A json-encoded array with the names of plugins to be used by the CI"
value: ${{ jobs.get-values.outputs.changed-plugins }}
jobs:
get-values:
runs-on: ubuntu-latest
outputs:
changed-plugins: ${{ steps.set-changed-plugins.outputs.changed-plugins }}
steps:
- name: Checkout rules
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Get changed files
id: changed-plugins
if: github.event_name == 'pull_request'
uses: Ana06/get-changed-files@25f79e676e7ea1868813e21465014798211fad8c # v2.3.0
with:
format: space-delimited
token: ${{ secrets.GITHUB_TOKEN }}
- name: Get changed plugins
id: set-changed-plugins
run: |
# if we skip changed-plugins because we're not in a pull-request,
# then we consider all the rules contained in the repo
all_files="${{ steps.changed-plugins.outputs.all }}"
values=""
if [ -z "$all_files" ]; then
values=$(ls plugins)
else
for changed_file in $all_files; do
if [[ ${changed_file} =~ ^plugins/.* ]]; then
plugindir=$(echo ${changed_file} | sed -e 's/^plugins//' | sed -E 's_(/[^/]+).*_\1_')
pluginname="${plugindir:1}"
if [[ ! $values =~ "$pluginname" ]]; then
values="${values}$pluginname"$'\n'
fi
fi
done
fi
echo "changed-plugins=$(echo "${values}" | jq -R -s -c 'split("\n")' | jq -c 'map(select(length > 0))')" >> $GITHUB_OUTPUT

View File

@ -0,0 +1,45 @@
# This is a reusable workflow used by main and release CI
on:
workflow_call:
inputs:
suffix:
description: Suffix for uploading packages (dev or stable)
required: true
type: string
permissions:
id-token: write
contents: read
env:
AWS_S3_BUCKET: falco-distribution
AWS_S3_PREFIX: plugins
AWS_S3_REGION: eu-west-1
jobs:
publish-packages:
runs-on: ubuntu-latest
steps:
- name: Download x86_64 plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: plugins-x86_64-${{ inputs.suffix }}.tar.gz
path: /tmp/plugins-x86_64
- name: Download aarch64 plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: plugins-aarch64-${{ inputs.suffix }}.tar.gz
path: /tmp/plugins-aarch64
- name: Configure AWS credentials 🔧⚙️
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df # v4.2.1
with:
role-to-assume: "arn:aws:iam::292999226676:role/github_actions-plugins-s3"
aws-region: ${{ env.AWS_S3_REGION }}
- name: Upload files to S3 ⬆️
run: |
for package in /tmp/plugins-*/*.tar.gz; do
aws s3 cp --no-progress $package s3://${{ env.AWS_S3_BUCKET}}/${{ env.AWS_S3_PREFIX }}/${{ inputs.suffix }}/
done

View File

@ -0,0 +1,122 @@
# This is a reusable workflow used by the PR CI
on:
workflow_call:
inputs:
plugin:
description: Name of the plugin that needs to be validated
required: true
type: string
falco-image:
description: Docker image of Falco to be used for validation
required: true
type: string
plugins-artifact:
description: Name of the plugin artifact containing the dev builds
required: true
type: string
rules-checker:
description: Path of the rules checker tool built from falcosecurity/rules
required: true
type: string
arch:
description: Architecture of the plugins artifacts (x86_64 or aarch64)
required: true
type: string
job-index:
description: If used in a matrix, the value of strategy.job-index
required: false
default: 0
type: number
jobs:
# note: we don't need anything else than x86_64 since we're validating rules
check-version:
if: github.event_name == 'pull_request' && inputs.arch == 'x86_64'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
with:
ref: ${{ github.event.pull_request.head.sha }}
fetch-depth: 0
- name: Install system dependencies
run: sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq
- name: Setup plugin config and rules
id: get-config
run: ./.github/setup-plugin-config-rules.sh ${{ inputs.plugin }}
- name: Get latest tag
id: get-tag
run: ./.github/get-latest-plugin-version.sh ${{ inputs.plugin }}
- name: Download rules tool
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: rules-tool.tar.gz
# note: here we're loading the locally-built plugins, whereas another
# solution would be to pull them with falcoctl. The flaw with this
# approach is that we load the same plugin for both the "old" and the
# "new" rulesets. The issue would be that the job would fail whenever
# the two rulesets depend on plugins with different majors.
# todo(jasondellaluce): fix this corner case in the future
- name: Download plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: ${{ inputs.plugins-artifact }}
path: /tmp/plugins-${{ inputs.arch }}
- name: Extract plugins
run: |
for archive in /tmp/plugins-*/*.tar.gz; do
echo Extracting archive "$archive"...
mkdir -p tmpdir && pushd tmpdir
tar -xvf $archive
sudo mkdir -p /usr/share/falco/plugins
sudo cp -r *.so /usr/share/falco/plugins || true
popd && rm -fr tmpdir
done
- name: Compare changed files with previous versions
id: compare
if: steps.get-tag.outputs.version != '0.0.0'
run: |
rules_dir=${{ steps.get-config.outputs.rules_dir }}
if [ -d "$rules_dir" ]; then
./.github/compare-rule-files.sh \
"$rules_dir" \
${{ steps.get-config.outputs.config_file }} \
${{ inputs.plugin }} \
rule_result.txt \
${{ inputs.rules-checker }} \
${{ inputs.falco-image }} \
${{ steps.get-tag.outputs.ref }}
if [ -s rule_result.txt ]; then
if [ ! -s result.txt ]; then
touch result.txt
fi
cat rule_result.txt >> result.txt
fi
fi
if [ -s result.txt ]; then
echo "comment_file=result.txt" >> $GITHUB_OUTPUT
fi
- name: Save PR info
if: steps.compare.outputs.comment_file != ''
run: |
mkdir -p ./pr
cp ${{ steps.compare.outputs.comment_file }} ./pr/COMMENT-${{ inputs.job-index }}
- name: Upload PR info as artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
if: steps.compare.outputs.comment_file != ''
with:
name: pr-${{ inputs.job-index }}
path: pr/
retention-days: 1

View File

@ -0,0 +1,37 @@
# This is a reusable workflow used by the PR CI
on:
workflow_call:
jobs:
upload-pr-info:
if: github.event_name == 'pull_request'
runs-on: ubuntu-latest
steps:
- name: Download PR infos
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
path: tmp-artifacts
- name: Save PR info
run: |
mkdir -p ./pr
echo ${{ github.event.number }} > ./pr/NR
touch ./pr/COMMENT
echo "# Rules files suggestions" >> ./pr/COMMENT
echo "" >> ./pr/COMMENT
files=$(find ./tmp-artifacts/)
for file in $files; do
if [[ $file =~ "COMMENT" ]]; then
cat $file >> ./pr/COMMENT
fi
done
echo Uploading PR info...
cat ./pr/COMMENT
echo ""
- name: Upload PR info as artifact
uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
with:
name: pr
path: pr/
retention-days: 1

View File

@ -0,0 +1,226 @@
# This is a reusable workflow used by main and release CI
on:
workflow_call:
inputs:
plugin:
description: Name of the plugin that needs to be validated
required: true
type: string
falco-image:
description: Docker image of Falco to be used for validation
required: true
type: string
falcoctl-version:
description: Version of falcoctl to be used for pulling artifacts
required: true
type: string
plugins-artifact:
description: Name of the plugin artifact containing the dev builds
required: true
type: string
rules-checker:
description: Path of the rules checker tool built from falcosecurity/rules
required: true
type: string
arch:
description: Architecture of the plugins artifacts (x86_64 or aarch64)
required: true
type: string
jobs:
# todo(jasondellaluce): support aarch64 too
validate-local:
if: inputs.arch == 'x86_64'
runs-on: ubuntu-latest
container: golang:1.18
env:
GOFLAGS: "-buildvcs=false"
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install system dependencies
run: wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && chmod +x /usr/bin/yq
- name: Setup plugin config and rules
id: get-config
run: ./.github/setup-plugin-config-rules.sh ${{ inputs.plugin }}
- name: Download rules tool
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: rules-tool.tar.gz
- name: Download plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: ${{ inputs.plugins-artifact }}
path: /tmp/plugins-${{ inputs.arch }}
- name: Install plugin and rules
run: |
set -e pipefail
arch=${{ inputs.arch }}
loaded_plugins="$(cat ${{ steps.get-config.outputs.config_file }} | grep '\- name: ' | cut -d ':' -f 2 | xargs)"
mkdir -p /etc/falco/falco
mkdir -p /usr/share/falco/plugins
# avoids git exit status 128: detected dubious ownership in repository
git config --global --add safe.directory $(pwd)
for plugin_name in $loaded_plugins; do
echo Installing locally-built plugin "$plugin_name"...
# At release time we only build the released plugin, so it's possible
# that validation requires a plugin that we haven't built locally.
# in those cases, we build it on-the-fly perform validation with it.
set +e pipefail
packages=$(ls /tmp/plugins-${arch}/${plugin_name}-* || echo "")
set -e pipefail
if [ -z "$packages" ]; then
echo Building plugin "$plugin_name" temporary packages...
make package/$plugin_name -j4
packages=$(ls $(pwd)/output/${plugin_name}-*)
fi
for archive in $packages; do
echo Extracting archive "$archive"...
mkdir -p tmpdir && cd tmpdir
tar -xvf $archive
cp -r *.yaml /etc/falco/falco || true
cp -r *.so /usr/share/falco/plugins || true
cd .. && rm -fr tmpdir
done
done
- name: Validate plugin and rules
run: |
# craft an empty rules file if none is available.
# this ensures that the plugin gets still loaded even if it has no rules.
rules_files=""
if [ ! -d "${{ steps.get-config.outputs.rules_dir }}" ]; then
touch tmp_rules.yaml
rules_files="./tmp_rules.yaml"
else
rules_files=$(ls ${{ steps.get-config.outputs.rules_dir }}/*)
fi
./.github/validate-rules.sh \
"${{ inputs.falco-image }}" \
"${{ inputs.rules-checker }}" \
"${{ steps.get-config.outputs.config_file }}" \
"$rules_files"
# todo(jasondellaluce): support aarch64 too
validate-falcoctl:
if: inputs.arch == 'x86_64'
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
- name: Install system dependencies
run: sudo wget https://github.com/mikefarah/yq/releases/latest/download/yq_linux_amd64 -O /usr/bin/yq && sudo chmod +x /usr/bin/yq
- name: Setup plugin config and rules
id: get-config
run: ./.github/setup-plugin-config-rules.sh ${{ inputs.plugin }}
- name: Download plugins
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: ${{ inputs.plugins-artifact }}
path: /tmp/plugins-${{ inputs.arch }}
- name: Download rules tool
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
name: rules-tool.tar.gz
- name: Download falcoctl
run: |
curl --fail -LS "https://github.com/falcosecurity/falcoctl/releases/download/v${{ inputs.falcoctl-version }}/falcoctl_${{ inputs.falcoctl-version }}_linux_${{ inputs.arch == 'x86_64' && 'amd64' || 'arm64' }}.tar.gz" | tar -xz
sudo install -o root -g root -m 0755 falcoctl /usr/local/bin/falcoctl
# note(jsondellaluce): exploring the set of all dependencies including their
# alternatives and all the possible combinations of different versions would
# result in a combinatorial explosion. As such, we take the simple route
# of exploring a subset of all the possible combinations (which does not
# include the deps alternatives) that attempts resembling real-world use cases.
#
# We validate each ruleset by loading its plugin dependencies at different
# versions, with the following logic:
# - for all the plugin dependencies defined in the ruleset:
# - we take the plugin version of the dependency
# - we set the patch version number to 0, to forbid patch-level dependencies
# (e.g. falco will fail the validation if v0.8.1 of a plugin is required and we provide v0.8.0)
# - iteratively:
# - for all the plugin dependencies defined in the ruleset:
# - we download the plugin at the given version of the dependency by using falcoctl
# - we increase the minor version number of the plugin by 1
# - we validate the ruleset with Falco and stop if we encounter an error
# - if falcoctl didn't find any updated plugin with the increased minor
# version for any of the plugin deps, we stop iterating
#
# todo(jasondellaluce): improve this by attempting more cases
# todo(jasondellaluce): if we skip one minor version (e.g. bump from v0.1.0
# to v0.3.0), this algorithm would stop before finishing the exploration
- name: Validate plugin and rules
run: |
set -e pipefail
if [ ! -d "${{ steps.get-config.outputs.rules_dir }}" ]; then
exit 0
fi
sudo mkdir -p /usr/share/falco/plugins
rules_files=$(ls ${{ steps.get-config.outputs.rules_dir }}/*)
deps=$(./.github/extract-plugins-deps-from-rulesfile.sh \
"${{ inputs.plugin }}" \
"$rules_files")
echo "Deps: ${deps}"
ver_diff=0
has_updates=1
while [ "$has_updates" -eq 1 ]; do
has_updates=0
for dep in $deps; do
echo "Plugin: ${dep}"
plugin_name=$(echo $dep | tr -d '"' | cut -d ':' -f 1)
# forcing zero patch version to forbid patch-like dependencies
# bumping minor version at every iteration
plugin_ver=$(echo $dep | tr -d '"' | cut -d ':' -f 2)
plugin_ver_major=$(echo $plugin_ver | cut -d '.' -f 1)
plugin_ver_minor=$(expr $(echo $plugin_ver | cut -d '.' -f 2) + $ver_diff)
plugin_ver_patch=0
plugin_ver="${plugin_ver_major}.${plugin_ver_minor}.${plugin_ver_patch}"
set +e pipefail
sudo falcoctl artifact install ${plugin_name}:${plugin_ver}
if [ $? -eq 0 ]; then
echo Installed plugin "${plugin_name}" at version "${plugin_ver}"
has_updates=1
else
echo Can\'t pull plugin "${plugin_name}" at version "${plugin_ver}"
echo Attempt installing locally-built plugin "${plugin_name}"...
for archive in $(ls /tmp/plugins-${{ inputs.arch }}/${plugin_name}-*); do
echo Extracting archive "$archive"...
mkdir -p tmpdir && pushd tmpdir
tar -xvf $archive
sudo cp -r *.so /usr/share/falco/plugins || true
popd && rm -fr tmpdir
done
fi
set -e pipefail
done
ver_diff=$(expr $ver_diff + 1)
./.github/validate-rules.sh \
"${{ inputs.falco-image }}" \
"${{ inputs.rules-checker }}" \
"${{ steps.get-config.outputs.config_file }}" \
"$rules_files"
done

5
.gitignore vendored
View File

@ -1,7 +1,10 @@
*~
.vscode
.DS_Store
.idea
output/
plugins/*/*.so
plugins/*/lib*.h
plugins/dummy_c/nlohmann
plugins/dummy_c/sdk
plugins/dummy_c/include
plugins/dummy_c/*.tar.gz

30
.pre-commit-config.yaml Normal file
View File

@ -0,0 +1,30 @@
repos:
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: 'v18.1.3'
hooks:
- id: clang-format
name: clang-format-18
files: ^plugins/container/.*$
exclude: plugin_config_schema\.h
stages: [pre-commit]
- repo: https://github.com/pre-commit/mirrors-clang-format
rev: 'v14.0.6'
hooks:
- id: clang-format
name: clang-format-14
files: ^plugins/(k8smeta|dummy_c)/.*$
stages: [pre-commit]
- repo: local
hooks:
- id: rust-fmt
name: rust-fmt
description: Format files with rustfmt.
entry: rustfmt +nightly --color always
types: [rust]
language: system
stages: [pre-commit]
- id: dco
name: dco
entry: ./tools/local_hooks/dco-pre-commit-msg.sh
language: script
stages: [prepare-commit-msg]

View File

@ -1,5 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2022 The Falco Authors.
# Copyright (C) 2023 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
@ -23,20 +24,31 @@ PLATFORM ?=$(shell uname -s | tr '[:upper:]' '[:lower:]')
plugins = $(shell ls -d ${SOURCE_DIR}/*/ | cut -f2 -d'/' | xargs)
plugins-clean = $(addprefix clean/,$(plugins))
plugins-changelogs = $(addprefix changelog/,$(plugins))
plugins-packages = $(addprefix package/,$(plugins))
plugins-releases = $(addprefix release/,$(plugins))
plugins-tidy = $(addprefix tidy/,$(plugins))
.PHONY: all
all: check-registry $(plugins)
.PHONY: $(plugins)
$(plugins):
cd plugins/$@ && make DEBUG=$(DEBUG)
$(plugins): build/readme/readme
+cd plugins/$@ && make DEBUG=$(DEBUG)
# make rules, if any
cd plugins/$@ && make rules || :
+@cd plugins/$@ \
&& make rules \
&& echo "$@ rules generated" || :
# make readme, if any
+@cd plugins/$@ \
&& make readme READMETOOL=../../build/readme/bin/readme \
&& echo "$@ readme generated" || :
tidy/%:
+cd plugins/$@ && [-f go.mod] && $(GO) mod tidy
.PHONY: clean
clean: $(plugins-clean) clean/packages clean/build/utils/version clean/build/registry/registry
clean: $(plugins-clean) clean/packages clean/build/utils/version clean/build/registry/registry clean/build/changelog/changelog clean/build/readme/readme
.PHONY: clean/packages
clean/packages:
@ -44,7 +56,18 @@ clean/packages:
.PHONY: $(plugins-clean)
$(plugins-clean):
cd plugins/$(shell basename $@) && make clean
+cd plugins/$(shell basename $@) && make clean
.PHONY: $(plugins-tidy)
$(plugins-tidy):
+cd plugins/$(shell basename $@) && [ -f go.mod ] && $(GO) mod tidy || true
.PHONY: tidy
tidy: $(plugins-tidy)
+cd build/utils && $(GO) mod tidy
+cd build/readme && $(GO) mod tidy
+cd build/registry && $(GO) mod tidy
+cd build/utils && $(GO) mod tidy
.PHONY: packages
packages: clean/packages $(plugins-packages)
@ -57,13 +80,13 @@ package/%: clean/% % build/utils/version
@./build/utils/version --path $(PLUGIN_PATH) $(PRE_RELEASE)
mkdir -p $(OUTPUT_DIR)/$(PLUGIN_NAME)
cp -r $(PLUGIN_PATH) $(OUTPUT_DIR)/$(PLUGIN_NAME)/
cp -r plugins/$(PLUGIN_NAME)/README.md $(OUTPUT_DIR)/$(PLUGIN_NAME)/ || :
tar -zcvf $(OUTPUT_DIR)/$(PLUGIN_NAME)-$(PLUGIN_VERSION)-${PLATFORM}-${ARCH}.tar.gz -C ${OUTPUT_DIR}/$(PLUGIN_NAME) $$(ls -A ${OUTPUT_DIR}/$(PLUGIN_NAME))
rm -rf $(OUTPUT_DIR)/$(PLUGIN_NAME)
@echo "$(PLUGIN_NAME) package built"
# build rules package, if any
mkdir -p $(OUTPUT_DIR)/$(PLUGIN_NAME)-rules
cp -r plugins/$(PLUGIN_NAME)/rules/* $(OUTPUT_DIR)/$(PLUGIN_NAME)-rules/ && \
# symlinks are ignored when creating the rules package. Only regular files are considered.
find plugins/$(PLUGIN_NAME)/rules/* -type f -exec cp -t $(OUTPUT_DIR)/$(PLUGIN_NAME)-rules/ {} + && \
tar -zcvf $(OUTPUT_DIR)/$(PLUGIN_NAME)-rules-$(PLUGIN_VERSION).tar.gz -C \
$(OUTPUT_DIR)/$(PLUGIN_NAME)-rules $$(ls -A ${OUTPUT_DIR}/$(PLUGIN_NAME)-rules) || :
@test $(OUTPUT_DIR)/$(PLUGIN_NAME)-rules-$(PLUGIN_VERSION).tar.gz && echo "$(PLUGIN_NAME) rules package built"
@ -74,6 +97,15 @@ release/%: PRE_RELEASE=
release/%: clean package/%
@echo "$(PLUGIN_NAME) released"
.PHONY: changelogs
changelogs: $(plugins-changelogs)
changelog/%: build/changelog/changelog
$(eval PLUGIN_NAME := $(shell basename $@))
$(eval CHANGELOG_PATH := plugins/$(PLUGIN_NAME)/CHANGELOG.md)
@./changelog-gen.sh $(PLUGIN_NAME) > $(CHANGELOG_PATH)
@echo "$(CHANGELOG_PATH) generated"
.PHONY: check-registry
check-registry: build/registry/registry
@build/registry/bin/registry check ./registry.yaml
@ -86,18 +118,39 @@ update-readme: build/registry/registry
--subtag="<!-- REGISTRY:TABLE -->"
@echo Readme has been updated successfully
.PHONY: update-index
update-index: build/registry/registry
@build/registry/bin/registry update-index ./registry.yaml ${DIST_INDEX}
@echo Distribution index has been updated successfully
.PHONY: build/utils/version
build/utils/version:
@cd build/utils && make
+@cd build/utils && make
.PHONY: clean/build/utils/version
clean/build/utils/version:
@cd build/utils && make clean
+@cd build/utils && make clean
.PHONY: build/registry/registry
build/registry/registry:
@cd build/registry && make
+@cd build/registry && make
.PHONY: clean/build/registry/registry
clean/build/registry/registry:
@cd build/registry && make clean
+@cd build/registry && make clean
.PHONY: build/changelog/changelog
build/changelog/changelog:
+@cd build/changelog && make
.PHONY: clean/build/changelog/changelog
clean/build/changelog/changelog:
+@cd build/changelog && make clean
.PHONY: build/readme/readme
build/readme/readme:
+@cd build/readme && make
.PHONY: clean/build/readme/readme
clean/build/readme/readme:
+@cd build/readme && make clean

10
OWNERS
View File

@ -1,14 +1,10 @@
approvers:
- ldegio
- leodido
- fntlnz
- mstemm
- leogr
- jasondellaluce
reviewers:
- LucaGuerra
- ekoops
emeritus_approvers:
- ldegio
- leodido
- fntlnz
- mstemm
- leogr
- jasondellaluce

140
README.md
View File

@ -1,44 +1,21 @@
# Plugins
![GitHub branch checks state](https://img.shields.io/github/checks-status/falcosecurity/plugins/master?style=for-the-badge)
[![License](https://img.shields.io/github/license/falcosecurity/plugins?style=for-the-badge)](./LICENSE)
[![Falco Core Repository](https://github.com/falcosecurity/evolution/blob/main/repos/badges/falco-core-blue.svg)](https://github.com/falcosecurity/evolution/blob/main/REPOSITORIES.md#core-scope) [![Stable](https://img.shields.io/badge/status-stable-brightgreen?style=for-the-badge)](https://github.com/falcosecurity/evolution/blob/main/REPOSITORIES.md#stable) [![License](https://img.shields.io/github/license/falcosecurity/rules?style=for-the-badge)](./LICENSE)
Note: *The plugin system is a new feature introduced since Falco 0.31.0. You can find more detail in the original [proposal document](https://github.com/falcosecurity/falco/blob/master/proposals/20210501-plugin-system.md).*
This repository is the central hub for the Falco Plugin ecosystem. It serves two main purposes:
This repository contains the [Plugin Registry](#plugin-registry) and the [plugins officially maintained](#falcusecurity-plugins) by the Falcosecurity organization. [Plugins](https://falco.org/docs/plugins) can be used to extend [Falco](https://github.com/falcosecurity/falco) and of applications using [Falcosecurity libs](https://github.com/falcosecurity/libs). Please refer to the [official documentation](https://falco.org/docs/plugins) to better understand the plugin system's concepts and architecture.
- **Be a registry:** A comprehensive catalog of plugins recognized by The Falco Project, regardless of where their source code is hosted.
- **Monorepo for Falcosecurity plugins:** Official plugins hosted and maintained by The Falco Project, with robust release and distribution processes.
For more information about the plugin systems architecture and concepts, please see the [official documentation](https://falco.org/docs/plugins).
---
## Plugin Registry
The Registry contains metadata and information about every plugin known and recognized by the Falcosecurity organization. It lists plugins hosted either in this repository or in other repositories. These plugins are developed for Falco and made available to the community. Check out the sections below to know how to [register your plugins](#registering-a-new-plugin) and see plugins currently contained in the registry.
The registry contains metadata and information about every plugin known and recognized by the Falcosecurity organization. It lists plugins hosted either in this repository or in other repositories. These plugins are developed for Falco and made available to the community.
### Registering a new Plugin
Registering your plugin inside the registry helps ensure that some technical constraints are respected, such as that a [given ID is used by exactly one plugin with event source capability](https://falco.org/docs/plugins/#plugin-event-ids) and allows plugin authors to [coordinate about event source formats](https://falco.org/docs/plugins/#plugin-event-sources-and-interoperability). Moreover, this is a great way to share your plugin project with the community and engage with it, thus gaining new users and **increasing its visibility**. We encourage you to register your plugin in this registry before publishing it. You can add your plugins in this registry regardless of where its source code is hosted (there's a `url` field for this specifically).
The registration process involves adding an entry about your plugin inside the [registry.yaml](./registry.yaml) file by creating a Pull Request in this repository. Please be mindful of a few constraints that are automatically checked and required for your plugin to be accepted:
- The `name` field is mandatory and must be **unique** across all the plugins in the registry
- *(Sourcing Capability Only)* The `id` field is mandatory and must be **unique** in the registry across all the plugins with event source capability
- The plugin `name`, `source` *(Sourcing Capability Only)*, and `sources` *(Extraction Capability Only)* should match this [regular expression](https://en.wikipedia.org/wiki/Regular_expression): `^[a-z]+[a-z0-9_]*$`
For reference, here's an example of an entry for a plugin with both event sourcing and field extraction capabilities:
```yaml
- name: cloudtrail
description: ...
authors: ...
contact: ...
url: ...
license: ...
capabilities:
sourcing:
supported: true
id: 2
source: aws_cloudtrail
extraction:
supported: true
```
You can find the full registry specification here: *(coming soon...)*
> Check out the [Registering a Plugin](./docs/registering-a-plugin.md) to know how to add your plugin to this registry.
### Registered Plugins
@ -49,30 +26,99 @@ These comments and the text between them should not be edited by hand -->
<!-- REGISTRY:TABLE -->
| Name | Capabilities | Description
| --- | --- | --- |
| [k8saudit](https://github.com/falcosecurity/plugins/tree/master/plugins/k8saudit) | **Event Sourcing** <br/>ID: 1 <br/>`k8s_audit` <br/>**Field Extraction** <br/> `k8s_audit` | Read Kubernetes Audit Events and monitor Kubernetes Clusters <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [cloudtrail](https://github.com/falcosecurity/plugins/tree/master/plugins/cloudtrail) | **Event Sourcing** <br/>ID: 2 <br/>`aws_cloudtrail` <br/>**Field Extraction** <br/> `aws_cloudtrail` | Reads Cloudtrail JSON logs from files/S3 and injects as events <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [json](https://github.com/falcosecurity/plugins/tree/master/plugins/json) | **Field Extraction** <br/> *All Sources* | Extract values from any JSON payload <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [dummy](https://github.com/falcosecurity/plugins/tree/master/plugins/dummy) | **Event Sourcing** <br/>ID: 3 <br/>`dummy` <br/>**Field Extraction** <br/> `dummy` | Reference plugin used to document interface <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [dummy_c](https://github.com/falcosecurity/plugins/tree/master/plugins/dummy_c) | **Event Sourcing** <br/>ID: 4 <br/>`dummy_c` <br/>**Field Extraction** <br/> `dummy_c` | Like Dummy, but written in C++ <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [docker](https://github.com/Issif/docker-plugin) | **Event Sourcing** <br/>ID: 5 <br/>`docker` <br/>**Field Extraction** <br/> `docker` | Docker Events <br/><br/> Authors: [Thomas Labarussias](https://github.org/Issif) <br/> License: Apache-2.0 |
| [seccompagent](https://github.com/kinvolk/seccompagent) | **Event Sourcing** <br/>ID: 6 <br/>`seccompagent` <br/>**Field Extraction** <br/> `seccompagent` | Seccomp Agent Events <br/><br/> Authors: [Alban Crequy](https://github.com/kinvolk/seccompagent) <br/> License: Apache-2.0 |
| [okta](https://github.com/falcosecurity/plugins/tree/master/plugins/okta) | **Event Sourcing** <br/>ID: 7 <br/>`okta` <br/>**Field Extraction** <br/> `okta` | Okta Log Events <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [github](https://github.com/falcosecurity/plugins/tree/master/plugins/github) | **Event Sourcing** <br/>ID: 8 <br/>`github` <br/>**Field Extraction** <br/> `github` | Github Webhook Events <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| plugin-id-zero-value | **Event Sourcing** <br/>ID: 0 <br/>`` | This ID is reserved for particular purposes and cannot be registered. A plugin author should not use this ID unless specified by the documentation. <br/><br/> Authors: N/A <br/> License: N/A |
| test | **Event Sourcing** <br/>ID: 999 <br/>`test` | This ID is reserved for source plugin development. Any plugin author can use this ID, but authors can expect events from other developers with this ID. After development is complete, the author should request an actual ID <br/><br/> Authors: N/A <br/> License: N/A |
| [k8saudit](https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit) | **Event Sourcing** <br/>ID: 1 <br/>`k8s_audit` <br/>**Field Extraction** <br/> `k8s_audit` | Read Kubernetes Audit Events and monitor Kubernetes Clusters <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [cloudtrail](https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail) | **Event Sourcing** <br/>ID: 2 <br/>`aws_cloudtrail` <br/>**Field Extraction** <br/> `aws_cloudtrail` | Reads Cloudtrail JSON logs from files/S3 and injects as events <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [json](https://github.com/falcosecurity/plugins/tree/main/plugins/json) | **Field Extraction** <br/> *All Sources* | Extract values from any JSON payload <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [dummy](https://github.com/falcosecurity/plugins/tree/main/plugins/dummy) | **Event Sourcing** <br/>ID: 3 <br/>`dummy` <br/>**Field Extraction** <br/> `dummy` | Reference plugin used to document interface <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [dummy_c](https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_c) | **Event Sourcing** <br/>ID: 4 <br/>`dummy_c` <br/>**Field Extraction** <br/> `dummy_c` | Like dummy, but written in C++ <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [docker](https://github.com/Issif/docker-plugin) | **Event Sourcing** <br/>ID: 5 <br/>`docker` <br/>**Field Extraction** <br/> `docker` | Docker Events <br/><br/> Authors: [Thomas Labarussias](https://github.com/Issif) <br/> License: Apache-2.0 |
| [seccompagent](https://github.com/kinvolk/seccompagent) | **Event Sourcing** <br/>ID: 6 <br/>`seccompagent` <br/>**Field Extraction** <br/> `seccompagent` | Seccomp Agent Events <br/><br/> Authors: [Alban Crequy](https://github.com/kinvolk/seccompagent) <br/> License: Apache-2.0 |
| [okta](https://github.com/falcosecurity/plugins/tree/main/plugins/okta) | **Event Sourcing** <br/>ID: 7 <br/>`okta` <br/>**Field Extraction** <br/> `okta` | Okta Log Events <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [github](https://github.com/falcosecurity/plugins/tree/main/plugins/github) | **Event Sourcing** <br/>ID: 8 <br/>`github` <br/>**Field Extraction** <br/> `github` | Github Webhook Events <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [k8saudit-eks](https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-eks) | **Event Sourcing** <br/>ID: 9 <br/>`k8s_audit` <br/>**Field Extraction** <br/> `k8s_audit` | Read Kubernetes Audit Events from AWS EKS Clusters <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [nomad](https://github.com/albertollamaso/nomad-plugin/tree/main) | **Event Sourcing** <br/>ID: 10 <br/>`nomad` <br/>**Field Extraction** <br/> `nomad` | Read Hashicorp Nomad Events Stream <br/><br/> Authors: [Alberto Llamas](https://github.com/albertollamaso/nomad-plugin/issues) <br/> License: Apache-2.0 |
| [dnscollector](https://github.com/SysdigDan/dnscollector-falco-plugin) | **Event Sourcing** <br/>ID: 11 <br/>`dnscollector` <br/>**Field Extraction** <br/> `dnscollector` | DNS Collector Events <br/><br/> Authors: [Daniel Moloney](https://github.com/SysdigDan/dnscollector-falco-plugin/issues) <br/> License: Apache-2.0 |
| [gcpaudit](https://github.com/falcosecurity/plugins/tree/main/plugins/gcpaudit) | **Event Sourcing** <br/>ID: 12 <br/>`gcp_auditlog` <br/>**Field Extraction** <br/> `gcp_auditlog` | Read GCP Audit Logs <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [syslogsrv](https://github.com/nabokihms/syslogsrv-falco-plugin/tree/main/plugins/syslogsrv) | **Event Sourcing** <br/>ID: 13 <br/>`syslogsrv` <br/>**Field Extraction** <br/> `syslogsrv` | Syslog Server Events <br/><br/> Authors: [Maksim Nabokikh](https://github.com/nabokihms/syslogsrv-falco-plugin/issues) <br/> License: Apache-2.0 |
| [salesforce](https://github.com/an1245/falco-plugin-salesforce/) | **Event Sourcing** <br/>ID: 14 <br/>`salesforce` <br/>**Field Extraction** <br/> `salesforce` | Falco plugin providing basic runtime threat detection and auditing logging for Salesforce <br/><br/> Authors: [Andy](https://github.com/an1245/falco-plugin-salesforce/issues) <br/> License: Apache-2.0 |
| [box](https://github.com/an1245/falco-plugin-box/) | **Event Sourcing** <br/>ID: 15 <br/>`box` <br/>**Field Extraction** <br/> `box` | Falco plugin providing basic runtime threat detection and auditing logging for Box <br/><br/> Authors: [Andy](https://github.com/an1245/falco-plugin-box/issues) <br/> License: Apache-2.0 |
| [k8smeta](https://github.com/falcosecurity/plugins/tree/main/plugins/k8smeta) | **Field Extraction** <br/> `syscall` | Enriche Falco syscall flow with Kubernetes Metadata <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [k8saudit-gke](https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-gke) | **Event Sourcing** <br/>ID: 16 <br/>`k8s_audit` <br/>**Field Extraction** <br/> `k8s_audit` | Read Kubernetes Audit Events from GKE Clusters <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [journald](https://github.com/gnosek/falco-journald-plugin) | **Event Sourcing** <br/>ID: 17 <br/>`journal` <br/>**Field Extraction** <br/> `journal` | Read Journald events into Falco <br/><br/> Authors: [Grzegorz Nosek](https://github.com/gnosek/falco-journald-plugin) <br/> License: Apache-2.0 |
| [kafka](https://github.com/falcosecurity/plugins/tree/main/plugins/kafka) | **Event Sourcing** <br/>ID: 18 <br/>`kafka` | Read events from Kafka topics into Falco <br/><br/> Authors: [Hunter Madison](https://falco.org/community) <br/> License: Apache-2.0 |
| [gitlab](https://github.com/an1245/falco-plugin-gitlab) | **Event Sourcing** <br/>ID: 19 <br/>`gitlab` <br/>**Field Extraction** <br/> `gitlab` | Falco plugin providing basic runtime threat detection and auditing logging for GitLab <br/><br/> Authors: [Andy](https://github.com/an1245/falco-plugin-gitlab/issues) <br/> License: Apache-2.0 |
| [keycloak](https://github.com/mattiaforc/falco-keycloak-plugin) | **Event Sourcing** <br/>ID: 20 <br/>`keycloak` <br/>**Field Extraction** <br/> `keycloak` | Falco plugin for sourcing and extracting Keycloak user/admin events <br/><br/> Authors: [Mattia Forcellese](https://github.com/mattiaforc/falco-keycloak-plugin/issues) <br/> License: Apache-2.0 |
| [k8saudit-aks](https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-aks) | **Event Sourcing** <br/>ID: 21 <br/>`k8s_audit` <br/>**Field Extraction** <br/> `k8s_audit` | Read Kubernetes Audit Events from Azure AKS Clusters <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [k8saudit-ovh](https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-ovh) | **Event Sourcing** <br/>ID: 22 <br/>`k8s_audit` <br/>**Field Extraction** <br/> `k8s_audit` | Read Kubernetes Audit Events from OVHcloud MKS Clusters <br/><br/> Authors: [Aurélie Vache](https://falco.org/community) <br/> License: Apache-2.0 |
| [dummy_rs](https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_rs) | **Event Sourcing** <br/>ID: 23 <br/>`dummy_rs` <br/>**Field Extraction** <br/> `dummy_rs` | Like dummy, but written in Rust <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [container](https://github.com/falcosecurity/plugins/tree/main/plugins/container) | **Field Extraction** <br/> `syscall` | Enriche Falco syscall flow with Container Metadata <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [krsi](https://github.com/falcosecurity/plugins/tree/main/plugins/krsi) | **Field Extraction** <br/> `syscall` | Security (KRSI) events support for Falco <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [collector](https://github.com/falcosecurity/plugins/tree/main/plugins/collector) | **Event Sourcing** <br/>ID: 24 <br/>`collector` | Generic collector to ingest raw payloads into Falco <br/><br/> Authors: [The Falco Authors](https://falco.org/community) <br/> License: Apache-2.0 |
| [awselb](https://github.com/yukinakanaka/falco-plugin-aws-elb) | **Event Sourcing** <br/>ID: 25 <br/>`awselb` <br/>**Field Extraction** <br/> `awselb` | AWS Elastic Load Balancer access logs events <br/><br/> Authors: [Yuki Nakamura](https://github.com/yukinakanaka/falco-plugin-aws-elb/issues) <br/> License: Apache-2.0 |
<!-- REGISTRY:TABLE -->
## Hosted Plugins
## Falcosecurity Plugins
Another purpose of this repository is to host and maintain the plugins owned by the Falcosecurity organization. Each plugin is a standalone project and has its own directory, and they are all inside the [plugins](https://github.com/falcosecurity/plugins/tree/master/plugins) folder.
Along with the registry, this repository hosts the official plugins maintained by the Falcosecurity organization. Each plugin is an independent project with its own directory in the [plugins folder](https://github.com/falcosecurity/plugins/tree/main/plugins).
The `master` branch contains the most up-to-date state of development, and each plugin is regularly released. Please check our [Release Process](./release.md) to know how plugins are released and how artifacts are distributed. Dev builds are published each time a Pull Request gets merged into `master`, whereas stable builds are released and published only when a new release gets tagged. You can find the published artifacts at https://download.falco.org/?prefix=plugins.
The `main` branch reflects the latest development state, and plugins are released on a regular basis. Development builds are published automatically when a Pull Request is merged into `main`, while stable builds are released only when a new tag is created. You can find all published artifacts at [download.falco.org](https://download.falco.org/?prefix=plugins). For details on the release process, please see our [Release Process](./release.md).
If you wish to contribute your plugin to the Falcosecurity organization, you just need to open a Pull Request to add it inside the `plugins` folder and to add it inside the registry. In order to be hosted in this repository, plugins must be licensed under the [Apache 2.0 License](./LICENSE).
The instructions below explain how to install and apply only to plugins from this repository.
### Installing Plugins
Plugins hosted in this repository are built and distributed through Falco's official channels. You can easily install them using either [falcoctl](https://github.com/falcosecurity/falcoctl) or the [Falco Helm chart](https://github.com/falcosecurity/charts/tree/master/charts/falco).
#### Using falcoctl
1. **Install falcoctl:** If you haven't already, follow the [falcoctl installation guide](https://github.com/falcosecurity/falcoctl?tab=readme-ov-file#installation).
2. **Install a Plugin:** Execute the following command, replacing `<plugin-name>` with the name of the plugin you wish to install:
```bash
falcoctl index update falcosecurity
falcoctl artifact install <plugin-name>
```
> Depending on your environment, you may need to run the above commands with `sudo`.
3. Configure Falco to load the plugin as described in the [plugin's documentation](https://falco.org/docs/concepts/plugins/usage/#loading-plugins-in-falco).
#### Using the Falco Helm Chart
When installing Falco using the Helm chart, you can instruct the chart to install a specific plugin by setting the `falcoctl.config.artifact.install.refs` value and then adding the relevant plugin configuration under `falco`.
The Helm charts provides a preset [values-k8saudit.yaml](https://github.com/falcosecurity/charts/blob/master/charts/falco/values-k8saudit.yaml) file that can be used to install the `k8saudit` plugin or as example for installing other plugins.
## Contributing
If you want to help and wish to contribute, please review our [contribution guidelines](https://github.com/falcosecurity/.github/blob/master/CONTRIBUTING.md). Code contributions are always encouraged and welcome!
If you want to help and wish to contribute, please review our [contribution guidelines](https://github.com/falcosecurity/.github/blob/main/CONTRIBUTING.md). Code contributions are always encouraged and welcome!
If you wish to contribute a plugin to The Falco Project, simply open a Pull Request to add your plugin to the `/plugins` folder and [update the registry accordingly](./docs/registering-a-plugin.md). Note that to be hosted in this repository, plugins must be licensed under the [Apache 2.0 License](./LICENSE).
### Enforcing coding style and repo policies locally
This repository supports enforcing coding style and policies locally through the `pre-commit` framework. `pre-commit`
allows to automatically install `git-hooks` that will be executed at every new commit. The following is the list of
`git-hooks` defined in `.pre-commit-config.yaml` (notice that some of them only target files written in a specific
language):
1. the `rust-fmt` hook - a `pre-commit` git hook running `rust fmt` on the staged changes
2. the `dco` hook - a `pre-commit-msg` git hook running adding the `DCO` on the commit if not present
The following steps describe how to install these hooks.
##### Step 1
Install `pre-commit` framework following the [official documentation](https://pre-commit.com/#installation).
> __Please note__: you have to follow only the "Installation" section.
#### Step 2
Install `pre-commit` git hooks:
```bash
pre-commit install --hook-type pre-commit --hook-type prepare-commit-msg --overwrite
```
## License

1
build/changelog/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
bin

26
build/changelog/Makefile Normal file
View File

@ -0,0 +1,26 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2023 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
SHELL=/bin/bash -o pipefail
GO ?= go
all: bin/changelog
clean:
@rm -fr bin
bin/changelog: changelog.go
@mkdir -p bin
@$(GO) build -o bin/changelog changelog.go

View File

@ -0,0 +1,172 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"errors"
"fmt"
"os"
"os/exec"
"regexp"
"strings"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
"github.com/spf13/pflag"
)
const (
commitHashMaxLen = 7
commitLinkFmt = "https://github.com/falcosecurity/plugins/commit/%s"
commitMsgMaxLen = 80
)
func git(args ...string) (output []string, err error) {
fmt.Fprintln(os.Stderr, "git ", strings.Join(args, " "))
stdout, err := exec.Command("git", args...).Output()
if err != nil {
if exitErr, ok := err.(*exec.ExitError); ok {
return nil, errors.New("git (" + exitErr.String() + "): " + string(exitErr.Stderr))
}
return nil, err
}
return strings.Split(string(stdout), "\n"), nil
}
// an empty string matches the last tag with no match filtering
func gitGetLatestTagWithMatch(match []string) (string, error) {
args := []string{"describe", "--tags", "--abbrev=0"}
if len(match) > 0 {
for _, m := range match {
args = append(args, "--match", m)
}
}
tags, err := git(args...)
if err != nil {
return "", err
}
if len(tags) == 0 {
return "", errors.New("git tag not found")
}
return tags[0], nil
}
// an empty tag lists commit from whole history
func gitListCommits(from, to string) ([]string, error) {
revRange := ""
if len(to) > 0 {
revRange = to
}
if len(from) > 0 {
if len(revRange) == 0 {
revRange = "HEAD"
}
revRange = from + ".." + revRange
}
logs, err := git("log", revRange, "--oneline")
if err != nil {
return nil, err
}
return logs, nil
}
func pluginSource(pname string) string {
reg, err := registry.LoadRegistryFromFile("registry.yaml")
if err != nil {
fail(fmt.Errorf("an error occurred while loading registry entries from file %q: %v", "registry.yaml", err))
}
for _, plugin := range reg.Plugins {
if plugin.Name == pname && plugin.Capabilities.Sourcing.Supported {
return plugin.Capabilities.Sourcing.Source
}
}
return ""
}
func fail(err error) {
fmt.Printf("error: %s\n", err)
os.Exit(1)
}
// formats the line with markdown syntax and decorates it
func formatCommitLine(c string) string {
firstSpace := strings.Index(c, " ")
hash := strings.Trim(c[:firstSpace], " ") // hash is before the first space
message := strings.Trim(c[firstSpace:], " ") // message is after the first space
if len(message) > commitMsgMaxLen {
message = message[:commitMsgMaxLen-3] + "..."
}
commitLink := fmt.Sprintf(commitLinkFmt, hash)
return fmt.Sprintf("* [`%s`](%s) %s", hash[:commitHashMaxLen], commitLink, message)
}
func main() {
var plugin string
var from string
var to string
pflag.StringVar(&plugin, "plugin", "", "Name of the plugin to generate the changelog for")
pflag.StringVar(&from, "from", "", "Tag/branch/hash from which start listing commits")
pflag.StringVar(&to, "to", "HEAD", "Tag/branch/hash to which stop listing commits")
pflag.Parse()
// if from is not specified, we use the latest tag matching the plugin name
if len(from) == 0 {
match := []string{}
if len(plugin) > 0 {
match = append(match, "plugins/"+plugin+"/v[0-9]*.[0-9]*.[0-9]*")
match = append(match, plugin+"-[0-9]*.[0-9]*.[0-9]*")
}
tag, err := gitGetLatestTagWithMatch(match)
if err != nil {
fmt.Fprintln(os.Stderr, "no matching tag found for plugin '"+plugin+"', using commits from whole history:", err.Error())
} else {
from = tag
}
}
// get all commits
commits, err := gitListCommits(from, to)
if err != nil {
fail(err)
}
var rgx, rgxSource, rgxDeps *regexp.Regexp
if len(plugin) > 0 {
// craft a regex to filter all plugin-related commits that follow
// the conventional commit format
rgx, _ = regexp.Compile("^[a-f0-9]+ [a-zA-Z]+\\(([a-zA-Z\\/]+\\/)?" + plugin + "(\\/[a-zA-Z\\/]+)?\\):.*")
// use source name of the plugin as well, if it has sourcing capabilities
pluginSource := pluginSource(plugin)
if pluginSource != "" {
rgxSource, _ = regexp.Compile("^[a-f0-9]+ [a-zA-Z]+\\(([a-zA-Z\\/]+\\/)?" + pluginSource + "(\\/[a-zA-Z\\/]+)?\\):.*")
}
// craft a regex to filter all plugin-related dependabot commits
rgxDeps, _ = regexp.Compile("^[a-f0-9]+ build\\(deps\\):.*" + plugin + "$")
}
for _, c := range commits {
if len(c) > 0 && (rgx == nil || rgx.MatchString(c) ||
(rgxSource != nil && rgxSource.MatchString(c)) ||
rgxDeps.MatchString(c)) {
fmt.Println(formatCommitLine(c) + "\n")
}
}
}

39
build/changelog/go.mod Normal file
View File

@ -0,0 +1,39 @@
module github.com/falcosecurity/plugins/build/changelog
go 1.23.0
toolchain go1.24.1
require (
github.com/falcosecurity/plugins/build/registry v0.0.0-20240514080945-0e7ef7698747
github.com/spf13/pflag v1.0.6
)
require (
github.com/docker/cli v24.0.5+incompatible // indirect
github.com/docker/docker v25.0.6+incompatible // indirect
github.com/docker/docker-credential-helpers v0.8.0 // indirect
github.com/falcosecurity/falcoctl v0.6.1 // indirect
github.com/fsnotify/fsnotify v1.6.0 // indirect
github.com/hashicorp/hcl v1.0.0 // indirect
github.com/magiconair/properties v1.8.7 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.0-rc4 // indirect
github.com/pelletier/go-toml/v2 v2.0.9 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/spf13/afero v1.9.5 // indirect
github.com/spf13/cast v1.5.1 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
github.com/spf13/viper v1.16.0 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
golang.org/x/oauth2 v0.27.0 // indirect
golang.org/x/sync v0.12.0 // indirect
golang.org/x/sys v0.31.0 // indirect
golang.org/x/text v0.23.0 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
oras.land/oras-go/v2 v2.2.1 // indirect
)

516
build/changelog/go.sum Normal file
View File

@ -0,0 +1,516 @@
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU=
cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY=
cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc=
cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0=
cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To=
cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4=
cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M=
cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc=
cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk=
cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs=
cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc=
cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY=
cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI=
cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk=
cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY=
cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o=
cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE=
cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc=
cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg=
cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc=
cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ=
cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE=
cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk=
cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I=
cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw=
cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA=
cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU=
cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw=
cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos=
cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk=
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo=
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/docker/cli v24.0.5+incompatible h1:WeBimjvS0eKdH4Ygx+ihVq1Q++xg36M/rMi4aXAvodc=
github.com/docker/cli v24.0.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/docker v25.0.6+incompatible h1:5cPwbwriIcsua2REJe8HqQV+6WlWc1byg2QSXzBxBGg=
github.com/docker/docker v25.0.6+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.8.0 h1:YQFtbBQb4VrpoPxhFuzEBPQ9E16qz5SpHLS+uswaCp8=
github.com/docker/docker-credential-helpers v0.8.0/go.mod h1:UGFXcuoQ5TxPiB54nHOZ32AWRqQdECoh/Mg0AlEYb40=
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po=
github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk=
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
github.com/falcosecurity/falcoctl v0.6.1 h1:Klg3jHi/PL1Inw9DO9kGpzL6ka+TjI4oDl6kvm1I+VY=
github.com/falcosecurity/falcoctl v0.6.1/go.mod h1:4Hx4h3KtcaQzPKxvYn5S9x4IHxwd6QRK9Gu04HHNbhE=
github.com/falcosecurity/plugins/build/registry v0.0.0-20240514080945-0e7ef7698747 h1:d+YgxJXgcmu9LX5ixICSTaN3y5MmgCnxW8TfPu5i+Eg=
github.com/falcosecurity/plugins/build/registry v0.0.0-20240514080945-0e7ef7698747/go.mod h1:I/unuAO/urquhDsyOE+YmcY0FNBInVtLfZ5VwD3FUMo=
github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY=
github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY=
github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw=
github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y=
github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw=
github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4=
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk=
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI=
github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0=
github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE=
github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI=
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg=
github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk=
github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4=
github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ=
github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc=
github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU=
github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY=
github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.0-rc4 h1:oOxKUJWnFC4YGHCCMNql1x4YaDfYBTS5Y4x/Cgeo1E0=
github.com/opencontainers/image-spec v1.1.0-rc4/go.mod h1:X4pATf0uXsnn3g5aiGIsVnJBR4mxhKzfwmvK/B2NTm8=
github.com/pelletier/go-toml/v2 v2.0.9 h1:uH2qQXheeefCCkuBBSLi7jCiSmj3VRh2+Goq2N7Xxu0=
github.com/pelletier/go-toml/v2 v2.0.9/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ=
github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/spf13/afero v1.9.5 h1:stMpOSZFs//0Lv29HduCmli3GUfpFoF3Y1Q/aXj/wVM=
github.com/spf13/afero v1.9.5/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ=
github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA=
github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48=
github.com/spf13/jwalterweatherman v1.1.0 h1:ue6voC5bR5F8YxI5S67j9i582FU4Qvo2bmqnqMYADFk=
github.com/spf13/jwalterweatherman v1.1.0/go.mod h1:aNWZUN0dPAAO/Ljvb5BEdw96iTZ0EXowPYD95IqWIGo=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.16.0 h1:rGGH0XDZhdUOryiDWjmIvUSWpbNqisK8Wk0Vyefw8hc=
github.com/spf13/viper v1.16.0/go.mod h1:yg78JgCJcbrQOvV9YLXgkLaZqUidkY9K+Dd1FofRzQg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU=
go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8=
go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw=
go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs=
golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M=
golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.12.0 h1:MHc5BpPuC30uJk597Ri8TV3CNZcTLu6B6z4lJy+g6Jw=
golang.org/x/sync v0.12.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw=
golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE=
golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI=
google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE=
google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE=
google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM=
google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc=
google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg=
google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE=
google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8=
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0=
google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc=
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE=
google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8=
google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8=
google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4=
google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools/v3 v3.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY=
gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
oras.land/oras-go/v2 v2.2.1 h1:3VJTYqy5KfelEF9c2jo1MLSpr+TM3mX8K42wzZcd6qE=
oras.land/oras-go/v2 v2.2.1/go.mod h1:GeAwLuC4G/JpNwkd+bSZ6SkDMGaaYglt6YK2WvZP7uQ=
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=

2
build/readme/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
bin
readme

26
build/readme/Makefile Normal file
View File

@ -0,0 +1,26 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2023 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
SHELL=/bin/bash -o pipefail
GO ?= go
all: bin/readme
clean:
@rm -fr bin
bin/readme: readme.go fields.go
@mkdir -p bin
@$(GO) build -o bin/readme readme.go fields.go

87
build/readme/fields.go Normal file
View File

@ -0,0 +1,87 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"bytes"
"strings"
"github.com/falcosecurity/plugin-sdk-go/pkg/loader"
"github.com/falcosecurity/plugin-sdk-go/pkg/sdk"
"github.com/olekukonko/tablewriter"
)
const (
defaultFieldsTag = "README-PLUGIN-FIELDS"
)
func fieldsRenderArgRow(a *sdk.FieldEntryArg) string {
if !a.IsIndex && !a.IsKey {
return "None"
}
var res []string
if a.IsIndex {
res = append(res, "Index")
}
if a.IsKey {
res = append(res, "Key")
}
if a.IsRequired {
res = append(res, "Required")
}
return strings.Join(res, ", ")
}
// renderNewLines replaces '\n' character with "<br/>" for proper table formatting.
func renderNewLines(desc string) string {
return strings.ReplaceAll(desc, "\n", "<br/>")
}
func fieldsEditor(p *loader.Plugin, s string) (string, error) {
if !p.HasCapExtraction() {
return s, nil
}
fields := p.Fields()
if len(fields) == 0 {
return s, nil
}
var buf bytes.Buffer
table := tablewriter.NewWriter(&buf)
table.SetHeader([]string{"Name", "Type", "Arg", "Description"})
table.SetBorders(tablewriter.Border{Left: true, Top: false, Right: true, Bottom: false})
table.SetCenterSeparator("|")
table.SetRowSeparator("-")
table.SetAutoWrapText(false)
for _, f := range fields {
row := []string{}
row = append(row, "`"+f.Name+"`")
if f.IsList {
row = append(row, "`"+f.Type+" (list)`")
} else {
row = append(row, "`"+f.Type+"`")
}
row = append(row, fieldsRenderArgRow(&f.Arg))
row = append(row, renderNewLines(f.Desc))
table.Append(row)
}
table.Render()
return replateTag(s, fieldsTag, buf.String())
}

9
build/readme/go.mod Normal file
View File

@ -0,0 +1,9 @@
module github.com/falcosecurity/plugins/build/readme
go 1.13
require (
github.com/falcosecurity/plugin-sdk-go v0.7.5
github.com/olekukonko/tablewriter v0.0.5
github.com/spf13/pflag v1.0.6
)

33
build/readme/go.sum Normal file
View File

@ -0,0 +1,33 @@
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/falcosecurity/plugin-sdk-go v0.7.5 h1:ke/+kTt0PwedM8+IGTKcW3LrUI/xiJNDCSzqTSW+CvI=
github.com/falcosecurity/plugin-sdk-go v0.7.5/go.mod h1:NP+y22DYOS+G3GDXIXNmzf0CBL3nfPPMoQuHvAzfitQ=
github.com/mattn/go-runewidth v0.0.9 h1:Lm995f3rfxdpd6TSmuVCHVb/QhupuXlYr8sCI/QdE+0=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.2 h1:+h33VjcLVPDHtOdpUCuF+7gSuG3yGIftsP1YvFihtJ8=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=

102
build/readme/readme.go Normal file
View File

@ -0,0 +1,102 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package main
import (
"fmt"
"io/ioutil"
"os"
"strings"
"github.com/falcosecurity/plugin-sdk-go/pkg/loader"
"github.com/spf13/pflag"
)
var (
pluginPath string
readmePath string
fieldsTag string
)
type EditorFunc func(*loader.Plugin, string) (string, error)
func fail(err error) {
println(err.Error())
os.Exit(1)
}
func replateTag(s string, t string, r string) (string, error) {
startTag := "<!-- " + t + " -->\n"
endTag := "<!-- /" + t + " -->\n"
start := 0
for {
start = strings.Index(s[start:], startTag)
if start < 0 {
return s, nil
}
start += len(startTag)
end := strings.Index(s[start:], endTag)
if end < 0 {
return "", fmt.Errorf("can't find end tag: " + endTag)
}
end += start
s = s[:start] + r + s[end:]
start += len(r) + len(endTag)
}
}
func editFile(plugin *loader.Plugin, path string, editors ...EditorFunc) error {
bytes, err := ioutil.ReadFile(path)
if err != nil {
return err
}
edited := string(bytes)
for _, editor := range editors {
edited, err = editor(plugin, edited)
if err != nil {
return err
}
}
return ioutil.WriteFile(path, ([]byte)(edited), 0)
}
func main() {
pflag.StringVarP(&pluginPath, "plugin", "p", "", "File path to the plugin shared library.")
pflag.StringVarP(&readmePath, "file", "f", "", "File path to the README file to be edited.")
pflag.StringVar(&fieldsTag, "fields-tag", defaultFieldsTag, "Tag to substitute with the plugin fields table.\nIn the file, formatted as \"<!-- TAG -->\\n...\\n<!-- /TAG -->\".")
pflag.Parse()
if len(pluginPath) == 0 {
fail(fmt.Errorf("must specify a plugin path with the -p option"))
}
if len(readmePath) == 0 {
fail(fmt.Errorf("must specify a file path with the -f option"))
}
// load plugin
plugin, err := loader.NewPlugin(pluginPath)
if err != nil {
fail(err)
}
defer plugin.Unload()
// use plugin info to edit readme file
err = editFile(plugin, readmePath, fieldsEditor)
if err != nil {
fail(err)
}
}

View File

@ -1,5 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2022 The Falco Authors.
# Copyright (C) 2023 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -17,82 +18,45 @@ limitations under the License.
package main
import (
"bufio"
"context"
"fmt"
"io/ioutil"
"os"
"strings"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
"github.com/falcosecurity/plugins/build/registry/cmd/validateRegistry"
"github.com/spf13/cobra"
"github.com/falcosecurity/plugins/build/registry/internal/options"
"github.com/falcosecurity/plugins/build/registry/pkg/check"
"github.com/falcosecurity/plugins/build/registry/pkg/distribution"
"github.com/falcosecurity/plugins/build/registry/pkg/oci"
"github.com/falcosecurity/plugins/build/registry/pkg/table"
)
const (
defaultTableSubTag = "<!-- REGISTRY -->"
)
func loadRegistryFromFile(fname string) (*registry.Registry, error) {
file, err := os.Open(fname)
if err != nil {
return nil, err
}
defer file.Close()
return registry.Load(file)
}
func doCheck(fileName string) error {
registry, err := loadRegistryFromFile(fileName)
if err != nil {
return err
}
return registry.Validate()
}
func doTable(registryFile, subFile, subTag string) error {
r, err := loadRegistryFromFile(registryFile)
if err != nil {
return err
}
err = r.Validate()
if err != nil {
return err
}
table, err := FormatMarkdownTable(r)
if err != nil {
return err
}
if len(subFile) == 0 {
fmt.Println(table)
} else {
if len(subTag) == 0 {
return fmt.Errorf("subtag flag is required")
}
content, err := ioutil.ReadFile(subFile)
if err != nil {
return err
}
pieces := strings.SplitN(string(content), subTag, 3)
if len(pieces) != 3 {
return fmt.Errorf("can't find two instances of subtag in text file: '%s'", subTag)
}
contentStr := fmt.Sprintf("%s%s\n%s\n%s%s", pieces[0], subTag, table, subTag, pieces[2])
if err = ioutil.WriteFile(subFile, []byte(contentStr), 0666); err != nil {
return err
}
}
return nil
}
var (
out = bufio.NewWriter(os.Stdout)
)
func main() {
defer out.Flush()
opts := options.NewCommonOptions(
options.WithContext(context.Background()),
options.WithOutput(out),
)
checkCmd := &cobra.Command{
Use: "check <filename>",
Short: "Verify the correctness of a plugin registry YAML file",
Args: cobra.ExactArgs(1),
DisableFlagsInUseLine: true,
RunE: func(c *cobra.Command, args []string) error {
return doCheck(args[0])
return check.DoCheck(args[0])
},
}
@ -103,19 +67,59 @@ func main() {
Short: "Format a plugin registry YAML file in a MarkDown table",
Args: cobra.ExactArgs(1),
RunE: func(c *cobra.Command, args []string) error {
return doTable(args[0], tableSubFileName, tableSubTab)
return table.DoTable(args[0], tableSubFileName, tableSubTab)
},
}
tableFlags := tableCmd.Flags()
tableFlags.StringVar(&tableSubTab, "subtag", defaultTableSubTag, "A tag that delimits the start and the end of the text section to substitute with the generated table.")
tableFlags.StringVar(&tableSubFileName, "subfile", "", "If specified, the table will be written inside the file at this path, inserting it between the first two instances of the substitution tag.")
updateIndexCmd := &cobra.Command{
Use: "update-index <registryFilename> <indexFilename>",
Short: "Update an index file for artifacts distribution using registry data",
Args: cobra.ExactArgs(2),
DisableFlagsInUseLine: true,
RunE: func(c *cobra.Command, args []string) error {
return distribution.DoUpdateIndex(args[0], args[1])
},
}
var (
pluginsAMD64Path string
pluginsARM64Path string
rulesfilesPath string
devTag string
)
updateOCIRegistry := &cobra.Command{
Use: "update-oci-registry <registryFilename>",
Short: "Update the oci registry starting from the registry file and s3 bucket",
Args: cobra.ExactArgs(1),
DisableFlagsInUseLine: true,
RunE: func(c *cobra.Command, args []string) error {
status, err := oci.DoUpdateOCIRegistry(opts.Context, args[0], pluginsAMD64Path, pluginsARM64Path, rulesfilesPath, devTag)
if err != nil {
return err
}
return oci.PrintUpdateStatus(status, opts.Output)
},
}
ociFlags := updateOCIRegistry.Flags()
ociFlags.StringVar(&pluginsAMD64Path, "plugins-amd64-path", "", "Path to plugins for the amd64 architecture")
ociFlags.StringVar(&pluginsARM64Path, "plugins-arm64-path", "", "Path to plugins for the arm64 architecture")
ociFlags.StringVar(&rulesfilesPath, "rulesfiles-path", "", "Path to rulesfiles")
ociFlags.StringVar(&devTag, "dev-tag", "", "Tag for devel versions")
rootCmd := &cobra.Command{
Use: "registry",
Version: "0.2.0",
}
rootCmd.AddCommand(checkCmd)
rootCmd.AddCommand(tableCmd)
rootCmd.AddCommand(updateIndexCmd)
rootCmd.AddCommand(updateOCIRegistry)
rootCmd.AddCommand(validateRegistry.NewValidateRegistry(context.Background()))
if err := rootCmd.Execute(); err != nil {
fmt.Printf("error: %s\n", err)

View File

@ -0,0 +1,57 @@
package validateRegistry
import (
"context"
"fmt"
"strings"
"github.com/falcosecurity/falcoctl/pkg/oci/authn"
ocipuller "github.com/falcosecurity/falcoctl/pkg/oci/puller"
"github.com/falcosecurity/plugins/build/registry/pkg/oci"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
"github.com/spf13/cobra"
"k8s.io/klog/v2"
)
func NewValidateRegistry(ctx context.Context) *cobra.Command {
updateOCIRegistry := &cobra.Command{
Use: "validate-registry <registryFilename>",
Short: "Check that an OCI repo exists for each plugin in the registry file",
Args: cobra.ExactArgs(1),
DisableFlagsInUseLine: true,
RunE: func(c *cobra.Command, args []string) error {
return validateRegistry(ctx, args[0])
},
}
return updateOCIRegistry
}
func validateRegistry(ctx context.Context, registryFile string) error {
reg, err := registry.LoadRegistryFromFile(registryFile)
if err != nil {
return fmt.Errorf("an error occurred while loading registry entries from file %q: %v", registryFile, err)
}
ociClient := authn.NewClient()
puller := ocipuller.NewPuller(ociClient, false, nil)
// For each plugin in the registry index, look for new ones to be released, and publish them.
for _, plugin := range reg.Plugins {
// Filter out plugins that are not owned by falcosecurity.
if !strings.HasPrefix(plugin.URL, oci.PluginsRepo) {
klog.V(2).Infof("skipping plugin %q with authors %q: it is not maintained by %q",
plugin.Name, plugin.Authors, oci.FalcoAuthors)
continue
}
klog.Infof("Checking OCI repo for plugin %q", plugin.Name)
ref := fmt.Sprintf("ghcr.io/falcosecurity/plugins/plugin/%s:latest", plugin.Name)
// We just retrieve the descriptor from the remote repository,
// if it fails, likely the repository does not exist
if _, err := puller.Descriptor(ctx, ref); err != nil {
return fmt.Errorf("plugin %s seems to not have an OCI repository: %w", plugin.Name, err)
}
}
return nil
}

View File

@ -1,10 +1,165 @@
module github.com/falcosecurity/plugins/build/registry
go 1.13
go 1.23.4
toolchain go1.24.1
require (
github.com/kr/pretty v0.3.0 // indirect
github.com/spf13/cobra v1.4.0
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect
github.com/blang/semver v3.5.1+incompatible
github.com/falcosecurity/falcoctl v0.11.0
github.com/falcosecurity/plugin-sdk-go v0.7.5
github.com/onsi/ginkgo/v2 v2.23.4
github.com/onsi/gomega v1.37.0
github.com/pkg/errors v0.9.1
github.com/spf13/cobra v1.9.1
github.com/stretchr/testify v1.10.0
gopkg.in/yaml.v2 v2.4.0
gopkg.in/yaml.v3 v3.0.1
k8s.io/klog/v2 v2.130.1
oras.land/oras-go/v2 v2.6.0
)
require (
atomicgo.dev/cursor v0.2.0 // indirect
atomicgo.dev/keyboard v0.2.9 // indirect
atomicgo.dev/schedule v0.1.0 // indirect
cloud.google.com/go/compute/metadata v0.6.0 // indirect
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect
github.com/MakeNowJust/heredoc v1.0.0 // indirect
github.com/Microsoft/go-winio v0.6.2 // indirect
github.com/blang/semver/v4 v4.0.0 // indirect
github.com/chai2010/gettext-go v1.0.3 // indirect
github.com/cilium/ebpf v0.17.3 // indirect
github.com/containerd/console v1.0.4 // indirect
github.com/containerd/log v0.1.0 // indirect
github.com/creasty/defaults v1.8.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/distribution/reference v0.6.0 // indirect
github.com/docker/cli v27.5.1+incompatible // indirect
github.com/docker/docker v27.5.1+incompatible // indirect
github.com/docker/docker-credential-helpers v0.8.2 // indirect
github.com/docker/go-connections v0.5.0 // indirect
github.com/docker/go-units v0.5.0 // indirect
github.com/dustin/go-humanize v1.0.1 // indirect
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f // indirect
github.com/falcosecurity/driverkit v0.20.5 // indirect
github.com/fatih/camelcase v1.0.0 // indirect
github.com/felixge/httpsnoop v1.0.4 // indirect
github.com/fsnotify/fsnotify v1.8.0 // indirect
github.com/fxamacker/cbor/v2 v2.7.0 // indirect
github.com/gabriel-vasile/mimetype v1.4.8 // indirect
github.com/go-errors/errors v1.5.1 // indirect
github.com/go-logr/logr v1.4.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-openapi/jsonpointer v0.21.0 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/swag v0.23.0 // indirect
github.com/go-playground/locales v0.14.1 // indirect
github.com/go-playground/universal-translator v0.18.1 // indirect
github.com/go-playground/validator/v10 v10.25.0 // indirect
github.com/go-task/slim-sprig/v3 v3.0.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/golang/protobuf v1.5.4 // indirect
github.com/google/btree v1.1.3 // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/gofuzz v1.2.0 // indirect
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/gookit/color v1.5.4 // indirect
github.com/gorilla/websocket v1.5.3 // indirect
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect
github.com/hashicorp/hcl v1.0.1-vault-7 // indirect
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/klauspost/compress v1.17.11 // indirect
github.com/leodido/go-urn v1.4.0 // indirect
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect
github.com/lithammer/fuzzysearch v1.1.8 // indirect
github.com/magiconair/properties v1.8.9 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/mattn/go-runewidth v0.0.16 // indirect
github.com/mitchellh/go-homedir v1.1.0 // indirect
github.com/mitchellh/go-wordwrap v1.0.1 // indirect
github.com/mitchellh/mapstructure v1.5.0 // indirect
github.com/moby/docker-image-spec v1.3.1 // indirect
github.com/moby/patternmatcher v0.6.0 // indirect
github.com/moby/spdystream v0.5.0 // indirect
github.com/moby/sys/sequential v0.6.0 // indirect
github.com/moby/sys/user v0.3.0 // indirect
github.com/moby/sys/userns v0.1.0 // indirect
github.com/moby/term v0.5.2 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect
github.com/ncruces/go-strftime v0.1.9 // indirect
github.com/olekukonko/tablewriter v0.0.5 // indirect
github.com/opencontainers/go-digest v1.0.0 // indirect
github.com/opencontainers/image-spec v1.1.1 // indirect
github.com/pelletier/go-toml/v2 v2.2.3 // indirect
github.com/peterbourgon/diskv v2.0.1+incompatible // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/pterm/pterm v0.12.80 // indirect
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec // indirect
github.com/rivo/uniseg v0.4.7 // indirect
github.com/russross/blackfriday/v2 v2.1.0 // indirect
github.com/sagikazarmark/locafero v0.7.0 // indirect
github.com/sagikazarmark/slog-shim v0.1.0 // indirect
github.com/sirupsen/logrus v1.9.3 // indirect
github.com/sourcegraph/conc v0.3.0 // indirect
github.com/spf13/afero v1.12.0 // indirect
github.com/spf13/cast v1.7.1 // indirect
github.com/spf13/pflag v1.0.6 // indirect
github.com/spf13/viper v1.19.0 // indirect
github.com/subosito/gotenv v1.6.0 // indirect
github.com/x448/float16 v0.8.4 // indirect
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect
github.com/xeipuuv/gojsonschema v1.2.0 // indirect
github.com/xlab/treeprint v1.2.0 // indirect
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
go.opentelemetry.io/auto/sdk v1.1.0 // indirect
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 // indirect
go.opentelemetry.io/otel v1.34.0 // indirect
go.opentelemetry.io/otel/metric v1.34.0 // indirect
go.opentelemetry.io/otel/trace v1.34.0 // indirect
go.uber.org/automaxprocs v1.6.0 // indirect
go.uber.org/multierr v1.11.0 // indirect
golang.org/x/crypto v0.36.0 // indirect
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f // indirect
golang.org/x/net v0.38.0 // indirect
golang.org/x/oauth2 v0.27.0 // indirect
golang.org/x/sync v0.14.0 // indirect
golang.org/x/sys v0.32.0 // indirect
golang.org/x/term v0.30.0 // indirect
golang.org/x/text v0.23.0 // indirect
golang.org/x/time v0.10.0 // indirect
golang.org/x/tools v0.31.0 // indirect
google.golang.org/protobuf v1.36.6 // indirect
gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/ini.v1 v1.67.0 // indirect
k8s.io/api v0.32.3 // indirect
k8s.io/apimachinery v0.32.3 // indirect
k8s.io/cli-runtime v0.32.2 // indirect
k8s.io/client-go v0.32.2 // indirect
k8s.io/component-base v0.32.2 // indirect
k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect
k8s.io/kubectl v0.32.2 // indirect
k8s.io/utils v0.0.0-20241210054802-24370beab758 // indirect
modernc.org/libc v1.61.13 // indirect
modernc.org/mathutil v1.7.1 // indirect
modernc.org/memory v1.8.2 // indirect
modernc.org/sqlite v1.35.0 // indirect
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/kustomize/api v0.19.0 // indirect
sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.5.0 // indirect
sigs.k8s.io/yaml v1.4.0 // indirect
)

View File

@ -1,26 +1,591 @@
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
atomicgo.dev/assert v0.0.2 h1:FiKeMiZSgRrZsPo9qn/7vmr7mCsh5SZyXY4YGYiYwrg=
atomicgo.dev/assert v0.0.2/go.mod h1:ut4NcI3QDdJtlmAxQULOmA13Gz6e2DWbSAS8RUOmNYQ=
atomicgo.dev/cursor v0.2.0 h1:H6XN5alUJ52FZZUkI7AlJbUc1aW38GWZalpYRPpoPOw=
atomicgo.dev/cursor v0.2.0/go.mod h1:Lr4ZJB3U7DfPPOkbH7/6TOtJ4vFGHlgj1nc+n900IpU=
atomicgo.dev/keyboard v0.2.9 h1:tOsIid3nlPLZ3lwgG8KZMp/SFmr7P0ssEN5JUsm78K8=
atomicgo.dev/keyboard v0.2.9/go.mod h1:BC4w9g00XkxH/f1HXhW2sXmJFOCWbKn9xrOunSFtExQ=
atomicgo.dev/schedule v0.1.0 h1:nTthAbhZS5YZmgYbb2+DH8uQIZcTlIrd4eYr3UQxEjs=
atomicgo.dev/schedule v0.1.0/go.mod h1:xeUa3oAkiuHYh8bKiQBRojqAMq3PXXbJujjb0hw8pEU=
cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU=
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24/go.mod h1:8o94RPi1/7XTJvwPpRSzSUedZrtlirdB3r9Z20bi2f8=
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ=
github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE=
github.com/MarvinJWendt/testza v0.1.0/go.mod h1:7AxNvlfeHP7Z/hDQ5JtE3OKYT3XFUeLCDE2DQninSqs=
github.com/MarvinJWendt/testza v0.2.1/go.mod h1:God7bhG8n6uQxwdScay+gjm9/LnO4D3kkcZX4hv9Rp8=
github.com/MarvinJWendt/testza v0.2.8/go.mod h1:nwIcjmr0Zz+Rcwfh3/4UhBp7ePKVhuBExvZqnKYWlII=
github.com/MarvinJWendt/testza v0.2.10/go.mod h1:pd+VWsoGUiFtq+hRKSU1Bktnn+DMCSrDrXDpX2bG66k=
github.com/MarvinJWendt/testza v0.2.12/go.mod h1:JOIegYyV7rX+7VZ9r77L/eH6CfJHHzXjB69adAhzZkI=
github.com/MarvinJWendt/testza v0.3.0/go.mod h1:eFcL4I0idjtIx8P9C6KkAuLgATNKpX4/2oUqKc6bF2c=
github.com/MarvinJWendt/testza v0.4.2/go.mod h1:mSdhXiKH8sg/gQehJ63bINcCKp7RtYewEjXsvsVUPbE=
github.com/MarvinJWendt/testza v0.5.2 h1:53KDo64C1z/h/d/stCYCPY69bt/OSwjq5KpFNwi+zB4=
github.com/MarvinJWendt/testza v0.5.2/go.mod h1:xu53QFE5sCdjtMCKk8YMQ2MnymimEctc4n3EjyIYvEY=
github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d h1:licZJFw2RwpHMqeKTCYkitsPqHNxTmd4SNR5r94FGM8=
github.com/acarl005/stripansi v0.0.0-20180116102854-5a71ef0e047d/go.mod h1:asat636LX7Bqt5lYEZ27JNDcqxfjdBQuJ/MM4CN/Lzo=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
github.com/atomicgo/cursor v0.0.1/go.mod h1:cBON2QmmrysudxNBFthvMtN32r3jxVRIvzkUiF/RuIk=
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ=
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM=
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
github.com/bshuster-repo/logrus-logstash-hook v1.1.0 h1:o2FzZifLg+z/DN1OFmzTWzZZx/roaqt8IPZCIVco8r4=
github.com/bshuster-repo/logrus-logstash-hook v1.1.0/go.mod h1:Q2aXOe7rNuPgbBtPCOzYyWDvKX7+FpxE5sRdvcPoui0=
github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8=
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
github.com/chai2010/gettext-go v1.0.3 h1:9liNh8t+u26xl5ddmWLmsOsdNLwkdRTg5AG+JnTiM80=
github.com/chai2010/gettext-go v1.0.3/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA=
github.com/cilium/ebpf v0.17.3 h1:FnP4r16PWYSE4ux6zN+//jMcW4nMVRvuTLVTvCjyyjg=
github.com/cilium/ebpf v0.17.3/go.mod h1:G5EDHij8yiLzaqn0WjyfJHvRa+3aDlReIaLVRMvOyJk=
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
github.com/containerd/console v1.0.4/go.mod h1:YynlIjWYF8myEu6sdkwKIvGQq+cOckRm6So2avqoYAk=
github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs=
github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
github.com/creack/pty v1.1.21 h1:1/QdRyBaHHJP61QkWMXlOIBfsgdDeeKfK8SYVUWJKf0=
github.com/creack/pty v1.1.21/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4=
github.com/creasty/defaults v1.8.0 h1:z27FJxCAa0JKt3utc0sCImAEb+spPucmKoOdLHvHYKk=
github.com/creasty/defaults v1.8.0/go.mod h1:iGzKe6pbEHnpMPtfDXZEr0NVxWnPTjb1bbDy08fPzYM=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78=
github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc=
github.com/distribution/distribution/v3 v3.0.0-rc.2 h1:tTrzntanYMbd20SyvdeR83Ya1l/aBwDcA3NCIpmwemc=
github.com/distribution/distribution/v3 v3.0.0-rc.2/go.mod h1:H2zIRRXS20ylnv2HTuKILAWuANjuA60GB7MLOsQag7Y=
github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
github.com/distribution/reference v0.6.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
github.com/docker/cli v27.5.1+incompatible h1:JB9cieUT9YNiMITtIsguaN55PLOHhBSz3LKVc6cqWaY=
github.com/docker/cli v27.5.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
github.com/docker/docker v27.5.1+incompatible h1:4PYU5dnBYqRQi0294d1FBECqT9ECWeQAIfE8q4YnPY8=
github.com/docker/docker v27.5.1+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo=
github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M=
github.com/docker/go-connections v0.5.0 h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
github.com/docker/go-connections v0.5.0/go.mod h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ+oDZB4KHQFypsfjYlq/C4rfL7D3g8=
github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA=
github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8=
github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw=
github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
github.com/dustin/go-humanize v1.0.1 h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU=
github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f h1:Wl78ApPPB2Wvf/TIe2xdyJxTlb6obmF18d8QdkxNDu4=
github.com/exponent-io/jsonpath v0.0.0-20210407135951-1de76d718b3f/go.mod h1:OSYXu++VVOHnXeitef/D8n/6y4QV8uLHSFXX4NeXMGc=
github.com/falcosecurity/driverkit v0.20.5 h1:sg5luRqpUebnaRC6UdxxDwdu9oKJIuXl5jf8wYPkfVE=
github.com/falcosecurity/driverkit v0.20.5/go.mod h1:nohAwSgSMLJrC7NChfqijYX5ODS8fdj6QP8+uS2vN28=
github.com/falcosecurity/falcoctl v0.11.0 h1:fAuJe7Mry92fUIuCQJQgDuh1pt9cPDWKwGW/Vsh5RrA=
github.com/falcosecurity/falcoctl v0.11.0/go.mod h1:h6oaRdEFiBUe2l5QGeA1PlqM3qXrUe7/cAkBIE42Or8=
github.com/falcosecurity/plugin-sdk-go v0.7.5 h1:ke/+kTt0PwedM8+IGTKcW3LrUI/xiJNDCSzqTSW+CvI=
github.com/falcosecurity/plugin-sdk-go v0.7.5/go.mod h1:NP+y22DYOS+G3GDXIXNmzf0CBL3nfPPMoQuHvAzfitQ=
github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8=
github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc=
github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg=
github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
github.com/fsnotify/fsnotify v1.8.0 h1:dAwr6QBTBZIkG8roQaJjGof0pp0EeF+tNV7YBP3F/8M=
github.com/fsnotify/fsnotify v1.8.0/go.mod h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E=
github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ=
github.com/gabriel-vasile/mimetype v1.4.8 h1:FfZ3gj38NjllZIeJAmMhr+qKL8Wu+nOoI3GqacKw1NM=
github.com/gabriel-vasile/mimetype v1.4.8/go.mod h1:ByKUIKGjh1ODkGM1asKUbQZOLGrPjydw3hYPU2YU9t8=
github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk=
github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY=
github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
github.com/go-oauth2/oauth2/v4 v4.5.2 h1:CuZhD3lhGuI6aNLyUbRHXsgG2RwGRBOuCBfd4WQKqBQ=
github.com/go-oauth2/oauth2/v4 v4.5.2/go.mod h1:wk/2uLImWIa9VVQDgxz99H2GDbhmfi/9/Xr+GvkSUSQ=
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s=
github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA=
github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY=
github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY=
github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY=
github.com/go-playground/validator/v10 v10.25.0 h1:5Dh7cjvzR7BRZadnsVOzPhWsrwUr0nmsZJxEAnFLNO8=
github.com/go-playground/validator/v10 v10.25.0/go.mod h1:GGzBIJMuE98Ic/kJsBXbz1x/7cByt++cQ+YOuDM5wus=
github.com/go-quicktest/qt v1.101.0 h1:O1K29Txy5P2OK0dGo59b7b0LR6wKfIhttaAhHUyn7eI=
github.com/go-quicktest/qt v1.101.0/go.mod h1:14Bz/f7NwaXPtdYEgzsx46kqSxVwTbzVZsDC26tQJow=
github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY=
github.com/golang-jwt/jwt v3.2.2+incompatible/go.mod h1:8pz2t5EyA70fFQQSrl6XZXzqecmYZeUEB8OUGHkxJ+I=
github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps=
github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg=
github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4=
github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw=
github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw=
github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
github.com/gookit/color v1.4.2/go.mod h1:fqRyamkC1W8uxl+lxCQxOT09l/vYfZ+QeiX3rKQHCoQ=
github.com/gookit/color v1.5.0/go.mod h1:43aQb+Zerm/BWh2GnrgOQm7ffz7tvQXEKV6BFMl7wAo=
github.com/gookit/color v1.5.4 h1:FZmqs7XOyGgCAxmWyPslpiok1k05wmY3SJTytgvYFs0=
github.com/gookit/color v1.5.4/go.mod h1:pZJOeOS8DM43rXbp4AZo1n9zCU2qjpcRko0b6/QJi9w=
github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE=
github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w=
github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY=
github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ=
github.com/gorilla/websocket v1.5.3 h1:saDtZ6Pbx/0u+bgYQ3q96pZgCzfhKXGPqt7kZ72aNNg=
github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA=
github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0 h1:TmHmbvxPmaegwhDubVz0lICL0J5Ka2vwTzhoePEXsGE=
github.com/grpc-ecosystem/grpc-gateway/v2 v2.24.0/go.mod h1:qztMSjm835F2bXf+5HKAPIS5qsmQDqZna/PgVt4rWtI=
github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc=
github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw=
github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU=
github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k=
github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM=
github.com/hashicorp/hcl v1.0.1-vault-7 h1:ag5OxFVy3QYTFTJODRzTKVZ6xvdfLLCA1cy/Y6xGI0I=
github.com/hashicorp/hcl v1.0.1-vault-7/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc=
github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0=
github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg=
github.com/klauspost/cpuid/v2 v2.0.10/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
github.com/klauspost/cpuid/v2 v2.0.12/go.mod h1:g2LTdtYhdyuGPqyWyv7qRAmj1WBqxuObKfj5c0PQa7c=
github.com/klauspost/cpuid/v2 v2.2.3 h1:sxCkb+qR91z4vsqw4vGGZlDgPz3G7gjaLyK3V8y70BU=
github.com/klauspost/cpuid/v2 v2.2.3/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY=
github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0=
github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk=
github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/rogpeppe/go-internal v1.6.1 h1:/FiVV8dS/e+YqF2JvO3yXRFbBLTIuSDkuC7aBOAvL+k=
github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc=
github.com/leodido/go-urn v1.4.0 h1:WT9HwE9SGECu3lg4d/dIA+jxlljEa1/ffXKmRjqdmIQ=
github.com/leodido/go-urn v1.4.0/go.mod h1:bvxc+MVxLKB4z00jd1z+Dvzr47oO32F/QSNjSBOlFxI=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
github.com/lithammer/dedent v1.1.0 h1:VNzHMVCBNG1j0fh3OrsFRkVUwStdDArbgBWoPAffktY=
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
github.com/lithammer/fuzzysearch v1.1.8 h1:/HIuJnjHuXS8bKaiTMeeDlW2/AyIWk2brx1V8LFgLN4=
github.com/lithammer/fuzzysearch v1.1.8/go.mod h1:IdqeyBClc3FFqSzYq/MXESsS4S0FsZ5ajtkr5xPLts4=
github.com/magiconair/properties v1.8.9 h1:nWcCbLq1N2v/cpNsy5WvQ37Fb+YElfq20WJ/a8RkpQM=
github.com/magiconair/properties v1.8.9/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0=
github.com/mailru/easyjson v0.9.0 h1:PrnmzHw7262yW8sTBwxi1PdJA3Iw/EKBa8psRf7d9a4=
github.com/mailru/easyjson v0.9.0/go.mod h1:1+xMtQp2MRNVL/V1bOzuP3aP8VNwRW55fQUto+XFtTU=
github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
github.com/mattn/go-runewidth v0.0.13/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6TULQc=
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0=
github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0=
github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
github.com/moby/docker-image-spec v1.3.1 h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
github.com/moby/docker-image-spec v1.3.1/go.mod h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
github.com/moby/patternmatcher v0.6.0 h1:GmP9lR19aU5GqSSFko+5pRqHi+Ohk1O69aFiKkVGiPk=
github.com/moby/patternmatcher v0.6.0/go.mod h1:hDPoyOpDY7OrrMDLaYoY3hf52gNCR/YOUYxkhApJIxc=
github.com/moby/spdystream v0.5.0 h1:7r0J1Si3QO/kjRitvSLVVFUjxMEb/YLj6S9FF62JBCU=
github.com/moby/spdystream v0.5.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI=
github.com/moby/sys/sequential v0.6.0 h1:qrx7XFUd/5DxtqcoH1h438hF5TmOvzC/lspjy7zgvCU=
github.com/moby/sys/sequential v0.6.0/go.mod h1:uyv8EUTrca5PnDsdMGXhZe6CCe8U/UiTWd+lL+7b/Ko=
github.com/moby/sys/user v0.3.0 h1:9ni5DlcW5an3SvRSx4MouotOygvzaXbaSrc/wGDFWPo=
github.com/moby/sys/user v0.3.0/go.mod h1:bG+tYYYJgaMtRKgEmuueC0hJEAZWwtIbZTB+85uoHjs=
github.com/moby/sys/userns v0.1.0 h1:tVLXkFOxVu9A64/yh59slHVv9ahO9UIev4JZusOLG/g=
github.com/moby/sys/userns v0.1.0/go.mod h1:IHUYgu/kao6N8YZlp9Cf444ySSvCmDlmzUcYfDHOl28=
github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
github.com/moby/term v0.5.2/go.mod h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg=
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
github.com/ncruces/go-strftime v0.1.9 h1:bY0MQC28UADQmHmaF5dgpLmImcShSi2kHU9XLdhx/f4=
github.com/ncruces/go-strftime v0.1.9/go.mod h1:Fwc5htZGVVkseilnfgOVb9mKy6w1naJmn9CehxcKcls=
github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus=
github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8=
github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y=
github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0=
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
github.com/opencontainers/image-spec v1.1.1 h1:y0fUlFfIZhPF1W537XOLg0/fcx6zcHCJwooC2xJA040=
github.com/opencontainers/image-spec v1.1.1/go.mod h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
github.com/pelletier/go-toml/v2 v2.2.3 h1:YmeHyLY8mFWbdkNWwpr+qIL2bEqT0o95WSdkNHvL12M=
github.com/pelletier/go-toml/v2 v2.2.3/go.mod h1:MfCQTFTvCcUyyvvwm1+G6H/jORL20Xlb6rzQu9GuUkc=
github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI=
github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g=
github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U=
github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y=
github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE=
github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc=
github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
github.com/pterm/pterm v0.12.27/go.mod h1:PhQ89w4i95rhgE+xedAoqous6K9X+r6aSOI2eFF7DZI=
github.com/pterm/pterm v0.12.29/go.mod h1:WI3qxgvoQFFGKGjGnJR849gU0TsEOvKn5Q8LlY1U7lg=
github.com/pterm/pterm v0.12.30/go.mod h1:MOqLIyMOgmTDz9yorcYbcw+HsgoZo3BQfg2wtl3HEFE=
github.com/pterm/pterm v0.12.31/go.mod h1:32ZAWZVXD7ZfG0s8qqHXePte42kdz8ECtRyEejaWgXU=
github.com/pterm/pterm v0.12.33/go.mod h1:x+h2uL+n7CP/rel9+bImHD5lF3nM9vJj80k9ybiiTTE=
github.com/pterm/pterm v0.12.36/go.mod h1:NjiL09hFhT/vWjQHSj1athJpx6H8cjpHXNAK5bUw8T8=
github.com/pterm/pterm v0.12.40/go.mod h1:ffwPLwlbXxP+rxT0GsgDTzS3y3rmpAO1NMjUkGTYf8s=
github.com/pterm/pterm v0.12.80 h1:mM55B+GnKUnLMUSqhdINe4s6tOuVQIetQ3my8JGyAIg=
github.com/pterm/pterm v0.12.80/go.mod h1:c6DeF9bSnOSeFPZlfs4ZRAFcf5SCoTwvwQ5xaKGQlHo=
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho=
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5/go.mod h1:fyalQWdtzDBECAQFBJuQe5bzQ02jGd5Qcbgb97Flm7U=
github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb27yVE+gIAfeqp8LUCc=
github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ=
github.com/redis/go-redis/v9 v9.6.1 h1:HHDteefn6ZkTtY5fGUE8tj8uy85AHk6zP7CpzIAM0y4=
github.com/redis/go-redis/v9 v9.6.1/go.mod h1:0C0c6ycQsdpVNQpxb1njEQIqkx5UcsM8FJCQLgE9+RA=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec h1:W09IVJc94icq4NjY3clb7Lk8O1qJ8BdBEF8z0ibU0rE=
github.com/remyoudompheng/bigfft v0.0.0-20230129092748-24d4a6f8daec/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo=
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
github.com/spf13/cobra v1.4.0/go.mod h1:Wo4iy3BUC+X2Fybo0PDqwJIv3dNRiZLHQymsfxlB84g=
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/sagikazarmark/locafero v0.7.0 h1:5MqpDsTGNDhY8sGp0Aowyf0qKsPrhewaLSsFaodPcyo=
github.com/sagikazarmark/locafero v0.7.0/go.mod h1:2za3Cg5rMaTMoG/2Ulr9AwtFaIppKXTRYnozin4aB5k=
github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE=
github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ=
github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8=
github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo=
github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0=
github.com/spf13/afero v1.12.0 h1:UcOPyRBYczmFn6yvphxkn9ZEOY65cpwGKb5mL36mrqs=
github.com/spf13/afero v1.12.0/go.mod h1:ZTlWwG4/ahT8W7T0WQ5uYmjI9duaLQGy3Q2OAl4sk/4=
github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y=
github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo=
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/viper v1.19.0 h1:RWq5SEjt8o25SROyN3z2OrDB9l7RPd3lwTWU8EcEdcI=
github.com/spf13/viper v1.19.0/go.mod h1:GQUN9bilAbhU/jgc1bKs99f/suXKeUMct8Adx5+Ntkg=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
github.com/stretchr/objx v0.5.2/go.mod h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA=
github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU=
github.com/tidwall/btree v1.6.0 h1:LDZfKfQIBHGHWSwckhXI0RPSXzlo+KYdjK7FWSqOzzg=
github.com/tidwall/btree v1.6.0/go.mod h1:twD9XRA5jj9VUQGELzDO4HPQTNJsoWWfYEL+EUQ2cKY=
github.com/tidwall/buntdb v1.3.0 h1:gdhWO+/YwoB2qZMeAU9JcWWsHSYU3OvcieYgFRS0zwA=
github.com/tidwall/buntdb v1.3.0/go.mod h1:lZZrZUWzlyDJKlLQ6DKAy53LnG7m5kHyrEHvvcDmBpU=
github.com/tidwall/gjson v1.16.0 h1:SyXa+dsSPpUlcwEDuKuEBJEz5vzTvOea+9rjyYodQFg=
github.com/tidwall/gjson v1.16.0/go.mod h1:/wbyibRr2FHMks5tjHJ5F8dMZh3AcwJEMf5vlfC0lxk=
github.com/tidwall/grect v0.1.4 h1:dA3oIgNgWdSspFzn1kS4S/RDpZFLrIxAZOdJKjYapOg=
github.com/tidwall/grect v0.1.4/go.mod h1:9FBsaYRaR0Tcy4UwefBX/UDcDcDy9V5jUcxHzv2jd5Q=
github.com/tidwall/match v1.1.1 h1:+Ho715JplO36QYgwN9PGYNhgZvoUSc9X2c80KVTi+GA=
github.com/tidwall/match v1.1.1/go.mod h1:eRSPERbgtNPcGhD8UCthc6PmLEQXEWd3PRB5JTxsfmM=
github.com/tidwall/pretty v1.2.1 h1:qjsOFOWWQl+N3RsoF5/ssm1pHmJJwhjlSbZ51I6wMl4=
github.com/tidwall/pretty v1.2.1/go.mod h1:ITEVvHYasfjBbM0u2Pg8T2nJnzm8xPwvNhhsoaGGjNU=
github.com/tidwall/rtred v0.1.2 h1:exmoQtOLvDoO8ud++6LwVsAMTu0KPzLTUrMln8u1yu8=
github.com/tidwall/rtred v0.1.2/go.mod h1:hd69WNXQ5RP9vHd7dqekAz+RIdtfBogmglkZSRxCHFQ=
github.com/tidwall/tinyqueue v0.1.1 h1:SpNEvEggbpyN5DIReaJ2/1ndroY8iyEGxPYxoSaymYE=
github.com/tidwall/tinyqueue v0.1.1/go.mod h1:O/QNHwrnjqr6IHItYrzoHAKYhBkLI67Q096fQP5zMYw=
github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM=
github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb h1:zGWFAtiMcyryUHoUjUJX0/lt1H2+i2Ka2n+D3DImSNo=
github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ=
github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74=
github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y=
github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ=
github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0=
github.com/xo/terminfo v0.0.0-20210125001918-ca9a967f8778/go.mod h1:2MuV+tbUrU1zIOPMxZ5EncGwgmMJsa+9ucAQZXxsObs=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
go.opentelemetry.io/contrib/bridges/prometheus v0.57.0 h1:UW0+QyeyBVhn+COBec3nGhfnFe5lwB0ic1JBVjzhk0w=
go.opentelemetry.io/contrib/bridges/prometheus v0.57.0/go.mod h1:ppciCHRLsyCio54qbzQv0E4Jyth/fLWDTJYfvWpcSVk=
go.opentelemetry.io/contrib/exporters/autoexport v0.57.0 h1:jmTVJ86dP60C01K3slFQa2NQ/Aoi7zA+wy7vMOKD9H4=
go.opentelemetry.io/contrib/exporters/autoexport v0.57.0/go.mod h1:EJBheUMttD/lABFyLXhce47Wr6DPWYReCzaZiXadH7g=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
go.opentelemetry.io/otel v1.34.0 h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
go.opentelemetry.io/otel v1.34.0/go.mod h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0 h1:WzNab7hOOLzdDF/EoWCt4glhrbMPVMOO5JYTmpz36Ls=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploggrpc v0.8.0/go.mod h1:hKvJwTzJdp90Vh7p6q/9PAOd55dI6WA6sWj62a/JvSs=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0 h1:S+LdBGiQXtJdowoJoQPEtI52syEP/JYBUpjO49EQhV8=
go.opentelemetry.io/otel/exporters/otlp/otlplog/otlploghttp v0.8.0/go.mod h1:5KXybFvPGds3QinJWQT7pmXf+TN5YIa7CNYObWRkj50=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0 h1:j7ZSD+5yn+lo3sGV69nW04rRR0jhYnBwjuX3r0HvnK0=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v1.32.0/go.mod h1:WXbYJTUaZXAbYd8lbgGuvih0yuCfOFC5RJoYnoLcGz8=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0 h1:t/Qur3vKSkUCcDVaSumWF2PKHt85pc7fRvFuoVT8qFU=
go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v1.32.0/go.mod h1:Rl61tySSdcOJWoEgYZVtmnKdA0GeKrSqkHC1t+91CH8=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA=
go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0/go.mod h1:cpgtDBaqD/6ok/UG0jT15/uKjAY8mRA53diogHBg3UI=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0 h1:9kV11HXBHZAvuPUZxmMWrH8hZn/6UnHX4K0mu36vNsU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.32.0/go.mod h1:JyA0FHXe22E1NeNiHmVp7kFHglnexDQ7uRWDiiJ1hKQ=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0 h1:wpMfgF8E1rkrT1Z6meFh1NDtownE9Ii3n3X2GJYjsaU=
go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0=
go.opentelemetry.io/otel/exporters/prometheus v0.54.0 h1:rFwzp68QMgtzu9PgP3jm9XaMICI6TsofWWPcBDKwlsU=
go.opentelemetry.io/otel/exporters/prometheus v0.54.0/go.mod h1:QyjcV9qDP6VeK5qPyKETvNjmaaEc7+gqjh4SS0ZYzDU=
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0 h1:CHXNXwfKWfzS65yrlB2PVds1IBZcdsX8Vepy9of0iRU=
go.opentelemetry.io/otel/exporters/stdout/stdoutlog v0.8.0/go.mod h1:zKU4zUgKiaRxrdovSS2amdM5gOc59slmo/zJwGX+YBg=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0 h1:SZmDnHcgp3zwlPBS2JX2urGYe/jBKEIT6ZedHRUyCz8=
go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.32.0/go.mod h1:fdWW0HtZJ7+jNpTKUR0GpMEDP69nR8YBJQxNiVCE3jk=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0 h1:cC2yDI3IQd0Udsux7Qmq8ToKAx1XCilTQECZ0KDZyTw=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.32.0/go.mod h1:2PD5Ex6z8CFzDbTdOlwyNIUywRr1DN0ospafJM1wJ+s=
go.opentelemetry.io/otel/log v0.8.0 h1:egZ8vV5atrUWUbnSsHn6vB8R21G2wrKqNiDt3iWertk=
go.opentelemetry.io/otel/log v0.8.0/go.mod h1:M9qvDdUTRCopJcGRKg57+JSQ9LgLBrwwfC32epk5NX8=
go.opentelemetry.io/otel/metric v1.34.0 h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
go.opentelemetry.io/otel/metric v1.34.0/go.mod h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
go.opentelemetry.io/otel/sdk v1.33.0 h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM=
go.opentelemetry.io/otel/sdk v1.33.0/go.mod h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM=
go.opentelemetry.io/otel/sdk/log v0.8.0 h1:zg7GUYXqxk1jnGF/dTdLPrK06xJdrXgqgFLnI4Crxvs=
go.opentelemetry.io/otel/sdk/log v0.8.0/go.mod h1:50iXr0UVwQrYS45KbruFrEt4LvAdCaWWgIrsN3ZQggo=
go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
go.opentelemetry.io/otel/trace v1.34.0 h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
go.opentelemetry.io/otel/trace v1.34.0/go.mod h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
go.opentelemetry.io/proto/otlp v1.4.0 h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg=
go.opentelemetry.io/proto/otlp v1.4.0/go.mod h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY=
go.uber.org/automaxprocs v1.6.0 h1:O3y2/QNTOdbF+e/dpXNNW7Rx2hZ4sTIPyybbxyNqTUs=
go.uber.org/automaxprocs v1.6.0/go.mod h1:ifeIMSnPZuznNm6jmdzmU3/bfk01Fe2fotchwEFJ8r8=
go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0=
go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f h1:oFMYAjX0867ZD2jcNiLBrI9BdpmEkvPyi5YrBGXbamg=
golang.org/x/exp v0.0.0-20250215185904-eff6e970281f/go.mod h1:BHOTPb3L19zxehTsLoJXVaTktb06DFgmdW6Wb9s8jqk=
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
golang.org/x/mod v0.24.0 h1:ZfthKaKaT4NrhGVZHO1/WDTwGES4De8KtWO0SIbNJMU=
golang.org/x/mod v0.24.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.38.0 h1:vRMAPTMaeGqVhG5QyLJHqNDwecKTomGeqbnfZyKlBI8=
golang.org/x/net v0.38.0/go.mod h1:ivrbrMbzFq5J41QOQh0siUuly180yBYtLp+CKbEaFx8=
golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M=
golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.14.0 h1:woo0S4Yywslg6hp4eUFjTVOyKt0RookbpAHG4c1HmhQ=
golang.org/x/sync v0.14.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20211013075003-97ac67df715c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20=
golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
golang.org/x/term v0.0.0-20210615171337-6886f2dfbf5b/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.23.0 h1:D71I7dUrlY+VX0gQShAThNGHFxZ13dGLBHQLVl1mJlY=
golang.org/x/text v0.23.0/go.mod h1:/BLNzu4aZCJ1+kcD0DNRotWKage4q2rGVAg4o22unh4=
golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
golang.org/x/time v0.10.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
golang.org/x/tools v0.31.0 h1:0EedkvKDbh+qistFTd0Bcwe/YLh4vHwWEkiI0toFIBU=
golang.org/x/tools v0.31.0/go.mod h1:naFTU+Cev749tSJRXJlna0T3WxKvb1kWEx15xA4SdmQ=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk=
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576/go.mod h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8 h1:TqExAhdPaB60Ux47Cn0oLV07rGnxZzIsaRhQaqS666A=
google.golang.org/genproto/googleapis/rpc v0.0.0-20241223144023-3abc09e42ca8/go.mod h1:lcTa1sDdWEIHMWlITnIczmw5w60CF9ffkb8Z+DVmmjA=
google.golang.org/grpc v1.68.1 h1:oI5oTa11+ng8r8XMMN7jAOmWfPZWbYpCFaMUTACxkM0=
google.golang.org/grpc v1.68.1/go.mod h1:+q1XYFJjShcqn0QZHvCyeR4CXPA+llXIeUIfIe00waw=
google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY=
google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4=
gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA=
gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo=
gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw=
gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU=
gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU=
k8s.io/api v0.32.3 h1:Hw7KqxRusq+6QSplE3NYG4MBxZw1BZnq4aP4cJVINls=
k8s.io/api v0.32.3/go.mod h1:2wEDTXADtm/HA7CCMD8D8bK4yuBUptzaRhYcYEEYA3k=
k8s.io/apimachinery v0.32.3 h1:JmDuDarhDmA/Li7j3aPrwhpNBA94Nvk5zLeOge9HH1U=
k8s.io/apimachinery v0.32.3/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
k8s.io/cli-runtime v0.32.2 h1:aKQR4foh9qeyckKRkNXUccP9moxzffyndZAvr+IXMks=
k8s.io/cli-runtime v0.32.2/go.mod h1:a/JpeMztz3xDa7GCyyShcwe55p8pbcCVQxvqZnIwXN8=
k8s.io/client-go v0.32.2 h1:4dYCD4Nz+9RApM2b/3BtVvBHw54QjMFUl1OLcJG5yOA=
k8s.io/client-go v0.32.2/go.mod h1:fpZ4oJXclZ3r2nDOv+Ux3XcJutfrwjKTCHz2H3sww94=
k8s.io/component-base v0.32.2 h1:1aUL5Vdmu7qNo4ZsE+569PV5zFatM9hl+lb3dEea2zU=
k8s.io/component-base v0.32.2/go.mod h1:PXJ61Vx9Lg+P5mS8TLd7bCIr+eMJRQTyXe8KvkrvJq0=
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg=
k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas=
k8s.io/kubectl v0.32.2 h1:TAkag6+XfSBgkqK9I7ZvwtF0WVtUAvK8ZqTt+5zi1Us=
k8s.io/kubectl v0.32.2/go.mod h1:+h/NQFSPxiDZYX/WZaWw9fwYezGLISP0ud8nQKg+3g8=
k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0=
k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
modernc.org/cc/v4 v4.24.4 h1:TFkx1s6dCkQpd6dKurBNmpo+G8Zl4Sq/ztJ+2+DEsh0=
modernc.org/cc/v4 v4.24.4/go.mod h1:uVtb5OGqUKpoLWhqwNQo/8LwvoiEBLvZXIQ/SmO6mL0=
modernc.org/ccgo/v4 v4.23.16 h1:Z2N+kk38b7SfySC1ZkpGLN2vthNJP1+ZzGZIlH7uBxo=
modernc.org/ccgo/v4 v4.23.16/go.mod h1:nNma8goMTY7aQZQNTyN9AIoJfxav4nvTnvKThAeMDdo=
modernc.org/fileutil v1.3.0 h1:gQ5SIzK3H9kdfai/5x41oQiKValumqNTDXMvKo62HvE=
modernc.org/fileutil v1.3.0/go.mod h1:XatxS8fZi3pS8/hKG2GH/ArUogfxjpEKs3Ku3aK4JyQ=
modernc.org/gc/v2 v2.6.3 h1:aJVhcqAte49LF+mGveZ5KPlsp4tdGdAOT4sipJXADjw=
modernc.org/gc/v2 v2.6.3/go.mod h1:YgIahr1ypgfe7chRuJi2gD7DBQiKSLMPgBQe9oIiito=
modernc.org/libc v1.61.13 h1:3LRd6ZO1ezsFiX1y+bHd1ipyEHIJKvuprv0sLTBwLW8=
modernc.org/libc v1.61.13/go.mod h1:8F/uJWL/3nNil0Lgt1Dpz+GgkApWh04N3el3hxJcA6E=
modernc.org/mathutil v1.7.1 h1:GCZVGXdaN8gTqB1Mf/usp1Y/hSqgI2vAGGP4jZMCxOU=
modernc.org/mathutil v1.7.1/go.mod h1:4p5IwJITfppl0G4sUEDtCr4DthTaT47/N3aT6MhfgJg=
modernc.org/memory v1.8.2 h1:cL9L4bcoAObu4NkxOlKWBWtNHIsnnACGF/TbqQ6sbcI=
modernc.org/memory v1.8.2/go.mod h1:ZbjSvMO5NQ1A2i3bWeDiVMxIorXwdClKE/0SZ+BMotU=
modernc.org/opt v0.1.4 h1:2kNGMRiUjrp4LcaPuLY2PzUfqM/w9N23quVwhKt5Qm8=
modernc.org/opt v0.1.4/go.mod h1:03fq9lsNfvkYSfxrfUhZCWPk1lm4cq4N+Bh//bEtgns=
modernc.org/sortutil v1.2.1 h1:+xyoGf15mM3NMlPDnFqrteY07klSFxLElE2PVuWIJ7w=
modernc.org/sortutil v1.2.1/go.mod h1:7ZI3a3REbai7gzCLcotuw9AC4VZVpYMjDzETGsSMqJE=
modernc.org/sqlite v1.35.0 h1:yQps4fegMnZFdphtzlfQTCNBWtS0CZv48pRpW3RFHRw=
modernc.org/sqlite v1.35.0/go.mod h1:9cr2sicr7jIaWTBKQmAxQLfBv9LL0su4ZTEV+utt3ic=
modernc.org/strutil v1.2.1 h1:UneZBkQA+DX2Rp35KcM69cSsNES9ly8mQWD71HKlOA0=
modernc.org/strutil v1.2.1/go.mod h1:EHkiggD70koQxjVdSBM3JKM7k6L0FbGE5eymy9i3B9A=
modernc.org/token v1.1.0 h1:Xl7Ap9dKaEs5kLoOQeQmPWevfnk/DM5qcLcYlA8ys6Y=
modernc.org/token v1.1.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM=
oras.land/oras-go/v2 v2.6.0 h1:X4ELRsiGkrbeox69+9tzTu492FMUu7zJQW6eJU+I2oc=
oras.land/oras-go/v2 v2.6.0/go.mod h1:magiQDfG6H1O9APp+rOsvCPcW1GD2MM7vgnKY0Y+u1o=
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
sigs.k8s.io/kustomize/api v0.19.0 h1:F+2HB2mU1MSiR9Hp1NEgoU2q9ItNOaBJl0I4Dlus5SQ=
sigs.k8s.io/kustomize/api v0.19.0/go.mod h1:/BbwnivGVcBh1r+8m3tH1VNxJmHSk1PzP5fkP6lbL1o=
sigs.k8s.io/kustomize/kyaml v0.19.0 h1:RFge5qsO1uHhwJsu3ipV7RNolC7Uozc0jUBC/61XSlA=
sigs.k8s.io/kustomize/kyaml v0.19.0/go.mod h1:FeKD5jEOH+FbZPpqUghBP8mrLjJ3+zD3/rf9NNu1cwY=
sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk=
sigs.k8s.io/structured-merge-diff/v4 v4.5.0/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4=
sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E=
sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY=

View File

@ -0,0 +1,52 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package options
import (
"context"
"io"
)
type CommonOptions struct {
Output io.Writer
Context context.Context
}
type CommonOption func(opts *CommonOptions)
func NewCommonOptions(opts ...CommonOption) *CommonOptions {
o := &CommonOptions{}
for _, f := range opts {
f(o)
}
return o
}
func WithOutput(out io.Writer) CommonOption {
return func(opts *CommonOptions) {
opts.Output = out
}
}
func WithContext(ctx context.Context) CommonOption {
return func(opts *CommonOptions) {
opts.Context = ctx
}
}

View File

@ -0,0 +1,12 @@
package check
import "github.com/falcosecurity/plugins/build/registry/pkg/registry"
// DoCheck loads the registry.yaml file from disk and validates it.
func DoCheck(fileName string) error {
registry, err := registry.LoadRegistryFromFile(fileName)
if err != nil {
return err
}
return registry.Validate()
}

View File

@ -0,0 +1,28 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package common
const (
RulesArtifactSuffix = "-rules"
// EngineVersionKey is the name given to all the engine requirements.
// The same name used by Falco when outputting the engine version.
EngineVersionKey = "engine_version_semver"
// PluginAPIVersion is the name givet to the plugin api version requirements.
// The same name used by Falco when outputting the plugin api version
PluginAPIVersion = "plugin_api_version"
)

View File

@ -0,0 +1,99 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package common
import (
"archive/tar"
"compress/gzip"
"errors"
"fmt"
"io"
"os"
"path/filepath"
"strings"
)
// ExtractTarGz extracts a *.tar.gz compressed archive and moves its content to destDir.
// Returns a slice containing the full path of the extracted files.
func ExtractTarGz(fileName, destDir string) ([]string, error) {
var files []string
gzipStream, err := os.Open(fileName)
if err != nil {
return nil, fmt.Errorf("unable to open file %q: %w", fileName, err)
}
uncompressedStream, err := gzip.NewReader(gzipStream)
if err != nil {
return nil, err
}
tarReader := tar.NewReader(uncompressedStream)
for {
header, err := tarReader.Next()
if errors.Is(err, io.EOF) {
break
}
if err != nil {
return nil, err
}
switch header.Typeflag {
case tar.TypeDir:
return nil, fmt.Errorf("unexepected dir inside the archive, expected to find only files without any tree structure")
case tar.TypeReg, tar.TypeSymlink:
f := filepath.Join(destDir, filepath.Clean(header.Name))
if !strings.HasPrefix(f, filepath.Clean(destDir)+string(os.PathSeparator)) {
return nil, fmt.Errorf("illegal file path: %q", f)
}
outFile, err := os.Create(filepath.Clean(f))
if err != nil {
return nil, err
}
if err = copyInChunks(outFile, tarReader); err != nil {
return nil, err
}
if err = outFile.Close(); err != nil {
return nil, err
}
files = append(files, f)
default:
return nil, fmt.Errorf("extractTarGz: uknown type: %b in %s", header.Typeflag, header.Name)
}
}
return files, nil
}
func copyInChunks(dst io.Writer, src io.Reader) error {
for {
_, err := io.CopyN(dst, src, 1024)
if err != nil {
if errors.Is(err, io.EOF) {
break
}
return err
}
}
return nil
}

View File

@ -0,0 +1,30 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package distribution_test
import (
"testing"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
func TestDistribution(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "Distribution Suite")
}

View File

@ -0,0 +1,190 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package distribution
import (
"context"
"errors"
"fmt"
"os"
"path/filepath"
"strings"
"github.com/falcosecurity/plugins/build/registry/pkg/common"
"github.com/falcosecurity/falcoctl/pkg/index/index"
falcoctloci "github.com/falcosecurity/falcoctl/pkg/oci"
"github.com/falcosecurity/falcoctl/pkg/oci/authn"
"github.com/falcosecurity/plugins/build/registry/pkg/oci"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
"oras.land/oras-go/v2/errdef"
"oras.land/oras-go/v2/registry/remote"
"oras.land/oras-go/v2/registry/remote/auth"
)
// Define our conventions.
const (
GHOrg = "falcosecurity"
)
func PluginToIndexEntry(p registry.Plugin, registry, repo string) *index.Entry {
return &index.Entry{
Name: p.Name,
Type: string(falcoctloci.Plugin),
Registry: registry,
Signature: p.Signature,
Repository: repo,
Description: p.Description,
Home: p.URL,
Keywords: appendIfNotPresent(p.Keywords, p.Name),
License: p.License,
Maintainers: p.Maintainers,
Sources: []string{p.URL},
}
}
func PluginRulesToIndexEntry(p registry.Plugin, registry, repo string) *index.Entry {
return &index.Entry{
Name: p.Name + common.RulesArtifactSuffix,
Type: string(falcoctloci.Rulesfile),
Registry: registry,
Signature: p.Signature,
Repository: repo,
Description: p.Description,
Home: p.URL,
Keywords: appendIfNotPresent(p.Keywords, p.Name+common.RulesArtifactSuffix),
License: p.License,
Maintainers: p.Maintainers,
Sources: []string{p.RulesURL},
}
}
func upsertIndex(r *registry.Registry, ociArtifacts map[string]string, indexPath string) error {
i := index.New(GHOrg)
if err := i.Read(indexPath); err != nil {
return err
}
for _, p := range r.Plugins {
// If the plugins is reserved than we just skip it.
if p.Reserved {
continue
}
// We only publish falcosecurity artifacts that have been uploaded to the repo.
if refPlugin, ok := ociArtifacts[p.Name]; ok {
tokens := strings.Split(refPlugin, "/")
ociRegistry := tokens[0]
ociRepo := filepath.Join(tokens[1:]...)
i.Upsert(PluginToIndexEntry(p, ociRegistry, ociRepo))
}
if refRulesfile, ok := ociArtifacts[p.Name+common.RulesArtifactSuffix]; ok {
tokens := strings.Split(refRulesfile, "/")
ociRegistry := tokens[0]
ociRepo := filepath.Join(tokens[1:]...)
i.Upsert(PluginRulesToIndexEntry(p, ociRegistry, ociRepo))
}
}
return i.Write(indexPath)
}
func DoUpdateIndex(registryFile, indexFile string) error {
var user, reg string
var found bool
if user, found = os.LookupEnv(oci.RegistryUser); !found {
return fmt.Errorf("environment variable with key %q not found, please set it before running this tool", oci.RegistryUser)
}
if reg, found = os.LookupEnv(oci.RegistryOCI); !found {
return fmt.Errorf("environment variable with key %q not found, please set it before running this tool", oci.RegistryOCI)
}
registryEntries, err := registry.LoadRegistryFromFile(registryFile)
if err != nil {
return err
}
ociEntries, err := ociRepos(registryEntries, reg, user)
if err != nil {
return err
}
if err := registryEntries.Validate(); err != nil {
return err
}
return upsertIndex(registryEntries, ociEntries, indexFile)
}
func ociRepos(registryEntries *registry.Registry, reg, user string) (map[string]string, error) {
ociClient := authn.NewClient(authn.WithCredentials(&auth.EmptyCredential))
ociEntries := make(map[string]string)
for _, entry := range registryEntries.Plugins {
if err := ociRepo(ociEntries, ociClient, oci.PluginNamespace, reg, user, entry.Name); err != nil {
return nil, err
}
if entry.RulesURL != "" {
if err := ociRepo(ociEntries, ociClient, oci.RulesfileNamespace, reg, user, entry.Name); err != nil {
return nil, err
}
}
}
return ociEntries, nil
}
func ociRepo(ociEntries map[string]string, client remote.Client, ociRepoNamespace, reg, user, artifactName string) error {
ref := filepath.Join(reg, user, ociRepoNamespace, artifactName)
if ociRepoNamespace == oci.RulesfileNamespace {
artifactName = artifactName + common.RulesArtifactSuffix
}
repo, err := remote.NewRepository(ref)
if err != nil {
return fmt.Errorf("unable to create repo for ref %q: %w", ref, err)
}
repo.Client = client
_, _, err = repo.FetchReference(context.Background(), ref+":latest")
if err != nil && (errors.Is(err, errdef.ErrNotFound) || strings.Contains(err.Error(), "requested access to the resource is denied")) {
return nil
}
if err != nil {
return fmt.Errorf("unable to fetch reference for %q: %w", ref+":latest", err)
}
ociEntries[artifactName] = ref
return nil
}
// Add new item to a slice if not present.
func appendIfNotPresent(keywords []string, kw string) []string {
// If the keyword already exist do nothing.
for i := range keywords {
if keywords[i] == kw {
return keywords
}
}
// Add the keyword
return append(keywords, kw)
}

View File

@ -0,0 +1,62 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package distribution_test
import (
"reflect"
"testing"
"github.com/falcosecurity/falcoctl/pkg/index/index"
"github.com/falcosecurity/plugins/build/registry/pkg/distribution"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
)
func TestPluginToIndexEntrySignature(t *testing.T) {
t.Parallel()
signature := &index.Signature{
Cosign: &index.CosignSignature{},
}
expected := signature
p := registry.Plugin{Signature: signature}
entry := distribution.PluginToIndexEntry(p, "", "")
if !reflect.DeepEqual(entry.Signature, expected) {
t.Fatalf("Index entry signature: expected %#v, got %v", expected, entry.Signature)
}
}
func TestPluginRulesToIndexEntrySignature(t *testing.T) {
t.Parallel()
signature := &index.Signature{
Cosign: &index.CosignSignature{},
}
expected := signature
p := registry.Plugin{Signature: signature}
entry := distribution.PluginRulesToIndexEntry(p, "", "")
if !reflect.DeepEqual(entry.Signature, expected) {
t.Fatalf("Index entry signature: expected %#v, got %v", expected, entry.Signature)
}
}

View File

@ -0,0 +1,86 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package distribution_test
import (
"os"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/falcosecurity/plugins/build/registry/pkg/distribution"
)
const (
indexFile = "testdata/index.yaml"
wrongIndexFile = "testdata/wrong-index.yaml"
registryFile = "testdata/registry.yaml"
wrongRegistryFile = "testdata/wrong-registry.yaml"
registryUser = "falcosecurity"
registryName = "ghcr.io"
)
var _ = Describe("Update index", func() {
var (
err error
)
Context("with registry file", func() {
BeforeEach(func() {
os.Setenv("REGISTRY_USER", registryUser)
os.Setenv("REGISTRY", registryName)
})
Context("with index file", func() {
BeforeEach(func() {
err = distribution.DoUpdateIndex(registryFile, indexFile)
})
It("Should not fail", func() {
Expect(err).To(BeNil())
})
})
Context("without index file", func() {
BeforeEach(func() {
err = distribution.DoUpdateIndex(registryFile, wrongIndexFile)
})
It("Should fail", func() {
Expect(err).ToNot(BeNil())
})
})
})
Context("without registry file", func() {
BeforeEach(func() {
os.Setenv("REGISTRY_USER", registryUser)
os.Setenv("REGISTRY", registryName)
})
Context("with index file", func() {
BeforeEach(func() {
err = distribution.DoUpdateIndex(wrongRegistryFile, indexFile)
})
It("Should fail", func() {
Expect(err).ToNot(BeNil())
})
})
Context("without index file", func() {
BeforeEach(func() {
err = distribution.DoUpdateIndex(wrongRegistryFile, wrongIndexFile)
})
It("Should fail", func() {
Expect(err).ToNot(BeNil())
})
})
})
})

View File

@ -0,0 +1,247 @@
- name: application-rules
type: rulesfile
registry: ghcr.io
repository: falcosecurity/rules/application-rules
description: Application rules
home: https://github.com/falcosecurity/rules/blob/main/rules/application_rules.yaml
keywords:
- application-rules
license: apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/rules/blob/main/rules/application_rules.yaml
- name: cloudtrail
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/cloudtrail
description: Reads Cloudtrail JSON logs from files/S3 and injects as events
home: https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail
keywords:
- audit
- user-activity
- api-usage
- aws
- cloudtrail
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail
- name: cloudtrail-rules
type: rulesfile
registry: ghcr.io
repository: falcosecurity/plugins/ruleset/cloudtrail
description: Reads Cloudtrail JSON logs from files/S3 and injects as events
home: https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail
keywords:
- audit
- user-activity
- api-usage
- aws
- cloudtrail-rules
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail/rules
- name: dummy
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/dummy
description: Reference plugin used to document interface
home: https://github.com/falcosecurity/plugins/tree/main/plugins/dummy
keywords:
- dummy
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/dummy
- name: dummy_c
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/dummy_c
description: Like dummy, but written in C++
home: https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_c
keywords:
- dummy_c
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_c
- name: falco-rules
type: rulesfile
registry: ghcr.io
repository: falcosecurity/rules/falco-rules
description: Falco rules that are loaded by default
home: https://github.com/falcosecurity/rules/blob/main/rules/falco_rules.yaml
keywords:
- falco-rules
license: apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/rules/blob/main/rules/falco_rules.yaml
- name: github
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/github
description: Github Webhook Events
home: https://github.com/falcosecurity/plugins/tree/main/plugins/github
keywords:
- audit
- log-events
- webhook
- github-activity
- github
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/github
- name: github-rules
type: rulesfile
registry: ghcr.io
repository: falcosecurity/plugins/ruleset/github
description: Github Webhook Events
home: https://github.com/falcosecurity/plugins/tree/main/plugins/github
keywords:
- audit
- log-events
- webhook
- github-activity
- github
- github-rules
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/github/rules
- name: json
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/json
description: Extract values from any JSON payload
home: https://github.com/falcosecurity/plugins/tree/main/plugins/json
keywords:
- json-events
- json-payload
- extractor
- json
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/json
- name: k8saudit
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/k8saudit
description: Read Kubernetes Audit Events and monitor Kubernetes Clusters
home: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit
keywords:
- audit
- audit-log
- audit-events
- kubernetes
- k8saudit
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit
- name: k8saudit-eks
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/k8saudit-eks
description: Read Kubernetes Audit Events from AWS EKS Clusters
home: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-eks
keywords:
- audit
- audit-log
- audit-events
- kubernetes
- eks
- aws
- k8saudit-eks
license: Apache-2.0
maintainers: []
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-eks
- name: k8saudit-rules
type: rulesfile
registry: ghcr.io
repository: falcosecurity/plugins/ruleset/k8saudit
description: Read Kubernetes Audit Events and monitor Kubernetes Clusters
home: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit
keywords:
- audit
- audit-log
- audit-events
- kubernetes
- k8saudit-rules
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules
- name: okta
type: plugin
registry: ghcr.io
repository: falcosecurity/plugins/plugin/okta
signature:
cosign:
certificate-oidc-issuer: https://token.actions.githubusercontent.com
certificate-oidc-issuer-regexp: ""
certificate-identity: ""
certificate-identity-regexp: https://github.com/LucaGuerra/cool-falco-ruleset/
certificate-github-workflow: ""
description: Okta Log Events
home: https://github.com/falcosecurity/plugins/tree/main/plugins/okta
keywords:
- audit
- log-events
- okta
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/okta
- name: okta-rules
type: rulesfile
registry: ghcr.io
repository: falcosecurity/plugins/ruleset/okta
signature:
cosign:
certificate-oidc-issuer: https://token.actions.githubusercontent.com
certificate-oidc-issuer-regexp: ""
certificate-identity: ""
certificate-identity-regexp: https://github.com/LucaGuerra/cool-falco-ruleset/
certificate-github-workflow: ""
description: Okta Log Events
home: https://github.com/falcosecurity/plugins/tree/main/plugins/okta
keywords:
- audit
- log-events
- okta
- okta-rules
license: Apache-2.0
maintainers:
- email: cncf-falco-dev@lists.cncf.io
name: The Falco Authors
sources:
- https://github.com/falcosecurity/plugins/tree/main/plugins/okta/rules

View File

@ -0,0 +1,271 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2023 The Falco Authors.
#
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
#
# The list of the data sources not allowed in plugins, since they are already
# used in Falco.
reserved_sources: ["syscall", "internal", "plugins"]
# The list of plugins officially recognized by the Falcosecurity organization.
# Registering your plugin here is required to reserve a given name, source, or id.
#
# License IDs refer to the SPDX License List at https://spdx.org/licenses
plugins:
- name: k8saudit
description: Read Kubernetes Audit Events and monitor Kubernetes Clusters
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
keywords:
- audit
- audit-log
- audit-events
- kubernetes
url: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit
rules_url: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 1
source: k8s_audit
extraction:
supported: true
- name: cloudtrail
description: Reads Cloudtrail JSON logs from files/S3 and injects as events
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
keywords:
- audit
- user-activity
- api-usage
- aws
url: https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail
rules_url: https://github.com/falcosecurity/plugins/tree/main/plugins/cloudtrail/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 2
source: aws_cloudtrail
extraction:
supported: true
- name: json
description: Extract values from any JSON payload
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
keywords:
- json-events
- json-payload
- extractor
url: https://github.com/falcosecurity/plugins/tree/main/plugins/json
license: Apache-2.0
capabilities:
extraction:
supported: true
- name: dummy
description: Reference plugin used to document interface
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
url: https://github.com/falcosecurity/plugins/tree/main/plugins/dummy
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 3
source: dummy
extraction:
supported: true
- name: dummy_c
description: Like dummy, but written in C++
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
url: https://github.com/falcosecurity/plugins/tree/main/plugins/dummy_c
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 4
source: dummy_c
extraction:
supported: true
- name: docker
description: Docker Events
authors: Thomas Labarussias
contact: https://github.com/Issif
maintainers:
- name: Thomas Labarussias
email: issif_github@gadz.org
keywords:
- docker-events
url: https://github.com/Issif/docker-plugin
rules_url: https://github.com/Issif/docker-plugin/tree/main/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 5
source: docker
extraction:
supported: true
- name: seccompagent
description: Seccomp Agent Events
authors: Alban Crequy
contact: https://github.com/kinvolk/seccompagent
url: https://github.com/kinvolk/seccompagent
keywords:
- seccomp
- kinvolk
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 6
source: seccompagent
extraction:
supported: true
- name: okta
description: Okta Log Events
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
keywords:
- audit
- log-events
- okta
url: https://github.com/falcosecurity/plugins/tree/main/plugins/okta
rules_url: https://github.com/falcosecurity/plugins/tree/main/plugins/okta/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 7
source: okta
extraction:
supported: true
signature:
cosign:
certificate-oidc-issuer: https://token.actions.githubusercontent.com
certificate-identity-regexp: https://github.com/LucaGuerra/cool-falco-ruleset/
- name: github
description: Github Webhook Events
authors: The Falco Authors
contact: https://falco.org/community
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
keywords:
- audit
- log-events
- webhook
- github-activity
- github
url: https://github.com/falcosecurity/plugins/tree/main/plugins/github
rules_url: https://github.com/falcosecurity/plugins/tree/main/plugins/github/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 8
source: github
extraction:
supported: true
- name: k8saudit-eks
description: Read Kubernetes Audit Events from AWS EKS Clusters
authors: The Falco Authors
contact: https://falco.org/community
url: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit-eks
rules_url: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules
license: Apache-2.0
keywords:
- audit
- audit-log
- audit-events
- kubernetes
- eks
- aws
capabilities:
sourcing:
supported: true
id: 9
source: k8s_audit
extraction:
supported: true
- name: nomad
description: Read Hashicorp Nomad Events Stream
authors: Alberto Llamas
contact: https://github.com/albertollamaso/nomad-plugin/issues
maintainers:
- name: Alberto Llamas
keywords:
- audit
- audit-events
- nomad
url: https://github.com/albertollamaso/nomad-plugin/tree/main
rules_url: https://github.com/albertollamaso/nomad-plugin/tree/main/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 10
source: nomad
extraction:
supported: true
- name: dnscollector
description: DNS Collector Events
authors: Daniel Moloney
contact: https://github.com/SysdigDan/dnscollector-falco-plugin/issues
maintainers:
- name: Daniel Moloney
keywords:
- audit
- log-events
- dns
url: https://github.com/SysdigDan/dnscollector-falco-plugin
rules_url: https://github.com/SysdigDan/dnscollector-falco-plugin/tree/master/rules
license: Apache-2.0
capabilities:
sourcing:
supported: true
id: 11
source: dnscollector
extraction:
supported: true
- name: test
description: This ID is reserved for source plugin development. Any plugin author can use this ID, but authors can expect events from other developers with this ID. After development is complete, the author should request an actual ID
reserved: true
capabilities:
sourcing:
supported: true
id: 999
source: test

View File

@ -0,0 +1,128 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
import (
"errors"
"fmt"
"os"
"strings"
"github.com/falcosecurity/plugin-sdk-go/pkg/loader"
"github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins"
"github.com/falcosecurity/falcoctl/pkg/oci"
"github.com/falcosecurity/plugins/build/registry/pkg/common"
)
// rulesFileConfig generates the artifact configuration for a rulesfile starting form the tar.gz archive,
// its name and version.
func rulesfileConfig(name, version, filePath string) (*oci.ArtifactConfig, error) {
// Create temp dir.
tmpDir, err := os.MkdirTemp("", "registry-oci-")
if err != nil {
return nil, fmt.Errorf("unable to create temporary dir while preparing to extract rulesfile %q: %v", filePath, err)
}
defer os.RemoveAll(tmpDir)
files, err := common.ExtractTarGz(filePath, tmpDir)
if err != nil {
return nil, err
}
cfg := &oci.ArtifactConfig{
Name: name,
Version: version,
Dependencies: nil,
Requirements: nil,
}
for _, file := range files {
// Get the requirements for the given file.
req, err := rulesfileRequirement(file)
if err != nil && !errors.Is(err, ErrReqNotFound) {
return nil, err
}
// If found add it to the requirements list.
if err == nil {
_ = cfg.SetRequirement(req.Name, req.Version)
}
deps, err := rulesfileDependencies(file)
if err != nil && !errors.Is(err, ErrDepNotFound) {
return nil, err
}
// If found add it to the dependencies list.
if err == nil {
for _, d := range deps {
_ = cfg.SetDependency(d.Name, d.Version, d.Alternatives)
}
}
}
if cfg.Dependencies == nil || cfg.Requirements == nil {
return nil, fmt.Errorf("no dependencies or requirements found for rulesfile %q", filePath)
}
return cfg, nil
}
func pluginConfig(name, version string, pluginInfo *plugins.Info) (*oci.ArtifactConfig, error) {
// Check that the name we got from the registry.yaml is the same as the embedded one in the plugin at build time.
if name != pluginInfo.Name {
return nil, fmt.Errorf("mismatch between name in registry.yaml (%q) and name found in plugin shared object (%q)", name, pluginInfo.Name)
}
cfg := &oci.ArtifactConfig{
Name: name,
Version: version,
Dependencies: nil,
Requirements: nil,
}
_ = cfg.SetRequirement(common.PluginAPIVersion, pluginInfo.RequiredAPIVersion)
return cfg, nil
}
func pluginInfo(filePath string) (*plugins.Info, error) {
// Create temp dir.
tmpDir, err := os.MkdirTemp("", "registry-oci-")
if err != nil {
return nil, fmt.Errorf("unable to create temporary dir while preparing to extract plugin %q: %v", filePath, err)
}
defer os.RemoveAll(tmpDir)
files, err := common.ExtractTarGz(filePath, tmpDir)
if err != nil {
return nil, err
}
for _, file := range files {
// skip files that are not a shared library such as README files.
if !strings.HasSuffix(file, ".so") {
continue
}
// Get the plugin info.
plugin, err := loader.NewPlugin(file)
if err != nil {
return nil, fmt.Errorf("unable to open plugin %q: %w", file, err)
}
return plugin.Info(), nil
}
return nil, fmt.Errorf("no plugin found in archive %q", filePath)
}

View File

@ -0,0 +1,48 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
/*
Copyright (C) 2022 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
const (
PluginNamespace = "plugins/plugin"
RulesfileNamespace = "plugins/ruleset"
RegistryToken = "REGISTRY_TOKEN"
RegistryUser = "REGISTRY_USER"
RegistryOCI = "REGISTRY"
RepoGithub = "REPO_GITHUB"
FalcoAuthors = "The Falco Authors"
PluginsRepo = "https://github.com/falcosecurity/plugins"
archiveSuffix = ".tar.gz"
amd64Platform = "linux/amd64"
arm64Platform = "linux/arm64"
)

View File

@ -0,0 +1,83 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
import (
"bufio"
"errors"
"fmt"
"os"
"strings"
"github.com/falcosecurity/falcoctl/pkg/oci"
"gopkg.in/yaml.v3"
)
const depsKey = "- required_plugin_versions"
// ErrDepNotFound error when the dependencies are not found in the rulesfile.
var ErrDepNotFound = errors.New("dependencies not found")
// rulesfileDependencies given a rulesfile in yaml format it scans it nad extracts its dependencies.
func rulesfileDependencies(fileName string) ([]oci.ArtifactDependency, error) {
var start bool
var buf []byte
var deps []oci.ArtifactDependency
// Open the file.
file, err := os.Open(fileName)
if err != nil {
return nil, fmt.Errorf("unable to open file %q: %v", fileName, file)
}
// Prepare the file to be read line by line.
fileScanner := bufio.NewScanner(file)
fileScanner.Split(bufio.ScanLines)
// Is appended to each line when inserted in the buffer.
newLine := []byte("\n")
// Falco rulesfiles are a list of dictionaries. We only want the "required plugin versions" by the ruleset. We do
// not want to load all the file in memory, so we scan it line by line. When we reach the interested section we save
// each line in a buffer, and after that we unmarshal it to a proper data structure.
for fileScanner.Scan() {
// If we have already found the section of interest, and we get a new item of the list then we stop.
if start {
if strings.HasPrefix(fileScanner.Text(), "-") {
break
} else {
buf = append(buf, fileScanner.Bytes()...)
buf = append(buf, newLine...)
}
} else {
if strings.HasPrefix(fileScanner.Text(), depsKey) {
start = true
}
}
}
if !start {
return nil, fmt.Errorf("dependencies for rulesfile %q: %w", fileName, ErrDepNotFound)
}
if err := yaml.Unmarshal(buf, &deps); err != nil {
return nil, fmt.Errorf("unable to unmarshal the required plugins versions: %w", err)
}
return deps, nil
}

View File

@ -0,0 +1,423 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
import (
"context"
"fmt"
"os"
"path/filepath"
"regexp"
"runtime"
"strings"
"github.com/falcosecurity/plugin-sdk-go/pkg/sdk/plugins"
"github.com/falcosecurity/plugins/build/registry/pkg/common"
"github.com/blang/semver"
"github.com/falcosecurity/falcoctl/pkg/oci"
"github.com/falcosecurity/falcoctl/pkg/oci/authn"
ocipusher "github.com/falcosecurity/falcoctl/pkg/oci/pusher"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
"k8s.io/klog/v2"
"oras.land/oras-go/v2/registry/remote"
"oras.land/oras-go/v2/registry/remote/auth"
)
type config struct {
// registryToken authentication token for the OCI registry.
registryToken string
// registryUser user used to interact with the OCI registry.
registryUser string
// registryHost hostname of the OCI registry.
registryHost string
// pluginsRepo the Ref of the git repository associated with the OCI artifacts.
pluginsRepo string
}
func lookupConfig() (*config, error) {
var found bool
cfg := &config{}
if cfg.registryToken, found = os.LookupEnv(RegistryToken); !found {
return nil, fmt.Errorf("environment variable with key %q not found, please set it before running this tool", RegistryToken)
}
if cfg.registryUser, found = os.LookupEnv(RegistryUser); !found {
return nil, fmt.Errorf("environment variable with key %q not found, please set it before running this tool", RegistryUser)
}
if cfg.registryHost, found = os.LookupEnv(RegistryOCI); !found {
return nil, fmt.Errorf("environment variable with key %q not found, please set it before running this tool", RegistryOCI)
}
if cfg.pluginsRepo, found = os.LookupEnv(RepoGithub); !found {
return nil, fmt.Errorf("environment variable with key %q not found, please set it before running this tool", RepoGithub)
}
return cfg, nil
}
// refFromPluginEntry returns an OCI reference for a plugin entry in the registry.yaml file.
func refFromPluginEntry(cfg *config, plugin *registry.Plugin, rulesFile bool) string {
var namespace string
// If the RulesURL field is set then the artifact is a rulesfile, otherwise a plugin.
if rulesFile {
namespace = RulesfileNamespace
} else {
namespace = PluginNamespace
}
// Build and return the artifact reference.
return filepath.Join(cfg.registryHost, cfg.registryUser, namespace, plugin.Name)
}
func currentPlatform() string {
return fmt.Sprintf("%s/%s", runtime.GOOS, runtime.GOARCH)
}
// DoUpdateOCIRegistry publishes new plugins with related rules to be released.
// For each plugin in the registry index, it looks for new versions, since the latest version fetched from the remote OCI
// repository, as tags on the local Git repository.
// For each new version, it downloads the related plugin and rule set from the Falco distribution and updates the OCI
// repository accordingly.
func DoUpdateOCIRegistry(ctx context.Context, registryFile, pluginsAMD4, pluginsARM64, rulesfiles, devTag string) ([]registry.ArtifactPushMetadata, error) {
var (
cfg *config
err error
)
// Load the configuration from env variables.
if cfg, err = lookupConfig(); err != nil {
return nil, err
}
cred := &auth.Credential{
Username: cfg.registryUser,
Password: cfg.registryToken,
}
ociClient := authn.NewClient(authn.WithCredentials(cred))
reg, err := registry.LoadRegistryFromFile(registryFile)
if err != nil {
return nil, fmt.Errorf("an error occurred while loading registry entries from file %q: %v", registryFile, err)
}
artifacts := []registry.ArtifactPushMetadata{}
// For each plugin in the registry index, look for new ones to be released, and publish them.
for _, plugin := range reg.Plugins {
pa, ra, err := handleArtifact(ctx, cfg, &plugin, ociClient, pluginsAMD4, pluginsARM64, rulesfiles, devTag)
if err != nil {
return artifacts, err
}
artifacts = append(artifacts, pa...)
artifacts = append(artifacts, ra...)
// Clean up
if err := os.RemoveAll(plugin.Name); err != nil {
return artifacts, fmt.Errorf("unable to remove folder %q: %v", plugin.Name, err)
}
}
return artifacts, nil
}
func tagsFromVersion(version *semver.Version) []string {
var tags []string
// If we are not handling a release candidate then add floating tags.
if len(version.Pre) == 0 {
majorVer := fmt.Sprintf("%d", version.Major)
minorVer := fmt.Sprintf("%d.%d", version.Major, version.Minor)
fullVer := version.String()
tags = append(tags, "latest", majorVer, minorVer, fullVer)
} else {
tags = append(tags, version.String())
}
return tags
}
// handleArtifact it pushes artifacts related to a given plugin in the registry.yaml file.
// It could happen that for a given plugin no artifacts such as builds and rulesets are available.
// Consider the case when we release a single plugin.
func handleArtifact(ctx context.Context, cfg *config, plugin *registry.Plugin, ociClient remote.Client,
pluginsAMD64, pluginsARM64, rulesfiles, devTag string) ([]registry.ArtifactPushMetadata, []registry.ArtifactPushMetadata, error) {
// Filter out plugins that are not owned by falcosecurity.
if !strings.HasPrefix(plugin.URL, PluginsRepo) {
sepString := strings.Repeat("#", 15)
klog.Info("%s %s %s", sepString, plugin.Name, sepString)
klog.Infof("skipping plugin %q with authors %q: it is not maintained by %q",
plugin.Name, plugin.Authors, FalcoAuthors)
return nil, nil, nil
}
// Handle the plugin.
newPluginArtifacts, err := handlePlugin(ctx, cfg, plugin, ociClient, pluginsAMD64, pluginsARM64, devTag)
if err != nil {
return nil, nil, err
}
// Handle the rules.
newRuleArtifacts := []registry.ArtifactPushMetadata{}
if plugin.RulesURL != "" {
newRuleArtifacts, err = handleRule(ctx, cfg, plugin, ociClient, rulesfiles, devTag)
if err != nil {
return nil, nil, err
}
}
return newPluginArtifacts, newRuleArtifacts, nil
}
// handlePlugin for a given plugin it checks if there exists build artifacts in the given folders, and
// if found packs them as an OCI artifact and pushes them to the registry.
func handlePlugin(ctx context.Context, cfg *config, plugin *registry.Plugin, ociClient remote.Client,
pluginsAMD64, pluginsARM64 string, devTag string) ([]registry.ArtifactPushMetadata, error) {
var configLayer *oci.ArtifactConfig
var err error
var filepaths, platforms, tags []string
var version string
var infoP *plugins.Info
// Build the reference for the artifact.
ref := refFromPluginEntry(cfg, plugin, false)
// Metadata of the plugins OCI artifacts push.
metadata := []registry.ArtifactPushMetadata{}
// Get the name of the build object for the amd64 architecture.
amd64Build, err := buildName(plugin.Name, pluginsAMD64, false)
if err != nil {
return nil, err
}
if amd64Build != "" {
if infoP, err = pluginInfo(filepath.Join(pluginsAMD64, amd64Build)); err != nil {
return nil, err
}
// Check that the plugin has the same name as the one we got from the registry.yaml.
// If not, we skip it. It could happen that plugins share the same prefix, example k8saudit, k8saudit-gke.
if infoP.Name != plugin.Name {
// buildName func returned a wrong path starting from the plugin name found in registry.yaml.
klog.Warningf("skipping plugin since there is a mismatch in plugin name (%q) and plugin info name(%q)", plugin.Name, infoP.Name)
return nil, nil
}
filepaths = append(filepaths, filepath.Join(pluginsAMD64, amd64Build))
platforms = append(platforms, amd64Platform)
}
// Get the name of the build object for the arm64 architecture.
arm64Build, err := buildName(plugin.Name, pluginsARM64, false)
if err != nil {
return nil, err
}
if arm64Build != "" {
filepaths = append(filepaths, filepath.Join(pluginsARM64, arm64Build))
platforms = append(platforms, arm64Platform)
}
if arm64Build == "" && amd64Build == "" {
return nil, nil
}
sepString := strings.Repeat("#", 15)
klog.Infof("%s %s %s", sepString, plugin.Name, sepString)
// Extract version from build object.
klog.Infof("generating plugin's config layer")
version, tags, err = versionAndTags(plugin.Name, filepath.Base(filepaths[0]), devTag)
if err != nil {
return nil, err
}
if infoP == nil {
klog.Warningf("no config layer generated for plugin %q: the plugins has not been build for the current platform %q", plugin.Name, currentPlatform())
return nil, nil
}
configLayer, err = pluginConfig(plugin.Name, version, infoP)
if err != nil {
klog.Errorf("unable to generate config file: %v", err)
return nil, err
}
klog.Infof("pushing plugin to remote repo with ref %q and tags %q", ref, tags)
pusher := ocipusher.NewPusher(ociClient, false, nil)
res, err := pusher.Push(ctx, oci.Plugin, ref,
ocipusher.WithTags(tags...),
ocipusher.WithFilepathsAndPlatforms(filepaths, platforms),
ocipusher.WithArtifactConfig(*configLayer),
ocipusher.WithAnnotationSource(cfg.pluginsRepo))
if err != nil {
return nil, fmt.Errorf("an error occurred while pushing plugin %q: %w", plugin.Name, err)
}
if res != nil {
metadata = append(metadata, registry.ArtifactPushMetadata{
registry.RepositoryMetadata{
Ref: ref,
},
registry.ArtifactMetadata{
Digest: res.RootDigest,
Tags: tags,
},
})
}
return metadata, nil
}
// handleRule for a given plugin it checks if there exists rulesfiles in the given folder, and
// if found packs them as an OCI artifact and pushes it to the registry.
func handleRule(ctx context.Context, cfg *config, plugin *registry.Plugin,
ociClient remote.Client, rulesfiles, devTag string) ([]registry.ArtifactPushMetadata, error) {
var err error
var filepaths, tags []string
var version string
// Build the reference for the artifact.
ref := refFromPluginEntry(cfg, plugin, true)
// Metadata of the plugins OCI artifacts push.
metadata := []registry.ArtifactPushMetadata{}
// Get the name of the build object for the amd64 architecture.
rulesfileBuild, err := buildName(plugin.Name, rulesfiles, true)
if err != nil {
return nil, err
}
if rulesfileBuild != "" {
filepaths = append(filepaths, filepath.Join(rulesfiles, rulesfileBuild))
} else {
return nil, nil
}
sepString := strings.Repeat("#", 15)
klog.Infof("%s %s %s", sepString, rulesfileNameFromPlugin(plugin.Name), sepString)
klog.Infof("generating rulesfile's config layer")
version, tags, err = versionAndTags(plugin.Name, filepath.Base(filepaths[0]), devTag)
if err != nil {
return nil, err
}
configLayer, err := rulesfileConfig(rulesfileNameFromPlugin(plugin.Name), version, filepaths[0])
if err != nil {
klog.Errorf("unable to generate config file: %v", err)
return nil, err
}
klog.Infof("pushing rulesfile to remote repo with ref %q and tags %q", ref, tags)
pusher := ocipusher.NewPusher(ociClient, false, nil)
res, err := pusher.Push(ctx, oci.Rulesfile, ref,
ocipusher.WithTags(tags...),
ocipusher.WithFilepaths(filepaths),
ocipusher.WithArtifactConfig(*configLayer),
ocipusher.WithAnnotationSource(cfg.pluginsRepo))
if err != nil {
return nil, fmt.Errorf("an error occurred while pushing rulesfile %q: %w", plugin.Name, err)
}
if res != nil {
metadata = append(metadata, registry.ArtifactPushMetadata{
registry.RepositoryMetadata{
Ref: ref,
},
registry.ArtifactMetadata{
Digest: res.RootDigest,
Tags: tags,
},
})
}
return metadata, nil
}
func rulesfileNameFromPlugin(name string) string {
return fmt.Sprintf("%s%s", name, common.RulesArtifactSuffix)
}
// buildName returns the name of the build object for a given object name.
// It searches in the given folder if build artifact exists that has the same
// prefix as the object. If we are searching for a rulesfiles object then, the
// rulefiles variable needs to be set to true.
func buildName(objName, dirPath string, rulesfile bool) (string, error) {
if dirPath == "" {
return "", nil
}
// Get the entries
entries, err := os.ReadDir(dirPath)
if err != nil {
return "", fmt.Errorf("unable to get build object for %q: %w", objName, err)
}
for _, entry := range entries {
name := entry.Name()
if rulesfile {
if strings.HasPrefix(name, objName+"-rules") {
return name, nil
}
} else {
if strings.HasPrefix(name, objName) && !strings.Contains(name, "rules") {
return name, nil
}
}
}
return "", nil
}
func versionAndTags(pluginName, buildName, devTag string) (string, []string, error) {
var version string
var tags []string
var err error
if strings.Contains(buildName, "-rules") {
version = strings.TrimPrefix(buildName, pluginName+"-rules-")
version = strings.TrimSuffix(version, archiveSuffix)
} else {
regexPattern := `\b-linux\S*`
regex := regexp.MustCompile(regexPattern)
// Replace all substrings starting with "linux" with an empty string
version = regex.ReplaceAllString(buildName, "")
version = strings.TrimPrefix(version, pluginName+"-")
}
if devTag != "" {
return version, append(tags, devTag), nil
}
// If not a dev version, we expect to but be semver compatible.
semVer, err := semver.Parse(version)
if err != nil {
return "", nil, fmt.Errorf("unable to parse version for %q: %w", buildName, err)
}
return version, tagsFromVersion(&semVer), nil
}

View File

@ -0,0 +1,36 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci_test
import (
"testing"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
)
const (
samplePluginRepoRef = "ghcr.io/falcosecurity/plugins/plugins/k8saudit"
sampleDigest = "sha256:454b5d97ecbb71c8b605af2028f12fc2c792e363b150b1aeeb773c802699d647"
samplePluginTag = "1.0.0"
)
func TestOCI(t *testing.T) {
RegisterFailHandler(Fail)
RunSpecs(t, "OCI Suite")
}

View File

@ -0,0 +1,37 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
import (
"encoding/json"
"io"
"github.com/pkg/errors"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
)
func PrintUpdateStatus(newArtifacts registry.ArtifactsPushStatus, output io.Writer) error {
bytes, err := json.Marshal(newArtifacts)
if err != nil {
return errors.Wrap(err, "error marshaling oci registry push metadata")
}
output.Write(bytes)
return nil
}

View File

@ -0,0 +1,93 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci_test
import (
"bytes"
"encoding/json"
. "github.com/onsi/ginkgo/v2"
. "github.com/onsi/gomega"
"github.com/falcosecurity/plugins/build/registry/internal/options"
"github.com/falcosecurity/plugins/build/registry/pkg/oci"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
)
var _ = Describe("Update OCI registry", func() {
var (
out *bytes.Buffer
status registry.ArtifactsPushStatus
opts *options.CommonOptions
err error
)
Context("Print update result", func() {
BeforeEach(func() {
out = new(bytes.Buffer)
opts = options.NewCommonOptions(options.WithOutput(out))
})
When("at least one artifact has been pushed to the OCI registry", func() {
BeforeEach(func() {
status = registry.ArtifactsPushStatus{
{
Repository: registry.RepositoryMetadata{
Ref: samplePluginRepoRef,
},
Artifact: registry.ArtifactMetadata{
Digest: sampleDigest,
Tags: []string{samplePluginTag}},
},
}
err = oci.PrintUpdateStatus(status, opts.Output)
})
It("should not fail", func() {
Expect(err).To(BeNil())
})
It("output should not be empty", func() {
Expect(out.String()).ToNot(BeEmpty())
})
It("output should contain a valid JSON", func() {
status = registry.ArtifactsPushStatus{}
err := json.Unmarshal(out.Bytes(), &status)
Expect(err).To(BeNil())
})
})
When("no artifacts have been pushed to the OCI registry", func() {
BeforeEach(func() {
status = registry.ArtifactsPushStatus{}
err = oci.PrintUpdateStatus(status, opts.Output)
})
It("should not fail", func() {
Expect(err).To(BeNil())
})
It("output should not be empty", func() {
Expect(out.String()).ToNot(BeEmpty())
})
It("output should contain a valid JSON", func() {
status = registry.ArtifactsPushStatus{}
err := json.Unmarshal(out.Bytes(), &status)
Expect(err).To(BeNil())
})
})
})
})

View File

@ -0,0 +1,88 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
import (
"bufio"
"errors"
"fmt"
"os"
"strconv"
"strings"
"github.com/blang/semver"
"github.com/falcosecurity/falcoctl/pkg/oci"
"github.com/falcosecurity/plugins/build/registry/pkg/common"
)
const (
rulesEngineAnchor = "- required_engine_version"
)
// ErrReqNotFound error when the requirements are not found in the rulesfile.
var ErrReqNotFound = errors.New("requirements not found")
// rulesfileRequirement given a rulesfile in yaml format it scans it and extracts its requirements.
func rulesfileRequirement(filePath string) (*oci.ArtifactRequirement, error) {
var requirement string
// Open the file.
file, err := os.Open(filePath)
if err != nil {
return nil, fmt.Errorf("unable to open file %q: %v", filePath, file)
}
defer file.Close()
// Prepare the file to be read line by line.
fileScanner := bufio.NewScanner(file)
fileScanner.Split(bufio.ScanLines)
for fileScanner.Scan() {
if strings.HasPrefix(fileScanner.Text(), rulesEngineAnchor) {
requirement = fileScanner.Text()
break
}
}
if requirement == "" {
return nil, fmt.Errorf("requirements for rulesfile %q: %w", filePath, ErrReqNotFound)
}
// Split the requirement and parse the version to semVer.
// In case the requirement was expressed as a numeric value,
// we convert it to semver and treat it as minor version.
tokens := strings.Split(fileScanner.Text(), ":")
version := strings.TrimSpace(tokens[1])
reqVer, err := semver.Parse(version)
if err != nil {
minor, err := strconv.ParseUint(version, 10, 64)
if err != nil {
return nil, fmt.Errorf("unable to parse requirement %q: expected a numeric value or a valid semver string", version)
}
reqVer = semver.Version{
Major: 0,
Minor: minor,
Patch: 0,
}
}
return &oci.ArtifactRequirement{
Name: common.EngineVersionKey,
Version: reqVer.String(),
}, nil
}

View File

@ -0,0 +1,39 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
package oci
import (
"testing"
"github.com/stretchr/testify/assert"
)
func TestRulesfileRequirement(t *testing.T) {
req, err := rulesfileRequirement("testdata/rules-failed-req.yaml")
assert.Error(t, err)
req, err = rulesfileRequirement("testdata/rules-numeric-req.yaml")
assert.NoError(t, err)
assert.Equal(t, "0.15.0", req.Version)
assert.Equal(t, "engine_version_semver", req.Name)
req, err = rulesfileRequirement("testdata/rules-semver-req.yaml")
assert.NoError(t, err)
assert.Equal(t, "0.31.0", req.Version)
assert.Equal(t, "engine_version_semver", req.Name)
}

View File

@ -0,0 +1 @@
- required_engine_version: test

View File

@ -0,0 +1 @@
- required_engine_version: 15

View File

@ -0,0 +1 @@
- required_engine_version: 0.31.0

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -18,11 +19,22 @@ package registry
import (
"io"
"os"
)
// Load reads from a io.Reader and uses the content to populate and
// LoadRegistryFromFile loads the registry from a file on disk.
func LoadRegistryFromFile(fname string) (*Registry, error) {
file, err := os.Open(fname)
if err != nil {
return nil, err
}
defer file.Close()
return load(file)
}
// load reads from a io.Reader and uses the content to populate and
// return a new instance of Registry
func Load(r io.Reader) (*Registry, error) {
func load(r io.Reader) (*Registry, error) {
registry := &Registry{}
return registry, registry.Decode(r)
}

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -16,6 +17,14 @@ limitations under the License.
package registry
import (
"github.com/falcosecurity/falcoctl/pkg/index/index"
)
// MaxPublicID represents the max allowed value for plublic plugin IDs,
// see https://github.com/falcosecurity/plugins/blob/main/docs/plugin-ids.md
const MaxPublicID = 1<<30 - 1 // 1073741823 is the public block upper limit
type SourcingCapability struct {
Supported bool `yaml:"supported"`
ID uint `yaml:"id"`
@ -33,17 +42,42 @@ type Capabilities struct {
}
type Plugin struct {
Name string `yaml:"name"`
Description string `yaml:"description"`
Authors string `yaml:"authors"`
Contact string `yaml:"contact"`
URL string `yaml:"url"`
License string `yaml:"license"`
Reserved bool `yaml:"reserved"`
Capabilities Capabilities `yaml:"capabilities"`
Name string `yaml:"name"`
Description string `yaml:"description"`
Authors string `yaml:"authors"`
Contact string `yaml:"contact"`
Maintainers []struct {
Email string `yaml:"email"`
Name string `yaml:"name"`
} `yaml:"maintainers"`
Keywords []string `yaml:"keywords"`
URL string `yaml:"url"`
RulesURL string `yaml:"rules_url"`
License string `yaml:"license"`
Reserved bool `yaml:"reserved"`
Capabilities Capabilities `yaml:"capabilities"`
Signature *index.Signature `yaml:"signature,omitempty"`
}
type Registry struct {
Plugins []Plugin `yaml:"plugins"`
ReservedSources []string `yaml:"reserved_sources"`
}
type ArtifactsPushStatus []ArtifactPushMetadata
// ArtifactPushMetadata represents metadata of a push of an OCI Artifact to
// an OCI repository.
type ArtifactPushMetadata struct {
Repository RepositoryMetadata `json:"repository"`
Artifact ArtifactMetadata `json:"artifact"`
}
type ArtifactMetadata struct {
Digest string `json:"digest"`
Tags []string `json:"tags"`
}
type RepositoryMetadata struct {
Ref string `json:"ref"`
}

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -18,36 +19,30 @@ package registry
import (
"fmt"
"os"
"regexp"
)
var (
rgxName *regexp.Regexp
rgxName = regexp.MustCompile(`^[a-z]+[a-z0-9-_]*$`)
rgxSource = regexp.MustCompile(`^[a-z]+[a-z0-9_]*$`)
)
func init() {
var err error
rgxName, err = regexp.Compile(`^[a-z]+[a-z0-9_]*$`)
if err != nil {
println(err.Error())
os.Exit(1)
}
}
func (s *SourcingCapability) validate(usedIDs map[uint]bool, forbiddenSources map[string]bool) error {
if s.Supported {
if s.ID == 0 {
return fmt.Errorf("forbidden source ID: '%d'", s.ID)
if s.ID > MaxPublicID {
return fmt.Errorf("source ID outside the allowed range (%d): '%d'", MaxPublicID, s.ID)
}
if _, ok := usedIDs[s.ID]; ok {
return fmt.Errorf("source id is not unique: '%d'", s.ID)
return fmt.Errorf("source ID is not unique: '%d'", s.ID)
}
if _, ok := forbiddenSources[s.Source]; ok {
return fmt.Errorf("forbidden source name: '%s'", s.Source)
}
if !rgxName.MatchString(s.Source) {
return fmt.Errorf("source name does follow the naming convention: '%s'", s.Source)
// ID=0 is a special case and we don't want to define a source name
if s.ID != 0 {
if _, ok := forbiddenSources[s.Source]; ok {
return fmt.Errorf("forbidden source name: '%s'", s.Source)
}
if !rgxSource.MatchString(s.Source) {
return fmt.Errorf("source name does follow the naming convention: '%s'", s.Source)
}
}
usedIDs[s.ID] = true
}

View File

@ -1,5 +1,6 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -14,16 +15,55 @@ See the License for the specific language governing permissions and
limitations under the License.
*/
package main
package table
import (
"fmt"
"os"
"strings"
"github.com/falcosecurity/plugins/build/registry/pkg/registry"
)
func FormatMarkdownTable(r *registry.Registry) (string, error) {
func DoTable(registryFile, subFile, subTag string) error {
r, err := registry.LoadRegistryFromFile(registryFile)
if err != nil {
return err
}
err = r.Validate()
if err != nil {
return err
}
table, err := formatMarkdownTable(r)
if err != nil {
return err
}
if len(subFile) == 0 {
fmt.Println(table)
} else {
if len(subTag) == 0 {
return fmt.Errorf("subtag flag is required")
}
content, err := os.ReadFile(subFile)
if err != nil {
return err
}
pieces := strings.SplitN(string(content), subTag, 3)
if len(pieces) != 3 {
return fmt.Errorf("can't find two instances of subtag in text file: '%s'", subTag)
}
contentStr := fmt.Sprintf("%s%s\n%s\n%s%s", pieces[0], subTag, table, subTag, pieces[2])
if err = os.WriteFile(subFile, []byte(contentStr), 0666); err != nil {
return err
}
}
return nil
}
func formatMarkdownTable(r *registry.Registry) (string, error) {
var ret strings.Builder
ret.WriteString("| Name | Capabilities | Description\n")
ret.WriteString("| --- | --- | --- |\n")

View File

@ -1 +1,2 @@
version
version
utils

View File

@ -1,5 +1,6 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2022 The Falco Authors.
# Copyright (C) 2023 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at

View File

@ -2,4 +2,4 @@ module github.com/falcosecurity/plugins/build/utils
go 1.17
require github.com/spf13/pflag v1.0.5
require github.com/spf13/pflag v1.0.6

View File

@ -1,2 +1,2 @@
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=

49
build/utils/version.go Normal file → Executable file
View File

@ -1,8 +1,9 @@
// SPDX-License-Identifier: Apache-2.0
//go:build (linux && cgo) || (darwin && cgo) || (freebsd && cgo)
// +build linux,cgo darwin,cgo freebsd,cgo
/*
Copyright (C) 2022 The Falco Authors.
Copyright (C) 2023 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
@ -42,7 +43,7 @@ import (
#include <stdio.h>
static uintptr_t pluginOpen(const char* path, char** err) {
void* h = dlopen(path, RTLD_NOW|RTLD_GLOBAL);
void* h = dlopen(path, RTLD_NOW|RTLD_GLOBAL|RTLD_DEEPBIND);
if (h == NULL) {
*err = (char*)dlerror();
}
@ -74,26 +75,9 @@ static char* get_version(uintptr_t h, char** err) {
*/
import "C"
var rgxVersion *regexp.Regexp
var rgxHash *regexp.Regexp
var rgxName *regexp.Regexp
func init() {
var err error
// see: https://semver.org/#is-there-a-suggested-regular-expression-regex-to-check-a-semver-string
rgxVersion, err = regexp.Compile(`^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?$`)
if err != nil {
panic(err.Error())
}
rgxHash, err = regexp.Compile(`^[0-9a-z]+$`)
if err != nil {
panic(err.Error())
}
rgxName, err = regexp.Compile(`^[a-z]+[a-z0-9_]*$`)
if err != nil {
panic(err.Error())
}
}
var rgxVersion = regexp.MustCompile(`^(0|[1-9]\d*)\.(0|[1-9]\d*)\.(0|[1-9]\d*)(?:-((?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*)(?:\.(?:0|[1-9]\d*|\d*[a-zA-Z-][0-9a-zA-Z-]*))*))?$`)
var rgxHash = regexp.MustCompile(`^[0-9a-z]+$`)
var rgxName = regexp.MustCompile(`^[a-z]+[a-z0-9_\-]*$`)
func pluginInfo(path string) (name, version string, err error) {
path, err = filepath.Abs(path)
@ -115,14 +99,19 @@ func pluginInfo(path string) (name, version string, err error) {
err = errors.New("cannot get name of " + path + ": " + C.GoString(cErr))
return
}
// we need to convert immediately the pointer into a string
// otherwise the pointer could change see plugin sdk cpp
name = C.GoString(cName)
cVer := C.get_version(h, &cErr)
if cVer == nil {
err = errors.New("cannot get version of " + path + ": " + C.GoString(cErr))
return
}
// Same as before
version = C.GoString(cVer)
return C.GoString(cName), C.GoString(cVer), nil
return
}
func git(args ...string) (output []string, err error) {
@ -174,13 +163,18 @@ func main() {
var hash string
// get last tag
tags, err := git("describe", "--tags", "--abbrev=0", "--match", name+`-*`)
// It matches the old tag in "pluginName-version" or the new one "plugins/pluginName/semver"
tags, err := git("describe", "--tags", "--abbrev=0", "--match", name+`-[0-9]*`, "--match", "plugins/"+name+"/v*")
if err == nil {
if len(tags) == 0 {
fail(errors.New("no git tag found for: " + name))
}
lastTag := tags[0]
lastVer = strings.Replace(lastTag, name+"-", "", 1)
if strings.HasPrefix(lastTag, name) {
lastVer = strings.Replace(lastTag, name+"-", "", 1)
} else {
lastVer = strings.Replace(lastTag, "plugins/"+name+"/v", "", 1)
}
if !rgxVersion.MatchString(lastVer) {
fail(errors.New("plugin latest released version not compatible with SemVer: " + lastTag))
}
@ -211,11 +205,14 @@ func main() {
} else {
// stable versions MUST have a precise tag matching plugin name and version
expectedTag := name + "-" + version
expectedTag := "plugins/" + name + "/v" + version
tags, err := git("--no-pager", "tag", "--points-at", "HEAD")
if err != nil {
fail(err)
}
if len(tags) == 0 || len(tags[0]) == 0 {
fail(errors.New("there are no tags pointing at HEAD"))
}
for _, tag := range tags {
if tag == expectedTag {
fmt.Println(version)

76
changelog-gen.sh Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2025 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
plugin=$1
if [ -z "$plugin" ]; then
echo "Usage changelog-gen.sh <plugin_name>"
exit 1
fi
tool=./build/changelog/bin/changelog
to=""
from=""
tags="$(git tag -l | grep -E -e ${plugin}-[0-9]+.[0-9]+.[0-9]+ -e ${plugin}/v[0-9]+.[0-9]+.[0-9]+ | grep -E -v ${plugin}-[0-9]+.[0-9]+.[0-9]+-rc | sort -V -r)"
# print title
echo "# Changelog"
echo ""
# generate entry for upcoming tag, if any
head="$(git rev-parse HEAD)"
dev_changelog="$(${tool} --from="" --to=${head} --plugin=${plugin})"
if [ ! -z "$dev_changelog" ]; then
echo "## dev build (unreleased)"
echo ""
echo "$dev_changelog"
echo ""
fi
# generate entry for each tag
for tag in $tags
do
from=$tag
if [ ! -z "$to" ]; then
ver=""
# support both the old and new tag formats
if [[ $to == plugins/* ]]; then
ver="$(echo ${to} | sed -e s/^plugins\\/${plugin}\\///)"
else
ver="$(echo ${to} | sed -e s/^${plugin}-// -e s/^/v/)"
fi
echo "## ${ver}"
echo ""
${tool} --from=${from} --to=${to} --plugin=${plugin}
echo ""
fi
to=$tag
done
# generate last entry for first tag, starting from the first commit
if [ -n "$to" ]; then
from="$(git rev-list --max-parents=0 HEAD)"
# support both the old and new tag formats
if [[ $to == plugins/* ]]; then
ver="$(echo ${to} | sed -e s/^plugins\\/${plugin}\\///)"
else
ver="$(echo ${to} | sed -e s/^${plugin}-// -e s/^/v/)"
fi
echo "## ${ver}"
echo ""
${tool} --from=${from} --to=${to} --plugin=${plugin}
echo ""
fi

View File

@ -37,7 +37,7 @@ NAME := <YOUR-PLUGIN-NAME-HERE>
OUTPUT := lib$(NAME).so
ifeq ($(DEBUG), 1)
GODEBUGFLAGS= GODEBUG=cgocheck=2
GODEBUGFLAGS= GODEBUG=cgocheck=1
else
GODEBUGFLAGS= GODEBUG=cgocheck=0
endif
@ -58,7 +58,13 @@ One peculiarity of plugins with event source capability is how they can accept u
There's no silver bullet for this problem, and the solution strictly depends on the use cases of your plugin. However, there are some principles you can follow.
- The [init configuration](https://falco.org/docs/configuration/#plugins) should contain information that is used during the whole plugin lifecycle and that is used across both field extraction and event generation
- The init configuration is the right place for structured data. In fact, in most cases, plugins accept JSON strings as a configuration and also expose a schema describing/documenting the expected data format (see [`plugin_get_init_schema`](https://falco.org/docs/plugins/plugin-api-reference/#const-char-plugin-get-init-schema-ss-plugin-schema-type-schema-type-required-no) for more details)
- The init configuration is the right place for structured data. In fact, in most cases, plugins accept JSON strings as a configuration and also expose a schema describing/documenting the expected data format (see [`plugin_get_init_schema`](https://falco.org/docs/plugins/plugin-api-reference/#get-init-schema) for more details)
- Init configuration parameters should have the following annotations. See the [JSON Schema Validation specification](https://json-schema.org/draft/2020-12/json-schema-validation.html#name-a-vocabulary-for-basic-meta) for more details:
- `title`, which provides a short user-facing name for the parameter.
- `description`, which describes the parameter using a sentence or a short paragraph.
- `default` (optional), which provides the default value of the parameter.
- `required` (optional), which notes that the parameter value is required.
- `examples` (optional), which provides example values for the parameter.
- The open parameters should contain information that is only relevant for opening a specific event source, and their lifecycle ends at the invocation of `plugin_close()`
- The open parameters should contain minimal and non-structured information, such as a URI or a resource descriptor string. This is the reason why the framework does not support any schema definition for open parameters and treats them as an opaque string. Ideally, if more than one parameter is required to open a data source, comma-separated string concatenation is preferable to structured data formats such as JSON

35
docs/plugin-ids.md Normal file
View File

@ -0,0 +1,35 @@
# Plugin IDs (Sourcing Capability Only)
Using a unique `id` is mandatory to maintain interoperability across all plugins with _event sourcing_ capability. When a plugin is loaded by a compatible application (e.g., Falco), the `id` is used to route events to the correct plugin. Indeed, attempting to load two or more plugins using the same `id` will result in an error.
For this reason, The Falco Project maintains a [public registry of plugins](https://github.com/falcosecurity/plugins/blob/main/README.md#registering-a-new-plugin), which allows the assignment of a unique `id` for your plugin. However, some plugins may not be registered in the public registry. For example, if you are privately developing a plugin for your own use, you might use any `id` you want. To avoid conflicts in these situations, this document mandates general rules regarding `id` assignment and reservation.
## ID Blocks
The following ID ranges are designated for specific purposes:
| Block name | ID range | # of IDs | Description |
|---|---|---|---|
| Public | 01073741823 (30-bit) | 1073741824 | Used in the public registry. Single IDs in this range can be [assigned](#assigning-an-id) or [reserved](#reserving-an-id). |
| Private | 10737418242147483647 (30-bit) | 1073741824 | Used for private plugins (think of this range as the equivalent of 192.168.0.0/16 in networks). Organizations may use this range for plugins intended for their private domain. Interoperability is not guaranteed. |
| Reserved | 2147483648-3221225471 (30-bit) | 1073741824 | This range is reserved for future use and must not be used under any circumstances. |
| Internal | 3221225472-4294967295 (30-bit) | 1073741824 | This range is reserved for internal use and must not be used by plugins. It might be used by the plugin framework implementation for technical purposes. |
Notes:
- An `id` is a 32-bit unsigned integer. The MSBs are used to identify the block of IDs.
- Only IDs up to 1073741823 can be requested for use in the public registry.
- Only IDs up to 2147483647 can be used by plugins.
## Assigning an ID
The public registry is intended for assigning IDs to plugins that are publicly available. If you want to share your plugin with the community, you should follow the instructions reported in the [Registering a new plugin](../README.md#registering-a-new-plugin) section of this repository's documentation.
When making your request, please choose the next available ID in the [registry.yaml](../registry.yaml) file. The `id` will be definitively assigned to your plugin once the corresponding PR is merged, and the [registry.yaml](../registry.yaml) file is updated.
## Reserving an ID
For particular technical purposes or special cases, an `id` can be reserved so that it will not be assigned to any specific plugin. Notably, id 999 has been reserved for source plugin development. Any plugin author can temporarily use this `id`; however, it can't be assigned to any specific plugin and must not be used for purposes other than local development.
To reserve an `id`, you can use the same procedure for [registering a new plugin](../README.md#registering-a-new-plugin) and specify the `reserved: true` option.
Requests for `id` reservation will be evaluated on a case-by-case basis. The Falco Project reserves the right to reject any request for any reason.

View File

@ -0,0 +1,40 @@
### Registering a Plugin
Registering your plugin inside the registry helps ensure that some technical constraints are respected, such as that a [given ID is used by exactly one plugin with event source capability](https://falco.org/docs/concepts/plugins/architecture/#plugin-event-ids) and allows plugin authors to [coordinate about event source formats](https://falco.org/docs/concepts/plugins/architecture/#plugin-event-sources-and-interoperability). Moreover, this is a great way to share your plugin project with the community and engage with it, thus gaining new users and **increasing its visibility**. We encourage you to register your plugin in this registry before publishing it. You can add your plugins in this registry regardless of where its source code is hosted (there's a `url` field for this specifically).
The registration process involves adding an entry about your plugin inside the [registry.yaml](../registry.yaml) file by creating a Pull Request in this repository. Please be mindful of a few constraints that are automatically checked and required for your plugin to be accepted:
- The `name` field is mandatory and must be **unique** across all the plugins in the registry
- *(Sourcing Capability Only)* The `id` field is mandatory and must be **unique** in the registry across all the plugins with event source capability
- See [docs/plugin-ids.md](plugin-ids.md) for more information about plugin IDs
- The plugin `name` must match this [regular expression](https://en.wikipedia.org/wiki/Regular_expression): `^[a-z]+[a-z0-9-_\-]*$` (however, its not recommended to use `_` in the name, unless you are trying to match the name of a source or for particular reasons)
- The `source` *(Sourcing Capability Only)* and `sources` *(Extraction Capability Only)* must match this [regular expression](https://en.wikipedia.org/wiki/Regular_expression): `^[a-z]+[a-z0-9_]*$`
- The `url` field should point to the plugin source code
- The `rules_url` field should point to the default ruleset, if any
For reference, here's an example of an entry for a plugin with both event sourcing and field extraction capabilities:
```yaml
- name: k8saudit
description: ...
authors: ...
contact: ...
maintainers:
- name: The Falco Authors
email: cncf-falco-dev@lists.cncf.io
keywords:
- audit
- audit-log
- audit-events
- kubernetes
url: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit
rules_url: https://github.com/falcosecurity/plugins/tree/main/plugins/k8saudit/rules
url: ...
license: ...
capabilities:
sourcing:
supported: true
id: 2
source: k8s_audit
extraction:
supported: true
```

6
plugins/anomalydetection/.gitignore vendored Normal file
View File

@ -0,0 +1,6 @@
*.so
*.a
*.o
.vscode
build*
libanomalydetection.so

View File

@ -0,0 +1,38 @@
# Changelog
## dev build (unreleased)
* [`406c517`](https://github.com/falcosecurity/plugins/commit/406c517) update(anomalydetection): tweak inits when count_min_sketch disabled + better...
* [`cb0fdb1`](https://github.com/falcosecurity/plugins/commit/cb0fdb1) update(anomalydetection): update documentation
* [`79c085e`](https://github.com/falcosecurity/plugins/commit/79c085e) update(anomalydetection): helper new filtercheck / output field anomaly.falco...
* [`489ef6d`](https://github.com/falcosecurity/plugins/commit/489ef6d) update(anomalydetection): ability to reset data structures w/ timers
* [`d4e72b8`](https://github.com/falcosecurity/plugins/commit/d4e72b8) update(anomalydetection): more usage safeguards and info log messages
* [`23bf05e`](https://github.com/falcosecurity/plugins/commit/23bf05e) update(anomalydetection): add some fallbacks / evt param extraction in cases ...
* [`1e8052c`](https://github.com/falcosecurity/plugins/commit/1e8052c) update(anomalydetection): add some custom behavior profile short-cut fields o...
* [`6a448c2`](https://github.com/falcosecurity/plugins/commit/6a448c2) update(anomalydetection): add MutexGuard (adopted from libs) to sketches data...
* [`f720e4a`](https://github.com/falcosecurity/plugins/commit/f720e4a) update(anomalydetection): finish currently supported behavior profile filterc...
* [`14a58d3`](https://github.com/falcosecurity/plugins/commit/14a58d3) update(anomalydetection): add lastevent_fd + enhance robustness / tests + sta...
* [`27747eb`](https://github.com/falcosecurity/plugins/commit/27747eb) update(anomalydetection): unit tests for proc lineage + add filterchecks 1/n
* [`fa2c05e`](https://github.com/falcosecurity/plugins/commit/fa2c05e) update(anomalydetection): populate info for proc args
* [`faf6636`](https://github.com/falcosecurity/plugins/commit/faf6636) update(anomalydetection): sync plugin to latest SDK changes
* [`6a834a3`](https://github.com/falcosecurity/plugins/commit/6a834a3) new(anomalydetection): init config + start behavior profile extraction
* [`73c11bd`](https://github.com/falcosecurity/plugins/commit/73c11bd) new(anomalydetection): start unit tests + bump libs and sdk
* [`f778922`](https://github.com/falcosecurity/plugins/commit/f778922) cleanup(anomalydetection): cms class updates
* [`6b89390`](https://github.com/falcosecurity/plugins/commit/6b89390) new(anomalydetection): init plugin / start dev

View File

@ -0,0 +1,57 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2024 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
cmake_minimum_required(VERSION 3.22)
list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake/modules")
option(BUILD_TESTS "Enable tests" ON)
# Project metadata
project(
anomalydetection
VERSION 0.1.0
DESCRIPTION "Falco Anomaly Detection Plugin"
LANGUAGES CXX)
# Dependencies
include(FetchContent)
include(plugin-sdk-cpp)
include(libs) # Temporarily include libs for initial dev
include(xxhash)
# Project target
file(GLOB_RECURSE anomalydetection_SOURCES "${CMAKE_CURRENT_SOURCE_DIR}/src/*.cpp")
add_library(anomalydetection SHARED ${anomalydetection_SOURCES} )
set_target_properties(anomalydetection PROPERTIES CXX_EXTENSIONS OFF)
# Project compilation options
target_compile_options(anomalydetection PRIVATE "-fPIC")
target_compile_options(anomalydetection PRIVATE "-Wl,-z,relro,-z,now")
target_compile_options(anomalydetection PRIVATE "-fstack-protector-strong")
# When compiling in Debug mode, this will define the DEBUG symbol for use in your code
target_compile_options(anomalydetection PUBLIC "$<$<CONFIG:DEBUG>:-DDEBUG>")
target_compile_features(anomalydetection PUBLIC cxx_std_17)
# Project includes
target_include_directories(
anomalydetection PRIVATE "${PLUGIN_SDK_INCLUDE}" "${XXHASH_INCLUDE}" "${LIBS_INCLUDE}")
# Project linked libraries
target_link_libraries(anomalydetection ${_REFLECTION})
# Testing
if(BUILD_TESTS)
add_subdirectory(test)
endif()

View File

@ -0,0 +1,36 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2024 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
NAME := anomalydetection
OUTPUT := lib$(NAME).so
all: $(OUTPUT)
clean:
rm -rf build $(OUTPUT)
# Temporarily include libs for initial dev
$(OUTPUT):
mkdir -p build \
&& cd build \
&& cmake \
-DCMAKE_BUILD_TYPE=Release \
-DMINIMAL_BUILD=ON \
-DUSE_BUNDLED_LIBELF=OFF \
-DCREATE_TEST_TARGETS=OFF \
../ \
&& make -j6 anomalydetection \
&& cp ./$(OUTPUT) ../$(OUTPUT)
readme:
@$(READMETOOL) -p ./$(OUTPUT) -f README.md

View File

@ -0,0 +1,319 @@
# Falcosecurity `anomalydetection` Plugin
**This plugin is experimental and under development**
This `anomalydetection` plugin has been created upon this [Proposal](https://github.com/falcosecurity/falco/blob/master/proposals/20230620-anomaly-detection-framework.md).
## Introduction
The `anomalydetection` plugin enhances {syscall} event analysis by incorporating anomaly detection estimates for probabilistic filtering.
### Functionality
The initial scope focuses exclusively on "CountMinSketch Powered Probabilistic Counting and Filtering" for a subset of syscalls and a selection of options for defining behavior profiles. This limitation is due to current restrictions related to the plugin API and SDK layout.
The new framework primarily aims to improve the usability of standard Falco rules. It may reduce the need for precise rule tuning, leverages probabilistic count estimates to auto-tune noisy rules on the fly, and enables the creation of broader Falco rules. Read more in the [Proposal](https://github.com/falcosecurity/falco/blob/master/proposals/20230620-anomaly-detection-framework.md).
### TL;DR
The official documentation will eventually be available on the Falco [Plugins](https://falco.org/docs/plugins/) site. Therefore, consider this README as not being a complete documentation for using this plugin.
*Disclaimer*: Anomaly detection can mean different things to different people. It's best to keep your expectations low for this plugin's current capabilities. For now, it is focused solely on probabilistic counting.
What this plugin is:
- **Initial step for real-time anomaly detection in Falco**: Introduces basic real-time anomaly detection methods on the host.
- **Probabilistic counting**: Currently supports only probabilistic counting, with the guarantee that any overcounting remains within an acceptable error margin.
- **Use-case dependent**: Requires careful derivation of custom use cases; no default use cases are provided at this time.
- **Limited by current API**: Subject to several restrictions due to plugin API and other limitations.
- **Built for future extensibility**: Designed to support more algorithms in the future, limited to those that can be implemented in a single data pass to ensure real-time performance.
- **Documentation is insufficient**: Expect to need hands-on exploration to understand usage and restrictions.
What this plugin is not:
- **Not a pre-trained AI/ML model**.
- **Not ready out-of-the-box**: No default configuration or use cases are provided at this time.
- **Not a universal solution**: Does not offer a one-size-fits-all approach to anomaly detection.
- **No multi-pass algorithms**: Algorithms requiring multiple data passes are not planned; the plugin is intended to remain real-time and efficient for applicable use cases.
- **Not yet battle-tested in production**.
### Outlook
In the near term, the plan is to expand the syscalls for which behavior profiles can be applied and to enhance the fields available for defining these profiles. The first version is quite restrictive in this regard due to current plugin API limitations. Additionally, from an algorithmic and capabilities point of view, we will explore the following:
- Support for HyperLogLog probabilistic distinct counting (ETA unknown).
- Overcoming the cold start problem by loading sketch data structures and counts from previous agent runs or from test environments (ETA unknown).
- Efficient and feasible options for real-time, single-pass time series analysis (ETA unknown).
### Plugin Official Name
`anomalydetection`
## Capabilities
The `anomalydetection` plugin implements 2 capabilities:
* `extraction`
* `parsing`
## Supported Fields
Here is the current set of output / filter fields introduced by this plugin:
<!-- README-PLUGIN-FIELDS -->
| NAME | TYPE | ARG | DESCRIPTION |
|------------------------------------|----------|-------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
| `anomaly.count_min_sketch` | `uint64` | Index | Count Min Sketch Estimate according to the specified behavior profile for a predefined set of {syscalls} events. Access different behavior profiles/sketches using indices. For instance, anomaly.count_min_sketch[0] retrieves the first behavior profile defined in the plugins' `init_config`. |
| `anomaly.count_min_sketch.profile` | `string` | Index | Concatenated string according to the specified behavior profile (not preserving original order). Access different behavior profiles using indices. For instance, anomaly.count_min_sketch.profile[0] retrieves the first behavior profile defined in the plugins' `init_config`. |
| `anomaly.falco.duration_ns` | `uint64` | None | Falco agent run duration in nanoseconds, which could be useful for ignoring some rare events at launch time while Falco is just starting to build up the counts in the sketch data structures (if applicable). |
<!-- /README-PLUGIN-FIELDS -->
## Usage
**Configuration**
Here's an example of configuration of `falco.yaml`:
```yaml
plugins:
- name: anomalydetection
library_path: libanomalydetection.so
init_config:
count_min_sketch:
enabled: true
n_sketches: 3
# `gamma_eps`: auto-calculate rows and cols; usage: [[gamma, eps], ...];
# gamma -> error probability -> determine d / rows / number of hash functions
# eps -> relative error -> determine w / cols / number of buckets
gamma_eps: [
[0.001, 0.0001],
[0.001, 0.0001],
[0.001, 0.0001]
]
# `rows_cols`: pass explicit dimensions, supersedes `gamma_eps`; usage: [[7, 27183], ...]; by default disabled when not used.
# rows_cols: []
behavior_profiles: [
{
"fields": "%container.id %custom.proc.aname.lineage.join[7] %custom.proc.aexepath.lineage.join[7] %proc.tty %proc.vpgid.name %proc.sname",
# execve, execveat exit event codes
"event_codes": [293, 331]
},
{
"fields": "%container.id %custom.proc.aname.lineage.join[7] %custom.proc.aexepath.lineage.join[7] %proc.tty %proc.vpgid.name %proc.sname %fd.name %fd.nameraw",
# open, openat, openat2 exit event codes
"event_codes": [3, 307, 327]
},
{
"fields": "%container.id %proc.cmdline",
# execve, execveat exit event codes
"event_codes": [293, 331],
# optional config `reset_timer_ms`, resets the data structure every x milliseconds, here one hour as example
# Remove JSON key if not wanted / needed.
"reset_timer_ms": 3600000
}
]
load_plugins: [anomalydetection]
```
The first version is quite restrictive with respect to the behavior profile's `event_codes` and `fields`. In a nutshell, you can currently define them only for a handful of event codes that Falco supports and a subset of the [Supported Fields for Conditions and Outputs](https://falco.org/docs/reference/rules/supported-fields/).
When you disable the `count_min_sketch` algorithm as shown below, all `anomaly.count_min_sketch` fields will be null.
```
count_min_sketch:
enabled: false
```
__NOTE__: Do not toggle the `enabled` key while hot reloading the config, as it currently does not get properly applied in such cases. Restart Falco with the `count_min_sketch` either enabled or disabled; subsequent reloads will work as expected.
**Behavior profiles for "execve/execveat/clone/clone3" events**
Example 1:
```
"event_codes": [293, 331],
```
Example 2:
```
"event_codes": [223, 335],
```
You can reference a behavior profile based on "execve/execveat/clone/clone3" events in any Falco rule that monitors any supported syscall. This works because every syscall is associated with a process.
**Behavior profiles for "fd-related" events**
Example 1:
```
rule: (evt.type in (open, openat, openat2) and evt.dir=<)
...
"event_codes": [3, 307, 327],
```
Example 2:
```
rule: (evt.type=connect and evt.dir=<)
...
"event_codes": [23],
```
You should avoid writing rules for arbitrary syscalls using "fd-related" behavior profiles because if a syscall doesn't involve a file descriptor (fd), referencing counts that rely on fd fields won't be meaningful.
Here's how it works:
- If your behavior profile includes `%fd.*` fields, all event codes in that profile must be related to file descriptors.
- If you use an "fd-related" behavior profile with a syscall that doesn't involve a file descriptor, the count will always be zero. While Falco won't crash, the anomaly detection estimate won't function as expected.
References:
- See the [Supported PPME `event codes`](#ppme-event-codes) reference below.
- See the [Supported Behavior Profiles `fields`](#behavior-profiles-fields) reference below.
**Open Parameters**:
This plugin does not have open params.
**Rules**
This plugin does not provide any default use cases or rules at the moment. More concrete use cases may be added at a later time.
Example of a dummy Falco rule using the `anomalydetection` fields for local testing:
```yaml
- macro: spawned_process
condition: (evt.type in (execve, execveat) and evt.dir=<)
- rule: execve count_min_sketch test
desc: "execve count_min_sketch test"
condition: spawned_process and proc.name=cat and anomaly.count_min_sketch[0] > 10
output: '%anomaly.count_min_sketch[0] %proc.pid %proc.ppid %proc.name %user.loginuid %user.name %user.uid %proc.cmdline %container.id %evt.type %evt.res %proc.cwd %proc.sid %proc.exepath %container.image.repository'
priority: NOTICE
tags: [maturity_sandbox, host, container, process, anomalydetection]
```
__NOTE__: Ensure you regularly execute `cat` commands. Once you have done so frequently enough, logs will start to appear. Alternatively, perform an inverse test to observe how quickly a very noisy rule gets silenced.
**Adoption**
To adopt the plugin framework, you can start by identifying rules in the [default](https://github.com/falcosecurity/rules) Falco ruleset that could benefit from auto-tuning based on your heuristics regarding counts. For example, you might broaden the scope of a rule and add an `anomaly.count_min_sketch` filter condition as a safety upper bound.
For initial adoption, we recommend creating new, separate rules inspired by existing upstream rules, rather than modifying rules that are already performing well in production.
Another approach is to duplicate a rule -- one version with and another without the anomaly detection filtering.
Alternatively, you can add the count estimates as output fields to provide additional forensic evidence without using the counts for on-host filtering.
Lastly, keep in mind that there is a configuration to reset the counts per behavior profile every x milliseconds if this suits your use case better.
### Running
This plugin requires Falco with version >= **0.38.2**.
1. Have Falco >= **0.38.2** installed and set up
2. Download the plugin's shared object (or build it yourself; see instructions below) and place it under `/usr/share/falco/plugins/libanomalydetection.so`
3. Modify the `falco.yaml` with the provided example [configuration](#configuration) above
4. Add a rule that uses `anomaly.count_min_sketch` as an output field and/or filter to `falco_rules.yaml`, and you're ready to go!
```shell
# Read the steps above before running Falco with this plugin
sudo falco -c falco.yaml -r falco_rules.yaml
```
## Local Development
### Build
```bash
git clone https://github.com/falcosecurity/plugins.git
cd plugins/plugins/anomalydetection
rm -f libanomalydetection.so;
rm -f build/libanomalydetection.so;
make;
# Copy the shared library to the expected location for `falco.yaml`, which is `library_path: libanomalydetection.so`
sudo mkdir -p /usr/share/falco/plugins/;
sudo cp -f libanomalydetection.so /usr/share/falco/plugins/libanomalydetection.so;
```
## References
### PPME event codes
Read this [blog post](https://falco.org/blog/adaptive-syscalls-selection/) to learn more about Falco's internal PPME event codes compared to the syscall names you are used to using in Falco rules.
The list below is complete, and no other event codes from Falco can be used for the behavior profiles at the moment. The binary will error out if used incorrectly. Thank you for your patience.
```CPP
typedef enum {
PPME_SYSCALL_OPEN_X = 3, // compare to "(evt.type=open and evt.dir=<)" in a Falco rule
PPME_SOCKET_CONNECT_X = 23, // compare to "(evt.type=connect and evt.dir=<)" in a Falco rule
PPME_SYSCALL_CREAT_X = 59, // compare to "(evt.type=creat and evt.dir=<)" in a Falco rule
PPME_SYSCALL_CLONE_20_X = 223, // compare to "(evt.type=clone and evt.dir=<)" in a Falco rule
PPME_SOCKET_ACCEPT_5_X = 247, // compare to "(evt.type=accept and evt.dir=<)" in a Falco rule
PPME_SYSCALL_EXECVE_19_X = 293, // compare to "(evt.type=execve and evt.dir=<)" in a Falco rule
PPME_SYSCALL_OPENAT_2_X = 307, // compare to "(evt.type=openat and evt.dir=<)" in a Falco rule
PPME_SYSCALL_OPENAT2_X = 327, // compare to "(evt.type=openat2 and evt.dir=<)" in a Falco rule
PPME_SYSCALL_EXECVEAT_X = 331, // compare to "(evt.type=execveat and evt.dir=<)" in a Falco rule
PPME_SYSCALL_CLONE3_X = 335, // compare to "(evt.type=clone3 and evt.dir=<)" in a Falco rule
PPME_SYSCALL_OPEN_BY_HANDLE_AT_X = 337, // compare to "(evt.type=open_by_handle_at and evt.dir=<)" in a Falco rule
PPME_SOCKET_ACCEPT4_6_X = 389, // compare to "(evt.type=accept4 and evt.dir=<)" in a Falco rule
} ppm_event_code;
```
### Behavior Profiles fields
Compare to [Supported Fields for Conditions and Outputs](https://falco.org/docs/reference/rules/supported-fields/).
The list below is complete, and no other fields from Falco can be used for the behavior profiles at the moment. The binary will error out if used incorrectly. Thank you for your patience.
| Supported Behavior Profile Field | Description |
| --- | --- |
|proc.exe|The first command-line argument (i.e., argv[0]), typically the executable name or a custom string as specified by the user. It is primarily obtained from syscall arguments, truncated after 4096 bytes, or, as a fallback, by reading /proc/PID/cmdline, in which case it may be truncated after 1024 bytes. This field may differ from the last component of proc.exepath, reflecting how command invocation and execution paths can vary.|
|proc.pexe|The proc.exe (first command line argument argv[0]) of the parent process.|
|proc.aexe|The proc.exe (first command line argument argv[0]) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aexe[1] retrieves the proc.exe of the parent process, proc.aexe[2] retrieves the proc.exe of the grandparent process, and so on. The current process's proc.exe line can be obtained using proc.aexe[0]. When used without any arguments, proc.aexe is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.aexe endswith java` to match any process ancestor whose proc.exe ends with the term `java`.|
|proc.exepath|The full executable path of a process, resolving to the canonical path for symlinks. This is primarily obtained from the kernel, or as a fallback, by reading /proc/PID/exe (in the latter case, the path is truncated after 1024 bytes). For eBPF drivers, due to verifier limits, path components may be truncated to 24 for legacy eBPF on kernel <5.2, 48 for legacy eBPF on kernel >=5.2, or 96 for modern eBPF.|
|proc.pexepath|The proc.exepath (full executable path) of the parent process.|
|proc.aexepath|The proc.exepath (full executable path) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aexepath[1] retrieves the proc.exepath of the parent process, proc.aexepath[2] retrieves the proc.exepath of the grandparent process, and so on. The current process's proc.exepath line can be obtained using proc.aexepath[0]. When used without any arguments, proc.aexepath is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.aexepath endswith java` to match any process ancestor whose path ends with the term `java`.|
|proc.name|The process name (truncated after 16 characters) generating the event (task->comm). Truncation is determined by kernel settings and not by Falco. This field is collected from the syscalls args or, as a fallback, extracted from /proc/PID/status. The name of the process and the name of the executable file on disk (if applicable) can be different if a process is given a custom name which is often the case for example for java applications.|
|proc.pname|The proc.name truncated after 16 characters) of the process generating the event.|
|proc.aname|The proc.name (truncated after 16 characters) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aname[1] retrieves the proc.name of the parent process, proc.aname[2] retrieves the proc.name of the grandparent process, and so on. The current process's proc.name line can be obtained using proc.aname[0]. When used without any arguments, proc.aname is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.aname=bash` to match any process ancestor whose name is `bash`.|
|proc.args|The arguments passed on the command line when starting the process generating the event excluding argv[0] (truncated after 4096 bytes). This field is collected from the syscalls args or, as a fallback, extracted from /proc/PID/cmdline.|
|proc.cmdline|The concatenation of `proc.name + proc.args` (truncated after 4096 bytes) when starting the process generating the event.|
|proc.pcmdline|The proc.cmdline (full command line (proc.name + proc.args)) of the parent of the process generating the event.|
|proc.acmdline|The full command line (proc.name + proc.args) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.acmdline[1] retrieves the full command line of the parent process, proc.acmdline[2] retrieves the proc.cmdline of the grandparent process, and so on. The current process's full command line can be obtained using proc.acmdline[0]. When used without any arguments, proc.acmdline is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.acmdline contains base64` to match any process ancestor whose command line contains the term base64.|
|proc.cmdnargs|The number of command line args (proc.args).|
|proc.cmdlenargs|The total count of characters / length of the command line args (proc.args) combined excluding whitespaces between args.|
|proc.exeline|The full command line, with exe as first argument (proc.exe + proc.args) when starting the process generating the event.|
|proc.env|The environment variables of the process generating the event as concatenated string 'ENV_NAME=value ENV_NAME1=value1'. Can also be used to extract the value of a known env variable, e.g. proc.env[ENV_NAME].|
|proc.cwd|The current working directory of the event.|
|proc.tty|The controlling terminal of the process. 0 for processes without a terminal.|
|proc.pid|The id of the process generating the event.|
|proc.ppid|The pid of the parent of the process generating the event.|
|proc.apid|The pid for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.apid[1] retrieves the pid of the parent process, proc.apid[2] retrieves the pid of the grandparent process, and so on. The current process's pid can be obtained using proc.apid[0]. When used without any arguments, proc.apid is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.apid=1337` to match any process ancestor whose pid is equal to 1337.|
|proc.vpid|The id of the process generating the event as seen from its current PID namespace.|
|proc.pvpid|The id of the parent process generating the event as seen from its current PID namespace.|
|proc.sid|The session id of the process generating the event.|
|proc.sname|The name of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process.|
|proc.sid.exe|The first command line argument argv[0] (usually the executable name or a custom one) of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process.|
|proc.sid.exepath|The full executable path of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process.|
|proc.vpgid|The process group id of the process generating the event, as seen from its current PID namespace.|
|proc.vpgid.name|The name of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of `proc.is_vpgid_leader` offers additional insights.|
|proc.vpgid.exe|The first command line argument argv[0] (usually the executable name or a custom one) of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of `proc.is_vpgid_leader` offers additional insights.|
|proc.vpgid.exepath|The full executable path of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of `proc.is_vpgid_leader` offers additional insights.|
|proc.is_exe_writable|'true' if this process' executable file is writable by the same user that spawned the process.|
|proc.is_exe_upper_layer|'true' if this process' executable file is in upper layer in overlayfs. This field value can only be trusted if the underlying kernel version is greater or equal than 3.18.0, since overlayfs was introduced at that time.|
|proc.is_exe_from_memfd|'true' if the executable file of the current process is an anonymous file created using memfd_create() and is being executed by referencing its file descriptor (fd). This type of file exists only in memory and not on disk. Relevant to detect malicious in-memory code injection. Requires kernel version greater or equal to 3.17.0.|
|proc.is_sid_leader|'true' if this process is the leader of the process session, proc.sid == proc.vpid. For host processes vpid reflects pid.|
|proc.is_vpgid_leader|'true' if this process is the leader of the virtual process group, proc.vpgid == proc.vpid. For host processes vpgid and vpid reflect pgid and pid. Can help to distinguish if the process was 'directly' executed for instance in a tty (similar to bash history logging, `is_vpgid_leader` would be 'true') or executed as descendent process in the same process group which for example is the case when subprocesses are spawned from a script (`is_vpgid_leader` would be 'false').|
|proc.exe_ino|The inode number of the executable file on disk. Can be correlated with fd.ino.|
|proc.exe_ino.ctime|Last status change time of executable file (inode->ctime) as epoch timestamp in nanoseconds. Time is changed by writing or by setting inode information e.g. owner, group, link count, mode etc.|
|proc.exe_ino.mtime|Last modification time of executable file (inode->mtime) as epoch timestamp in nanoseconds. Time is changed by file modifications, e.g. by mknod, truncate, utime, write of more than zero bytes etc. For tracking changes in owner, group, link count or mode, use proc.exe_ino.ctime instead.|
|container.id|The truncated container ID (first 12 characters), e.g. 3ad7b26ded6d is extracted from the Linux cgroups by Falco within the kernel. Consequently, this field is reliably available and serves as the lookup key for Falco's synchronous or asynchronous requests against the container runtime socket to retrieve all other `'container.*'` information. One important aspect to be aware of is that if the process occurs on the host, meaning not in the container PID namespace, this field is set to a string called 'host'. In Kubernetes, pod sandbox container processes can exist where `container.id` matches `k8s.pod.sandbox_id`, lacking other 'container.*' details.|
|fd.num|the unique number identifying the file descriptor.|
|fd.name|FD full name. If the fd is a file, this field contains the full path. If the FD is a socket, this field contain the connection tuple.|
|fd.directory|If the fd is a file, the directory that contains it.|
|fd.filename|If the fd is a file, the filename without the path.|
|fd.dev|device number (major/minor) containing the referenced file|
|fd.ino|inode number of the referenced file|
|fd.nameraw|FD full name raw. Just like fd.name, but only used if fd is a file path. File path is kept raw with limited sanitization and without deriving the absolute path.|
|custom.proc.aname.lineage.join|[Incubating] String concatenate the process lineage to achieve better performance. It requires an argument to specify the maximum level of traversal, e.g. 'custom.proc.aname.lineage.join[7]'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future.|
|custom.proc.aexe.lineage.join|[Incubating] String concatenate the process lineage to achieve better performance. It requires an argument to specify the maximum level of traversal, e.g. 'custom.proc.aexe.lineage.join[7]'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future.|
|custom.proc.aexepath.lineage.join|[Incubating] String concatenate the process lineage to achieve better performance. It requires an argument to specify the maximum level of traversal, e.g. 'custom.proc.aexepath.lineage.join[7]'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future.|
|custom.fd.name.part1|[Incubating] For fd related network events only. Part 1 as string of the ip tuple in the format 'ip:port', e.g '172.40.111.222:54321' given fd.name '172.40.111.222:54321->142.251.111.147:443'. It may be dperecated in the future.|
|custom.fd.name.part2|[Incubating] For fd related network events only. Part 2 as string of the ip tuple in the format 'ip:port', e.g.'142.251.111.147:443' given fd.name '172.40.111.222:54321->142.251.111.147:443'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future.|

View File

@ -0,0 +1,26 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2024 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
message(STATUS "Fetching libs at 'https://github.com/falcosecurity/libs.git'")
FetchContent_Declare(
libs
GIT_REPOSITORY https://github.com/falcosecurity/libs.git
GIT_TAG 273299c5832ab7efa6a93547f7c3bd55706b135c
CONFIGURE_COMMAND "" BUILD_COMMAND "")
FetchContent_MakeAvailable(libs)
set(LIBS_INCLUDE "${libs_SOURCE_DIR}")
set(LIBS_DIR "${libs_SOURCE_DIR}")
message(STATUS "Using libs include at '${LIBS_INCLUDE}'")

View File

@ -0,0 +1,27 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2024 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
message(
STATUS
"Fetching plugin-sdk-cpp at 'https://github.com/falcosecurity/plugin-sdk-cpp.git'"
)
FetchContent_Declare(
plugin-sdk-cpp
GIT_REPOSITORY https://github.com/falcosecurity/plugin-sdk-cpp.git
GIT_TAG 1c46ba02e8e9fe30a8362a54e99a6c3c804661f6)
FetchContent_MakeAvailable(plugin-sdk-cpp)
set(PLUGIN_SDK_INCLUDE "${plugin-sdk-cpp_SOURCE_DIR}/include")
message(STATUS "Using plugin-sdk-cpp include at '${PLUGIN_SDK_INCLUDE}'")

View File

@ -0,0 +1,31 @@
# SPDX-License-Identifier: Apache-2.0
#
# Copyright (C) 2024 The Falco Authors.
#
# Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
# the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
# specific language governing permissions and limitations under the License.
#
message(
STATUS
"Fetching xxhash at 'https://raw.githubusercontent.com/Cyan4973/xxHash/v0.8.2/xxhash.h'"
)
FetchContent_Declare(
# BSD 2-Clause License
xxhash
URL "https://raw.githubusercontent.com/Cyan4973/xxHash/v0.8.2/xxhash.h"
URL_HASH SHA256=be275e9db21a503c37f24683cdb4908f2370a3e35ab96e02c4ea73dc8e399c43
DOWNLOAD_NAME "xxhash.h"
DOWNLOAD_NO_EXTRACT TRUE
)
FetchContent_MakeAvailable(xxhash)
set(XXHASH_INCLUDE "${xxhash_SOURCE_DIR}")
message(STATUS "Using xxhash include at '${XXHASH_INCLUDE}'")

View File

@ -0,0 +1,228 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#include "xxhash_ext.h"
#include <iostream>
#include <cstdint>
#include <cmath>
#include <vector>
#include <algorithm>
#include <memory>
/*
CountMinSketch Powered Probabilistic Counting and Filtering
Falco Proposal: https://github.com/falcosecurity/falco/blob/master/proposals/20230620-anomaly-detection-framework.md
*/
namespace plugin::anomalydetection::num
{
template<typename T>
class cms
{
private:
std::unique_ptr<std::unique_ptr<T[]>[]> sketch;
uint64_t d_; // d / Rows / number of hash functions
uint64_t w_; // w / Cols / number of buckets
double gamma_; // Error probability (e.g. 0.001)
double eps_; // Relative error (e.g. 0.0001)
public:
static uint64_t calculate_d_rows_from_gamma(double gamma)
{
// -> determine Rows / number of hash functions
return static_cast<uint64_t>(std::ceil(std::log(1.0 / gamma)));
}
static double calculate_gamma_rows_from_d(uint64_t d)
{
// -> reverse calculate error probability from Rows / number of hash functions
return 1.0 / std::exp(d);
}
static uint64_t calculate_w_cols_buckets_from_eps(double eps)
{
// -> determine Cols / number of buckets
return static_cast<uint64_t>(std::ceil(std::exp(1) / eps));
}
static double calculate_eps_cols_buckets_from_w(uint64_t w)
{
// -> reverse calculate relative error from Cols / number of buckets
return std::exp(1) / w;
}
cms(double gamma, double eps)
{
d_ = calculate_d_rows_from_gamma(gamma); // -> determine Rows / number of hash functions
w_ = calculate_w_cols_buckets_from_eps(eps); // -> determine Cols / number of buckets
gamma_ = gamma;
eps_ = eps;
sketch = std::make_unique<std::unique_ptr<T[]>[]>(d_);
for (uint64_t i = 0; i < d_; ++i)
{
sketch[i] = std::make_unique<T[]>(w_);
std::fill(sketch[i].get(), sketch[i].get() + w_, static_cast<T>(0)); // Init to 0
}
}
// Overloaded constructor
cms(uint64_t d, uint64_t w)
{
d_ = d;
w_ = w;
gamma_ = calculate_gamma_rows_from_d(d); // -> reverse calculate error probability from Rows / number of hash functions
eps_ = calculate_eps_cols_buckets_from_w(w); // -> reverse calculate relative error from Cols / number of buckets
sketch = std::make_unique<std::unique_ptr<T[]>[]>(d_);
for (uint64_t i = 0; i < d_; ++i)
{
sketch[i] = std::make_unique<T[]>(w_);
std::fill(sketch[i].get(), sketch[i].get() + w_, static_cast<T>(0)); // Init to 0
}
}
void reset()
{
// Reset data structure
for (uint64_t i = 0; i < d_; ++i)
{
std::fill(sketch[i].get(), sketch[i].get() + w_, static_cast<T>(0));
}
}
uint64_t hash_XXH3_seed(std::string value, uint64_t seed) const
{
// using https://raw.githubusercontent.com/Cyan4973/xxHash/v0.8.2/xxhash.h
// Requirement: Need fast and reliable independent hash functions.
uint64_t hash = XXH3_64bits_withSeed(value.c_str(), value.size(), seed);
return hash;
}
void update(std::string value, T count)
{
if (value.empty())
{
return;
}
// Update counts for each hash function.
// Note: d is typically very small (e.g. < 10)
for (uint64_t seed = 0; seed < d_; ++seed)
{
// Map the hash value to an index of the current sketch Row by taking the modulo of the hash value, where w is the number of buckets.
// Simply loop over d, which is the number of hash functions, to obtain a seed in order to use independent hash functions for each Row.
sketch[seed][hash_XXH3_seed(value, seed) % w_] += count;
}
}
T update_estimate(std::string value, T count) const
{
if (value.empty())
{
return T();
}
std::vector<T> estimates;
// Same as the update function, but also returns the minimum count as an estimate.
// Note: d is typically very small (e.g. < 10)
for (uint64_t seed = 0; seed < d_; ++seed)
{
uint64_t index = hash_XXH3_seed(value, seed) % w_;
sketch[seed][index] += count;
estimates.push_back(sketch[seed][index]);
}
auto min_element = std::min_element(estimates.begin(), estimates.end());
return min_element != estimates.end() ? *min_element : T();
}
T estimate(std::string value) const
{
if (value.empty())
{
return T();
}
std::vector<T> estimates;
// Return the minimum count across hash functions as an estimate.
// Note: d is typically very small (e.g. < 10)
for (uint64_t seed = 0; seed < d_; ++seed)
{
uint64_t index = hash_XXH3_seed(value, seed) % w_;
estimates.push_back(sketch[seed][index]);
}
auto min_element = std::min_element(estimates.begin(), estimates.end());
return min_element != estimates.end() ? *min_element : T();
}
T get_item(uint64_t row, uint64_t col) const
{
if (row >= 0 && row < d_ && col >= 0 && col < w_)
{
return sketch[row][col];
} else
{
return T();
}
}
size_t get_size_bytes() const
{
return d_ * w_ * sizeof(T);
}
static size_t get_size_bytes(uint64_t d, uint64_t w)
{
return d * w * sizeof(T);
}
std::pair<uint64_t, uint64_t> get_dimensions() const
{
return std::make_pair(d_, w_);
}
// Return Rows / number of hash functions
uint64_t get_d() const
{
return d_;
}
// Return Cols / number of buckets
uint64_t get_w() const
{
return w_;
}
// Return error probability
double get_gamma() const
{
return gamma_;
}
// Return relative error
double get_eps() const
{
return eps_;
}
cms(cms&&) noexcept = default;
cms(const cms&) = default;
cms& operator=(cms&&) noexcept = default;
cms& operator=(const cms&) = default;
cms() = delete;
};
} // namespace plugin::anomalydetection::num

View File

@ -0,0 +1,19 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#define XXH_INLINE_ALL
#include <xxhash.h>

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,228 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#include "num/cms.h"
#include "plugin_consts.h"
#include "plugin_utils.h"
#include "plugin_mutex.h"
#include "plugin_thread_manager.h"
#include "plugin_sinsp_filterchecks.h"
#include <falcosecurity/sdk.h>
#include <driver/ppm_events_public.h> // Temporary workaround to avoid redefining syscalls PPME events and risking being out of sync
#include <thread>
#include <atomic>
#include <chrono>
#include <unordered_map>
#include <unordered_set>
#include <sstream>
#define UINT32_MAX (4294967295U)
#define PPM_AT_FDCWD -100
#define SECOND_TO_NS 1000000000ULL
struct sinsp_param
{
uint16_t param_len;
uint8_t* param_pointer;
};
class anomalydetection
{
public:
anomalydetection() : m_thread_manager() {}
// Keep this aligned with `get_fields`
enum anomalydetection_fields
{
ANOMALYDETECTION_COUNT_MIN_SKETCH_COUNT = 0,
ANOMALYDETECTION_COUNT_MIN_SKETCH_BEHAVIOR_PROFILE_CONCAT_STR,
ANOMALYDETECTION_FALCO_DURATION_NS,
ANOMALYDETECTION_FIELD_MAX
};
//////////////////////////
// General plugin API
//////////////////////////
virtual ~anomalydetection() = default;
std::string get_name() { return PLUGIN_NAME; }
std::string get_version() { return PLUGIN_VERSION; }
std::string get_description() { return PLUGIN_DESCRIPTION; }
std::string get_contact() { return PLUGIN_CONTACT; }
std::string get_required_api_version()
{
return PLUGIN_REQUIRED_API_VERSION;
}
falcosecurity::init_schema get_init_schema();
void parse_init_config(nlohmann::json& config_json);
bool init(falcosecurity::init_input& in);
// todo
// void destroy();
std::string get_last_error() { return m_lasterr; }
static void log_error(std::string err_mess);
//////////////////////////
// Extract capability
//////////////////////////
// required; standard plugin API
std::vector<std::string> get_extract_event_sources()
{
return {"syscall"};
}
// required; standard plugin API
std::vector<falcosecurity::field_info> get_fields();
// required; standard plugin API
bool extract(const falcosecurity::extract_fields_input& in);
//////////////////////////
// Parse capability
//////////////////////////
// required; standard plugin API
std::vector<std::string> get_parse_event_sources()
{
return {"syscall"};
}
// required; standard plugin API
std::vector<falcosecurity::event_type> get_parse_event_types()
{
std::vector<falcosecurity::event_type> event_types;
// Temporary workaround
for (int i = PPME_GENERIC_E; i <= PPM_EVENT_MAX; ++i)
{
event_types.push_back(static_cast<falcosecurity::event_type>(i));
}
return event_types;
}
// required; standard plugin API
bool parse_event(const falcosecurity::parse_event_input& in);
// Custom helper functions within event parsing
bool extract_filterchecks_concat_profile(const falcosecurity::event_reader &evt, const falcosecurity::table_reader &tr, const std::vector<plugin_sinsp_filterchecks_field>& fields, std::string& behavior_profile_concat_str);
std::string extract_filterchecks_evt_params_fallbacks(const falcosecurity::event_reader &evt, const plugin_sinsp_filterchecks_field& field, const std::string& cwd = "");
private:
// Manages plugin side threads, such as resetting the count min sketch data structures
ThreadManager m_thread_manager;
// Epoch of Falco agent run start, re-creates libs agent_info->start_ts_epoch info
uint64_t m_falco_start_ts_epoch_ns;
/* Note: While we have set the stage for supporting multiple algorithms in this plugin,
the class is currently designed with direct members specific to the count_min_sketch use case.
This will be refactored and refined in the future.
*/
bool m_count_min_sketch_enabled = false;
uint32_t m_n_sketches = 0;
std::vector<std::vector<double>> m_gamma_eps;
std::vector<std::vector<uint64_t>> m_rows_cols; // If set supersedes m_gamma_eps
std::vector<std::vector<plugin_sinsp_filterchecks_field>> m_behavior_profiles_fields;
std::vector<std::unordered_set<ppm_event_code>> m_behavior_profiles_event_codes;
std::vector<uint64_t> m_reset_timers;
// Plugin managed state table specific to the count_min_sketch use case
plugin_anomalydetection::Mutex<std::vector<std::shared_ptr<plugin::anomalydetection::num::cms<uint64_t>>>> m_count_min_sketches;
// required; standard plugin API
std::string m_lasterr;
// required; standard plugin API; accessor to falcosecurity/libs' thread table
falcosecurity::table m_thread_table;
/* Subtables */
falcosecurity::table_field m_args; ///< args subtable
falcosecurity::table_field m_env; ///< env variables subtable
falcosecurity::table_field m_fds; ///< fd subtable
/* proc related */
falcosecurity::table_field m_tid; ///< The id of this thread
falcosecurity::table_field m_pid; ///< The id of the process containing this thread. In single thread threads, this is equal to tid.
falcosecurity::table_field m_ptid; ///< The id of the process that started this thread.
falcosecurity::table_field m_sid; ///< The session id of the process containing this thread.
falcosecurity::table_field m_comm; ///< Command name (e.g. "top")
falcosecurity::table_field m_exe; ///< argv[0] (e.g. "sshd: user@pts/4")
falcosecurity::table_field m_exepath; ///< full executable path
falcosecurity::table_field m_exe_writable;
falcosecurity::table_field m_exe_upper_layer; ///< True if the executable file belongs to upper layer in overlayfs
falcosecurity::table_field m_exe_from_memfd; ///< True if the executable is stored in fileless memory referenced by memfd
falcosecurity::table_field m_exe_ino;
falcosecurity::table_field m_exe_ino_ctime;
falcosecurity::table_field m_exe_ino_mtime;
// falcosecurity::table_field m_cap_permitted; // todo fix/expose via plugin API
// falcosecurity::table_field m_cap_inheritable; // todo fix/expose via plugin API
// falcosecurity::table_field m_cap_effective; // todo fix/expose via plugin API
falcosecurity::table_field m_args_value; ///< Value entry to command line arguments (e.g. "-d1") from the args array
falcosecurity::table_field m_env_value; ///< Value entry
falcosecurity::table_field m_group; ///< group infos
falcosecurity::table_field m_vtid; ///< The virtual id of this thread.
falcosecurity::table_field m_vpid; ///< The virtual id of the process containing this thread. In single thread threads, this is equal to vtid.
falcosecurity::table_field m_vpgid; // The virtual process group id, as seen from its pid namespace
falcosecurity::table_field m_tty; ///< Number of controlling terminal
falcosecurity::table_field m_cwd; ///< current working directory
/* user related */
// Not available until the next libs plugins API expansion
// falcosecurity::table_field m_uid; ///< user uid
// falcosecurity::table_field m_user; ///< user infos
// falcosecurity::table_field m_loginuid; ///< auid
// falcosecurity::table_field m_loginuser; ///< loginuser infos (auid)
/* fd related */
// falcosecurity::table_field m_fd_type_value; // todo fix/expose via plugin API
falcosecurity::table_field m_fd_openflags_value;
// falcosecurity::table_field m_fd_sockinfo_value; // todo fix/expose via plugin API
falcosecurity::table_field m_fd_name_value;
falcosecurity::table_field m_fd_nameraw_value;
falcosecurity::table_field m_fd_oldname_value;
falcosecurity::table_field m_fd_flags_value;
falcosecurity::table_field m_fd_dev_value;
falcosecurity::table_field m_fd_mount_id_value;
falcosecurity::table_field m_fd_ino_value;
falcosecurity::table_field m_fd_pid_value;
// falcosecurity::table_field m_fd_fd_value; // todo fix/expose via plugin API
/* container related */
falcosecurity::table_field m_container_id; ///< heuristic-based container id
/* Custom write/read fields*/
falcosecurity::table_field m_lastevent_fd_field; // todo fix/expose via plugin API
};
// required; standard plugin API
FALCOSECURITY_PLUGIN(anomalydetection);
FALCOSECURITY_PLUGIN_FIELD_EXTRACTION(anomalydetection);
FALCOSECURITY_PLUGIN_EVENT_PARSING(anomalydetection);

View File

@ -0,0 +1,35 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
/////////////////////////
// Generic plugin consts
/////////////////////////
#define PLUGIN_NAME "anomalydetection"
#define PLUGIN_VERSION "0.1.0"
#define PLUGIN_DESCRIPTION "Enhance {syscall} event analysis by incorporating anomaly detection estimates for probabilistic filtering."
#define PLUGIN_CONTACT "github.com/falcosecurity/plugins"
#define PLUGIN_REQUIRED_API_VERSION "3.6.0"
#define PLUGIN_LOG_PREFIX "[anomalydetection]"
///////////////////////////
// Thread Table (libsinsp)
///////////////////////////
#define THREAD_TABLE_NAME "threads"

View File

@ -0,0 +1,183 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
// Below adopted 1:1 from falcosecurity/libs repo for this plugin
#pragma once
#include <mutex>
#include <thread>
namespace plugin_anomalydetection {
template<typename T>
class ConstMutexGuard;
/**
* \brief A wrapper to allow synchronized access to a value owned by a Mutex<T>
*
* @tparam T type of the value protected by the mutex
*
* It works by simply holding a `std::unique_lock` object that keeps the mutex
* locked while it exists and unlocks it upon destruction
*/
template<typename T>
class MutexGuard {
public:
MutexGuard(std::unique_lock<std::mutex> lock, T *inner) : m_lock(std::move(lock)), m_inner(inner) {}
// we cannot copy a MutexGuard, only move
MutexGuard(MutexGuard &rhs) = delete;
MutexGuard& operator=(MutexGuard &rhs) = delete;
MutexGuard(MutexGuard &&rhs) noexcept : m_lock(std::move(rhs.m_lock)),
m_inner(rhs.m_inner) {}
T *operator->()
{
return m_inner;
}
T &operator*()
{
return *m_inner;
}
/**
* Validate that the guarded object exists.
*/
bool valid()
{
return m_inner != nullptr;
}
private:
std::unique_lock<std::mutex> m_lock;
T *m_inner;
friend class ConstMutexGuard<T>;
};
/**
* \brief A wrapper to allow synchronized const access to a value owned by a Mutex<T>
*
* @tparam T type of the value protected by the mutex
*
* It works by simply holding a `std::unique_lock` object that keeps the mutex
* locked while it exists and unlocks it upon destruction
*/
template<typename T>
class ConstMutexGuard {
public:
ConstMutexGuard(std::unique_lock<std::mutex> lock, const T *inner) : m_lock(std::move(lock)),
m_inner(inner) {
}
// we cannot copy a ConstMutexGuard, only move
ConstMutexGuard(ConstMutexGuard &rhs) = delete;
ConstMutexGuard& operator=(ConstMutexGuard &rhs) = delete;
ConstMutexGuard(ConstMutexGuard &&rhs) noexcept : m_lock(std::move(rhs.m_lock)),
m_inner(rhs.m_inner) {}
// a writable guard can be demoted to a read-only one, but *not* the other way around
ConstMutexGuard(MutexGuard<T> &&rhs) noexcept : m_lock(std::move(rhs.m_lock)),
m_inner(rhs.m_inner) // NOLINT(google-explicit-constructor)
{}
const T *operator->() const
{
return m_inner;
}
const T &operator*() const
{
return *m_inner;
}
/**
* Validate that the guarded object exists.
*/
bool valid()
{
return m_inner != nullptr;
}
private:
std::unique_lock<std::mutex> m_lock;
const T *m_inner;
};
/**
* \brief Wrap a value of type T, enforcing synchronized access
*
* @tparam T type of the wrapped value
*
* The class owns a value of type T and a mutex. The only way to access the T inside
* is via the lock() method, which returns a guard object that unlocks the mutex
* once it falls out of scope
*
* To protect an object with a mutex, declare a variable of type `Mutex<T>`, e.g.
*
* Mutex<std::vector<int>> m_locked_vector;
*
* Then, to access the variable, call .lock() on the Mutex object:
*
* MutexGuard<std::vector<int>> locked = m_locked_vector.lock();
*
* Now you can call the inner object's methods directly on the guard object,
* which behaves like a smart pointer to the inner object:
*
* size_t num_elts = locked->size();
*
*/
template<typename T>
class Mutex {
public:
Mutex() = default;
Mutex(T inner) : m_inner(std::move(inner)) {}
/**
* \brief Lock the mutex, allowing access to the stored object
*
* The returned guard object allows access to the protected data
* via operator * or -> and ensures the lock is held as long as
* the guard object exists
*/
MutexGuard<T> lock()
{
return MutexGuard<T>(std::unique_lock<std::mutex>(m_lock), &m_inner);
}
/**
* \brief Lock the mutex, allowing access to the stored object
*
* The returned guard object allows access to the protected data
* via operator * or -> and ensures the lock is held as long as
* the guard object exists
*
* `const Mutex<T>` only allows read-only access to the protected object
*/
ConstMutexGuard<T> lock() const
{
return ConstMutexGuard<T>(std::unique_lock<std::mutex>(m_lock), &m_inner);
}
private:
mutable std::mutex m_lock;
T m_inner;
};
}

View File

@ -0,0 +1,274 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#include <falcosecurity/sdk.h>
#include <driver/ppm_events_public.h> // Temporary workaround
namespace plugin_sinsp_filterchecks
{
enum check_type
{
TYPE_EXE = 0,
TYPE_PEXE,
TYPE_AEXE,
TYPE_EXEPATH,
TYPE_PEXEPATH,
TYPE_AEXEPATH,
TYPE_NAME,
TYPE_PNAME,
TYPE_ANAME,
TYPE_ARGS,
TYPE_CMDLINE,
TYPE_PCMDLINE,
TYPE_ACMDLINE,
TYPE_CMDNARGS,
TYPE_CMDLENARGS,
TYPE_EXELINE,
TYPE_ENV,
TYPE_AENV,
TYPE_CWD,
TYPE_LOGINSHELLID,
TYPE_TTY,
TYPE_PID,
TYPE_PPID,
TYPE_APID,
TYPE_VPID,
TYPE_PVPID,
TYPE_SID,
TYPE_SNAME,
TYPE_SID_EXE,
TYPE_SID_EXEPATH,
TYPE_VPGID,
TYPE_VPGID_NAME,
TYPE_VPGID_EXE,
TYPE_VPGID_EXEPATH,
TYPE_DURATION,
TYPE_PPID_DURATION,
TYPE_PID_CLONE_TS,
TYPE_PPID_CLONE_TS,
TYPE_IS_EXE_WRITABLE,
TYPE_IS_EXE_UPPER_LAYER,
TYPE_IS_EXE_FROM_MEMFD,
TYPE_IS_SID_LEADER,
TYPE_IS_VPGID_LEADER,
TYPE_EXE_INO,
TYPE_EXE_INO_CTIME,
TYPE_EXE_INO_MTIME,
TYPE_EXE_INO_CTIME_DURATION_CLONE_TS,
TYPE_EXE_INO_CTIME_DURATION_PIDNS_START,
TYPE_PIDNS_INIT_START_TS,
TYPE_CAP_PERMITTED,
TYPE_CAP_INHERITABLE,
TYPE_CAP_EFFECTIVE,
TYPE_IS_CONTAINER_HEALTHCHECK,
TYPE_IS_CONTAINER_LIVENESS_PROBE,
TYPE_IS_CONTAINER_READINESS_PROBE,
TYPE_FDOPENCOUNT,
TYPE_FDLIMIT,
TYPE_FDUSAGE,
TYPE_VMSIZE,
TYPE_VMRSS,
TYPE_VMSWAP,
TYPE_PFMAJOR,
TYPE_PFMINOR,
TYPE_TID,
TYPE_ISMAINTHREAD,
TYPE_VTID,
TYPE_NAMETID,
TYPE_EXECTIME,
TYPE_TOTEXECTIME,
TYPE_CGROUPS,
TYPE_CGROUP,
TYPE_NTHREADS,
TYPE_NCHILDS,
TYPE_THREAD_CPU,
TYPE_THREAD_CPU_USER,
TYPE_THREAD_CPU_SYSTEM,
TYPE_THREAD_VMSIZE,
TYPE_THREAD_VMRSS,
TYPE_THREAD_VMSIZE_B,
TYPE_THREAD_VMRSS_B,
TYPE_CONTAINER_ID,
TYPE_CONTAINER_FULL_CONTAINER_ID,
TYPE_CONTAINER_NAME,
TYPE_CONTAINER_IMAGE,
TYPE_CONTAINER_IMAGE_ID,
TYPE_CONTAINER_TYPE,
TYPE_CONTAINER_PRIVILEGED,
TYPE_CONTAINER_MOUNTS,
TYPE_CONTAINER_MOUNT,
TYPE_CONTAINER_MOUNT_SOURCE,
TYPE_CONTAINER_MOUNT_DEST,
TYPE_CONTAINER_MOUNT_MODE,
TYPE_CONTAINER_MOUNT_RDWR,
TYPE_CONTAINER_MOUNT_PROPAGATION,
TYPE_CONTAINER_IMAGE_REPOSITORY,
TYPE_CONTAINER_IMAGE_TAG,
TYPE_CONTAINER_IMAGE_DIGEST,
TYPE_CONTAINER_HEALTHCHECK,
TYPE_CONTAINER_LIVENESS_PROBE,
TYPE_CONTAINER_READINESS_PROBE,
TYPE_CONTAINER_START_TS,
TYPE_CONTAINER_DURATION,
TYPE_CONTAINER_IP_ADDR,
TYPE_CONTAINER_CNIRESULT,
TYPE_FDNUM,
TYPE_FDTYPE,
TYPE_FDTYPECHAR,
TYPE_FDNAME,
TYPE_DIRECTORY,
TYPE_FILENAME,
TYPE_IP,
TYPE_CLIENTIP,
TYPE_SERVERIP,
TYPE_LIP,
TYPE_RIP,
TYPE_PORT,
TYPE_CLIENTPORT,
TYPE_SERVERPORT,
TYPE_LPORT,
TYPE_RPORT,
TYPE_L4PROTO,
TYPE_SOCKFAMILY,
TYPE_IS_SERVER,
TYPE_UID,
TYPE_CONTAINERNAME,
TYPE_CONTAINERDIRECTORY,
TYPE_PROTO,
TYPE_CLIENTPROTO,
TYPE_SERVERPROTO,
TYPE_LPROTO,
TYPE_RPROTO,
TYPE_NET,
TYPE_CNET,
TYPE_SNET,
TYPE_LNET,
TYPE_RNET,
TYPE_IS_CONNECTED,
TYPE_NAME_CHANGED,
TYPE_CLIENTIP_NAME,
TYPE_SERVERIP_NAME,
TYPE_LIP_NAME,
TYPE_RIP_NAME,
TYPE_DEV,
TYPE_DEV_MAJOR,
TYPE_DEV_MINOR,
TYPE_INO,
TYPE_FDNAMERAW,
TYPE_FDTYPES,
TYPE_FSPATH_NAME,
TYPE_FSPATH_NAMERAW,
TYPE_FSPATH_SOURCE,
TYPE_FSPATH_SOURCERAW,
TYPE_FSPATH_TARGET,
TYPE_FSPATH_TARGETRAW,
TYPE_CUSTOM_ANAME_LINEAGE_CONCAT,
TYPE_CUSTOM_AEXE_LINEAGE_CONCAT,
TYPE_CUSTOM_AEXEPATH_LINEAGE_CONCAT,
TYPE_CUSTOM_FDNAME_PART1,
TYPE_CUSTOM_FDNAME_PART2,
};
}
// Below copied from falcosecurity/libs userspace/libsinsp/event.h
///////////////////////////////////////////////////////////////////////////////
// Event arguments
///////////////////////////////////////////////////////////////////////////////
enum filtercheck_field_flags
{
EPF_NONE = 0,
EPF_FILTER_ONLY = 1 << 0, ///< this field can only be used as a filter.
EPF_PRINT_ONLY = 1 << 1, ///< this field can only be printed.
EPF_ARG_REQUIRED = 1 << 2, ///< this field includes an argument, under the form 'property.argument'.
EPF_TABLE_ONLY = 1 << 3, ///< this field is designed to be used in a table and won't appear in the field listing.
EPF_INFO = 1 << 4, ///< this field contains summary information about the event.
EPF_CONVERSATION = 1 << 5, ///< this field can be used to identify conversations.
EPF_IS_LIST = 1 << 6, ///< this field is a list of values.
EPF_ARG_ALLOWED = 1 << 7, ///< this field optionally includes an argument.
EPF_ARG_INDEX = 1 << 8, ///< this field accepts numeric arguments.
EPF_ARG_KEY = 1 << 9, ///< this field accepts string arguments.
EPF_DEPRECATED = 1 << 10,///< this field is deprecated.
EPF_NO_TRANSFORMER = 1 << 11,///< this field cannot have a field transformer.
EPF_NO_RHS = 1 << 12,///< this field cannot have a right-hand side filter check, and cannot be used as a right-hand side filter check.
// Custom below
EPF_ANOMALY_PLUGIN = 1 << 13,///< this field is supported by the anomalydetection plugin
};
// Below copied from falcosecurity/libs userspace/libsinsp/sinsp_filtercheck.h
/*!
\brief Information about a filter/formatting field.
*/
struct filtercheck_field_info
{
ppm_param_type m_type = PT_NONE; ///< Field type.
uint32_t m_flags = 0; ///< Field flags.
ppm_print_format m_print_format = PF_NA; ///< If this is a numeric field, this flag specifies if it should be rendered as octal, decimal or hex.
char m_name[64]; ///< Field name.
char m_display[64]; ///< Field display name (short description). May be empty.
char m_description[1024]; ///< Field description.
//
// Return true if this field must have an argument
//
inline bool is_arg_required() const
{
return m_flags & EPF_ARG_REQUIRED;
}
//
// Return true if this field can optionally have an argument
//
inline bool is_arg_allowed() const
{
return m_flags & EPF_ARG_REQUIRED;
}
//
// Returns true if this field can have an argument, either
// optionally or mandatorily
//
inline bool is_arg_supported() const
{
return (m_flags & EPF_ARG_REQUIRED) ||(m_flags & EPF_ARG_ALLOWED);
}
//
// Returns true if this field is a list of values
//
inline bool is_list() const
{
return m_flags & EPF_IS_LIST;
}
//
// Returns true if this filter check can support a rhs filter check instead of a const value.
//
inline bool is_rhs_field_supported() const
{
return !(m_flags & EPF_NO_RHS);
}
//
// Returns true if this filter check can support an extraction transformer on it.
//
inline bool is_transformer_supported() const
{
return !(m_flags & EPF_NO_TRANSFORMER);
}
};

View File

@ -0,0 +1,117 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#pragma once
#include "num/cms.h"
#include "plugin_mutex.h"
#include <iostream>
#include <thread>
#include <chrono>
#include <atomic>
#include <vector>
#include <memory>
class ThreadManager {
public:
ThreadManager() : m_stop_requested(false) {}
~ThreadManager()
{
stop_threads();
}
void stop_threads()
{
{
std::lock_guard<std::mutex> lock(m_thread_mutex);
m_stop_requested = true;
}
{
std::lock_guard<std::mutex> lock(m_thread_mutex);
for (auto& t : m_threads)
{
if (t.joinable())
{
t.join();
}
}
m_threads.clear();
}
}
template<typename T>
void start_periodic_count_min_sketch_reset_worker(int id, uint64_t interval_ms, plugin_anomalydetection::Mutex<std::vector<std::shared_ptr<plugin::anomalydetection::num::cms<T>>>>& count_min_sketches)
{
if (interval_ms > 100)
{
auto worker = [id, interval_ms, &count_min_sketches, this]() {
periodic_count_min_sketch_reset_worker<T>(id, interval_ms, count_min_sketches);
};
std::thread worker_thread(worker);
{
std::lock_guard<std::mutex> lock(m_thread_mutex);
m_threads.push_back(std::move(worker_thread));
}
}
}
std::atomic<bool> m_stop_requested;
private:
std::vector<std::thread> m_threads;
std::mutex m_thread_mutex;
template<typename T>
void reset_sketches_worker(int id, plugin_anomalydetection::Mutex<std::vector<std::shared_ptr<plugin::anomalydetection::num::cms<T>>>>& count_min_sketches)
{
auto sketches = count_min_sketches.lock();
if (id >= 0 && id < sketches->size())
{
auto& sketch_ptr = sketches->at(id);
if (sketch_ptr)
{
sketch_ptr->reset();
}
}
}
template<typename T>
void periodic_count_min_sketch_reset_worker(int id, uint64_t interval_ms, plugin_anomalydetection::Mutex<std::vector<std::shared_ptr<plugin::anomalydetection::num::cms<T>>>>& count_min_sketches)
{
std::chrono::milliseconds interval(interval_ms);
while (true)
{
std::this_thread::sleep_for(interval);
{
std::lock_guard<std::mutex> lock(m_thread_mutex);
if (m_stop_requested)
break;
}
try
{
reset_sketches_worker<T>(id, count_min_sketches);
} catch (const std::exception& e)
{
}
}
}
};

View File

@ -0,0 +1,475 @@
// SPDX-License-Identifier: Apache-2.0
/*
Copyright (C) 2024 The Falco Authors.
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
*/
#include "plugin_utils.h"
#define SCAP_MAX_PATH_SIZE 1024
// Copied from falcosecurity/libs and adjusted w/ EPF_ANOMALY_PLUGIN flag and extended via adding custom fields
static const filtercheck_field_info sinsp_filter_check_fields[] =
{
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.exe", "First Argument", "The first command-line argument (i.e., argv[0]), typically the executable name or a custom string as specified by the user. It is primarily obtained from syscall arguments, truncated after 4096 bytes, or, as a fallback, by reading /proc/PID/cmdline, in which case it may be truncated after 1024 bytes. This field may differ from the last component of proc.exepath, reflecting how command invocation and execution paths can vary."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.pexe", "Parent First Argument", "The proc.exe (first command line argument argv[0]) of the parent process."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "proc.aexe", "Ancestor First Argument", "The proc.exe (first command line argument argv[0]) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aexe[1] retrieves the proc.exe of the parent process, proc.aexe[2] retrieves the proc.exe of the grandparent process, and so on. The current process's proc.exe line can be obtained using proc.aexe[0]. When used without any arguments, proc.aexe is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.aexe endswith java` to match any process ancestor whose proc.exe ends with the term `java`."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.exepath", "Process Executable Path", "The full executable path of a process, resolving to the canonical path for symlinks. This is primarily obtained from the kernel, or as a fallback, by reading /proc/PID/exe (in the latter case, the path is truncated after 1024 bytes). For eBPF drivers, due to verifier limits, path components may be truncated to 24 for legacy eBPF on kernel <5.2, 48 for legacy eBPF on kernel >=5.2, or 96 for modern eBPF."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.pexepath", "Parent Process Executable Path", "The proc.exepath (full executable path) of the parent process."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "proc.aexepath", "Ancestor Executable Path", "The proc.exepath (full executable path) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aexepath[1] retrieves the proc.exepath of the parent process, proc.aexepath[2] retrieves the proc.exepath of the grandparent process, and so on. The current process's proc.exepath line can be obtained using proc.aexepath[0]. When used without any arguments, proc.aexepath is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.aexepath endswith java` to match any process ancestor whose path ends with the term `java`."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.name", "Name", "The process name (truncated after 16 characters) generating the event (task->comm). Truncation is determined by kernel settings and not by Falco. This field is collected from the syscalls args or, as a fallback, extracted from /proc/PID/status. The name of the process and the name of the executable file on disk (if applicable) can be different if a process is given a custom name which is often the case for example for java applications."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.pname", "Parent Name", "The proc.name truncated after 16 characters) of the process generating the event."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "proc.aname", "Ancestor Name", "The proc.name (truncated after 16 characters) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.aname[1] retrieves the proc.name of the parent process, proc.aname[2] retrieves the proc.name of the grandparent process, and so on. The current process's proc.name line can be obtained using proc.aname[0]. When used without any arguments, proc.aname is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.aname=bash` to match any process ancestor whose name is `bash`."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.args", "Arguments", "The arguments passed on the command line when starting the process generating the event excluding argv[0] (truncated after 4096 bytes). This field is collected from the syscalls args or, as a fallback, extracted from /proc/PID/cmdline."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.cmdline", "Command Line", "The concatenation of `proc.name + proc.args` (truncated after 4096 bytes) when starting the process generating the event."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.pcmdline", "Parent Command Line", "The proc.cmdline (full command line (proc.name + proc.args)) of the parent of the process generating the event."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "proc.acmdline", "Ancestor Command Line", "The full command line (proc.name + proc.args) for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.acmdline[1] retrieves the full command line of the parent process, proc.acmdline[2] retrieves the proc.cmdline of the grandparent process, and so on. The current process's full command line can be obtained using proc.acmdline[0]. When used without any arguments, proc.acmdline is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.acmdline contains base64` to match any process ancestor whose command line contains the term base64."},
{PT_UINT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_DEC, "proc.cmdnargs", "Number of Command Line args", "The number of command line args (proc.args)."},
{PT_UINT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_DEC, "proc.cmdlenargs", "Total Count of Characters in Command Line args", "The total count of characters / length of the command line args (proc.args) combined excluding whitespaces between args."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.exeline", "Executable Command Line", "The full command line, with exe as first argument (proc.exe + proc.args) when starting the process generating the event."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_ALLOWED, PF_NA, "proc.env", "Environment", "The environment variables of the process generating the event as concatenated string 'ENV_NAME=value ENV_NAME1=value1'. Can also be used to extract the value of a known env variable, e.g. proc.env[ENV_NAME]."},
{PT_CHARBUF, EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "proc.aenv", "Ancestor Environment", "[EXPERIMENTAL] This field can be used in three flavors: (1) as a filter checking all parents, e.g. 'proc.aenv contains xyz', which is similar to the familiar 'proc.aname contains xyz' approach, (2) checking the `proc.env` of a specified level of the parent, e.g. 'proc.aenv[2]', which is similar to the familiar 'proc.aname[2]' approach, or (3) checking the first matched value of a known ENV_NAME in the parent lineage, such as 'proc.aenv[ENV_NAME]' (across a max of 20 ancestor levels). This field may be deprecated or undergo breaking changes in future releases. Please use it with caution."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.cwd", "Current Working Directory", "The current working directory of the event."},
{PT_INT64, EPF_NONE, PF_ID, "proc.loginshellid", "Login Shell ID", "The pid of the oldest shell among the ancestors of the current process, if there is one. This field can be used to separate different user sessions."},
{PT_UINT32, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.tty", "Process TTY", "The controlling terminal of the process. 0 for processes without a terminal."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.pid", "Process ID", "The id of the process generating the event."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.ppid", "Parent Process ID", "The pid of the parent of the process generating the event."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_ID, "proc.apid", "Ancestor Process ID", "The pid for a specific process ancestor. You can access different levels of ancestors by using indices. For example, proc.apid[1] retrieves the pid of the parent process, proc.apid[2] retrieves the pid of the grandparent process, and so on. The current process's pid can be obtained using proc.apid[0]. When used without any arguments, proc.apid is applicable only in filters and matches any of the process ancestors. For instance, you can use `proc.apid=1337` to match any process ancestor whose pid is equal to 1337."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.vpid", "Virtual Process ID", "The id of the process generating the event as seen from its current PID namespace."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.pvpid", "Parent Virtual Process ID", "The id of the parent process generating the event as seen from its current PID namespace."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.sid", "Process Session ID", "The session id of the process generating the event."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.sname", "Process Session Name", "The name of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.sid.exe", "Process Session First Argument", "The first command line argument argv[0] (usually the executable name or a custom one) of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.sid.exepath", "Process Session Executable Path", "The full executable path of the current process's session leader. This is either the process with pid=proc.sid or the eldest ancestor that has the same sid as the current process."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "proc.vpgid", "Process Virtual Group ID", "The process group id of the process generating the event, as seen from its current PID namespace."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.vpgid.name", "Process Group Name", "The name of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of `proc.is_vpgid_leader` offers additional insights."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.vpgid.exe", "Process Group First Argument", "The first command line argument argv[0] (usually the executable name or a custom one) of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of `proc.is_vpgid_leader` offers additional insights."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.vpgid.exepath", "Process Group Executable Path", "The full executable path of the current process's process group leader. This is either the process with proc.vpgid == proc.vpid or the eldest ancestor that has the same vpgid as the current process. The description of `proc.is_vpgid_leader` offers additional insights."},
{PT_RELTIME, EPF_NONE, PF_DEC, "proc.duration", "Process Duration", "Number of nanoseconds since the process started."},
{PT_RELTIME, EPF_NONE, PF_DEC, "proc.ppid.duration", "Parent Process Duration", "Number of nanoseconds since the parent process started."},
{PT_RELTIME, EPF_NONE, PF_DEC, "proc.pid.ts", "Process start ts", "Start of process as epoch timestamp in nanoseconds."},
{PT_RELTIME, EPF_NONE, PF_DEC, "proc.ppid.ts", "Parent Process start ts", "Start of parent process as epoch timestamp in nanoseconds."},
{PT_BOOL, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.is_exe_writable", "Process Executable Is Writable", "'true' if this process' executable file is writable by the same user that spawned the process."},
{PT_BOOL, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.is_exe_upper_layer", "Process Executable Is In Upper Layer", "'true' if this process' executable file is in upper layer in overlayfs. This field value can only be trusted if the underlying kernel version is greater or equal than 3.18.0, since overlayfs was introduced at that time."},
{PT_BOOL, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.is_exe_from_memfd", "Process Executable Is Stored In Memfd", "'true' if the executable file of the current process is an anonymous file created using memfd_create() and is being executed by referencing its file descriptor (fd). This type of file exists only in memory and not on disk. Relevant to detect malicious in-memory code injection. Requires kernel version greater or equal to 3.17.0."},
{PT_BOOL, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.is_sid_leader", "Process Is Process Session Leader", "'true' if this process is the leader of the process session, proc.sid == proc.vpid. For host processes vpid reflects pid."},
{PT_BOOL, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "proc.is_vpgid_leader", "Process Is Virtual Process Group Leader", "'true' if this process is the leader of the virtual process group, proc.vpgid == proc.vpid. For host processes vpgid and vpid reflect pgid and pid. Can help to distinguish if the process was 'directly' executed for instance in a tty (similar to bash history logging, `is_vpgid_leader` would be 'true') or executed as descendent process in the same process group which for example is the case when subprocesses are spawned from a script (`is_vpgid_leader` would be 'false')."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_DEC, "proc.exe_ino", "Inode number of executable file on disk", "The inode number of the executable file on disk. Can be correlated with fd.ino."},
{PT_ABSTIME, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_DEC, "proc.exe_ino.ctime", "Last status change time (ctime) of executable file", "Last status change time of executable file (inode->ctime) as epoch timestamp in nanoseconds. Time is changed by writing or by setting inode information e.g. owner, group, link count, mode etc."},
{PT_ABSTIME, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_DEC, "proc.exe_ino.mtime", "Last modification time (mtime) of executable file", "Last modification time of executable file (inode->mtime) as epoch timestamp in nanoseconds. Time is changed by file modifications, e.g. by mknod, truncate, utime, write of more than zero bytes etc. For tracking changes in owner, group, link count or mode, use proc.exe_ino.ctime instead."},
{PT_ABSTIME, EPF_NONE, PF_DEC, "proc.exe_ino.ctime_duration_proc_start", "Number of nanoseconds between ctime exe file and proc clone ts", "Number of nanoseconds between modifying status of executable image and spawning a new process using the changed executable image."},
{PT_ABSTIME, EPF_NONE, PF_DEC, "proc.exe_ino.ctime_duration_pidns_start", "Number of nanoseconds between pidns start ts and ctime exe file", "Number of nanoseconds between PID namespace start ts and ctime exe file if PID namespace start predates ctime."},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.pidns_init_start_ts", "Start ts of pid namespace", "Start of PID namespace (container or non container pid namespace) as epoch timestamp in nanoseconds."},
{PT_CHARBUF, EPF_NONE, PF_NA, "thread.cap_permitted", "Permitted capabilities", "The permitted capabilities set"},
{PT_CHARBUF, EPF_NONE, PF_NA, "thread.cap_inheritable", "Inheritable capabilities", "The inheritable capabilities set"},
{PT_CHARBUF, EPF_NONE, PF_NA, "thread.cap_effective", "Effective capabilities", "The effective capabilities set"},
{PT_BOOL, EPF_NONE, PF_NA, "proc.is_container_healthcheck", "Process Is Container Healthcheck", "'true' if this process is running as a part of the container's health check."},
{PT_BOOL, EPF_NONE, PF_NA, "proc.is_container_liveness_probe", "Process Is Container Liveness", "'true' if this process is running as a part of the container's liveness probe."},
{PT_BOOL, EPF_NONE, PF_NA, "proc.is_container_readiness_probe", "Process Is Container Readiness", "'true' if this process is running as a part of the container's readiness probe."},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.fdopencount", "FD Count", "Number of open FDs for the process"},
{PT_INT64, EPF_NONE, PF_DEC, "proc.fdlimit", "FD Limit", "Maximum number of FDs the process can open."},
{PT_DOUBLE, EPF_NONE, PF_NA, "proc.fdusage", "FD Usage", "The ratio between open FDs and maximum available FDs for the process."},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.vmsize", "VM Size", "Total virtual memory for the process (as kb)."},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.vmrss", "VM RSS", "Resident non-swapped memory for the process (as kb)."},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.vmswap", "VM Swap", "Swapped memory for the process (as kb)."},
{PT_UINT64, EPF_NONE, PF_DEC, "thread.pfmajor", "Major Page Faults", "Number of major page faults since thread start."},
{PT_UINT64, EPF_NONE, PF_DEC, "thread.pfminor", "Minor Page Faults", "Number of minor page faults since thread start."},
{PT_INT64, EPF_NONE, PF_ID, "thread.tid", "Thread ID", "The id of the thread generating the event."},
{PT_BOOL, EPF_NONE, PF_NA, "thread.ismain", "Main Thread", "'true' if the thread generating the event is the main one in the process."},
{PT_INT64, EPF_NONE, PF_ID, "thread.vtid", "Virtual Thread ID", "The id of the thread generating the event as seen from its current PID namespace."},
{PT_CHARBUF, EPF_TABLE_ONLY, PF_NA, "thread.nametid", "Thread Name + ID", "This field chains the process name and tid of a thread and can be used as a specific identifier of a thread for a specific execve."},
{PT_RELTIME, EPF_NONE, PF_DEC, "thread.exectime", "Scheduled Thread CPU Time", "CPU time spent by the last scheduled thread, in nanoseconds. Exported by switch events only."},
{PT_RELTIME, EPF_NONE, PF_DEC, "thread.totexectime", "Current Thread CPU Time", "Total CPU time, in nanoseconds since the beginning of the capture, for the current thread. Exported by switch events only."},
{PT_CHARBUF, EPF_NONE, PF_NA, "thread.cgroups", "Thread Cgroups", "All cgroups the thread belongs to, aggregated into a single string."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "thread.cgroup", "Thread Cgroup", "The cgroup the thread belongs to, for a specific subsystem. e.g. thread.cgroup.cpuacct."},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.nthreads", "Threads", "The number of alive threads that the process generating the event currently has, including the leader thread. Please note that the leader thread may not be here, in that case 'proc.nthreads' and 'proc.nchilds' are equal"},
{PT_UINT64, EPF_NONE, PF_DEC, "proc.nchilds", "Children", "The number of alive not leader threads that the process generating the event currently has. This excludes the leader thread."},
{PT_DOUBLE, EPF_NONE, PF_NA, "thread.cpu", "Thread CPU", "The CPU consumed by the thread in the last second."},
{PT_DOUBLE, EPF_NONE, PF_NA, "thread.cpu.user", "Thread User CPU", "The user CPU consumed by the thread in the last second."},
{PT_DOUBLE, EPF_NONE, PF_NA, "thread.cpu.system", "Thread System CPU", "The system CPU consumed by the thread in the last second."},
{PT_UINT64, EPF_NONE, PF_DEC, "thread.vmsize", "Thread VM Size (kb)", "For the process main thread, this is the total virtual memory for the process (as kb). For the other threads, this field is zero."},
{PT_UINT64, EPF_NONE, PF_DEC, "thread.vmrss", "Thread VM RSS (kb)", "For the process main thread, this is the resident non-swapped memory for the process (as kb). For the other threads, this field is zero."},
{PT_UINT64, EPF_TABLE_ONLY, PF_DEC, "thread.vmsize.b", "Thread VM Size (b)", "For the process main thread, this is the total virtual memory for the process (in bytes). For the other threads, this field is zero."},
{PT_UINT64, EPF_TABLE_ONLY, PF_DEC, "thread.vmrss.b", "Thread VM RSS (b)", "For the process main thread, this is the resident non-swapped memory for the process (in bytes). For the other threads, this field is zero."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "container.id", "Container ID", "The truncated container ID (first 12 characters), e.g. 3ad7b26ded6d is extracted from the Linux cgroups by Falco within the kernel. Consequently, this field is reliably available and serves as the lookup key for Falco's synchronous or asynchronous requests against the container runtime socket to retrieve all other 'container.*' information. One important aspect to be aware of is that if the process occurs on the host, meaning not in the container PID namespace, this field is set to a string called 'host'. In Kubernetes, pod sandbox container processes can exist where `container.id` matches `k8s.pod.sandbox_id`, lacking other 'container.*' details."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.full_id", "Container ID", "The full container ID, e.g. 3ad7b26ded6d8e7b23da7d48fe889434573036c27ae5a74837233de441c3601e. In contrast to `container.id`, we enrich this field as part of the container engine enrichment. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.name", "Container Name", "The container name. In instances of userspace container engine lookup delays, this field may not be available yet. One important aspect to be aware of is that if the process occurs on the host, meaning not in the container PID namespace, this field is set to a string called 'host'."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.image", "Image Name", "The container image name (e.g. falcosecurity/falco:latest for docker). In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.image.id", "Image ID", "The container image id (e.g. 6f7e2741b66b). In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.type", "Type", "The container type, e.g. docker, cri-o, containerd etc."},
{PT_BOOL, EPF_NONE, PF_NA, "container.privileged", "Privileged", "'true' for containers running as privileged, 'false' otherwise. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.mounts", "Mounts", "A space-separated list of mount information. Each item in the list has the format 'source:dest:mode:rdrw:propagation'. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "container.mount", "Mount", "Information about a single mount, specified by number (e.g. container.mount[0]) or mount source (container.mount[/usr/local]). The pathname can be a glob (container.mount[/usr/local/*]), in which case the first matching mount will be returned. The information has the format 'source:dest:mode:rdrw:propagation'. If there is no mount with the specified index or matching the provided source, returns the string \"none\" instead of a NULL value. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "container.mount.source", "Mount Source", "The mount source, specified by number (e.g. container.mount.source[0]) or mount destination (container.mount.source[/host/lib/modules]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "container.mount.dest", "Mount Destination", "The mount destination, specified by number (e.g. container.mount.dest[0]) or mount source (container.mount.dest[/lib/modules]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "container.mount.mode", "Mount Mode", "The mount mode, specified by number (e.g. container.mount.mode[0]) or mount source (container.mount.mode[/usr/local]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "container.mount.rdwr", "Mount Read/Write", "The mount rdwr value, specified by number (e.g. container.mount.rdwr[0]) or mount source (container.mount.rdwr[/usr/local]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_ARG_REQUIRED, PF_NA, "container.mount.propagation", "Mount Propagation", "The mount propagation value, specified by number (e.g. container.mount.propagation[0]) or mount source (container.mount.propagation[/usr/local]). The pathname can be a glob. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.image.repository", "Repository", "The container image repository (e.g. falcosecurity/falco). In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.image.tag", "Image Tag", "The container image tag (e.g. stable, latest). In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.image.digest", "Registry Digest", "The container image registry digest (e.g. sha256:d977378f890d445c15e51795296e4e5062f109ce6da83e0a355fc4ad8699d27). In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.healthcheck", "Health Check", "The container's health check. Will be the null value (\"N/A\") if no healthcheck configured, \"NONE\" if configured but explicitly not created, and the healthcheck command line otherwise. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.liveness_probe", "Liveness", "The container's liveness probe. Will be the null value (\"N/A\") if no liveness probe configured, the liveness probe command line otherwise. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.readiness_probe", "Readiness", "The container's readiness probe. Will be the null value (\"N/A\") if no readiness probe configured, the readiness probe command line otherwise. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_UINT64, EPF_NONE, PF_DEC, "container.start_ts", "Container start", "Container start as epoch timestamp in nanoseconds based on proc.pidns_init_start_ts and extracted in the kernel and not from the container runtime socket / container engine."},
{PT_RELTIME, EPF_NONE, PF_DEC, "container.duration", "Number of nanoseconds since container.start_ts", "Number of nanoseconds since container.start_ts."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.ip", "Container ip address", "The container's / pod's primary ip address as retrieved from the container engine. Only ipv4 addresses are tracked. Consider container.cni.json (CRI use case) for logging ip addresses for each network interface. In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_CHARBUF, EPF_NONE, PF_NA, "container.cni.json", "Container's / pod's CNI result json", "The container's / pod's CNI result field from the respective pod status info. It contains ip addresses for each network interface exposed as unparsed escaped JSON string. Supported for CRI container engine (containerd, cri-o runtimes), optimized for containerd (some non-critical JSON keys removed). Useful for tracking ips (ipv4 and ipv6, dual-stack support) for each network interface (multi-interface support). In instances of userspace container engine lookup delays, this field may not be available yet."},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_ID, "fd.num", "FD Number", "the unique number identifying the file descriptor."},
{PT_CHARBUF, EPF_NONE, PF_DEC, "fd.type", "FD Type", "type of FD. Can be 'file', 'directory', 'ipv4', 'ipv6', 'unix', 'pipe', 'event', 'signalfd', 'eventpoll', 'inotify' 'signalfd' or 'memfd'."},
{PT_CHARBUF, EPF_NONE, PF_DEC, "fd.typechar", "FD Type Char", "type of FD as a single character. Can be 'f' for file, 4 for IPv4 socket, 6 for IPv6 socket, 'u' for unix socket, p for pipe, 'e' for eventfd, 's' for signalfd, 'l' for eventpoll, 'i' for inotify, 'b' for bpf, 'u' for userfaultd, 'r' for io_uring, 'm' for memfd ,'o' for unknown."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "fd.name", "FD Name", "FD full name. If the fd is a file, this field contains the full path. If the FD is a socket, this field contain the connection tuple."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "fd.directory", "FD Directory", "If the fd is a file, the directory that contains it."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "fd.filename", "FD Filename", "If the fd is a file, the filename without the path."},
{PT_IPADDR, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.ip", "FD IP Address", "matches the ip address (client or server) of the fd."},
{PT_IPADDR, EPF_NONE, PF_NA, "fd.cip", "FD Client Address", "client IP address."},
{PT_IPADDR, EPF_NONE, PF_NA, "fd.sip", "FD Server Address", "server IP address."},
{PT_IPADDR, EPF_NONE, PF_NA, "fd.lip", "FD Local Address", "local IP address."},
{PT_IPADDR, EPF_NONE, PF_NA, "fd.rip", "FD Remote Address", "remote IP address."},
{PT_PORT, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_DEC, "fd.port", "FD Port", "matches the port (either client or server) of the fd."},
{PT_PORT, EPF_NONE, PF_DEC, "fd.cport", "FD Client Port", "for TCP/UDP FDs, the client port."},
{PT_PORT, EPF_NONE, PF_DEC, "fd.sport", "FD Server Port", "for TCP/UDP FDs, server port."},
{PT_PORT, EPF_NONE, PF_DEC, "fd.lport", "FD Local Port", "for TCP/UDP FDs, the local port."},
{PT_PORT, EPF_NONE, PF_DEC, "fd.rport", "FD Remote Port", "for TCP/UDP FDs, the remote port."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.l4proto", "FD IP Protocol", "the IP protocol of a socket. Can be 'tcp', 'udp', 'icmp' or 'raw'."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.sockfamily", "FD Socket Family", "the socket family for socket events. Can be 'ip' or 'unix'."},
{PT_BOOL, EPF_NONE, PF_NA, "fd.is_server", "FD Server", "'true' if the process owning this FD is the server endpoint in the connection."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.uid", "FD ID", "a unique identifier for the FD, created by chaining the FD number and the thread ID."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.containername", "FD Container Name", "chaining of the container ID and the FD name. Useful when trying to identify which container an FD belongs to."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.containerdirectory", "FD Container Directory", "chaining of the container ID and the directory name. Useful when trying to identify which container a directory belongs to."},
{PT_PORT, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.proto", "FD Protocol", "matches the protocol (either client or server) of the fd."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.cproto", "FD Client Protocol", "for TCP/UDP FDs, the client protocol."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.sproto", "FD Server Protocol", "for TCP/UDP FDs, server protocol."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.lproto", "FD Local Protocol", "for TCP/UDP FDs, the local protocol."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fd.rproto", "FD Remote Protocol", "for TCP/UDP FDs, the remote protocol."},
{PT_IPNET, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.net", "FD IP Network", "matches the IP network (client or server) of the fd."},
{PT_IPNET, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.cnet", "FD Client Network", "matches the client IP network of the fd."},
{PT_IPNET, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.snet", "FD Server Network", "matches the server IP network of the fd."},
{PT_IPNET, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.lnet", "FD Local Network", "matches the local IP network of the fd."},
{PT_IPNET, EPF_FILTER_ONLY | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.rnet", "FD Remote Network", "matches the remote IP network of the fd."},
{PT_BOOL, EPF_NONE, PF_NA, "fd.connected", "FD Connected", "for TCP/UDP FDs, 'true' if the socket is connected."},
{PT_BOOL, EPF_NONE, PF_NA, "fd.name_changed", "FD Name Changed", "True when an event changes the name of an fd used by this event. This can occur in some cases such as udp connections where the connection tuple changes."},
{PT_CHARBUF, EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.cip.name", "FD Client Domain Name", "Domain name associated with the client IP address."},
{PT_CHARBUF, EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.sip.name", "FD Server Domain Name", "Domain name associated with the server IP address."},
{PT_CHARBUF, EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.lip.name", "FD Local Domain Name", "Domain name associated with the local IP address."},
{PT_CHARBUF, EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_NA, "fd.rip.name", "FD Remote Domain Name", "Domain name associated with the remote IP address."},
{PT_INT32, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_HEX, "fd.dev", "FD Device", "device number (major/minor) containing the referenced file"},
{PT_INT32, EPF_NONE, PF_DEC, "fd.dev.major", "FD Major Device", "major device number containing the referenced file"},
{PT_INT32, EPF_NONE, PF_DEC, "fd.dev.minor", "FD Minor Device", "minor device number containing the referenced file"},
{PT_INT64, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_DEC, "fd.ino", "FD Inode Number", "inode number of the referenced file"},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "fd.nameraw", "FD Name Raw", "FD full name raw. Just like fd.name, but only used if fd is a file path. File path is kept raw with limited sanitization and without deriving the absolute path."},
{PT_CHARBUF, EPF_IS_LIST | EPF_ARG_ALLOWED | EPF_NO_RHS | EPF_NO_TRANSFORMER, PF_DEC, "fd.types", "FD Type", "List of FD types in used. Can be passed an fd number e.g. fd.types[0] to get the type of stdout as a single item list."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fs.path.name", "Path for Filesystem-related operation", "For any event type that deals with a filesystem path, the path the file syscall is operating on. This path is always fully resolved, prepending the thread cwd when needed."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fs.path.nameraw", "Raw path for Filesystem-related operation", "For any event type that deals with a filesystem path, the path the file syscall is operating on. This path is always the path provided to the syscall and may not be fully resolved."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fs.path.source", "Source path for Filesystem-related operation", "For any event type that deals with a filesystem path, and specifically for a source and target like mv, cp, etc, the source path the file syscall is operating on. This path is always fully resolved, prepending the thread cwd when needed."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fs.path.sourceraw", "Source path for Filesystem-related operation", "For any event type that deals with a filesystem path, and specifically for a source and target like mv, cp, etc, the source path the file syscall is operating on. This path is always the path provided to the syscall and may not be fully resolved."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fs.path.target", "Target path for Filesystem-related operation", "For any event type that deals with a filesystem path, and specifically for a target and target like mv, cp, etc, the target path the file syscall is operating on. This path is always fully resolved, prepending the thread cwd when needed."},
{PT_CHARBUF, EPF_NONE, PF_NA, "fs.path.targetraw", "Target path for Filesystem-related operation", "For any event type that deals with a filesystem path, and specifically for a target and target like mv, cp, etc, the target path the file syscall is operating on. This path is always the path provided to the syscall and may not be fully resolved."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_REQUIRED, PF_NA, "custom.proc.aname.lineage.join", "Custom concat lineage", "[Incubating] String concatenate the process lineage to achieve better performance. It requires an argument to specify the maximum level of traversal, e.g. 'custom.proc.aname.lineage.join[7]'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_REQUIRED, PF_NA, "custom.proc.aexe.lineage.join", "Custom concat lineage", "[Incubating] String concatenate the process lineage to achieve better performance. It requires an argument to specify the maximum level of traversal, e.g. 'custom.proc.aexe.lineage.join[7]'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_ARG_REQUIRED, PF_NA, "custom.proc.aexepath.lineage.join", "Custom concat lineage", "[Incubating] String concatenate the process lineage to achieve better performance. It requires an argument to specify the maximum level of traversal, e.g. 'custom.proc.aexepath.lineage.join[7]'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "custom.fd.name.part1", "Custom fd 'ip:port' part1", "[Incubating] For fd related network events only. Part 1 as string of the ip tuple in the format 'ip:port', e.g '172.40.111.222:54321' given fd.name '172.40.111.222:54321->142.251.111.147:443'. It may be dperecated in the future."},
{PT_CHARBUF, EPF_ANOMALY_PLUGIN | EPF_NONE, PF_NA, "custom.fd.name.part2", "Custom fd 'ip:port' part1", "[Incubating] For fd related network events only. Part 2 as string of the ip tuple in the format 'ip:port', e.g.'142.251.111.147:443' given fd.name '172.40.111.222:54321->142.251.111.147:443'. This is a custom plugin specific field for the anomaly behavior profiles only. It may be dperecated in the future."},
};
namespace plugin_anomalydetection::utils
{
// Adopted from falcosecurity/libs, custom hand-rolled for performance reasons
static inline void rewind_to_parent_path(const char* targetbase, char** tc, const char** pc, uint32_t delta)
{
if(*tc <= targetbase + 1)
{
(*pc) += delta;
return;
}
(*tc)--;
while((*tc) >= targetbase + 1 && *((*tc) - 1) != '/')
{
(*tc)--;
}
(*pc) += delta;
}
// Adopted from falcosecurity/libs
struct g_invalidchar
{
bool operator()(char c) const
{
// Exclude all non-printable characters and control characters while
// including a wide range of languages (emojis, cyrillic, chinese etc)
return !(isprint((unsigned)c));
}
};
// Adopted from falcosecurity/libs, custom hand-rolled for performance reasons
static inline void copy_and_sanitize_path(char* target, char* targetbase, const char *path, char separator)
{
char* tc = target;
const char* pc = path;
g_invalidchar ic;
const bool empty_base = target == targetbase;
while(true)
{
if(*pc == 0)
{
*tc = 0;
//
// If the path ends with a separator, remove it, as the OS does.
// Properly manage case where path is just "/".
//
if((tc > (targetbase + 1)) && (*(tc - 1) == separator))
{
*(tc - 1) = 0;
}
return;
}
if(ic(*pc))
{
//
// Invalid char, substitute with a '.'
//
*tc = '.';
tc++;
pc++;
}
else
{
//
// If path begins with '.' or '.' is the first char after a '/'
//
if(*pc == '.' && (tc == targetbase || *(tc - 1) == separator))
{
//
// '../', rewind to the previous separator
//
if(*(pc + 1) == '.' && *(pc + 2) == separator)
{
rewind_to_parent_path(targetbase, &tc, &pc, 3);
}
//
// '..', with no separator.
// This is valid if we are at the end of the string, and in that case we rewind.
//
else if(*(pc + 1) == '.' && *(pc + 2) == 0)
{
rewind_to_parent_path(targetbase, &tc, &pc, 2);
}
//
// './', just skip it
//
else if(*(pc + 1) == separator)
{
pc += 2;
}
//
// '.', with no separator.
// This is valid if we are at the end of the string, and in that case we rewind.
//
else if(*(pc + 1) == 0)
{
pc++;
}
//
// Otherwise, we leave the string intact.
//
else
{
*tc = *pc;
pc++;
tc++;
}
}
else if(*pc == separator)
{
//
// separator:
// * if the last char is already a separator, skip it
// * if we are back at targetbase but targetbase was not empty before, it means we
// fully rewinded back to targetbase and the string is now empty. Skip separator.
// Example: "/foo/../a" -> "/a" BUT "foo/../a" -> "a"
// -> Otherwise: "foo/../a" -> "/a"
//
if((tc > targetbase && *(tc - 1) == separator) || (tc == targetbase && !empty_base))
{
pc++;
}
else
{
*tc = *pc;
tc++;
pc++;
}
}
else
{
//
// Normal char, copy it
//
*tc = *pc;
tc++;
pc++;
}
}
}
}
// Adopted from falcosecurity/libs
#ifndef HAVE_STRLCPY
static inline size_t strlcpy(char *dst, const char *src, size_t size) {
size_t srcsize = strlen(src);
if (size == 0) {
return srcsize;
}
size_t copysize = srcsize;
if (copysize > size - 1) {
copysize = size - 1;
}
memcpy(dst, src, copysize);
dst[copysize] = '\0';
return srcsize;
}
#endif
// Adopted from falcosecurity/libs, custom hand-rolled for performance reasons
static inline bool concatenate_paths_(char* target, uint32_t targetlen, const char* path1, uint32_t len1,
const char* path2, uint32_t len2)
{
if(targetlen < (len1 + len2 + 1))
{
strlcpy(target, "/PATH_TOO_LONG", targetlen);
return false;
}
if(len2 != 0 && path2[0] != '/')
{
memcpy(target, path1, len1);
copy_and_sanitize_path(target + len1, target, path2, '/');
return true;
}
else
{
target[0] = 0;
copy_and_sanitize_path(target, target, path2, '/');
return false;
}
}
// Adopted from falcosecurity/libs, custom hand-rolled for performance reasons
std::string concatenate_paths(std::string_view path1, std::string_view path2)
{
char fullpath[SCAP_MAX_PATH_SIZE];
concatenate_paths_(fullpath, SCAP_MAX_PATH_SIZE, path1.data(), (uint32_t)path1.length(), path2.data(),
path2.size());
return std::string(fullpath);
}
const std::vector<plugin_sinsp_filterchecks_field> get_profile_fields(const std::string& behavior_profile)
{
std::vector<plugin_sinsp_filterchecks_field> fields;
std::regex pattern(R"(%(\S+))");
std::sregex_iterator iter(behavior_profile.begin(), behavior_profile.end(), pattern);
std::sregex_iterator end;
plugin_sinsp_filterchecks::check_type id;
std::string fieldname;
std::int32_t argid = 0;
std::string argname = "";
while (iter != end)
{
// todo revisit this helper
auto rawfield = iter->str().substr(1);
std::string fieldname = rawfield;
bool found_match = false;
for (size_t i = 0; i < sizeof(sinsp_filter_check_fields) / sizeof(sinsp_filter_check_fields[0]); ++i)
{
id = static_cast<plugin_sinsp_filterchecks::check_type>(i);
if(id == plugin_sinsp_filterchecks::TYPE_ENV ||
id == plugin_sinsp_filterchecks::TYPE_APID ||
id == plugin_sinsp_filterchecks::TYPE_ANAME ||
id == plugin_sinsp_filterchecks::TYPE_AEXE ||
id == plugin_sinsp_filterchecks::TYPE_AEXEPATH ||
id == plugin_sinsp_filterchecks::TYPE_ACMDLINE ||
id == plugin_sinsp_filterchecks::TYPE_CUSTOM_ANAME_LINEAGE_CONCAT||
id == plugin_sinsp_filterchecks::TYPE_CUSTOM_AEXE_LINEAGE_CONCAT ||
id == plugin_sinsp_filterchecks::TYPE_CUSTOM_AEXEPATH_LINEAGE_CONCAT
)
{
size_t start_pos = rawfield.find('[');
size_t end_pos = rawfield.find(']');
if (start_pos != std::string::npos && end_pos != std::string::npos)
{
fieldname = rawfield.substr(0, start_pos);
std::string arg_str = rawfield.substr(start_pos + 1, end_pos - start_pos - 1);
if (!arg_str.empty())
{
argname = rawfield.substr(start_pos + 1, end_pos - start_pos - 1);
if (std::all_of(argname.begin(), argname.end(), ::isdigit))
{
argid = std::stoi(rawfield.substr(start_pos + 1, end_pos - start_pos - 1));
argname.clear();
}
}
}
}
if (std::string(sinsp_filter_check_fields[i].m_name) == fieldname)
{
found_match = true;
if ((sinsp_filter_check_fields[i].m_flags & EPF_ANOMALY_PLUGIN))
{
if ((id == plugin_sinsp_filterchecks::TYPE_CUSTOM_ANAME_LINEAGE_CONCAT||
id == plugin_sinsp_filterchecks::TYPE_CUSTOM_AEXE_LINEAGE_CONCAT ||
id == plugin_sinsp_filterchecks::TYPE_CUSTOM_AEXEPATH_LINEAGE_CONCAT)
&& argid == 0)
{
plugin_anomalydetection::utils::log_error("Usage of behavior profile field: '" + fieldname + "' requires an argument greater than 0 indicating the level of parent lineage traversal, e.g. '%custom.proc.aname.lineage.join[7]' or '%custom.proc.aexe.lineage.join[7]' or '%custom.proc.aexepath.lineage.join[7]' exiting...");
exit(1);
}
fields.emplace_back(plugin_sinsp_filterchecks_field{
id,
argid,
argname
});
} else
{
plugin_anomalydetection::utils::log_error("Remove the following unsupported behavior profile field: '" + fieldname + "' exiting...");
exit(1);
}
}
argid = 0;
argname.clear();
}
if (!found_match)
{
plugin_anomalydetection::utils::log_error("Remove the following invalid or mistyped behavior profile field: '" + fieldname + "' exiting...");
exit(1);
}
++iter;
}
return fields;
}
}

Some files were not shown because too many files have changed in this diff Show More