在过去的一年中,SpecterOps 团队一直致力于解决一个问题: 项目管理。这不是一个特别吸引人的话题; 但是,它对于平稳的业务操作和确保高质量的可交付成果是必不可少的。在没有必要的信息或资源管理的情况下开始一个项目计划,就像在没有设计计划的情况下仓促进行一个家庭装修项目。你可能已经建造好了你一直想要的门廊,但在这个过程中你可能遇到过材料缺乏的情况,或者你去五金店跑了很多次,或者你把一些木板削的太短。SpecterOps 团队很高兴能够公开发布我们的研发成果:
超自然项目管理
Ghostwriter(枪手)是我们团队开发的工具的一部分。它帮助我们在一个应用程序中管理客户端、项目、报告和基础设施。它并不取代一些比较常见或传统的项目管理工具,如标准项目管理系统(CRM),但它确实合并了所有相关的项目信息,使用户能够轻松地管理项目的各个方面。
现在可以在 GitHub 上找到 Ghostwriter:
https://www.github.com/GhostManager/Ghostwriter
通过关注我们工作流程中的每一个部分,我们不断的发现可以“润滑车轮”的机会,并对我们的项目管理进行优化调整。我们希望找到一个易于学习、易于使用的解决方案,并且最重要的是——成为一个我们真正想要使用的完整平台。
枪手的主要特点有:
客户端管理
· Ghostwriter 跟踪客户端和相关的信息,为每个客户端及其相关项目提供知识中心
项目管理
· 创建项目并将其附加到客户端以组织项目任务,其中可以创建和查看项目任务的记录
基础设施跟踪与管理
· 跟踪和管理域名和服务器
· 自动监视这些资产产生的任何问题,例如开放给互联网的端口和负面域名类别的变化
报告引擎
· 报告引擎能够输出包含客户端、项目、基础设施的使用情况、资产发现等信息的报告
· 当前的报告格式是 JSON 和 Office docx、 xlsx 和 pptx 文档
自动化
· Ghostwriter 可以扩展为在后台、按需或按时间表运行任意任务
· 任务包括: 通过 WebHook 发送 Slack 消息,DNS 和域名分类更新,在项目结束时释放域名和服务器,在项目结束后归档报告,所有这些功能在 tasks.py中都是可定制的
说到自动化,可以使用单个 Docker 命令部署整个平台,以供本地开发、调试和生产使用。
整个平台用 docker-compose 就可以在一分钟内部署完毕
请继续阅读,进一步了解这些特性以及它们的设计和创建背后的决策过程。
Ghostwriter 特性精选
Ghostwriter 是一个功能丰富的应用程序,因此很难在这里详细描述每个功能。相反,我们将集中讨论一些重点、优势和 Ghostwriter 提供的一般工作流程。
用户仪表板
首先,每个用户都有自己的账户。这对于跟踪用户操作和分配的与项目相关的任务是必要的。当用户登录时,他们会看到他们项目的当前状态的概述,比如他们附加到哪些项目,以及与他们的活动基础设施(例如域名和服务器)相关的通知。
Ghostwriter 使用 django-allauth 进行身份验证。默认的身份验证方法是用户名和密码,但是你可以通过各种各样的服务启用 SSO,包括许多你的团队可能已经在使用的服务(例如 GitHub,Bitbucket,Box,Slack,Trello)。Django 还可以配置为使用 LDAP、 ADFS 和其他身份验证方法。
客户端管理员
当新工作到来时,用户应该将一个新客户注册到 客户端管理员 应用程序—— Rolodex。
当用户添加一个新的客户端时,他们只需要输入一个名称和一个“短名称”(这个缩写可以在以后的报告中使用)。一旦创建了客户端,Ghostwriter 将生成并分配一个唯一的代码名。代码名对于公开引用项目非常方便,如果你不喜欢 Ghostwriter 生成的代码,可以重新编写代码。
客户端仪表板页面的顶部
用户可以根据需要向新客户端添加联系点和说明。客户端管理员一开始可能觉得自己只是 Ghostwriter 的一小部分; 然而,它会慢慢变成一个有价值的信息中心。
随着时间的推移,客户页面上收集的笔记和项目历史使得回顾团队与客户的历史变得简单,回顾旧项目,查看哪些顾问与客户合作过以及以何种身份合作过。更好的一点是,这些信息和其他信息一样存在于同一个地方,因此在数据源之间的跳跃就更少了。
客户端仪表板页面的一个片段,显示一些历史信息
项目管理员
在查看客户端页面时,新项目被创建并附加到客户端。这些项目会自动与客户端关联,并按类型分类(例如,渗透测试、网络评估)。项目还需要开始和结束日期(可以在任何时候进行编辑) ,并提供一个 Slack 通道名称选项。
一个新项目的页面一开始会显得空洞无物。第一步(可选的,但是推荐这样做)包括向这个新项目添加一个团队。团队成员是从 Ghostwriter 的用户列表中挑选出来的,并被分配到项目角色(例如: 评估主管、项目经理)。当然,你可以根据需要添加或编辑角色。
仪表板的截图,显示了分配的操作符和当前的发现结果
出现在 Slack 中的测试通知
生成通知的计划任务
对于客户端和项目的设置就是这些基本的内容,现在是时候开始使用基础设施了。
基础设施管理员
对于那些密切关注 Shepherd 项目的人来说,基础设施管理员可能看起来很眼熟。Ghostwriter 包含了一个带有新功能和改进功能的完全重写的 Shepherd 新版本。
简言之, Shepherd 可以协助团队管理域名和服务器之前,期间和之后的操作。这篇文章介绍了 Shepherd 已经深入到设计和工作流程,所以请参考这篇文章的早期 Ghostwriter 设计(大约2019年1月)和Shepherd 的细节。以下将是一个简短的总结。
在域名方面,Shepherd跟踪所有可用域名及其相关数据(例如注册商、购买日期、到期日期、域名使用期限等) ,并利用从 Bluecoat、 McAfee 和 VirusTotal 等来源收集的分类信息丰富这些数据。分类检查可以根据请求运行,也可以作为计划后台任务运行。可以根据团队的需要单次更新或一次更新所有域名。更新域名 DNS 记录也存在类似的过程。
搜索过滤器
如果一个域名出现在 VirusTotal 中(例如恶意软件下载行为命中)或者被标记为一个坏类别(例如钓鱼、可疑、诈骗) ,Ghostwriter 将该域名的“健康状态”更新为“烧毁” ,对于团队来说,这是一个明确的指示器,表明域名不应该再被用于隐蔽的基础设施。你可以请求对各个域名或所有域名进行这些检查,并配置自动检查的计划任务。
域名信息的展示,包括域名使用期限和类别
Shepherd 还充当你的域名的图书管理员。团队成员可以“下架”某个项目的域名,该项目从可用域名池中删除该域名,将该域名附加到项目和客户端,并向每个人显示该域名正在使用。Shepherd有一个后台任务,这个任务将检查下架的域名,并在域名即将发布之前(默认发布前一天)向 Slack 发送一条消息,然后在域名发布当天发送一条消息。你可以将这些任务安排在对你的团队最有效的任何时间表上执行。
域名仪表盘的一个片段,显示域名的当前分类
服务器跟踪类似于域名跟踪。在 Ghostwriter 中追踪的 IP 地址将是用于 Cobalt Strike 和 Covenant 团队服务器的静态 IP 地址。这些服务器不应该将端口和服务公开给整个互联网。相反,用于命令和控制服务的端口应该被来自互联网的管理范围和重定向服务器的白名单规则隔离。通过定期扫描基础设施并在发现开放端口时提醒你,Ghostwriter 可以帮助你确保这一点。
打开端口的扫描器任务通知示例
说到重定向,第二个区别是Shepherd跟踪两种类型的服务器: 具有静态 IP 地址的服务器和所谓的“临时服务器” ,即各种基于云的服务器,它们将在整个项目过程中进进出出。现在,你可以快速创建这些服务器并将其附加到项目中,以跟踪它们的 IP 地址、用途、提供程序和说明。
如果你的团队使用基于云的服务器处理所有事情,那么你仍然可以使用 Ghostwritre 的基础设施管理器。工作流程的唯一变化是所有的服务器都将作为临时服务器进行跟踪,而不是在 Ghostwriter 的服务器库中进行跟踪。
在项目结束时,你可能会得到多个域名、多个静态服务器和一些附加到项目的临时服务器。这个历史记录是永久性的,所以你有一个长期的关于哪个域名和 IP 地址已经与客户机相关联以及在什么时候因为什么相关联的记录。
客户端的项目历史示例
所有这些数据都包含在报告中,以帮助你了解 C2基础结构的解释和说明。在对蓝队进行评审时,这是最有用的信息。这些信息能够快速确认 IP 地址、域名以及它们的使用时间和使用方式,对于检查在演练中检测到和未检测到的内容非常有帮助。当你需要确认红队的流量状况是否与蓝队在演练中看到的情况相符时,这也有助于解决冲突请求。
报告撰写人
基础设施管理器很棒,但 Ghostwriter (中文名:枪手,顾名思义)在协助你进行报告工作方面真的很出色。报告引擎管理发现、观察结果、项目报告、证据文件和报告生成(docx、xlsx、pptx 和 JSON)。
生成报告
到目前为止讨论的所有内容最终都使得报告引擎可以访问大量数据。当 Ghostwriter 创建一个报告时,它可以调用任何东西,从客户的名字到项目的执行窗口,使用的基础设施,以及调查结果。
报表生成从向项目添加报表开始。这允许根据需要为项目创建多个单独的报表。然后用户可以浏览调查结果数据库,并将调查结果和观察结果添加到他们当前的报告中。
一旦发现附加到报告中,对该发现进行的任何编辑都只影响该报告。用户可以随心所欲地添加证据和定制他们认为合适的调查结果,而不用担心会影响其他报告。当谈到编辑,Ghostwriter 支持各种关键字,并可用于模板。
为调查结果和报告生成提供的Ghostwriter 关键字选项
Ghostwriter 的证据上传表格
Ghostwriter 的查找编辑表单
用于生成报表的模板样式
对于那些希望能够做一些真正不同的事情的人,有一个直接的 JSON 输出。我们已经将 Ghostwriter 的 JSON 输出显示为报告类型,因此用户可以使用它并将其与其他报告引擎一起使用,或者编写自己的脚本以方便地创建自定义报告。JSON 报告包括关于客户机、项目和评估结果的所有信息。
Ghostwriter 的 JSON 输出示例
一旦项目结束,Ghostwriter 可以清理项目及其相关报告。如果你配置了计划任务,Ghostwriter 将等待一段时间(默认是90天) ,然后归档项目。这会将生成的所有报告类型、收集所有证据文件以及将所有内容压缩到 zip 文件中。这个归档文件被移动到一个单独的归档目录中,并在它自己的数据库模型中与客户机和项目相关联。这个过程还会删除证据文件和报表目录,这样旧文件就不会慢慢堆积在服务器上。
然后你可以根据组织的数据保留策略下载和处理归档文件。
总结
我们很高兴能够最终公开讨论这个项目,我们希望其他团队能够发现它是有用的。项目管理和报告撰写不一定是一项艰巨的任务!Ghostwriter 不能让你享受写报告的乐趣,但它可以绕过尖锐的边缘,消除一些摩擦,使报告撰写有更愉快的体验。
定义1.0发行版所需的特性还有很长的路要走; 然而,这还不是结束!在可预见的未来, Ghostwriter 将处于积极的开发阶段。我们计划的一些特性包括:
· 告警和检测策略文件的管理和生成
· 使用时间戳、输出和攻击任务的证据跟踪完整的活动日志跟踪
· Ghostwriter增加了其他报告格式,比如 PDF,并且在 Ghostwriter 中进行更直接的编辑以支持这些格式
· 增强报告编辑能力,在 Ghostwriter 中构建更多的报告片段
注:本文参考自posts.specterops.io