
Alertas distribuídos para as massas!
Securitybot é uma implementação de código aberto de um bot de chat de alerta distribuído, conforme descrito no post do blog de Ryan Huber. O alerta distribuído melhora a eficiência de monitoramento da sua equipe de segurança e pode ajudar a detectar incidentes de segurança mais rapidamente e de forma mais eficiente. Tentamos remover todas as especificidades do Dropbox deste código para que configurar sua própria instância seja relativamente indolor. Deve ser relativamente fácil instalar os requisitos listados em um virtualenv/contêiner Docker e simplesmente deixar o bot fazer sua função. Também fornecemos um front-end simples para navegar pelo banco de dados, receber chamadas de API e criar alertas personalizados para o bot entrar em contato com as pessoas conforme desejado.
Este guia mostra como configurar uma instância do Securitybot o mais rápido possível, sem frescuras.
Vamos conectá-lo ao Slack, SQL e Duo.
Quando terminarmos, teremos um arquivo que se parece com main.py.
Você precisará de um banco de dados chamado securitybot em algum servidor MySQL.
Fornecemos uma função chamada init_sql localizada em securitybot/sql.py que inicializará o SQL.
Atualmente, está configurado para usar o host localhost com o usuário root e sem senha.
Você precisará alterar isso porque, obviamente, não é assim que seu banco de dados está configurado.
Você precisará de um token para poder se integrar ao Slack.
O melhor a fazer seria criar um usuário bot e usar esse token para o Securitybot.
Você também vai querer configurar um canal para o qual o bot reportará quando os usuários indicarem que não realizaram uma ação.
Encontre o ID único desse canal (será semelhante a C123456) e certifique-se de convidar o usuário bot para esse canal, caso contrário ele não conseguirá enviar mensagens.
Para o Duo, você vai querer criar uma instância Auth API, dar a ela um nome criativo e manter o controle da chave de integração, chave secreta e URI do endpoint da API de autenticação.
Dê uma olhada no main.py fornecido no diretório raiz para um exemplo de como usar tudo isso.
Substitua todas as variáveis globais pelo que você encontrou acima.
Se tudo acima foi gerado com sucesso, o Securitybot deve estar funcionando.
Para testá-lo, envie uma mensagem para o usuário bot atribuído e diga hi.
Para testar o processo de lidar com um alerta, envie test para testar o bot.
Securitybot foi projetado para ser o mais modular possível. Isso significa que é possível trocar facilmente sistemas de chat, provedores de 2FA e fontes de dados de alerta. O único sistema que está integrado de forma firme com o bot é o SQL, mas adicionar suporte para outros bancos de dados não deve ser difícil. Ter um banco de dados permite que os alertas sejam persistentes e significa que o bot não perde (muito) estado se houver alguma falha transitória.
O bot em si realiza um pequeno conjunto de funções:
Mensagens, 2FA e gerenciamento de alertas são fornecidos por módulos configuráveis e adicionados ao bot na inicialização.
O bot trata mensagens recebidas como comandos.
A análise e o tratamento de comandos são feitos na classe Securitybot, e os próprios comandos são fornecidos em dois lugares.
As funções para os comandos são definidas em commands.py e sua estrutura é definida em commands.yaml no diretório config/.
Securitybot é projetado para ser compatível com uma ampla variedade de sistemas de mensagens.
Atualmente fornecemos bindings para Slack, mas sinta-se à vontade para contribuir com outros plugins, como para Gitter ou Zulip, upstream.
As mensagens são possíveis graças a securitybot/chat/chat.py, que fornece um pequeno número de funções para consultar usuários em um grupo de mensagens, enviar mensagens para esses usuários e enviar mensagens para um canal/sala específico.
Para adicionar bindings para um novo sistema de mensagens, crie uma subclasse de Chat.
O suporte a 2FA é fornecido por auth/auth.py, que envolve 2FA assíncrona em algumas funções que permitem verificar a capacidade de 2FA, iniciar uma sessão de 2FA e consultar o estado da sessão de 2FA.
Fornecemos suporte para Duo Push através da Duo Auth API, mas adicionar suporte para um produto diferente ou alguma solução interna de 2FA é tão fácil quanto criar uma subclasse de Auth.
O gerenciamento de tarefas é fornecido por tasker/tasker.py e pela classe Tasker.
Como os alertas são registrados em um banco de dados SQL, o Tasker fornecido é SQLTasker.
Isso fornece suporte para obter novas tarefas e atualizá-las através de objetos Task individuais.
As listas negras são gerenciadas pelo banco de dados SQL, fornecidas em blacklist/blacklist.py e pela subclasse blacklist/sql_blacklist.py.
O objeto User fornece suporte para manipular o estado do usuário.
Mantemos registro de qualquer informação que um sistema de mensagens nos forneça, mas na prática usamos apenas o ID único e o nome de usuário de um usuário para contatá-lo.
Os alertas são identificados de forma única por um hash SHA-256 que vem de algum hash do evento que os gerou. Assumimos que um hash SHA-256 é suficientemente aleatório para não haver colisões. Se você encontrar uma colisão SHA-256, por favor entre em contato com alguém da universidade mais próxima e aproveite a fama e fortuna que isso trará para você.
Por favor, pergunte-nos qualquer coisa
Os contribuidores devem cumprir o Acordo de Licença do Contribuidor do Dropbox.
Copyright 2016 Dropbox, Inc.
Licenciado sob a Licença Apache, Versão 2.0 (a "Licença"); você não pode usar este arquivo, exceto em conformidade com a Licença. Você pode obter uma cópia da Licença em
http://www.apache.org/licenses/LICENSE-2.0
A menos que exigido por lei ou acordado por escrito, o software distribuído sob a Licença é distribuído "COMO ESTÁ", SEM GARANTIAS OU CONDIÇÕES DE QUALQUER TIPO, expressas ou implícitas. Consulte a Licença para obter as permissões específicas que regem e limitações sob a Licença.