Sysdig Falco

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 на практике, приглашаем поделиться опытом в комментариях.

В заключение приводим подборку полезных ссылок для желающих узнать больше:


Если вы по тем или иным причинам не можете оставлять комментарии здесь — добро пожаловать в наш корпоративный блог.
Поделиться с друзьями
-->

Комментарии (2)


  1. iscsi
    06.09.2016 14:12
    +1

    Да ладно?

    С его помощью можно получать много ценной информации о работе системы, которую невозможно получить с помощью других инструментов.


    Парсвер подвёл — тогда вот ссылка на наглядную картину «углов тёмной комнаты»
    http://www.brendangregg.com/Perf/linux_observability_tools.png


  1. AndreiYemelianov
    06.09.2016 15:08
    +1

    Я эту картинку прекрасно знаю. Более того, мы в одной из предыдущих публикаций её уже использовали.
    Если говорит о Sysdig, то он собирает информацию абсолютно обо всём и с его помощью можно сделать то, для чего в других условиях потребовалось бы несколько инструментов. Он сразу показывает то, что с помощью других инструментов нужно ещё «нарыть».
    А ещё он отличается гибкостью и низким порогом вхождения (синтаксис тех же правил и фильтров очень прост).

    Что касается Falco, то он умеет гораздо больше, чем другие инструменты для аудита безопасности, а ещё даёт гораздо более подробную и человекопонятную информацию.