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

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

Что еще почитать по теме

T-Rex 30 марта 2021

Что такое SMTP-протокол и как он устроен?

SMTP (Simple Mail Transfer Protocol) — протокол передачи почты. Он был представлен еще в 1982 году, но не теряет актуальности до сих пор. В статье разбираемся, какие задачи решает протокол и как он ра…
T-Rex 30 марта 2021
Владимир Туров 1 сентября 2020

Дело совершенно секретного iPod

Это был обычный серый день в конце 2005 года. Я сидел на рабочем месте и писал код для следующей версии iPod. Вдруг без стука ворвался директор ПО для iPod, начальник моего начальника, и закрыл дверь.
Владимир Туров 1 сентября 2020
T-Rex 21 августа 2020

TrendForce: цены на SSD упадут

Эксперты DRAMeXchange предсказывают значительное падение цен на оперативную память и твердотельные накопители в ближайшее время. Причина — сокращение спроса на чипы для NAND и DRAM.
T-Rex 21 августа 2020

Новое в блоге

Михаил Фомин 24 июня 2022

Docker Swarm VS Kubernetes — как бизнес выбирает оркестраторы

Рассказываем, для каких задач бизнесу больше подойдет Docker Swarm, а когда следует выбрать Kubernetes.
Михаил Фомин 24 июня 2022
Ульяна Малышева 30 сентября 2022

«Нулевой» локальный диск. Как мы запустили облако только с сетевыми дисками и приручили Ceph

Чем хороши сетевые диски и почему именно Ceph, рассказал директор по развитию ядра облачной платформы Иван Романько.
Ульяна Малышева 30 сентября 2022
Валентин Тимофеев 30 сентября 2022

Как проходит онбординг сотрудников ИТО? Что нужно, чтобы выйти на смену в дата-центр

Рассказываем, как обучаем новых сотрудников, какие задачи и испытания проходят инженеры прежде, чем выйти на свою первую смену.
Валентин Тимофеев 30 сентября 2022
T-Rex 28 сентября 2022

Книги по SQL: что почитать новичкам и специалистам

Собрали 6 книг, которые помогут на старте изучения SQL и при углублении в тему.
T-Rex 28 сентября 2022