Всем привет! Ранее мы уже упоминали Falco в одном из своих постов. Сегодня расскажем немного подробнее.



Falco (а точнее Falco Project) – это open source инструмент, который реализует мониторинг поведенческой активности, позволяя выявлять аномальные действия в приложениях. Он выполняет контроль событий на уровне ядра операционной системы и собирает данные о контейнерах, приложениях, хосте и сетевой активности.



Что именно делает Falco?

Инструмент использует системные вызовы для реализации защиты и мониторинга системы:

🍡Разбор используемых системных вызовов Linux на уровне ядра

🍡Проверка потока данных на соответствие заданным правилам

🍡Оповещение в случае срабатывания правила



Что Falco проверяет?

Инструмент использует набор правил по умолчанию для выявления нестандартного поведения, например:

🍡Эскалация привилегий

🍡Изменение namespace с использованием утилиты setns

🍡Чтение/запись в известные директории (например, /etc, /usr/bin и пр)

🍡Выявление сетевых аномалий

🍡Запуск различных shells (sh, bash, csh и пр)

🍡Запуск ssh (ssh, scp и пр)

🍡И пр.



Что такое правила Falco?

Правила – это набор элементов, которые можно проверить на уровне системы. Они задаются в конфигурационном файле, который представляет собой YAML-файл, содержащий 3 типа элементов:

🍡Правила (Rules) – условия, в соответствии с которыми генерируется событие ИБ

🍡Макросы (Macros) – шаблоны условий правил, которые могут повторно использоваться в правилах или других макросах

🍡Lists (Списки) – наборы данных, которые могут быть включены в правила, макросы или другие списки



Пример правила:

- rule: program_accesses_file

desc: track whenever a set of programs opens a file

condition: proc.name in (cat, ls) and evt.type=open

output: a tracked program opened a file (user=%user.name command=%proc.cmdline file=%fd.name)

priority: INFO



Куда отправляются события ИБ от Falco?

Инструмент генерирует набор событий ИБ, которые могут быть направлены в разные источники, такие как:

🍡STDOUT

🍡Файл

🍡Syslog

🍡Сторонняя программа

🍡HTTP/S end point

🍡Клиент, работающий через gRPC API



Информация задается на уровне конфигурационного YAML-файла.



Пример вывода события (stdout):

10:20:05.408091526: Warning Sensitive file opened for reading by non-trusted program (user=root command=cat /etc/shadow file=/etc/shadow)



Дополнительную информацию можно найти в документации и здесь.