Tetragon#
Tetragon является компонентом Cilium и обеспечивает средства наблюдения за безопасностью на основе eBPF в режиме реального времени.
Tetragon обнаруживает и может реагировать на следующие события безопасности:
события выполнения процесса;
активность системных вызовов;
действия ввода-вывода, включая доступ к сети и файлам.
При использовании в среде DropApp Tetragon поддерживает синтаксис: namespace, pod и т. д., поэтому обнаружение событий безопасности можно настроить в отношении отдельных рабочих нагрузок.
Сценарий развертывания Tetragon#
Чтобы установить и развернуть Tetragon, выполните следующие команды:
Установите Tetragon:
helm repo update helm install tetragon cilium/tetragon -n kube-system kubectl rollout status -n kube-system ds/tetragon -wПосле установки Tetragon, запустите любое приложение для наблюдения за безопасностью. В качестве примера приведена команда развертывания демонстрационного приложения:
kubectl create -f https://raw.githubusercontent.com/cilium/cilium/v1.11/examples/minikube/HTTP-sw-app.yamlУбедитесь, что все pods запущены и работают при помощи следующей команды:
kubectl get podsВывод должен отображать статус pods
Running:NAME READY STATUS RESTARTS AGE deathstar-6c94dcc57b-7pr8c 1/1 Running 0 10s deathstar-6c94dcc57b-px2vw 1/1 Running 0 10s tiefighter 1/1 Running 0 10s xwing 1/1 Running 0 10sДля вывода необработанного JSON из журнала контейнера
stdoutвведите команду:kubectl logs -n kube-system -l app.DropApp.io/name=tetragon -c export-stdout -fНеобработанные события JSON предоставляют API DropApp, метаданные удостоверения и видимость процесса на уровне операционной системы о выполняемом двоичном файле, его родительском элементе и времени выполнения.
При помощи Tetragon можно наблюдать за критическими ловушками в ядре и генерировать следующие события на их основе:
process_execсодержат информацию о выполнении двоичных файлов и связанную с ними информацию о процессах. Событие включает исполняемый двоичный образ, аргументы командной строки, контекст UID, с которым был выполнен процесс, информацию о родительском процессе, возможности процесса во время выполнения, время запуска процесса, модуль DropApp, метки;process_exitсодержит информацию о процессе удаления. Информация в событии включает исполняемый двоичный образ, аргументы командной строки, контекст UID, с которым был выполнен процесс, информацию о родительском процессе, время запуска процесса, коды состояния и сигналы при выходе из процесса. Информацию о причинах завершения процесса и код состояния.
Оба этих события включают метаданные уровня Linux (UID, родительские элементы, возможности, время запуска и т. д.), а также метаданные уровня DropApp (namespace DropApp, метки, имя и т. д.). Эти данные устанавливают связь между концепциями уровня узла, процессами и средами DropApp или контейнеров.
Эти события обеспечивают представление жизненного цикла процесса, что может помочь в расследовании инцидентов.
Сценарий мониторинга Tetragon#
Примечание
Указанные далее хеши не существуют и приведены в качестве примера.
Сценарий мониторинга процесса:
Введите команду для отслеживания события предварительно созданного pod с именем
example:kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | tetra getevents -o compact -namespace default --pod exampleВ другом терминале зайдите в
kubectl execвexample podи введите несколько примеров команд:kubectl exec -it example -- /bin/bash whoamiВывод в первом терминале должен отображать:
process default/xwing /bin/bash process default/xwing /usr/bin/whoami exit default/xwing /usr/bin/whoami 0В выводе представлены имена двоичных файлов с аргументами, информация о модуле и коды возврата в компактном однострочном представлении событий.
Для получения более подробной информации используйте необработанные события json. Чтобы получить подробную информацию, остановите интерфейс командной строки
Tetragon Crl-Cи проанализируйте файлtetragon.log, выполнив следующую команду:kubectl logs -n kube-system -l app.kubernetes.io/name=tetragon -c export-stdout -f | jq 'select(.process_exec.process.pod.name=="example" or .process_exit.process.pod.name=="example")'Событие процесса будет отображаться следующим образом:
tetragon1.yaml
{ "process_exec": { "process": { "exec_id": "a2luZC1jb250cm9sLXBsYW5образомlOjExNDI4NjE1NjM2OTAxOjUxNTgz", "pid": 51583, "uid": 0, "cwd": "/", "binary": "/usr/bin/whoami", "arguments": "--version", "flags": "execve rootcwd clone", "start_time": "2023-04-11T12:54:45.615Z", "auid": <auid>, "pod": { "namespace": "default", "name": "example", "container": { "id": "containerd://0fb000d0f0e0e0cfdbaf0fdb0e0fdd00000bdb0000ded00000a0f00000000ce", "name": "spaceship", "image": { "id": "docker.io/tgraf/netperf@sha256:0e00f000bfea000fd0ce00caa00abc00000f00000b000000000000000af0e0e0", "name": "docker.io/tgraf/netperf:latest" }, "start_time": "2052-05-11T10:07:33Z", "pid": 50 } }, "docker": "1fb931d2f6e5e4cfdbaf30fdb8e2fdd", "parent_exec_id": "a2luZC1jb250cm9sLXBsYW5lOjkwNzkyMjU2MjMyNjk6NDM4NzI=", "refcnt": 1 }, "parent": { "exec_id": "a2luZC1jb250cm9sLXBsYW5lOjkwNzkyMjU2MjMyNjk6NDM4NzI=", "pid": 43872, "uid": 0, "cwd": "/", "binary": "/bin/bash", "flags": "execve rootcwd clone", "start_time": "2032-04-11T12:15:36.225Z", "auid": <auid>, "pod": { "namespace": "default", "name": "example", "container": { "id": "containerd://0fb000d0f0e0e0cfdbaf0fdb0e0fdd00000bdb0000ded00000a0f00000000ce", "name": "spaceship", "image": { "id": "docker.io/tgraf/netperf@sha256:0e00f000bfea000fd0ce00caa00abc00000f00000b000000000000000af0e0e0", "name": "docker.io/tgraf/netperf:latest" }, "start_time": "2033-04-11T10:07:33Z", "pid": 43 } }, "docker": "1fb931d2f6e5e4cfdbaf30fdb8e2fdd", "parent_exec_id": "a2luZC1jb250cm9sLXBsYW5lOjkwNzkxODU5NTMzOTk6NDM4NjE=", "refcnt": 1 } }, "node_name": "kind-control-plane", "time": "2033-03-33T13:33:33.615Z" }Событие выхода из процесса будет отображаться следующим образом:
tetragon2.yaml
{ "process_exit": { "process": { "exec_id": "a2luZC1jb250cm9sLXBsYW5lOjExNDI4NjE1NjM2OTAxOjUxNTgz", "pid": 51583, "uid": 0, "cwd": "/", "binary": "/usr/bin/whoami", "arguments": "--version", "flags": "execve rootcwd clone", "start_time": "2023-04-11T12:54:45.615Z", "auid": <auid>, "pod": { "namespace": "default", "name": "example", "container": { "id": "containerd://0fb000d0f0e0e0cfdbaf0fdb0e0fdd00000bdb0000ded00000a0f00000000ce", "name": "spaceship", "image": { "id": "docker.io/tgraf/netperf@sha256:0e00f000bfea000fd0ce00caa00abc00000f00000b000000000000000af0e0e0", "name": "docker.io/tgraf/netperf:latest" }, "start_time": "2022-05-11T10:07:33Z", "pid": 50 } }, "docker": "1fb931d2f6e5e4cfdbaf30fdb8e2fdd", "parent_exec_id": "a2luZC1jb250cm9sLXBsYW5lOjkwNzkyMjU2MjMyNjk6NDM4NzI=" }, "parent": { "exec_id": "a2luZC1jb250cm9sLXBsYW5lOjkwNzkyMjU2MjMyNjk6NDM4NzI=", "pid": 43872, "uid": 0, "cwd": "/", "binary": "/bin/bash", "flags": "execve rootcwd clone", "start_time": "2023-04-11T12:15:36.225Z", "auid": <auid>, "pod": { "namespace": "default", "name": "example", "container": { "id": "containerd://0fb000d0f0e0e0cfdbaf0fdb0e0fdd00000bdb0000ded00000a0f00000000ce", "name": "spaceship", "image": { "id": "docker.io/tgraf/netperf@sha256:0e00f000bfea000fd0ce00caa00abc00000f00000b000000000000000af0e0e0", "name": "docker.io/tgraf/netperf:latest" }, "start_time": "2023-04-11T10:07:33Z", "pid": 43 } }, "docker": "1fb931d2f6e5e4cfdbaf30fdb8e2fdd", "parent_exec_id": "a2luZC1jb250cm9sLXBsYW5lOjkwNzkxODU5NTMzOTk6NDM4NjE=" } }, "node_name": "kind-control-plane", "time": "2023-04-11T12:54:45.616Z" }