Фалько
Falco — это облачный инструмент безопасности во время выполнения для операционных систем Linux. Он предназначен для обнаружения и оповещения о ненормальном поведении и потенциальных угрозах безопасности в режиме реального времени.
По своей сути Falco — это агент мониторинга и обнаружения ядра, который наблюдает за событиями, такими как системные вызовы, на основе пользовательских правил. Falco может улучшить эти события за счет интеграции метаданных из среды выполнения контейнера и Kubernetes. Собранные события можно анализировать за пределами хоста в системах SIEM или озерах данных.
Falco, первоначально созданный Sysdig, представляет собой поэтапный проект Cloud Native Computing Foundation (CNCF), используемый в производстве различными организациями.
Для получения подробной технической информации и информации о киберугрозах, которые может обнаружить Falco, посетите официальный сайт Falco.
Полную информацию о последних обновлениях и изменениях в проекте можно найти в журнале изменений. Кроме того, мы задокументировали процесс выпуска новых версий Falco.
Falco Repo: основа проекта Falco
Это основной репозиторий Falco, содержащий исходный код для сборки двоичного файла Falco. Используя свои библиотеки и файл конфигурации falco.yaml, этот репозиторий формирует основу функциональности Falco. Репозиторий Falco тесно связан со следующими основными репозиториями:
- falcosecurity/libs: Библиотеки Falco являются ключом к ее фундаментальным операциям, составляя большую часть исходного кода двоичного файла Falco и предоставляя такие важные функции, как драйверы ядра.
- falcosecurity/rules: Содержит официальный набор правил для Falco, предоставляющий предварительно определенные правила обнаружения различных угроз безопасности и аномального поведения.
- falcosecurity/плагины: плагины Falco облегчают интеграцию с внешними службами, расширяют возможности Falco за пределы системных вызовов и событий контейнера и предназначены для развития со специализированными функциями в будущих выпусках.
- falcosecurity/falcoctl: утилита командной строки для управления и взаимодействия с Falco.
Для получения дополнительной информации посетите официальный центр проекта Falco: falcosecurity/evolution. Он предоставляет ценную информацию и информацию о репозиториях проекта.
Начало работы с Falco
Внимательно просмотрите и следуйте официальной документации.
Рекомендации и рекомендации для пользователей Falco:
Понимание зависимостей: оцените среду, в которой вы будете запускать Falco, и рассмотрите версии ядра и архитектуру.
Определите цели обнаружения угроз. Четко определите угрозы, которые вы хотите обнаружить, и оцените сильные и слабые стороны Falco.
Учитывайте производительность и стоимость. Оцените затраты на производительность вычислений и согласуйте их с системными администраторами или SRE. Бюджет соответственно.
Выберите подход к сборке и настройке: выберите между сборкой Falco с открытым исходным кодом или созданием собственного конвейера сборки. При необходимости настройте процесс сборки и развертывания, включая использование уникальных тестов или подходов, чтобы обеспечить отказоустойчивое развертывание с быстрыми циклами развертывания.
Интеграция с местами назначения вывода. Интегрируйте Falco с SIEM, системами озера данных или другими предпочтительными местами назначения вывода, чтобы создать надежную основу для всестороннего анализа данных и обеспечить эффективные рабочие процессы реагирования на инциденты.
Демонстрационная среда
Демо-среда предоставляется через файл docker-compose, который можно запустить на хосте docker, который включает в себя falco, falcosidekick, falcosidekick-ui и необходимую базу данных Redis. Для получения дополнительной информации см. раздел docker-compose.
Как внести свой вклад
Дополнительную информацию о том, как внести свой вклад, можно найти в Руководстве по внесению вкладов и Кодексе поведения.
Присоединяйтесь к сообществу
Чтобы принять участие в проекте Falco, посетите репозиторий сообщества, где вы найдете дополнительную информацию и способы участия.
Если у вас есть какие-либо вопросы о Falco или о вкладе, не стесняйтесь сообщить о проблеме или обратиться за помощью к сопровождающим Falco и членам сообщества.
Как связаться?
- Присоединяйтесь к каналу #falco в Kubernetes Slack.
- Присоединяйтесь к списку рассылки Falco.
- Сообщите о проблеме или отправьте запрос на добавление функций.
Приверженность собственной безопасности Falco
Полные отчеты о различных проверках безопасности можно найти здесь.
Кроме того, вы можете обратиться к разделам безопасности falco и libs для получения подробных обновлений рекомендаций и политик безопасности.
Чтобы сообщить об уязвимостях безопасности, следуйте процедуре сообщества, описанной в документации, которую можно найти здесь.
Что будет дальше с Фалько?
Будьте в курсе развивающихся возможностей Falco, изучая дорожную карту Falco, которая дает представление о функциях, которые в настоящее время разрабатываются и запланированы для будущих выпусков.
Лицензия
Falco предоставляется вам по лицензии с открытым исходным кодом Apache 2.0.
Тестирование
Развернуть инструкции по тестированию
Сборка Falco из исходного кода от Falco — это полезный ресурс, позволяющий понять, как собрать Falco из исходного кода. Кроме того, репозиторий falcosecurity/libs предлагает дополнительную ценную информацию о тестировании и отладке базовых библиотек и драйверов ядра Falco.
Вот пример команды cmake
, которая включит все необходимое для всех модульных тестов этого репозитория:
cmake
-DUSE_BUNDLED_DEPS=ON
-DBUILD_LIBSCAP_GVISOR=ON
-DBUILD_BPF=ON
-DBUILD_DRIVER=ON
-DBUILD_FALCO_MODERN_BPF=ON
-DCREATE_TEST_TARGETS=ON
-DBUILD_FALCO_UNIT_TESTS=ON .. ;
Создайте и запустите набор модульных тестов:
nproc= $( grep processor /proc/cpuinfo | tail -n 1 | awk ' {print $3} ' ) ;
make -j $(( $nproc - 1 )) falco_unit_tests ;
# Run the tests
sudo ./unit_tests/falco_unit_tests ;
При желании создайте драйвер по вашему выбору и протестируйте двоичный файл Falco для выполнения ручных тестов.
Наконец, проект Falco перенес свои регрессионные тесты Falco в раздел falcosecurity/testing.
Почему Falco написан на C++, а не на Go или {language}?
Развернуть информацию
- Первые строки кода на базе Falco были написаны некоторое время назад, когда Go еще не имел такого уровня зрелости и принятия, как сегодня.
- Модель выполнения Falco является последовательной и однопоточной из-за требований инструмента к сохранению состояния, поэтому большинство преимуществ среды выполнения Go, связанных с параллелизмом, вообще не будут использоваться.
- Код Falco во многих местах занимается программированием очень низкого уровня (например, некоторые заголовки используются совместно с зондом eBPF и модулем ядра), и мы все знаем, что взаимодействие Go с C возможно, но приносит массу сложностей и компромиссов. .
- В качестве инструмента безопасности, предназначенного для обработки безумно высокой пропускной способности событий в секунду, Falco необходимо повышать производительность на всех «горячих» путях во время выполнения и требует глубокого контроля над распределением памяти, который среда выполнения Go не может обеспечить (также требуется сбор мусора). .
- Хотя Go не соответствовал инженерным требованиям ядра Falco, мы все же думали, что он может быть хорошим кандидатом для написания расширений Falco через систему плагинов. Это основная причина, по которой мы уделили особое внимание и приоритет разработке плагина-sdk-go.
- Go не является обязательным требованием для статически связанных двоичных файлов. Фактически, уже несколько лет мы предоставляем полностью статичные сборки Falco. Единственная проблема заключается в том, что система плагинов не может поддерживаться текущей моделью динамической библиотеки, которая у нас есть.
- Система плагинов была задумана для поддержки нескольких языков, поэтому с нашей стороны поддержание C-совместимой кодовой базы — лучшая стратегия для обеспечения максимальной межъязыковой совместимости.
- В общем, плагины имеют требования/зависимости GLIBC, поскольку они имеют низкоуровневые привязки C, необходимые для динамической загрузки. Потенциальным решением на будущее могла бы стать поддержка статического связывания плагинов во время компиляции и выпуска их в составе двоичного файла Falco. Хотя работа в этом направлении еще не началась, это решит большинство проблем, о которых вы сообщили, а также обеспечит полностью статический двоичный файл. Конечно, это больше не будет совместимо с динамической загрузкой, но это может быть жизнеспособным решением для нашей версии Falco со статической сборкой.
- Безопасность памяти, безусловно, вызывает беспокойство, и мы изо всех сил стараемся поддерживать высокий уровень качества, хотя C++ весьма подвержен ошибкам. Например, мы стараемся использовать интеллектуальные указатели, когда это возможно, мы создаем библиотеки с очистителем адресов в нашей CI, мы запускаем Falco через Valgrind перед каждым выпуском и имеем способы провести стресс-тестирование для обнаружения снижения производительности или странного использования памяти ( например https://github.com/falcosecurity/event-generator). Кроме того, у нас также есть третьи лица, которые время от времени проверяют кодовую базу. Конечно, ничто из этого не обеспечивает идеальную безопасность, но мы стараемся максимизировать наши шансы. С этой точки зрения Go определенно облегчил бы нашу жизнь, однако компромиссы пока не оправдали себя из-за вышеизложенных моментов.
- Кодовая база C++ falcosecurity/libs, лежащая в основе Falco, довольно обширна и сложна. Перенос всего этого кода на другой язык потребует серьезных усилий, требующих много ресурсов разработки и с высокой вероятностью неудачи и регресса. Таким образом, до сих пор наш подход заключался в выборе рефакторинга и полировки кода до тех пор, пока мы не достигнем оптимального уровня стабильности, качества и модульности в этой части кода. Это позволит дальнейшим разработкам быть более плавными и осуществимыми в будущем.
Ресурсы
- Управление
- Нормы поведения
- Рекомендации для сопровождающих
- Список сопровождающих
- Рекомендации по репозиториям
- Список репозиториев
- Список усыновителей
- Установка и работа
- Поиск неисправностей