
Alertes distribuées pour les masses !
Securitybot est une implémentation open-source d’un chatbot d’alerte distribué, comme décrit dans le billet de blog de Ryan Huber. Les alertes distribuées améliorent l’efficacité de la surveillance de votre équipe de sécurité et peuvent vous aider à détecter les incidents de sécurité plus rapidement et plus efficacement. Nous avons essayé de supprimer tous les Dropbox-ismes de ce code afin que la mise en place de votre propre instance soit relativement simple. Il devrait être relativement facile d’installer les dépendances listées dans un conteneur virtualenv/Docker et de laisser le bot faire son travail. Nous fournissons également une interface simple pour parcourir la base de données, recevoir des appels API et créer des alertes personnalisées afin que le bot contacte les personnes souhaitées.
Ce guide explique comment configurer une instance de Securitybot le plus rapidement possible, sans fioritures.
Nous allons la connecter à Slack, SQL et Duo.
Une fois terminé, nous aurons un fichier qui ressemblera à main.py.
Vous aurez besoin d’une base de données nommée securitybot sur un serveur MySQL quelque part.
Nous avons fourni une fonction appelée init_sql située dans securitybot/sql.py qui initialisera SQL.
Actuellement, elle est configurée pour utiliser l’hôte localhost avec l’utilisateur root et aucun mot de passe.
Vous devrez modifier cela car bien sûr, votre base de données n’est pas configurée ainsi.
Vous aurez besoin d’un token pour pouvoir vous intégrer à Slack.
La meilleure chose à faire serait de créer un utilisateur bot et d’utiliser ce token pour Securitybot.
Vous voudrez également configurer un canal sur lequel le bot signalera lorsque les utilisateurs indiqueront qu’ils n’ont pas effectué une action.
Trouvez l’ID unique de ce canal (il ressemblera à C123456) et assurez-vous d’inviter l’utilisateur bot dans ce canal, sinon il ne pourra pas envoyer de messages.
Pour Duo, vous voudrez créer une instance Auth API, la nommer intelligemment, et garder une trace de la clé d’intégration, de la clé secrète et de l’URI du point de terminaison de l’API d’authentification.
Jetez un œil au fichier main.py fourni dans le répertoire racine pour un exemple d’utilisation de tout cela.
Remplacez toutes les variables globales par ce que vous avez trouvé ci-dessus.
Si tout ce qui suit a été généré avec succès, Securitybot devrait être opérationnel.
Pour le tester, envoyez un message à l’utilisateur bot auquel il est assigné et dites hi.
Pour tester le processus de gestion d’une alerte, envoyez test pour tester le bot.
Securitybot a été conçu pour être aussi modulaire que possible. Cela signifie qu’il est possible de changer facilement les systèmes de chat, les fournisseurs 2FA et les sources de données d’alerte. Le seul système fortement intégré au bot est SQL, mais ajouter la prise en charge d’autres bases de données ne devrait pas être difficile. Le fait d’avoir une base de données permet aux alertes d’être persistantes et signifie que le bot ne perd pas (trop) d’état en cas de panne transitoire.
Le bot lui-même exécute un petit ensemble de fonctions :
La messagerie, la 2FA et la gestion des alertes sont fournies par des modules configurables et ajoutées au bot lors de l’initialisation.
Le bot traite les messages entrants comme des commandes.
L’analyse et le traitement des commandes s’effectuent dans la classe Securitybot et les commandes elles-mêmes sont fournies à deux endroits.
Les fonctions des commandes sont définies dans commands.py et leur structure est définie dans commands.yaml sous le répertoire config/.
Securitybot est conçu pour être compatible avec une grande variété de systèmes de messagerie.
Nous fournissons actuellement des liaisons pour Slack, mais n’hésitez pas à contribuer à d’autres plugins, comme pour Gitter ou Zulip, en amont.
La messagerie est rendue possible par securitybot/chat/chat.py qui fournit un petit nombre de fonctions pour interroger les utilisateurs dans un groupe de messagerie, leur envoyer des messages et envoyer des messages à un canal/salle spécifique.
Pour ajouter des liaisons pour un nouveau système de messagerie, sous-classez Chat.
La prise en charge de la 2FA est assurée par auth/auth.py, qui encapsule la 2FA asynchrone dans quelques fonctions permettant de vérifier la capacité 2FA, de démarrer une session 2FA et d’interroger l’état de la session 2FA.
Nous fournissons la prise en charge de Duo Push via l’API Duo Auth, mais ajouter la prise en charge d’un produit différent ou d’une solution 2FA interne est aussi simple que de créer une sous-classe de Auth.
La gestion des tâches est assurée par tasker/tasker.py et la classe Tasker.
Puisque les alertes sont enregistrées dans une base de données SQL, le Tasker fourni est SQLTasker.
Cela permet de récupérer de nouvelles tâches et de les mettre à jour via des objets Task individuels.
Les listes noires sont gérées par la base de données SQL, fournies dans blacklist/blacklist.py et la sous-classe blacklist/sql_blacklist.py.
L’objet User prend en charge la gestion de l’état de l’utilisateur.
Nous gardons une trace de toutes les informations qu’un système de messagerie nous donne, mais nous n’utilisons en réalité que l’ID unique et le nom d’utilisateur d’un utilisateur pour le contacter.
Les alertes sont identifiées de manière unique par un hachage SHA-256 qui provient d’un hachage de l’événement qui les a générées. Nous supposons qu’un hachage SHA-256 est suffisamment aléatoire pour qu’il n’y ait pas de collisions. Si vous rencontrez une collision SHA-256, veuillez contacter quelqu’un dans l’université la plus proche et profitez de la gloire et de la fortune que cela vous apportera.
S’il vous plaît, posez-nous des questions
Les contributeurs doivent se conformer au Contrat de licence du contributeur Dropbox.
Copyright 2016 Dropbox, Inc.
Sous licence Apache License, Version 2.0 (la « License ») ; vous ne pouvez pas utiliser ce fichier sauf en conformité avec la License. Vous pouvez obtenir une copie de la License à l’adresse
http://www.apache.org/licenses/LICENSE-2.0
Sauf si la loi applicable l’exige ou si un accord écrit le prévoit, le logiciel distribué sous la License est distribué « EN L’ÉTAT », SANS GARANTIES NI CONDITIONS D’AUCUNE SORTE, expresses ou implicites. Voir la License pour les autorisations spécifiques et limitations régies par la License.