Securitybot 是一个开源实现的分布式告警聊天机器人,正如 Ryan Huber 在博客文章中所描述的那样。 分布式告警可提高安全团队的监控效率,并帮助您更快、更高效地发现安全事件。 我们已尝试从代码中移除所有 Dropbox 特有的内容,以便您能相对轻松地设置自己的实例。 在 virtualenv/Docker 容器中安装所列依赖项并让机器人正常运行,应该相对简单。 我们还提供了一个简单的前端,用于浏览数据库、接收 API 调用以及创建自定义告警,以便机器人按需联系相关人员。
本指南将引导您尽可能快速、简洁地设置一个 Securitybot 实例。
我们将把它连接到 Slack、SQL 和 Duo。
完成后,我们将得到一个类似 main.py 的文件。
您需要某个 MySQL 服务器上名为 securitybot 的数据库。
我们提供了一个位于 securitybot/sql.py 中的函数 init_sql,用于初始化 SQL。
目前它默认使用主机 localhost、用户 root 且无密码。
您需要修改这些设置,因为显然您的数据库并非如此配置。
您需要一个令牌才能与 Slack 集成。
最佳做法是创建一个机器人用户并将该令牌用于 Securitybot。
您还需要设置一个频道,用户声明未执行操作时机器人将在此频道报告。
找到该频道的唯一 ID(形式类似 C123456),并确保将机器人用户邀请到该频道,否则它将无法发送消息。
对于 Duo,您需要创建一个 Auth API 实例,为其取一个合适的名称,并记录集成密钥、秘密密钥和 Auth API 端点 URI。
请查看根目录下提供的 main.py 文件,了解如何使用所有这些配置。
将所有全局变量替换为您在上述步骤中获取的内容。
如果以下所有步骤均成功生成,Securitybot 应已启动并运行。
要进行测试,请向其所分配的机器人用户发送 hi 消息。
要测试处理告警的流程,请向测试机器人发送 test 消息。
Securitybot 设计为尽可能模块化。 这意味着可以轻松更换聊天系统、双因素认证(2FA)提供商以及告警数据源。 唯一与机器人紧密集成的系统是 SQL,但添加对其他数据库的支持应该不太困难。 拥有数据库可使告警持久化,即使发生暂时性故障,机器人也不会丢失(太多)状态。
机器人本身执行一小部分功能:
消息传递、双因素认证和告警管理由可配置模块提供,并在初始化时添加到机器人中。
机器人将传入的消息作为命令处理。
命令解析和处理在 Securitybot 类中完成,命令本身在两个位置提供。
命令的函数定义在 commands.py 中,其结构定义在 config/ 目录下的 commands.yaml 中。
Securitybot 设计为与多种消息系统兼容。
我们目前提供了 Slack 的绑定,但欢迎您将其他插件(如 Gitter 或 Zulip)贡献到上游仓库。
消息传递通过 securitybot/chat/chat.py 实现,该文件提供了一小组函数,用于查询消息组中的用户、向这些用户发送消息以及向特定频道/房间发送消息。
要为新的消息系统添加绑定,请继承 Chat 类。
双因素认证支持由 auth/auth.py 提供,它将异步双因素认证封装在几个函数中,用于检查双因素认证能力、启动双因素认证会话以及轮询双因素认证会话的状态。
我们通过 Duo Auth API 提供对 Duo Push 的支持,但添加对不同产品或内部双因素认证解决方案的支持,只需创建 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 贡献者许可协议。
版权所有 2016 Dropbox, Inc.
根据 Apache 许可证 2.0 版(“许可证”)获得许可; 除非遵守本许可证,否则您不得使用此文件。 您可以在以下位置获取许可证副本:
http://www.apache.org/licenses/LICENSE-2.0
除非适用法律要求或书面同意,否则根据本许可证分发的软件均按“现状”分发, 不附带任何明示或暗示的担保或条件。 请参阅许可证以了解管理权限和限制的特定语言。