Привет, Хабр! Нам приходилось сталкиваться с мнением, что разработка — скучное занятие: cиди себе, копируй строчки кода с «Гитхаба» да компилируй готовое приложение. Но мы работаем по-другому: в каждую новую версию мы добавляем реально интересные и полезные фичи, которые разрабатываем сами. При создании CrowdSec 1.2 мы уделили много внимания плагинам уведомлений, добавили новые баунсеры и полностью переработали механизм консенсуса. Но обо всём по порядку.
Плагины уведомлений
CrowdSec выявляет множество событий и сообщает о них администратору. Но мы решили, что этого недостаточно. Да и вообще не совсем правильно, когда все алёрты идут к админу, ведь он иногда должен спать и есть. Тем более что есть множество замечательных систем и сервисов, заточенных на сбор и обработку самых разных уведомлений.
В связи с этим обратите внимание на новую функцию CrowdSec: теперь система может уведомлять сторонние службы о событии или принятом решении. Конкретный вариант поведения настраивается на уровне профиля.
В версии 1.2 появилась встроенная поддержка Splunk, Elasticsearch и Slack, а общий модуль HTTP push позволяет взаимодействовать практически с любым сервисом, который предоставляет HTTP-эндпоинт.
Таким образом, вы можете дополнить существующую экосистему приложений безопасности бесценными функциями обнаружения CrowdSec. Например, оповещения и решения могут отправляться непосредственно в каналы Slack, а в качестве более продвинутого решения можно направить эту информацию в Splunk или даже в базу Elasticsearch. Информация о кибервоздействиях и принятых системой решениях позволит командам SecOps быстро обнаруживать атаки и реагировать на них.
Разрабатывая функциональность плагинов оповещений, мы хотели обеспечить сообществу наших пользователей возможность легко создавать плагины уведомлений без навязывания конкретных языков или протоколов.
Добиться этой цели нам позволило использование плагинов 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. Некоторые из диапазонов адресов уже хорошо известны как источник постоянного агрессивного поведения.
CrowdSec полагается исключительно на сигналы пользователей с высокой репутацией, чтобы убедиться, что база IP не содержит ложных срабатываний и отравленных IP. Цель состоит в том, чтобы резко повысить стоимость и сложность участия недоброжелательного пользователя в консенсусе и сделать нашу базу данных надёжной.
Мы очень строго относимся к тому, какие IP мы распространяем среди сообщества. Например, из 700 000+ IP-адресов в нашей базе данных только 2% попадут в чёрный список сообщества. Качество данных — наше всё!
Важное о консенсусе
1. Консенсус — ключ к нашему общему успеху. Это всего лишь вторая итерация, а дальше будет больше. Наша конечная цель — поделиться с сообществом сведениями о большей части IP, о которых нам сообщают, с достаточной степенью надёжности.
2. Алгоритмы консенсуса должны быть открытыми.Мы много обсуждали этот вопрос внутри компании и, если не углубляться в детали, мы, скорее всего, сделаем это. Однако наша цель — двигаться очень быстро и быть чрезвычайно гибкими. Это не всегда соответствует требованиям к качеству открытого кода. Потерпите ещё немного — скоро всё будет.
Мы постоянно пишем код, тестируем его, исправляем, улучшаем и находим правильный баланс. Когда эта работа пройдёт испытание временем, мы выложим исходники в общий доступ, чтобы вы могли его комментировать, адаптировать, продвигать.
Если вы обладаете опытом в этой области и хотите принять участие в процессе до того, как мы откроем исходный код, обращайтесь к нам, мы будем рады узнать о вашем опыте и поделиться с вами деталями внутреннего устройства текущей версии консенсуса. Пишите нам на нашем сайте, GitHub или канале на Gitter.
О чём мы не рассказали
В CrowdSec 1.2 появилась поддержка новой веб-консоли. Красивые скриншоты со сведениями о вредоносном IP-адресе и его поведении сделаны именно в ней. Консоль уже перешла в стадию публичного бета-тестирования, и вы уже можете попробовать её в деле. Сделайте это скорее, чтобы не ограничивать себя командной строкой cscli.