
Distributed alerting for the masses!
Securitybot — это реализация распределённого чат-бота для оповещений с открытым исходным кодом, описанного в статье в блоге Райана Хубера. Распределённое оповещение повышает эффективность мониторинга вашей команды безопасности и помогает быстрее и эффективнее выявлять инциденты безопасности. Мы постарались удалить все особенности Dropbox из этого кода, чтобы настройка собственного экземпляра была достаточно простой. Должно быть относительно легко установить перечисленные зависимости в virtualenv/Docker контейнере и просто позволить боту выполнять свою работу. Мы также предоставляем простой интерфейс для просмотра базы данных, приёма API-вызовов и создания пользовательских оповещений, чтобы бот мог связываться с людьми по мере необходимости.
Это руководство поможет быстро настроить экземпляр Securitybot без лишних сложностей.
Мы подключим его к Slack, SQL и Duo.
После завершения у нас будет файл, похожий на main.py.
Вам понадобится база данных с именем securitybot на каком-либо MySQL-сервере.
Мы предоставили функцию init_sql, расположенную в securitybot/sql.py, которая инициализирует SQL.
В настоящее время она настроена на использование хоста localhost с пользователем root и без пароля.
Вам нужно изменить это, потому что, конечно, ваша база данных настроена иначе.
Вам понадобится токен для интеграции со Slack.
Лучше всего создать бота-пользователя и использовать этот токен для Securitybot.
Вам также нужно настроить канал, в который бот будет сообщать, когда пользователи указывают, что они не выполнили действие.
Найдите уникальный ID этого канала (он будет выглядеть примерно как C123456) и обязательно пригласите бота-пользователя в этот канал, иначе он не сможет отправлять сообщения.
Для Duo вам нужно создать экземпляр Auth API, назвать его как-нибудь умно, и запомнить ключ интеграции, секретный ключ и URI конечной точки Auth API.
Посмотрите на предоставленный файл main.py в корневом каталоге, чтобы увидеть пример использования всего этого.
Замените все глобальные переменные на то, что вы получили выше.
Если всё следующее было успешно сгенерировано, Securitybot должен запуститься.
Чтобы протестировать, отправьте сообщение боту-пользователю, к которому он привязан, и скажите hi.
Чтобы протестировать процесс обработки оповещения, отправьте test для тестирования бота.
Securitybot был спроектирован максимально модульным. Это означает, что можно легко заменить системы чата, провайдеров двухфакторной аутентификации и источники данных оповещений. Единственная система, тесно интегрированная с ботом, — это SQL, но добавление поддержки других баз данных не должно быть сложным. Наличие базы данных обеспечивает сохранность оповещений и означает, что бот не теряет (слишком много) состояния в случае временного сбоя.
Сам бот выполняет небольшой набор функций:
Обмен сообщениями, двухфакторная аутентификация и управление оповещениями обеспечиваются настраиваемыми модулями и добавляются в бота при инициализации.
Бот обрабатывает входящие сообщения как команды.
Разбор и обработка команд выполняется в классе Securitybot, а сами команды предоставляются в двух местах.
Функции для команд определены в commands.py, а их структура — в commands.yaml в каталоге config/.
Securitybot спроектирован для совместимости с широким спектром систем обмена сообщениями.
В настоящее время мы предоставляют привязки для Slack, но не стесняйтесь добавлять любые другие плагины, например для Gitter или Zulip, в основной репозиторий.
Обмен сообщениями обеспечивается файлом securitybot/chat/chat.py, который предоставляет небольшое количество функций для запроса пользователей в группе обмена сообщениями, отправки сообщений этим пользователям и отправки сообщений в определённый канал/комнату.
Чтобы добавить привязки для новой системы обмена сообщениями, создайте подкласс Chat.
Поддержка 2FA обеспечивается файлом auth/auth.py, который оборачивает асинхронную 2FA в несколько функций, позволяющих проверять возможность 2FA, запускать сеанс 2FA и опрашивать состояние сеанса 2FA.
Мы предоставляем поддержку Duo Push через Duo Auth API, но добавление поддержки другого продукта или собственного решения 2FA так же просто, как создание подкласса Auth.
Управление задачами обеспечивается файлом tasker/tasker.py и классом Tasker.
Поскольку оповещения регистрируются в SQL-базе данных, предоставленный Tasker — это SQLTasker.
Это обеспечивает поддержку получения новых задач и их обновления через отдельные объекты Task.
Чёрные списки обрабатываются SQL-базой данных, предоставлены в blacklist/blacklist.py и подклассе blacklist/sql_blacklist.py.
Объект User обеспечивает поддержку обработки состояния пользователя.
Мы отслеживаем любую информацию, которую даёт нам система обмена сообщениями, но на самом деле используем только уникальный ID пользователя и имя пользователя для связи с ними.
Оповещения уникально идентифицируются хешем SHA-256, который происходит от хеша события, вызвавшего их. Мы предполагаем, что хеш SHA-256 достаточно случайный, чтобы избежать коллизий. Если вы столкнётесь с коллизией SHA-256, пожалуйста, свяжитесь с кем-нибудь в ближайшем университете и наслаждайтесь славой и богатством, которые это вам принесёт.
Пожалуйста, задавайте нам вопросы
Участники должны соблюдать Лицензионное соглашение участника Dropbox.
Copyright 2016 Dropbox, Inc.
Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.