CrowdSec 1.2: изменения, дополнения, улучшения
Привет, Хабр! Нам приходилось сталкиваться с мнением, что разработка — скучное занятие: cиди себе, копируй строчки кода с «Гитхаба» да компилируй готовое приложение. Но мы работаем по-другому: в каждую новую версию мы добавляем реально интересные и полезные фичи, которые разрабатываем сами. При создании CrowdSec 1.2 мы уделили много внимания плагинам уведомлений, добавили новые баунсеры и полностью переработали механизм консенсуса. Но обо всём по порядку.
Плагины уведомлений
CrowdSec выявляет множество событий и сообщает о них администратору. Но мы решили, что этого недостаточно. Да и вообще не совсем правильно, когда все алёрты идут к админу, ведь он иногда должен спать и есть. Тем более что есть множество замечательных систем и сервисов, заточенных на сбор и обработку самых разных уведомлений.
В связи с этим обратите внимание на новую функцию CrowdSec: теперь система может уведомлять сторонние службы о событии или принятом решении. Конкретный вариант поведения настраивается на уровне профиля.
В версии 1.2 появилась встроенная поддержка Splunk, Elasticsearch и Slack, а общий модуль HTTP push позволяет взаимодействовать практически с любым сервисом, который предоставляет HTTP-эндпоинт.
Таким образом, вы можете дополнить существующую экосистему приложений безопасности бесценными функциями обнаружения CrowdSec. Например, оповещения и решения могут отправляться непосредственно в каналы Slack, а в качестве более продвинутого решения можно направить эту информацию в Splunk или даже в базу Elasticsearch. Информация о кибервоздействиях и принятых системой решениях позволит командам SecOps быстро обнаруживать атаки и реагировать на них.
Пример оповещения Crowdsec о принятом решении. Источник здесь и далее: CrowdSec
Разрабатывая функциональность плагинов оповещений, мы хотели обеспечить сообществу наших пользователей возможность легко создавать плагины уведомлений без навязывания конкретных языков или протоколов.
Добиться этой цели нам позволило использование плагинов Go и высокопроизводительного open-source-протокола запросов-ответов gRPC.
Благодаря этому выбору пользовательские плагины уведомлений можно подготовить вне экосистемы CrowdSec, причём необязательно писать их на Golang. Наши плагины уведомлений используют шаблоны Go в сочетании со Sprig. Это даёт обширные возможности для преобразования и форматирования событий и оповещений.
И ещё: мы продолжаем активно работать над развитием этих функций, так что следите за новыми итерациями и не стесняйтесь делиться своими отзывами и сообщать нам о своих потребностях. Для нас важно знать мнение наших пользователей.
Чтобы начать знакомство с плагинами оповещений, изучите документацию.
Новые баунсеры
В версии CrowdSec 1.2 появились новые баунсеры Cloudflare и Nginx. Они доступны в виде пакетов в нашем репозитории.
Баунсер Cloudflare: — синхронизирует решения, принимаемые CrowdSec, с брандмауэром CloudFlare; — управляет настройками для нескольких пользователей, нескольких учётных записей, нескольких зон; — поддерживает решения по IP, стране и AS.
Баунсер опрашивает CrowdSec Local API на предмет новых решений, а затем выполняет вызовы Cloudflare API для обновления списков IP-адресов и правил брандмауэра в зависимости от принятого решения. Подробности — в документации.
Баунсер Nginx использует API nginx lua, а именно access_by_lua_file. Новые/неизвестные IP проверяются с помощью crowdsec API, и если запрос должен быть заблокирован, пользователю возвращается HTTP 403.
Внутри баунсера используется crowdsec lua lib. Подробности — опять-таки в документации.
Консенсус v. 2
Эффективность работы CrowdSec во многом строится на использовании глобальной базы данных репутации. Но у всех баз репутации IP-адресов есть проблема: они страдают от ложных срабатываний и допускают возможность «отравления», когда из-за злонамеренных действий в базу попадают легитимные адреса. Это делает базы репутации менее надёжными, а то и вовсе бесполезными.
Понимая эту проблему, мы в CrowdSec поставили перед собой задачу создать решение, которое будет полностью надёжным, не допуская ложных срабатываний и возможности отравления. Первым вариантом решения стало добавление в базу репутации только IP-адресов, собранных из наших ханипотов. Только так мы могли быть уверены в надёжности информации.
Вступление в новый консенсус
Уже тогда было понятно, что одних ханипотов недостаточно, особенно с учётом того, что сообщество наших пользователей делится сведениями о тысячах вредоносных IP, с которых производятся атаки. Игнорировать эти ценные сведения мы не могли, поэтому разработали систему репутации источников. С её помощью мы получаем некоторые гарантии надёжности собранных сообществом сигналов. Вот как это работает.
Каждый пользователь или «наблюдатель» получает рейтинг доверия или репутацию, основанную на различных критериях, например: — регулярность участия наблюдателя в обмене сигналами или IP-адресами с CrowdSec; — последовательность передаваемой информации в сравнении с данными других пользователей и консолидированной статистикой CrowdSec; — корреляция общих данных с нашими ханипотами CrowdSec и другими наблюдателями с высокой репутацией; — перекрёстная проверка с помощью сторонних сервисов: мы считаем дополнение базы консенсуса информацией из других источников хорошей практикой, поскольку это позволяет взглянуть на мир шире.
Наконец, мы также принимаем во внимание номера AS (автономных систем), связанные с IP. Некоторые из диапазонов адресов уже хорошо известны как источник постоянного агрессивного поведения.
Просмотр сведений об IP-адресе в нашей новой веб-консоли
CrowdSec полагается исключительно на сигналы пользователей с высокой репутацией, чтобы убедиться, что база IP не содержит ложных срабатываний и отравленных IP. Цель состоит в том, чтобы резко повысить стоимость и сложность участия недоброжелательного пользователя в консенсусе и сделать нашу базу данных надёжной.
Мы очень строго относимся к тому, какие IP мы распространяем среди сообщества. Например, из 700 000+ IP-адресов в нашей базе данных только 2% попадут в чёрный список сообщества. Качество данных — наше всё!
Сведения о действиях вредоносного IP-адреса в нашей новой веб-консоли
Важное о консенсусе
1. Консенсус — ключ к нашему общему успеху. Это всего лишь вторая итерация, а дальше будет больше. Наша конечная цель — поделиться с сообществом сведениями о большей части IP, о которых нам сообщают, с достаточной степенью надёжности.
2. Алгоритмы консенсуса должны быть открытыми.Мы много обсуждали этот вопрос внутри компании и, если не углубляться в детали, мы, скорее всего, сделаем это. Однако наша цель — двигаться очень быстро и быть чрезвычайно гибкими. Это не всегда соответствует требованиям к качеству открытого кода. Потерпите ещё немного — скоро всё будет.
Мы постоянно пишем код, тестируем его, исправляем, улучшаем и находим правильный баланс. Когда эта работа пройдёт испытание временем, мы выложим исходники в общий доступ, чтобы вы могли его комментировать, адаптировать, продвигать.
Если вы обладаете опытом в этой области и хотите принять участие в процессе до того, как мы откроем исходный код, обращайтесь к нам, мы будем рады узнать о вашем опыте и поделиться с вами деталями внутреннего устройства текущей версии консенсуса. Пишите нам на нашем сайте, GitHub или канале на Gitter.
О чём мы не рассказали
В CrowdSec 1.2 появилась поддержка новой веб-консоли. Красивые скриншоты со сведениями о вредоносном IP-адресе и его поведении сделаны именно в ней. Консоль уже перешла в стадию публичного бета-тестирования, и вы уже можете попробовать её в деле. Сделайте это скорее, чтобы не ограничивать себя командной строкой cscli.