团队讨论securitybot时,我会先把用途说清楚:面向组织安全事件的自动告警工具,可将风险通知发送给相关人员。实际做安全分析时,经常会碰到授权边界、证据完整性和误报需要同时控制,所以功能列表并不能代替验证。短测时我会在明确授权的样例或离线靶场中验证,并保留输入边界、证据链、误报率和安全中止机制的结果,方便团队复盘。我的判断是,它更适合具备授权环境和复核能力的安全人员;若眼下没有这类需求,先保留观察即可。
安全机器人
向广大群众发出警报!
Securitybot 是分布式警报聊天机器人的开源实现,如 Ryan Huber 的 [博客文章][slack-blog] 中所述。 分布式警报提高了安全团队的监控效率,并可以帮助您更快、更有效地捕获安全事件。 我们尝试从该代码中删除所有 Dropbox 主义,以便设置您自己的实例应该相当轻松。 在 virtualenv/Docker 容器中安装列出的要求应该相对容易,并且只需让机器人执行其操作即可。 我们还提供了一个简单的前端来深入浏览数据库,接收 API 呼叫,并为机器人创建自定义警报以根据需要联系人们。
部署
本指南将详细介绍如何尽快设置 Securitybot 实例。
我们将其连接到 Slack、SQL 和 Duo。
完成后,我们将得到一个类似于 main.py 的文件。
SQL
您需要在某个 MySQL 服务器上有一个名为 securitybot 的数据库。
我们提供了一个名为 init_sql 的函数,位于 securitybot/sql.py 中,它将初始化 SQL。
目前,它设置为使用主机 localhost 和用户 root 并且没有密码。
您需要更改此设置,因为当然这不是您的数据库的设置方式。
松弛
您需要一个令牌才能与 Slack 集成。
最好的办法是[创建机器人用户][机器人用户]并将该令牌用于Securitybot。
您还需要设置一个渠道,当用户指定他们尚未执行操作时,机器人将向该渠道报告。
找到该频道的唯一 ID(它看起来与 C123456 类似),并确保邀请机器人用户进入该频道,否则它将无法发送消息。
双人组
对于 Duo,您需要创建一个 [Auth API][auth-api] 实例,将其命名为巧妙的名称,并跟踪集成密钥、秘密密钥和身份验证 API 端点 URI。
运行机器人
查看根目录中提供的 main.py,了解如何使用所有这些的示例。
将所有全局变量替换为上面找到的任何变量。
如果以下内容均已成功生成,则 Securitybot 应该已启动并正在运行。
要测试它,请向分配给它的机器人用户发送消息并说 hi。
要测试处理警报的过程,请发送消息 test 来测试机器人。
建筑
Securitybot 被设计为尽可能模块化。 这意味着可以轻松更换聊天系统、2FA 提供商和警报数据源。 唯一与机器人紧密集成的系统是 SQL,但添加对其他数据库的支持应该不难。 拥有数据库可以使警报持久存在,并且意味着如果出现一些暂时性故障,机器人不会丢失(太多)状态。
安全机器人本身
机器人本身执行一小部分功能:
消息传递、2FA 和警报管理由可配置模块提供,并在初始化时添加到机器人中。
命令
机器人将传入消息作为命令处理。
命令解析和处理在 Securitybot 类中完成,命令本身在两个地方提供。
命令的功能定义在 commands.py 中,其结构定义在 config/ 目录下的 commands.yaml 中。
消息传递
Securitybot 旨在与各种消息传递系统兼容。
我们目前提供 Slack 的绑定,但请随意贡献任何其他插件,例如上游的 Gitter 或 Zulip。
消息传递是通过 securitybot/chat/chat.py 实现的,它提供了少量功能,用于查询消息传递组中的用户、向这些用户发送消息以及将消息发送到特定的 channel/room。
要添加新消息传递系统的绑定,请子类化 Chat。
2FA
2FA 支持由 auth/auth.py 提供,它将异步 2FA 包装在几个函数中,这些函数可以检查 2FA 功能、启动 2FA 会话以及轮询 2FA 会话的状态。
我们通过 Duo Auth API 提供对 Duo Push 的支持,但添加对不同产品或某些内部 2FA 解决方案的支持就像创建 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碰撞,请联系离你最近的大学的人,享受它给你带来的名誉和财富。
FAQ
请向我们询问事情