O Sysdig —инструменте для трассировки ядра — мы рассказывали два года назад. Совсем недавно, в мае этого года, разработчики Sysdig представили ещё один интересный продукт: систему обнаружения аномалий Falco.
Falco состоит из двух основных компонентов: модуля ядра sysdig_probe (на базе которого работает и Sysdig) и демона, записывающего собранную информацию на диск.
На основе заданных пользователем правил Falco следит за работой приложений и при обнаружении аномалий пишет информацию в стандартный вывод, syslog или указанный пользователем файл. Разработчики в своём блоге шутя называют Falco «гибридом snort, ossec и strace» и позиционируют его как простую IDS, почти не создающую нагрузки на систему.
Мы бы кратко охарактеризовали Sysdig Falco несколько иначе: это инструмент аудита с расширенными возможностями. Он может отслеживать те же события, что и подсистема аудита Linux — но не только. Вот далеко не полный список:
- запуск командной оболочки внутри контейнера;
- запись в каталог /dev файлов, не имеющих никакого отношения к устройствам (так делают, например, некоторые руткиты);
- нетипичные сетевые подключения, инициируемые приложениями;
- попытки изменения файлов в критически важных директориях — например, /etc/passwd;
- нетипичные события в работе отдельных приложений.
Falco сам по себе не обеспечивает никакой защиты, а лишь собирает информацию о системных событиях, соответствующих заданным условиям. На основании этой информации можно сделать определённые выводы и в случае необходимости принять дополнительные меры.
Установка
Прежде чем устанавливать Falco, нужно добавить соответствующий репозиторий (здесь и далее все примеры команд приводятся для ОС Ubuntu 16.04):
$ curl -s https://s3.amazonaws.com/download.draios.com/DRAIOS-GPG-KEY.public | apt-key add -
$ curl -s -o /etc/apt/sources.list.d/draios.list http://download.draios.com/stable/deb/draios.list
$ sudo apt-get update
Также нам понадобится установить заголовки ядра:
$ sudo apt-get -y install linux-headers-$(uname -r)
После этого установим Falco и добавим в ядро модуль sysdig_probe:
$ sudo apt-get -y install falco
$ modprobe sysdig-probe
На этом установка завершена. После этого Falco можно запускать:
$ sudo service falco start
Информация обо всех обнаруженных событиях будет записываться в syslog. Можно запускать Falco и в интерактивном режиме:
$ falco
Вся информация о подозрительных событиях будет тут же записываться в стандартный вывод.
Настроек и правил по умолчанию для начала работы будет более чем достаточно.
В файле /еtc/falco_rules.yaml уже прописаны правила на все случаи жизни. Имеются даже готовые правила для самых разных приложений и служб: MySQL, MongoDB,CouchDB, Fluentd, Elasticsearch и других.
При необходимости вы всегда можете изменить существующие правила и даже добавить новые. Рассмотрим структуру конфигурационных файлов Falco более подробно.
Базовые настройки
Базовые настройки Falco хранятся в файле /etc/falco.yaml. По умолчанию он выглядит так:
# File containing Falco rules, loaded at startup.
rules_file: /etc/falco_rules.yaml
# Whether to output events in json or text
json_output: false
# Send information logs to stderr and/or syslog Note these are *not* security
# notification logs! These are just Falco lifecycle (and possibly error) logs.
log_stderr: true
log_syslog: true
# Where security notifications should go.
# Multiple outputs can be enabled.
syslog_output:
enabled: true
file_output:
enabled: false
filename: ./events.txt
stdout_output:
enabled: true
program_output:
enabled: false
program: mail -s "Falco Notification" someone@example.com
Как видим, здесь указано, в какой файле хранятся правило, в каком формате следует представлять вывод (plain text или json) и куда следует записывать информацию об обнаруженных аномалиях. Falco может писать сообщения в стандартный вывод, в syslog, а также в указанный пользователем текстовый файл.
Правила и их синтаксис
В файле /etc/falco_rules.yaml содержатся правила, указывающие, на какие именно особенности в поведении системы Sysdig Falco должен обратить особое внимание. Вот фрагмент этого файла:
- rule: write_etc
desc: an attempt to write to any file below /etc, not in a pipe installer session
condition: write_etc_common and not proc.sname=fbash
output: "File below /etc opened for writing (user=%user.name command=%proc.cmdline file=%fd.name)"
priority: WARNING
Здесь всё просто и понятно: правило указывает, что Falco должно информировать о любой попытке открытия любого файл в директории /etc на запись (за исключением случаев, когда файлы в /etc создаются при установке программ.
Каждое правило состоит из следующих полей:
- desc — описание правила в произвольной форме;
- condition — условие, при котором правило срабатывает (для написания условий используется стандартный синтаксис Sysdig; подробнее см. в официальной документации), а также в нашей статье);
- output — вывод, который будет выводится при срабатывании правила;
- prioriry — приоритет (INFO, WARNING, ALERT, DEBUG, CRITICAL).
Посмотрим, как работает это правило. Запустим Falco в режиме «живого наблюдения»:
$ falco
В другом терминале попробуем открыть какой-нибудь файл в директории /etc. Мы увидим, что в стандартный вывод тут же посыплются сообщения вида:
12:43:52.640375428: Warning File below /etc opened for writing (user=useri command=nano /etc/default/grub file=/etc/default/.grub.swp)
12:43:52.640973730: Warning File below /etc opened for writing (user=useri command=nano /etc/default/grub file=/etc/default/grub)
Если мы остановим Falco нажатием клавиш Ctrl+C, на консоль будет выведена краткая сводка обо всех обнаруженных событиях:
Events detected: 2
Rule counts by severity:
Error: 0
Warning: 2
Informational: 0
Triggered rules by rule name:
write_etc: 2
Рассмотрим ещё один пример и покажем, как можно использовать Falco для аудита системных событиях в контейнерах.
Наблюдаем за контейнером
Sysdig Falco хорошо подходит для наблюдения за тем, что происходит внутри контейнеров. Посмотрим, как это работает.
Создадим Docker-контейнер:
$ docker pull:ubuntu 14.04
После этого добавим дополнительное правило в /etc/falco_rules.yaml (пример взят отсюда):
- rule: system_binaries_network_activity_container
desc: any network activity performed by system binaries that are not expected to send or receive any network traffic in a container
condition: ((inbound or outbound) and (fd.sockfamily = ip)) and fd.name != '' and container
output: "Suspicious binary sent/received network traffic from container=%container.id (user=%user.name command=%proc.cmdlin
e connection=%fd.name type=%evt.type)"
priority: WARNING
Сохраним внесённые изменения и перезапустим Falco. После этого войдём в контейнер:
$ docker run --rm -it ubuntu:14.04 /bin/bash
Выполним уже в контейнере команду:
$ ping ya.ru
На основном хосте в syslog появяется следующие сообщения:
16:08:56.944164593: Warning Suspicious binary sent/received network traffic from container=0b86d8efdf0a (user=root command=ping ya.ru connection=172.17.0.2:47776->123.45.67.89:53 type=connect)
16:08:56.945398068: Warning Suspicious binary sent/received network traffic from container=0b86d8efdf0a (user=root command=ping ya.ru connection=172.17.0.2:38643->123.45.67.89:1025 type=connect)
Они содержат id контейнера, имя пользователя и команду, в результате которой было инициировано сетевое соединение.
Заключение
Sysdig Falco — инструмент интересный и перспективный. Он обладает теми же преимуществами, что и Sysdig: гибкость, удобный синтаксис правил, человекопонятная форма выводов. С его помощью можно получать много ценной информации о работе системы, которую невозможно получить с помощью других инструментов.
Если вы уже используете Falco на практике, приглашаем поделиться опытом в комментариях.
В заключение приводим подборку полезных ссылок для желающих узнать больше:
- https://github.com/draios/falco — официальный репозиторий Falco на GitHub;
- https://github.com/draios/falco/wiki — официальная документация Falco;
- https://sysdig.com/blog/tag/falco/ — серия статей о Falco в блоге компании Draios;
- https://www.youtube.com/watch?v=flcu2Mz9bpo — обзорная лекция о Sysdig Falco.
Если вы по тем или иным причинам не можете оставлять комментарии здесь — добро пожаловать в наш корпоративный блог.