
¡Alertas distribuidas para las masas!
Securitybot es una implementación de código abierto de un chatbot de alertas distribuidas, como se describe en la publicación del blog de Ryan Huber. Las alertas distribuidas mejoran la eficiencia de monitoreo de tu equipo de seguridad y pueden ayudarte a detectar incidentes de seguridad más rápido y de manera más eficiente. Hemos intentado eliminar todos los Dropbox-ismos de este código para que la configuración de tu propia instancia sea bastante sencilla. Debería ser relativamente fácil instalar los requisitos listados en un contenedor virtualenv/Docker y simplemente dejar que el bot haga lo suyo. También proporcionamos un frontend simple para explorar la base de datos, recibir llamadas API y crear alertas personalizadas para que el bot se comunique con las personas según se desee.
Esta guía te lleva a través de la configuración de una instancia de Securitybot lo más rápido posible, sin lujos.
La conectaremos a Slack, SQL y Duo.
Una vez terminado, tendremos un archivo que se parece a main.py.
Necesitarás una base de datos llamada securitybot en algún servidor MySQL en algún lugar.
Hemos proporcionado una función llamada init_sql ubicada en securitybot/sql.py que inicializará SQL.
Actualmente está configurada para usar el host localhost con el usuario root y sin contraseña.
Necesitarás cambiar esto porque, por supuesto, así no está configurada tu base de datos.
Necesitarás un token para poder integrarte con Slack.
Lo mejor sería crear un usuario bot y usar ese token para Securitybot.
También querrás configurar un canal al cual el bot reportará cuando los usuarios especifiquen que no han realizado una acción.
Encuentra el ID único de ese canal (se verá similar a C123456) y asegúrate de invitar al usuario bot a ese canal, de lo contrario no podrá enviar mensajes.
Para Duo, querrás crear una instancia de Auth API, ponerle un nombre ingenioso y mantener un registro de la clave de integración, la clave secreta y el URI del endpoint de la API de autenticación.
Echa un vistazo al main.py proporcionado en el directorio raíz para ver un ejemplo de cómo usar todo esto.
Reemplaza todas las variables globales con lo que encontraste arriba.
Si todo lo siguiente se generó correctamente, Securitybot debería estar funcionando.
Para probarlo, envía un mensaje al usuario bot al que está asignado y di hi.
Para probar el proceso de manejar una alerta, envía test para probar el bot.
Securitybot fue diseñado para ser lo más modular posible. Esto significa que es posible intercambiar fácilmente sistemas de chat, proveedores de 2FA y fuentes de datos de alertas. El único sistema que está estrechamente integrado con el bot es SQL, pero agregar soporte para otras bases de datos no debería ser difícil. Tener una base de datos permite que las alertas sean persistentes y significa que el bot no pierde (demasiado) estado si hay alguna falla transitoria.
El bot en sí realiza un pequeño conjunto de funciones:
La mensajería, 2FA y la gestión de alertas son proporcionadas por módulos configurables y se agregan al bot durante la inicialización.
El bot maneja los mensajes entrantes como comandos.
El análisis y manejo de comandos se realiza en la clase Securitybot y los comandos en sí se proporcionan en dos lugares.
Las funciones para los comandos están definidas en commands.py y su estructura está definida en commands.yaml en el directorio config/.
Securitybot está diseñado para ser compatible con una amplia variedad de sistemas de mensajería.
Actualmente proporcionamos enlaces para Slack, pero siéntete libre de contribuir con cualquier otro complemento, como para Gitter o Zulip, al proyecto original.
La mensajería es posible gracias a securitybot/chat/chat.py, que proporciona un pequeño número de funciones para consultar usuarios en un grupo de mensajería, enviar mensajes a esos usuarios y enviar mensajes a un canal/sala específico.
Para agregar enlaces para un nuevo sistema de mensajería, crea una subclase de Chat.
El soporte para 2FA es proporcionado por auth/auth.py, que envuelve la 2FA asíncrona en algunas funciones que permiten verificar la capacidad de 2FA, iniciar una sesión de 2FA y consultar el estado de la sesión de 2FA.
Proporcionamos soporte para Duo Push a través de la Duo Auth API, pero agregar soporte para un producto diferente o alguna solución interna de 2FA es tan fácil como crear una subclase de Auth.
La gestión de tareas es proporcionada por tasker/tasker.py y la clase Tasker.
Dado que las alertas se registran en una base de datos SQL, el Tasker proporcionado es SQLTasker.
Esto proporciona soporte para obtener nuevas tareas y actualizarlas mediante objetos Task individuales.
Las listas negras son manejadas por la base de datos SQL, proporcionadas en blacklist/blacklist.py y la subclase blacklist/sql_blacklist.py.
El objeto User proporciona soporte para manejar el estado del usuario.
Seguimos el rastro de cualquier información que un sistema de mensajería nos dé, pero en realidad solo usamos el ID único y el nombre de usuario de un usuario para contactarlo.
Las alertas se identifican de manera única mediante un hash SHA-256 que proviene de algún hash del evento que las generó. Suponemos que un hash SHA-256 es suficientemente aleatorio para que no haya colisiones. Si encuentras una colisión SHA-256, por favor contacta a alguien en tu universidad más cercana y disfruta de la fama y fortuna que te traerá.
Por favor, pregúntanos cosas
Los contribuyentes deben cumplir con el Acuerdo de Licencia de Colaborador de Dropbox.
Copyright 2016 Dropbox, Inc.
Licenciado bajo la Licencia Apache, Versión 2.0 (la "Licencia"); no puedes usar este archivo excepto en cumplimiento con la Licencia. Puedes obtener una copia de la Licencia en
http://www.apache.org/licenses/LICENSE-2.0
A menos que lo exija la ley aplicable o se acuerde por escrito, el software distribuido bajo la Licencia se distribuye "TAL CUAL", SIN GARANTÍAS NI CONDICIONES DE NINGÚN TIPO, ya sean expresas o implícitas. Consulta la Licencia para ver los permisos y limitaciones específicos que rigen el software.