Привет, Хабр! Нам приходилось сталкиваться с мнением, что разработка — скучное занятие: cиди себе, копируй строчки кода с «Гитхаба» да компилируй готовое приложение. Но мы работаем по-другому: в каждую новую версию мы добавляем реально интересные и полезные фичи, которые разрабатываем сами. При создании CrowdSec 1.2 мы уделили много внимания плагинам уведомлений, добавили новые баунсеры и полностью переработали механизм консенсуса. Но обо всём по порядку. 

Плагины уведомлений

CrowdSec выявляет множество событий и сообщает о них администратору. Но мы решили, что этого недостаточно. Да и вообще не совсем правильно, когда все алёрты идут к админу, ведь он иногда должен спать и есть. Тем более что есть множество замечательных систем и сервисов, заточенных на сбор и обработку самых разных уведомлений. 

В связи с этим обратите внимание на новую функцию CrowdSec: теперь система может уведомлять сторонние службы о событии или принятом решении. Конкретный вариант поведения настраивается на уровне профиля.

В версии 1.2 появилась встроенная поддержка Splunk, Elasticsearch и Slack, а общий модуль HTTP push позволяет взаимодействовать практически с любым сервисом, который предоставляет HTTP-эндпоинт.

Таким образом, вы можете дополнить существующую экосистему приложений безопасности бесценными функциями обнаружения CrowdSec. Например, оповещения и решения могут отправляться непосредственно в каналы Slack, а в качестве более продвинутого решения можно направить эту информацию в Splunk или даже в базу Elasticsearch. Информация о кибервоздействиях и принятых системой решениях позволит командам SecOps быстро обнаруживать атаки и реагировать на них.

Пример оповещения Crowdsec о принятом решении. Источник здесь и далее: CrowdSec
Пример оповещения 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-адресе в нашей новой веб-консоли
Просмотр сведений об IP-адресе в нашей новой веб-консоли

CrowdSec полагается исключительно на сигналы пользователей с высокой репутацией, чтобы убедиться, что база IP не содержит ложных срабатываний и отравленных IP. Цель состоит в том, чтобы резко повысить стоимость и сложность участия недоброжелательного пользователя в консенсусе и сделать нашу базу данных надёжной.

Мы очень строго относимся к тому, какие IP мы распространяем среди сообщества. Например, из 700 000+ IP-адресов в нашей базе данных только 2% попадут в чёрный список сообщества. Качество данных — наше всё!

Сведения о действиях вредоносного IP-адреса в нашей новой веб-консоли
Сведения о действиях вредоносного IP-адреса в нашей новой веб-консоли

Важное о консенсусе

1. Консенсус — ключ к нашему общему успеху. Это всего лишь вторая итерация, а дальше будет больше. Наша конечная цель — поделиться с сообществом сведениями о большей части IP, о которых нам сообщают, с достаточной степенью надёжности.

2. Алгоритмы консенсуса должны быть открытыми.Мы много обсуждали этот вопрос внутри компании и, если не углубляться в детали, мы, скорее всего, сделаем это. Однако наша цель — двигаться очень быстро и быть чрезвычайно гибкими. Это не всегда соответствует требованиям к качеству открытого кода. Потерпите ещё немного — скоро всё будет. 

Мы постоянно пишем код, тестируем его, исправляем, улучшаем и находим правильный баланс. Когда эта работа пройдёт испытание временем, мы выложим исходники в общий доступ, чтобы вы могли его комментировать, адаптировать, продвигать. 

Если вы обладаете опытом в этой области и хотите принять участие в процессе до того, как мы откроем исходный код, обращайтесь к нам, мы будем рады узнать о вашем опыте и поделиться с вами деталями внутреннего устройства текущей версии консенсуса.  Пишите нам на нашем сайте, GitHub или канале на Gitter.

О чём мы не рассказали

В CrowdSec 1.2 появилась поддержка новой веб-консоли. Красивые скриншоты со сведениями о вредоносном IP-адресе и его поведении сделаны именно в ней. Консоль уже перешла в стадию публичного бета-тестирования, и вы уже можете попробовать её в деле. Сделайте это скорее, чтобы не ограничивать себя командной строкой cscli. 

Комментарии (4)


  1. Smashrock
    25.10.2021 18:12

    Пользуюсь и благодарен!! Ещё и панель недавно прикрутили - так вообще шик. Хочется, правда, без лишних заморочек тестировать свои парсеры, но это на будущее. И отправку уведомлений в Телеграм.


    1. CrowdSec Автор
      27.10.2021 12:01

      Cпасибо! Такая функция уже есть:

      Вот конфигурация

      type: http
      
      name: http_default # this must match with the registered plugin in the profile log_level: info # Options include: trace, debug, info, warn, error, off
      
      format: |   {"chat_id": "YOUR_CHAT_ID", "text": "{{- range . -}}   {{- range .Decisions -}} ????☠️ {{.Value}} wird für {{.Duration}} geblockt aufgrund von {{.Scenario}}.   {{end -}}   {{end -}}"}'
      
      url: "https://api.telegram.org/YOUR_BOT_TOKEN/sendMessage" # plugin will make requests to this url. Eg value https://www.example.com/
      
      method: POST # eg either of "POST", "GET", "PUT" and other http verbs is valid value.
      
      headers:     Content-Type: application/json

      Подробнее здесь: https://docs.crowdsec.net/docs/notification_plugins/http


  1. altervision
    27.10.2021 14:27

    Подскажите, у вас сейчас есть возможность выгрузки базы заблокированных IP и подсетей? По сути, требуется только список нежелательных адресов - пост-фактум визиты проверять и помечать "опасные".


  1. SignFinder
    31.10.2021 11:48

    Удачно я наткнулся на эту статью.

    Хотел бы дать свои комментарии (в большей степени конечно это вопросы) после часа использования на тестовом сервере.

    1. Интуитивно было не понятно - что в процессе установки автоматически запустился wizard, нашел ssh\nginx и скачал необходимые коллекции для них.

    2. Oracle Linux 8 определился - но пакетов в yum репозитории для него нет - пришлось руками в файле конфигурации yum поменять ol8 на el8 в путях.

    3. Не понятно - что происходит с поисковыми ботами по умолчанию. Прикрутил новую веб консоль и в ней сразу же появились в алертах Google и Mail.ru - вот сейчас сижу и пытаюсь понять - это шальные атаки с их облаков проскочили или crowdsec потихоньку поисковых ботов пристрелил.

    P.S. В сценарии "http-bad-user-agent" есть список известных bad user-agents и там как минимум есть официальный поисковый бот Mail.ru - "Mail.RU_Bot"

    1. Планируете ли добавлять возможность каких-либо уведомлений из новой веб консоли? Чтобы не на каждом сервере это настраивать, а чтобы сама консоль присылала уведомления по всем добавленным серверам.

    2. Почитал описание конфигураций и коллекций, связанных с web серверами - и не нашел информации - есть ли какой-то механизм борьбы с парсерами веб сайтов в них.