Стадия жизненного цикла модуля: General Availability
У модуля есть требования для установки
Встроенные правила аудита
Сводная таблица
| Набор правил | Правило | Описание | Уровень | Источник | Теги |
|---|---|---|---|---|---|
| fstec | Launch Package Management Process in container | Обнаруживает запуск процесса управления пакетами (apt/yum/dnf/apk и т. п.) внутри контейнера. Часто указывает на дрейф контейнера, установку инструментов в рантайме или пост-компрометационные действия. | Error | fstec, container_drift |
|
| fstec | Drop and execute new binary in container | Обнаруживает запуск исполняемого файла в контейнере, который отсутствует в базовом образе (исполняемый файл из верхнего слоя overlayfs). Типичный признак «drop & execute» после получения доступа к контейнеру. | Critical | fstec, container_drift |
|
| fstec | Container drift detected (chmod) | Обнаруживает изменение прав (chmod) внутри контейнера, приводящее к появлению/активации исполняемого файла. Может указывать на дрейф контейнера или попытку подготовки вредоносного инструмента к запуску. | Error | fstec, container_drift |
|
| fstec | Container drift detected (open+create) | Обнаруживает создание исполняемого файла внутри контейнера через open/create с последующим выполнением. Часто встречается при дрейфе контейнера или при загрузке и запуске вредоносных бинарных файлов. | Error | fstec, container_drift |
|
| fstec | Modify binary dirs | Обнаруживает переименование/удаление файлов в стандартных каталогах бинарных файлов (/bin, /sbin, /usr/bin, /usr/sbin) внутри контейнера. Может указывать на попытку подмены системных утилит или скрытия следов. | Error | fstec, container_drift |
|
| fstec | K8s Pod created | Обнаруживает успешное создание Pod в Kubernetes по audit-логам. Полезно для контроля появления новых рабочих нагрузок и расследования неожиданных запусков. | Informational | K8sAudit | fstec, container_drift |
| fstec | K8s Pod deleted | Обнаруживает успешное удаление Pod в Kubernetes по audit-логам. Полезно для выявления саботажа, попыток скрыть активность и анализа инцидентов. | Informational | K8sAudit | fstec, container_drift |
| fstec | ServiceAccount created in a system namespace | Обнаруживает создание ServiceAccount в системных namespace (kube-system/kube-public/default или d8-*). Может быть признаком попытки закрепиться в кластере и получить дополнительные права. | Warning | K8sAudit | fstec, rbac_drift |
| fstec | Attach to cluster-admin Role | Обнаруживает создание ClusterRoleBinding, привязывающего субъект к роли cluster-admin. Это критическое действие, дающее полный административный доступ к кластеру. | Warning | K8sAudit | fstec, rbac_drift |
| fstec | ClusterRole with wildcard created | Обнаруживает создание Role/ClusterRole с wildcard ресурсами или verb ("*") в правилах RBAC. Такие роли существенно расширяют права и часто являются признаком ошибочной настройки или эскалации привилегий. | Warning | K8sAudit | fstec, rbac_drift |
| fstec | Attach/Exec Pod | Обнаруживает попытку exec/attach к Pod (subresource exec/attach) по audit-логам. Может указывать на интерактивный доступ к контейнеру и возможные ручные действия в рантайме. | Notice | K8sAudit | fstec, container_image_access |
| fstec | EphemeralContainers created | Обнаруживает добавление ephemeral containers в Pod. Эфемерные контейнеры часто используют для отладки, но также могут применяться злоумышленниками для скрытого доступа. | Notice | K8sAudit | fstec, container_image_access |
| fstec | ClusterRole with write privileges created | Обнаруживает создание Role/ClusterRole с правами на запись (create/update/patch/delete). Такие роли позволяют изменять объекты кластера и могут использоваться для эскалации или внедрения изменений. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | ClusterRole with Pod Exec created | Обнаруживает создание Role/ClusterRole с доступом к pods/exec. Доступ к exec позволяет выполнять команды в контейнерах и часто эквивалентен высокому уровню доступа к рабочей нагрузке. | Warning | K8sAudit | fstec, rbac_drift |
| fstec | System ClusterRole modified/deleted | Обнаруживает изменение или удаление системных Role/ClusterRole (system:*), за исключением некоторых разрешённых. Может быть признаком попытки нарушить работу кластера или ослабить безопасность. | Warning | K8sAudit | fstec, rbac_drift |
| fstec | K8s ServiceAccount created | Обнаруживает создание ServiceAccount вне системных namespace. Может быть нормой для приложений, но также используется для подготовки доступа и дальнейшей выдачи RBAC прав. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | K8s ModuleConfig modified | Обнаруживает изменение объекта ModuleConfig по audit-логам. Изменения ModuleConfig могут влиять на поведение и настройки компонентов (в т. ч. безопасность) и требуют контроля. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | K8s ServiceAccount deleted | Обнаруживает удаление ServiceAccount по audit-логам. Может указывать на попытку очистки артефактов доступа или на изменения в настройках приложений. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | K8s Role/ClusterRole created | Обнаруживает создание Role/ClusterRole по audit-логам. Используется для контроля изменений RBAC и выявления неожиданных расширений прав. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | K8s Role/ClusterRole deleted | Обнаруживает удаление Role/ClusterRole по audit-логам. Может указывать на попытку скрыть следы, откат настроек или разрушение конфигурации доступа. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | K8s ClusterRoleBinding created | Обнаруживает создание ClusterRoleBinding по audit-логам. ClusterRoleBinding изменяет назначение кластерных прав и может быть вектором эскалации привилегий. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | K8s ClusterRoleBinding deleted | Обнаруживает удаление ClusterRoleBinding по audit-логам. Может приводить к потере доступа или использоваться для сокрытия несанкционированных назначений. | Notice | K8sAudit | fstec, rbac_drift |
| fstec | Read below containerd images dir | Обнаруживает чтение файлов в каталоге containerd, связанном с данными контейнеров/CRI. Может указывать на попытку извлечения информации о контейнерах/образах или на нехарактерный доступ к данным рантайма. | Notice | fstec, container_image_access |
|
| fstec | Write below containerd images dir | Обнаруживает запись/изменение файлов в каталогах containerd. Может указывать на попытку подмены/повреждения данных рантайма, дрейф или атаки на цепочку поставки образов. | Error | fstec, container_image_drift |
|
| fstec | Container tag is not @sha256 | Обнаруживает создание Pod в системном namespace с образом, не закреплённым по digest (@sha256:). Использование тегов без digest усложняет контроль целостности и повышает риск подмены образа. | Notice | K8sAudit | fstec, integrity_control |
| fstec | Inbound SSH Connection | Обнаруживает входящее SSH-соединение на порт 22 на хосте. Может быть легитимным администрированием, но также часто используется для первоначального доступа и требует расследования. | Notice | fstec, auth_attempts |
|
| fstec | Unauthorized request to Kubernetes API | Обнаруживает запросы к Kubernetes API, завершившиеся 401 (Unauthorized), в audit-логах (исключая health/version эндпоинты). Может указывать на попытки подбора токенов, неправильную конфигурацию клиентов или активность злоумышленника. | Warning | K8sAudit | fstec, auth_attempts |
| fstec | Security Reports Created | Обнаруживает создание объектов security report (configauditreports/vulnerabilityreports). Может указывать на запуск сканирования, появление новых результатов по уязвимостям или активность, связанную с безопасностью контейнеров. | Notice | K8sAudit | fstec, security_reports |
Наборы правил
fstec
Launch Package Management Process in container
Обнаруживает запуск процесса управления пакетами (apt/yum/dnf/apk и т. п.) внутри контейнера. Часто указывает на дрейф контейнера, установку инструментов в рантайме или пост-компрометационные действия.
- Теги:
fstec,container_drift - Уровень: Error
Условие
spawned_process and container and user.name != "_apt" and package_mgmt_procs and not package_mgmt_ancestor_procsСообщение
Package management process launched in container (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid container_id=%container.id container_name=%container.name image=%container.image.repository:%container.image.tag exe_flags=%evt.arg.flags)Как протестировать
- Среда: контейнер
Команды:
apt -hDrop and execute new binary in container
Обнаруживает запуск исполняемого файла в контейнере, который отсутствует в базовом образе (исполняемый файл из верхнего слоя overlayfs). Типичный признак «drop & execute» после получения доступа к контейнеру.
- Теги:
fstec,container_drift - Уровень: Critical
Условие
spawned_process and container and proc.is_exe_upper_layer=true and not container.image.repository in (known_drop_and_execute_containers)Сообщение
Executing binary not part of base image (user=%user.name user_loginuid=%user.loginuid user_uid=%user.uid comm=%proc.cmdline exe=%proc.exe container_id=%container.id image=%container.image.repository proc.name=%proc.name proc.sname=%proc.sname proc.pname=%proc.pname proc.aname[2]=%proc.aname[2] exe_flags=%evt.arg.flags proc.exe_ino=%proc.exe_ino proc.exe_ino.ctime=%proc.exe_ino.ctime proc.exe_ino.mtime=%proc.exe_ino.mtime proc.exe_ino.ctime_duration_proc_start=%proc.exe_ino.ctime_duration_proc_start proc.exepath=%proc.exepath proc.cwd=%proc.cwd proc.tty=%proc.tty container.start_ts=%container.start_ts proc.sid=%proc.sid proc.vpgid=%proc.vpgid evt.res=%evt.res)Как протестировать
- Среда: контейнер
Команды:
echo "echo Hello, Falco!" > /tmp/test.sh
chmod +x /tmp/test.sh
/tmp/test.shContainer drift detected (chmod)
Обнаруживает изменение прав (chmod) внутри контейнера, приводящее к появлению/активации исполняемого файла. Может указывать на дрейф контейнера или попытку подготовки вредоносного инструмента к запуску.
- Теги:
fstec,container_drift - Уровень: Error
Условие
chmod and container and not runc_writing_exec_fifo and not runc_writing_var_lib_docker and not kubelet_pod_volume and not image_scanner_drift and not deckhouse_controller_drift and not neuvector_container and not vault_env_injector_drift and evt.rawres>=0 and (
(evt.arg.mode contains "S_IXUSR")
or (evt.arg.mode contains "S_IXGRP")
or (evt.arg.mode contains "S_IXOTH")
)Сообщение
Drift detected (chmod), new executable created in a container (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid filename=%evt.arg.filename name=%evt.arg.name mode=%evt.arg.mode event=%evt.type container_id=%container.id image=%container.image.repository)Как протестировать
- Среда: контейнер
Команды:
echo "echo Hello, Falco!" > /tmp/test.sh
chmod +x /tmp/test.sh
/tmp/test.shContainer drift detected (open+create)
Обнаруживает создание исполняемого файла внутри контейнера через open/create с последующим выполнением. Часто встречается при дрейфе контейнера или при загрузке и запуске вредоносных бинарных файлов.
- Теги:
fstec,container_drift - Уровень: Error
Условие
evt.type in (open,openat,openat2,creat) and evt.is_open_exec=true and container and not runc_writing_exec_fifo and not runc_writing_var_lib_docker and not runc_writing_var_lib_containerd and not kubelet_pod_volume and not image_scanner_drift and not deckhouse_controller_drift and not neuvector_container and not vault_env_injector_drift and evt.rawres>=0Сообщение
Drift detected (open+create), new executable created in a container (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid filename=%evt.arg.filename name=%evt.arg.name mode=%evt.arg.mode event=%evt.type container_id=%container.id image=%container.image.repository)Как протестировать
- Среда: контейнер
Команды:
cat << 'EOF' > /tmp/drift_exec.c
#define _GNU_SOURCE
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <string.h>
#include <sys/stat.h>
int main() {
char path[] = "/tmp/zzz-exec";
char *text = "#!/bin/sh\necho HACKED\n";
int fd = open(path, O_RDWR | O_CREAT | O_TRUNC, 0755);
write(fd, text, strlen(text));
fchmod(fd, 0755);
char *const args[] = {path, NULL};
execv(path, args);
}
EOF
gcc /tmp/drift_exec.c -o /tmp/drift_exec
/tmp/drift_execModify binary dirs
Обнаруживает переименование/удаление файлов в стандартных каталогах бинарных файлов (/bin, /sbin, /usr/bin, /usr/sbin) внутри контейнера. Может указывать на попытку подмены системных утилит или скрытия следов.
- Теги:
fstec,container_drift - Уровень: Error
Условие
container and bin_dir_rename and modify and not package_mgmt_procs and evt.rawres>=0Сообщение
File below known binary directory renamed/removed (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid pcmdline=%proc.pcmdline operation=%evt.type file=%fd.name %evt.args container_id=%container.id image=%container.image.repository)Как протестировать
- Среда: контейнер
Команды:
touch /usr/bin/evilfile
mv /usr/bin/evilfile /usr/bin/eviltwin
rm /usr/bin/eviltwinK8s Pod created
Обнаруживает успешное создание Pod в Kubernetes по audit-логам. Полезно для контроля появления новых рабочих нагрузок и расследования неожиданных запусков.
- Источник: K8sAudit
- Теги:
fstec,container_drift - Уровень: Informational
Условие
(kevt and kcreate and pod and response_successful)Сообщение
K8s Pod Created (user=%ka.user.name pod=%ka.target.name ns=%ka.target.namespace resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl run testpod --image=alpine:latest -- /bin/sh -c "while true; do sleep 3600; done"
kubectl delete pod testpod --grace-period=0K8s Pod deleted
Обнаруживает успешное удаление Pod в Kubernetes по audit-логам. Полезно для выявления саботажа, попыток скрыть активность и анализа инцидентов.
- Источник: K8sAudit
- Теги:
fstec,container_drift - Уровень: Informational
Условие
(kevt and kdelete and pod and response_successful)Сообщение
K8s Pod Deleted (user=%ka.user.name pod=%ka.target.name ns=%ka.target.namespace resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl run testpod --image=alpine:latest -- /bin/sh -c "while true; do sleep 3600; done"
kubectl delete pod testpod --grace-period=0ServiceAccount created in a system namespace
Обнаруживает создание ServiceAccount в системных namespace (kube-system/kube-public/default или d8-*). Может быть признаком попытки закрепиться в кластере и получить дополнительные права.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Warning
Условие
kevt and serviceaccount and kcreate and system_namespace and response_successfulСообщение
Service account created in kube namespace (user=%ka.user.name serviceaccount=%ka.target.name resource=%ka.target.resource ns=%ka.target.namespace sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl -n default create serviceaccount test-sa
kubectl -n default delete serviceaccount test-sakubectl -n kube-public create serviceaccount test-sa2
kubectl -n kube-public delete serviceaccount test-sa2kubectl -n kube-system create serviceaccount test-sa3
kubectl -n kube-system delete serviceaccount test-sa3kubectl -n d8-system create serviceaccount test-sa4
kubectl -n d8-system delete serviceaccount test-sa4Attach to cluster-admin Role
Обнаруживает создание ClusterRoleBinding, привязывающего субъект к роли cluster-admin. Это критическое действие, дающее полный административный доступ к кластеру.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Warning
Условие
kactivity and clusterrolebinding and kcreate and ka.req.binding.role=cluster-adminСообщение
Cluster Role Binding to cluster-admin role (user=%ka.user.name binding=%ka.target.name resource=%ka.target.resource subjects=%ka.req.binding.subjects role=%ka.req.binding.role resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=default:test
kubectl delete clusterrolebinding cluster-admin-bindingClusterRole with wildcard created
Обнаруживает создание Role/ClusterRole с wildcard ресурсами или verb ("*") в правилах RBAC. Такие роли существенно расширяют права и часто являются признаком ошибочной настройки или эскалации привилегий.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Warning
Условие
kevt and (role or clusterrole) and kcreate and role_with_wildcardСообщение
Created Role/ClusterRole with wildcard (user=%ka.user.name role=%ka.target.name resource=%ka.target.resource rules=%ka.req.role.rules sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create role test-role1 --verb=create --resource=*
kubectl delete role test-role1kubectl create role test-role2 --verb=* --resource=pod
kubectl delete role test-role2kubectl create role test-role3 --verb=* --resource=*
kubectl delete role test-role3Attach/Exec Pod
Обнаруживает попытку exec/attach к Pod (subresource exec/attach) по audit-логам. Может указывать на интерактивный доступ к контейнеру и возможные ручные действия в рантайме.
- Источник: K8sAudit
- Теги:
fstec,container_image_access - Уровень: Notice
Условие
kevt and (jevt.value[/verb] in (get,create,connect)) and (jevt.value[/requestURI] contains "/pods/") and (jevt.value[/requestURI] contains "/exec" or jevt.value[/requestURI] contains "/attach") and not (jevt.value[/impersonatedUser/username] exists and jevt.value[/impersonatedUser/username] in (exec_attach_allowed_users))Сообщение
Attach/Exec to pod (user=%jevt.value[/user/username] pod=%jevt.value[/objectRef/name] resource=%jevt.value[/objectRef/resource] ns=%jevt.value[/objectRef/namespace] action=%jevt.value[/objectRef/subresource] container_name=%ka.uri.param[container] command=%ka.uri.param[command] sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl run testpod --image=ubuntu:latest -- /bin/sh -c "while true; do sleep 3600; done"
kubectl create serviceaccount exec-user
kubectl create role exec-user-pod-exec --verb=get,list --resource=pods
kubectl create role exec-user-pod-exec-subresource --verb=create,get --resource=pods/exec,pods/attach
kubectl create rolebinding exec-user-pod-exec --role=exec-user-pod-exec --serviceaccount=default:exec-user
kubectl create rolebinding exec-user-pod-exec-subresource --role=exec-user-pod-exec-subresource --serviceaccount=default:exec-user
kubectl wait pod/testpod --for=condition=Ready --timeout=60s
kubectl exec testpod --as=system:serviceaccount:default:exec-user -- ls
kubectl delete rolebinding exec-user-pod-exec-subresource
kubectl delete rolebinding exec-user-pod-exec
kubectl delete role exec-user-pod-exec-subresource
kubectl delete role exec-user-pod-exec
kubectl delete serviceaccount exec-user
kubectl delete pod testpod --grace-period=0EphemeralContainers created
Обнаруживает добавление ephemeral containers в Pod. Эфемерные контейнеры часто используют для отладки, но также могут применяться злоумышленниками для скрытого доступа.
- Источник: K8sAudit
- Теги:
fstec,container_image_access - Уровень: Notice
Условие
kevt and pod_subresource and kmodify and ka.target.subresource in (ephemeralcontainers)Сообщение
Ephemeral container is created in pod (user=%ka.user.name pod=%ka.target.name resource=%ka.target.resource ns=%ka.target.namespace ephemeral_container_name=%jevt.value[/requestObject/spec/ephemeralContainers/0/name] ephemeral_container_image=%jevt.value[/requestObject/spec/ephemeralContainers/0/image] sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl run test --image=ubuntu:latest -- /bin/sh -c "while true; do sleep 3600; done"
kubectl wait pod/test --for=condition=Ready --timeout=60s
kubectl debug test --image=alpine --target=test
kubectl delete pod test --grace-period=0ClusterRole with write privileges created
Обнаруживает создание Role/ClusterRole с правами на запись (create/update/patch/delete). Такие роли позволяют изменять объекты кластера и могут использоваться для эскалации или внедрения изменений.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kevt and (role or clusterrole) and kcreate and role_with_write_privs and not role_with_wildcard and not role_with_pod_execСообщение
Created Role/ClusterRole with write privileges (user=%ka.user.name role=%ka.target.name resource=%ka.target.resource rules=%ka.req.role.rules sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create role test-role --verb=create,delete --resource=pods
kubectl delete role test-rolekubectl create clusterrole test-role2 --verb=create,delete --resource=pods
kubectl delete clusterrole test-role2ClusterRole with Pod Exec created
Обнаруживает создание Role/ClusterRole с доступом к pods/exec. Доступ к exec позволяет выполнять команды в контейнерах и часто эквивалентен высокому уровню доступа к рабочей нагрузке.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Warning
Условие
kevt and (jevt.value[/stage]=ResponseComplete) and (jevt.value[/verb]=create) and (jevt.value[/objectRef/resource] in (roles,clusterroles) or jevt.value[/requestURI] contains "/roles" or jevt.value[/requestURI] contains "/clusterroles") and role_with_pod_exec and not (jevt.value[/requestObject/rules] contains "\"*\"" or jevt.value[/requestObject] contains "\"*\"") and not (jevt.value[/impersonatedUser/username] exists and jevt.value[/impersonatedUser/username] in (exec_attach_allowed_users))Сообщение
Created Role/ClusterRole with pod exec privileges (user=%jevt.value[/user/username] role=%jevt.value[/objectRef/name] resource=%jevt.value[/objectRef/resource] rules=%jevt.value[/requestObject/rules] sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create serviceaccount pod-exec-role-user
kubectl create role pod-exec-role-manager --verb=create,delete --resource=roles
kubectl create role pod-exec-role-required --verb=create --resource=pods/exec
kubectl create rolebinding pod-exec-role-manager --role=pod-exec-role-manager --serviceaccount=default:pod-exec-role-user
kubectl create rolebinding pod-exec-role-required --role=pod-exec-role-required --serviceaccount=default:pod-exec-role-user
kubectl create role test --verb=create --resource=pods/exec --as=system:serviceaccount:default:pod-exec-role-user
kubectl delete role test --as=system:serviceaccount:default:pod-exec-role-user
kubectl delete rolebinding pod-exec-role-required
kubectl delete rolebinding pod-exec-role-manager
kubectl delete role pod-exec-role-required
kubectl delete role pod-exec-role-manager
kubectl delete serviceaccount pod-exec-role-userkubectl create serviceaccount pod-exec-clusterrole-user
kubectl create clusterrole pod-exec-clusterrole-manager --verb=create,delete --resource=clusterroles
kubectl create clusterrole pod-exec-clusterrole-required --verb=create --resource=pods/exec
kubectl create clusterrolebinding pod-exec-clusterrole-manager --clusterrole=pod-exec-clusterrole-manager --serviceaccount=default:pod-exec-clusterrole-user
kubectl create clusterrolebinding pod-exec-clusterrole-required --clusterrole=pod-exec-clusterrole-required --serviceaccount=default:pod-exec-clusterrole-user
kubectl create clusterrole test2 --verb=create --resource=pods/exec --as=system:serviceaccount:default:pod-exec-clusterrole-user
kubectl delete clusterrole test2 --as=system:serviceaccount:default:pod-exec-clusterrole-user
kubectl delete clusterrolebinding pod-exec-clusterrole-required
kubectl delete clusterrolebinding pod-exec-clusterrole-manager
kubectl delete clusterrole pod-exec-clusterrole-required
kubectl delete clusterrole pod-exec-clusterrole-manager
kubectl delete serviceaccount pod-exec-clusterrole-userSystem ClusterRole modified/deleted
Обнаруживает изменение или удаление системных Role/ClusterRole (system:*), за исключением некоторых разрешённых. Может быть признаком попытки нарушить работу кластера или ослабить безопасность.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Warning
Условие
kevt and (role or clusterrole) and (kmodify or kdelete) and (ka.target.name startswith "system:") and not ka.target.name in (system:coredns, system:managed-certificate-controller)Сообщение
System ClusterRole/Role modified or deleted (user=%ka.user.name role=%ka.target.name resource=%ka.target.resource action=%ka.verb sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl -n kube-system create role system:test1 --verb=create --resource=pods
kubectl -n kube-system delete role system:test1kubectl -n kube-system create clusterrole system:test2 --verb=create --resource=pods
kubectl -n kube-system delete clusterrole system:test2K8s ServiceAccount created
Обнаруживает создание ServiceAccount вне системных namespace. Может быть нормой для приложений, но также используется для подготовки доступа и дальнейшей выдачи RBAC прав.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and kcreate and serviceaccount and not system_namespace and response_successfulСообщение
K8s Serviceaccount Created (user=%ka.user.name serviceaccount=%ka.target.name ns=%ka.target.namespace resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl get ns test || kubectl create ns test
kubectl -n test create serviceaccount test
kubectl -n test delete serviceaccount testK8s ModuleConfig modified
Обнаруживает изменение объекта ModuleConfig по audit-логам. Изменения ModuleConfig могут влиять на поведение и настройки компонентов (в т. ч. безопасность) и требуют контроля.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and writable_verbs and moduleconfig and response_successfulСообщение
K8s ModuleConfig changed (user=%ka.user.name verb=%ka.verb moduleconfig=%ka.target.name resource=%ka.target.resource ns=%ka.target.namespace resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl patch moduleconfig deckhouse --type=merge -p '{"spec":{"settings":{"allowExperimentalModules":false}}}'
kubectl patch moduleconfig deckhouse --type=merge -p '{"spec":{"settings":{"allowExperimentalModules":true}}}'K8s ServiceAccount deleted
Обнаруживает удаление ServiceAccount по audit-логам. Может указывать на попытку очистки артефактов доступа или на изменения в настройках приложений.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and kdelete and serviceaccount and response_successfulСообщение
K8s Serviceaccount Deleted (user=%ka.user.name serviceaccount=%ka.target.name ns=%ka.target.namespace resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create serviceaccount deletetest
kubectl delete serviceaccount deletetestK8s Role/ClusterRole created
Обнаруживает создание Role/ClusterRole по audit-логам. Используется для контроля изменений RBAC и выявления неожиданных расширений прав.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and kcreate and (clusterrole or role) and response_successful and not role_with_wildcard and not role_with_pod_exec and not role_with_write_privsСообщение
K8s Cluster Role Created (user=%ka.user.name role=%ka.target.name resource=%ka.target.resource rules=%ka.req.role.rules resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create role test1 --verb=create --resource=pods
kubectl delete role test1kubectl create clusterrole test2 --verb=get --resource=pods
kubectl delete clusterrole test2K8s Role/ClusterRole deleted
Обнаруживает удаление Role/ClusterRole по audit-логам. Может указывать на попытку скрыть следы, откат настроек или разрушение конфигурации доступа.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and kdelete and (clusterrole or role) and response_successful and not (ka.target.name startswith "system:")Сообщение
K8s Cluster Role Deleted (user=%ka.user.name role=%ka.target.name resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create role test1 --verb=create --resource=pods
kubectl delete role test1kubectl create clusterrole test2 --verb=create --resource=pods
kubectl delete clusterrole test2K8s ClusterRoleBinding created
Обнаруживает создание ClusterRoleBinding по audit-логам. ClusterRoleBinding изменяет назначение кластерных прав и может быть вектором эскалации привилегий.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and kcreate and clusterrolebinding and response_successful and not ka.req.binding.role=cluster-adminСообщение
K8s Cluster Role Binding Created (user=%ka.user.name binding=%ka.target.name resource=%ka.target.resource subjects=%ka.req.binding.subjects role=%ka.req.binding.role resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create clusterrolebinding view-binding --clusterrole=view --serviceaccount=default:test
kubectl delete clusterrolebinding view-bindingK8s ClusterRoleBinding deleted
Обнаруживает удаление ClusterRoleBinding по audit-логам. Может приводить к потере доступа или использоваться для сокрытия несанкционированных назначений.
- Источник: K8sAudit
- Теги:
fstec,rbac_drift - Уровень: Notice
Условие
kactivity and kdelete and clusterrolebinding and response_successfulСообщение
K8s Cluster Role Binding Deleted (user=%ka.user.name binding=%ka.target.name resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
Команды:
kubectl create clusterrolebinding cluster-admin-binding --clusterrole=cluster-admin --serviceaccount=default:test
kubectl delete clusterrolebinding cluster-admin-bindingRead below containerd images dir
Обнаруживает чтение файлов в каталоге containerd, связанном с данными контейнеров/CRI. Может указывать на попытку извлечения информации о контейнерах/образах или на нехарактерный доступ к данным рантайма.
- Теги:
fstec,container_image_access - Уровень: Notice
Условие
fd.name startswith /var/lib/containerd/io.containerd.grpc.v1.cri/containers/ and open_read and not (proc.name in (alllowd_proc_names) or proc.pname in (alllowd_proc_names))Сообщение
File below a known containerd directory opened for reading (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2] container_id=%container.id image=%container.image.repository)Как протестировать
- Среда: хост
Команды:
mkdir -p /var/lib/containerd/io.containerd.grpc.v1.cri/containers
echo "Hello Falco!" > /var/lib/containerd/io.containerd.grpc.v1.cri/containers/testfile
cat /var/lib/containerd/io.containerd.grpc.v1.cri/containers/testfile
rm /var/lib/containerd/io.containerd.grpc.v1.cri/containers/testfileWrite below containerd images dir
Обнаруживает запись/изменение файлов в каталогах containerd. Может указывать на попытку подмены/повреждения данных рантайма, дрейф или атаки на цепочку поставки образов.
- Теги:
fstec,container_image_drift - Уровень: Error
Условие
fd.directory startswith /var/lib/containerd and open_write and not (proc.name in (alllowd_proc_names) or proc.pname in (alllowd_proc_names))Сообщение
File below a known containerd directory opened for writing (user=%user.name user_loginuid=%user.loginuid command=%proc.cmdline pid=%proc.pid file=%fd.name parent=%proc.pname pcmdline=%proc.pcmdline gparent=%proc.aname[2] container_id=%container.id image=%container.image.repository)Как протестировать
- Среда: хост
Команды:
mkdir -p /var/lib/containerd/io.containerd.grpc.v1.cri/containers
echo Hello Falco! > /var/lib/containerd/io.containerd.grpc.v1.cri/containers/testfile
cat /var/lib/containerd/io.containerd.grpc.v1.cri/containers/testfile
rm /var/lib/containerd/io.containerd.grpc.v1.cri/containers/testfileContainer tag is not @sha256
Обнаруживает создание Pod в системном namespace с образом, не закреплённым по digest (@sha256:). Использование тегов без digest усложняет контроль целостности и повышает риск подмены образа.
- Источник: K8sAudit
- Теги:
fstec,integrity_control - Уровень: Notice
Условие
kactivity and kcreate and pod and response_successful and system_namespace and not (ka.req.container.image contains @sha256:) and not (ka.target.namespace="d8-system" and ka.target.name startswith "deckhouse-")Сообщение
Not all containers are running with the sha256 sum as a tag in a system namespace, which is a potential integrity control mechanism misconfiguration (user=%ka.user.name binding=%ka.target.name resource=%ka.target.resource resp=%ka.response.code decision=%ka.auth.decision reason=%ka.auth.reason image=%ka.req.pod.containers.image sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])Как протестировать
- Среда: хост
- Условия:
bundle: CSE
Команды:
kubectl -n d8-system run test --image=ubuntu:latest -- /bin/sh -c "while true; do sleep 3600; done"
kubectl -n d8-system delete pod test --grace-period=0Inbound SSH Connection
Обнаруживает входящее SSH-соединение на порт 22 на хосте. Может быть легитимным администрированием, но также часто используется для первоначального доступа и требует расследования.
- Теги:
fstec,auth_attempts - Уровень: Notice
Условие
evt.type in (accept,listen) and fd.sport=22Сообщение
Inbound SSH Connection (command=%proc.cmdline pid=%proc.pid connection=%fd.name user=%user.name user_loginuid=%user.loginuid type=%evt.type src_ip=%fd.cip container_id=%container.id)Как протестировать
- Среда: хост
Команды:
rm -f ./ed25519*
ssh-keygen -t ed25519 -N '' -f ./id_ed25519 -q
kubectl apply -f -<<EOF
apiVersion: deckhouse.io/v1
kind: NodeUser
metadata:
name: falco-test
spec:
isSudoer: false
nodeGroups:
- '*'
sshPublicKeys:
- $(cat ./id_ed25519.pub)
uid: 1224
EOF
kubectl wait nodeuser/falco-test --for=jsonpath='{.metadata.name}'=falco-test --timeout=300s
sleep 60
ssh -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null falco-test@$(kubectl get nodes -l node.deckhouse.io/deckhouse-ready=true -o json | jq -r '.items[0].status.addresses[] | select(.type=="ExternalIP") | .address') -i ./id_ed25519 "ls -la && sleep 30"
kubectl delete nodeuser/falco-testUnauthorized request to Kubernetes API
Обнаруживает запросы к Kubernetes API, завершившиеся 401 (Unauthorized), в audit-логах (исключая health/version эндпоинты). Может указывать на попытки подбора токенов, неправильную конфигурацию клиентов или активность злоумышленника.
- Источник: K8sAudit
- Теги:
fstec,auth_attempts - Уровень: Warning
Условие
ka.response.code=401 and not jevt.value[/requestURI] startswith /version and not jevt.value[/requestURI] in (/healthz, /readyz, /livez)Сообщение
Unauthorized K8s API request detected
user=%jevt.value[/user/username]
agents=%jevt.value[/userAgent]
verb=%jevt.value[/verb]
uri=%jevt.value[/requestURI]
src_ip=%jevt.value[/sourceIPs]
dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0]
dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0]Как протестировать
- Среда: хост
Команды:
curl -k https://$(kubectl -n default get svc kubernetes -o json | jq -r ".spec.clusterIP")/auth/test -H 'Authorization: Bearer TEST'Security Reports Created
Обнаруживает создание объектов security report (configauditreports/vulnerabilityreports). Может указывать на запуск сканирования, появление новых результатов по уязвимостям или активность, связанную с безопасностью контейнеров.
- Источник: K8sAudit
- Теги:
fstec,security_reports - Уровень: Notice
Условие
kevt and kcreate and ka.target.resource in (security_reports)Сообщение
K8s Security Reports Created. The report may contain vulnerability information. Check the object in the cluster (user=%ka.user.name, verb=%ka.verb, ns=%ka.target.namespace, resource=%ka.target.resource, object=%ka.target.name sourceIP=%jevt.value[/sourceIPs] dex_name=%jevt.value[/user/extra/user-authn.deckhouse.io~1name/0] dex_provider=%jevt.value[/user/extra/user-authn.deckhouse.io~1dex-provider/0])