
Verteilte Alarmierung für die Massen!
Securitybot ist eine Open-Source-Implementierung eines verteilten Alerting-Chat-Bots, wie in Ryan Hubers Blog-Beitrag beschrieben. Verteiltes Alerting verbessert die Überwachungseffizienz Ihres Sicherheitsteams und kann Ihnen helfen, Sicherheitsvorfälle schneller und effizienter zu erkennen. Wir haben versucht, alle Dropbox-Ismen aus diesem Code zu entfernen, sodass das Einrichten Ihrer eigenen Instanz relativ schmerzlos sein sollte. Es sollte relativ einfach sein, die aufgeführten Anforderungen in einem virtualenv/Docker-Container zu installieren und den Bot einfach seine Arbeit machen zu lassen. Wir bieten auch ein einfaches Frontend, um durch die Datenbank zu stöbern, API-Aufrufe zu empfangen und benutzerdefinierte Alarme zu erstellen, damit der Bot bei Bedarf Personen benachrichtigen kann.
Diese Anleitung führt durch das Einrichten einer Securitybot-Instanz so schnell wie möglich ohne Schnörkel.
Wir werden es mit Slack, SQL und Duo verbinden.
Wenn wir fertig sind, haben wir eine Datei, die ungefähr so aussieht wie main.py.
Sie benötigen eine Datenbank namens securitybot auf einem MySQL-Server irgendwo.
Wir haben eine Funktion namens init_sql in securitybot/sql.py bereitgestellt, die SQL initialisiert.
Derzeit ist es so eingerichtet, dass es den Host localhost mit Benutzer root und ohne Passwort verwendet.
Sie müssen dies ändern, weil Ihre Datenbank natürlich nicht so eingerichtet ist.
Sie benötigen ein Token, um sich in Slack integrieren zu können.
Am besten erstellen Sie einen Bot-Benutzer und verwenden dieses Token für Securitybot.
Sie möchten auch einen Kanal einrichten, an den der Bot berichtet, wenn Benutzer angeben, dass sie keine Aktion durchgeführt haben.
Finden Sie die eindeutige ID für diesen Kanal (sie sieht ähnlich aus wie C123456) und laden Sie den Bot-Benutzer unbedingt in diesen Kanal ein, sonst kann er keine Nachrichten senden.
Für Duo sollten Sie eine Auth API-Instanz erstellen, ihr einen klugen Namen geben und sich den Integrationsschlüssel, den geheimen Schlüssel und den Endpunkt-URI der Auth API merken.
Schauen Sie sich die bereitgestellte main.py im Stammverzeichnis an, um ein Beispiel für die Verwendung aller dieser Komponenten zu sehen.
Ersetzen Sie alle globalen Variablen durch das, was Sie oben gefunden haben.
Wenn alles Folgende erfolgreich generiert wurde, sollte Securitybot betriebsbereit sein.
Um es zu testen, senden Sie dem zugewiesenen Bot-Benutzer eine Nachricht mit hi.
Um den Prozess der Behandlung eines Alarms zu testen, senden Sie test an den Bot.
Securitybot wurde so modular wie möglich gestaltet. Das bedeutet, dass es möglich ist, Chat-Systeme, 2FA-Anbieter und Alarmdatenquellen einfach auszutauschen. Das einzige System, das eng mit dem Bot integriert ist, ist SQL, aber die Unterstützung für andere Datenbanken hinzuzufügen sollte nicht schwierig sein. Eine Datenbank ermöglicht es, dass Alarme persistent sind, und bedeutet, dass der Bot bei vorübergehenden Fehlern nicht (allzu viel) Zustand verliert.
Der Bot selbst führt eine kleine Reihe von Funktionen aus:
Messaging, 2FA und Alarmverwaltung werden durch konfigurierbare Module bereitgestellt und bei der Initialisierung zum Bot hinzugefügt.
Der Bot behandelt eingehende Nachrichten als Befehle.
Das Parsen und Verarbeiten von Befehlen erfolgt in der Securitybot-Klasse, und die Befehle selbst werden an zwei Stellen bereitgestellt.
Die Funktionen für die Befehle sind in commands.py definiert und ihre Struktur ist in commands.yaml im config/-Verzeichnis definiert.
Securitybot ist so konzipiert, dass es mit einer Vielzahl von Messaging-Systemen kompatibel ist.
Wir bieten derzeit Bindungen für Slack an, aber Sie können gerne andere Plugins, wie für Gitter oder Zulip, beisteuern.
Messaging wird durch securitybot/chat/chat.py ermöglicht, das eine kleine Anzahl von Funktionen zum Abfragen von Benutzern in einer Messaging-Gruppe, zum Schreiben an diese Benutzer und zum Senden von Nachrichten an einen bestimmten Kanal/Raum bereitstellt.
Um Bindungen für ein neues Messaging-System hinzuzufügen, erstellen Sie eine Unterklasse von Chat.
Die 2FA-Unterstützung wird durch auth/auth.py bereitgestellt, das asynchrone 2FA in ein paar Funktionen kapselt, die die Überprüfung der 2FA-Fähigkeit, das Starten einer 2FA-Sitzung und das Abfragen des Status der 2FA-Sitzung ermöglichen.
Wir bieten Unterstützung für Duo Push über die Duo Auth API, aber die Unterstützung für ein anderes Produkt oder eine interne 2FA-Lösung hinzuzufügen ist so einfach wie das Erstellen einer Unterklasse von Auth.
Die Aufgabenverwaltung wird durch tasker/tasker.py und die Tasker-Klasse bereitgestellt.
Da Alarme in einer SQL-Datenbank protokolliert werden, ist der bereitgestellte Tasker SQLTasker.
Dies bietet Unterstützung zum Abrufen neuer Aufgaben und deren Aktualisierung über einzelne Task-Objekte.
Blacklists werden von der SQL-Datenbank verwaltet, bereitgestellt in blacklist/blacklist.py und der Unterklasse blacklist/sql_blacklist.py.
Das User-Objekt bietet Unterstützung für die Verwaltung des Benutzerzustands.
Wir verfolgen alle Informationen, die uns ein Messaging-System gibt, verwenden aber eigentlich nur die eindeutige ID und den Benutzernamen eines Benutzers, um ihn zu kontaktieren.
Alarme werden eindeutig durch einen SHA-256-Hash identifiziert, der von einem Hash des Ereignisses, das sie generiert hat, stammt. Wir gehen davon aus, dass ein SHA-256-Hash ausreichend zufällig ist, um Kollisionen zu vermeiden. Wenn Sie auf eine SHA-256-Kollision stoßen, wenden Sie sich bitte an jemanden an Ihrer nächsten Universität und genießen Sie den Ruhm und das Glück, das es Ihnen bringt.
Stellen Sie uns gerne Fragen
Mitwirkende müssen sich an die Dropbox Contributor License Agreement halten.
Copyright 2016 Dropbox, Inc.
Lizenziert unter der Apache License, Version 2.0 (der "Lizenz"); Sie dürfen diese Datei nur in Übereinstimmung mit der Lizenz verwenden. Eine Kopie der Lizenz erhalten Sie unter
http://www.apache.org/licenses/LICENSE-2.0
Sofern nicht durch geltendes Recht vorgeschrieben oder schriftlich vereinbart, wird die unter der Lizenz verbreitete Software ohne jegliche Garantie verteilt, OHNE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GARANTIEN ODER BEDINGUNGEN. Die Lizenz enthält die vollständigen Bestimmungen für die Erlaubnisse und Einschränkungen unter der Lizenz.