Sysdig Falco
Sysdig Falco — инструмент для обнаружения аномалий и мониторинга активности в системе. Работает как на хосте, так и в контейнерах, если потребуется.

Состоит Falco из двух частей — модуль ядра falco_probe, и непосредственно сам демон, который обрабатывает собранную информацию, генерирует отчёты и т. д. Настройка выполняется из нескольких .yaml файлов. Мы на Falco в рамках этой заметки посмотрим в CentOS 7.
Установка и базовая настройка.
Для установки, выполняем одну команду. В процессе, скрипт доустановит заголовки ядра, необходимые для сборки модуля пакеты, соберёт модуль ядра и запустит его в работу:
# curl -s https://s3.amazonaws.com/download.draios.com/stable/install-falco | sudo bash
Как только процесс будет завершён, убеждаемся что модуль работает:
# lsmod | grep falco
falco_probe 614337 0
Далее заглянем в основной конфигурационный файл — /etc/falco/falco.yaml Здесь мы можем указать какие файлы с правилами необходимо использовать при мониторинге, в каком формате выводить уведомления, куда выводить их и с каким приоритетом. По умолчанию, уведомления отправляются в stderr, stdout и syslog. Если мы хотим настроить запись уведомлений в отдельный лог, обращаем внимание на секцию:
file_output:
enabled: false
keep_alive: false
filename: ./events.txt
Для настройки уведомлений на email, спускаемся в нижнюю часть конфига и там находим соответствующую возможность:
program_output:
enabled: false
keep_alive: false
program: mail -s "Falco Notification" someone@example.com
Вносим нужные нам изменения, если это требуется, сохраняем файл. Для этой заметки я у себя ничего не менял, оставив дефолтные настройки.
Правила Sysdig Falco.
Посмотрим сразу на простой пример — правило, для мониторинга сетевой активности системных бинарников:
- rule: system_binaries_network_activity
desc: network activity by system binaries that are not expected generate any network traffic
condition: ((inbound or outbound) and (fd.sockfamily = ip)) and (fd.name != '')
output: "Binary generate network traffic by (user=%user.name command=%proc.cmdline connection=%fd.name type=%evt.type)"
priority: WARNING
tags: [filesystem, network]
-
Начинается правило с
rule
, далее указывается название, которое будет использоваться falco при обработке.
-
desc
— описание правила в свободной форме.
-
condition
— условие для срабатывания правила.
Пишется с использованием синтаксиса sysdig
.
-
output
— строка, которая будет записываться в лог.
-
priority
— приоритет для правила.
-
tags
— теги для правила.
О самом Sysdig я уже писал ранее, в отдельной заметке.
Мониторинг сетевой активности.
При установке Falco на сервер, в файле /etc/falco/falco_rules.yaml уже прописано некоторое количество правил, стоит заглянуть туда, прежде чем писать что-то своё. Наши кастомные правила мы будем записывать в /etc/falco/falco_rules.local.yaml.
Сохраним приведённое выше правило, перезапустим сервис:
# systemctl restart falco
Теперь просто пингуем любой домен, а затем проверяем /var/log/messages. Там у нас обнаружится следующее:
Oct 11 12:59:50 centos-2gb-hel1-1 falco: 12:59:50.343148030: Warning Binary generate network traffic by (user=root command=ping -c1 ya.ru connection=95.216.162.218:32820->213.133.98.98:53 type=connect)
Oct 11 12:59:50 centos-2gb-hel1-1 falco: 12:59:50.343197498: Warning Binary generate network traffic by (user=root command=ping -c1 ya.ru connection=95.216.162.218:32820->213.133.98.98:53 type=sendto)
Oct 11 12:59:50 centos-2gb-hel1-1 falco: 12:59:50.345198065: Warning Binary generate network traffic by (user=root command=ping -c1 ya.ru connection=95.216.162.218:32820->213.133.98.98:53 type=ioctl)
Oct 11 12:59:50 centos-2gb-hel1-1 falco: 12:59:50.345205363: Warning Binary generate network traffic by (user=root command=ping -c1 ya.ru connection=95.216.162.218:32820->213.133.98.98:53 type=recvfrom)
Мониторинг файловой системы.
В стандартном наборе правил добавлены условия, позволяющие выполнить мониторинг изменений в директории /etc:
- rule: Write below etc
desc: an attempt to write to any file below /etc
condition: write_etc_common
output: "File below /etc opened for writing (user=%user.name command=%proc.cmdline parent=%proc.pname pcmdline=%proc.pcmdline file=%fd.name program=%proc.name gparent=%proc.aname[2] ggparent=%proc.aname[3] gggparent=%proc.aname[4])"
priority: ERROR
tags: [filesystem]
Для проверки его работоспособности можно, например, модифицировать /etc/resolv.conf, а затем проверить /var/log/messages, где осядет запись:
Oct 11 13:16:46 centos-2gb-hel1-1 falco: 13:16:46.994403084: Error File below /etc opened for writing (user=root command=nano -w /etc/resolv.conf parent=bash pcmdline=bash file=/etc/resolv.conf program=nano gparent=sshd ggparent=sshd gggparent=systemd)
Oct 11 13:16:48 centos-2gb-hel1-1 falco: 13:16:48.967124902: Error File below /etc opened for writing (user=root command=nano -w /etc/resolv.conf parent=bash pcmdline=bash file=/etc/resolv.conf program=nano gparent=sshd ggparent=sshd gggparent=systemd)
Мониторинг работы в контейнере.
Для этой заметки я работаю на тестовом сервере, так что ставим Docker, и запускаем простой контейнер с CentOS:
# yum install docker
# systemctl restart docker
# docker pull centos
Возьмём приведённое выше правило, и немного модифицируем его, для мониторинга сетевой активности в контейнере:
- rule: system_binaries_network_activity_docker
desc: network activity by system binaries that are not expected generate any network traffic in container
condition: ((inbound or outbound) and (fd.sockfamily = ip)) and fd.name != '' and container
output: "Binary generate network traffic from container %container.id by (user=%user.name command=%proc.cmdline connection=%fd.name type=%evt.type)"
priority: WARNING
tags: [container, network]
Добавим правило в /etc/falco/falco_rules.local.yaml, сохраним изменения, перезапустим сервис.
# systemctl restart falco
Теперь просто зайдём в контейнер, попингуем ya.ru и выйдем обратно в ОС на хосте.
# docker run --rm -it centos /bin/bash
[root@0a6ed013ee29 /]# ping -c1 ya.ru
...
[root@0a6ed013ee29 /]# exit
exit
#
В очередной раз проверим /var/log/messages, где по указанному нами правилу будут доступны предупрждения:
Oct 11 13:43:58 centos-2gb-hel1-1 falco: 13:43:58.887939368: Warning Binary generate network traffic from container 0a6ed013ee29 by (user=root command=ping -c1 ya.ru connection=172.17.0.2:49217->213.133.98.98:53 type=sendto)
Oct 11 13:43:58 centos-2gb-hel1-1 falco: 13:43:58.888361623: Warning Binary generate network traffic from container 0a6ed013ee29 by (user=root command=ping -c1 ya.ru connection=172.17.0.2:49217->213.133.98.98:53 type=ioctl)
Oct 11 13:43:58 centos-2gb-hel1-1 falco: 13:43:58.888382571: Warning Binary generate network traffic from container 0a6ed013ee29 by (user=root command=ping -c1 ya.ru connection=172.17.0.2:49217->213.133.98.98:53 type=recvfrom)
Вот так достаточно просто мы можем взять под контроль практически любое действие в системе, причём как на хосте, так и в контейнерах.
Sysdig Falco - Open Source Docker Container Security
-
Больше примеров и правил можно найти
на соответствующей странице
проекта.
-
Ещё, очень рекомендую
заглянуть на katacoda.com и пройти там короткий курс
по работе в Sysdig Falco.
-
Ещё несколько
видео с примерами работы.