自动化战术、技术与程序(Automated Tactics Techniques & Procedures)。对于回归测试、产品评估、为研究人员生成数据等用途,重复手动执行复杂序列可能会很繁琐。我尝试了使用像 Visual Studio Code(或类似)的 IDE 来更轻松地编写 Empire(或任何提供 API 的框架/产品/工具包,如 Metasploit (RPC)、Cobalt-Strike 等)的脚本。于是我开始设计 AutoTTP。这仍然是一个进行中的工作。使用 Empire 2.2 测试。


在我的案例中,战术是按照我的 攻击生命周期模型 组织的。还有其他模型,例如 洛克希德·马丁的杀伤链、Mandiant 攻击生命周期 和 Mitre 的 ATT&CK。无论采用哪种模型,“战术”本质上将相关技术分组,例如,代码执行/运行载荷可以通过多种方式实现:

我使用“阶段”来将相关的“战术”分组。如果你查看源代码树,文件夹结构反映了矩阵的战术列。该矩阵还提到了每种进攻战术的相应控制措施。这些阶段是如何产生的?

红色循环中间的维恩图来自达特茅斯学院的 “安全网络物理系统设计与评估的三个原则”。它定义了任何成功的物理/逻辑攻击的必要且充分条件,或者简单地说,就是要求。我在维恩图周围添加了红色环(阶段)来说明典型的攻击流,这些攻击流最终会影响到信息的机密性、完整性以及系统可用性,或者如果涉及网络物理(关键信息基础设施)则影响安全性。
攻击者可以从阶段1开始,直接进入阶段4,例如,在公开暴露的管理页面上使用默认管理员凭据。它不必是线性的(阶段1->2->3->4)。在初始渗透之后,攻击者可能首先进行一些内部信息收集(侦察),然后提升第一台机器的权限,接着向同一网络内的另一个目标机器发起远程命令。对于下一个受害机器,它是阶段2;成功投递和执行载荷,使攻击者能够控制另一台机器。

左侧的文件 是一个程序脚本,右侧是 技术脚本。注意,程序脚本中没有充斥太多 Empire 特定的细节,大部分细节都封装在技术脚本中。程序脚本应专注于使用资产信息(如主机名/IP、发送载荷的电子邮件、使用的载荷技术等)的技术序列。
“是否为管理员?” 的示例实际上包含几个步骤,因为脚本注释中列出了至少三种可能性。当然,我们可以在 Empire、Metasploit 等中创建自定义的“宏”,但这会紧密集成在特定的框架/产品中。我们希望利用现有工具,将可重用的技术组织成模块,以便在程序级别(即自动化)进行混合搭配。

我利用 Empire 中结构良好的模块创建了一个自动补全的 Python 类。无需输入完整的模块名称(例如 powershell/situational_awareness...),只需使用 IDE 的自动补全功能。

对于每个模块,都有选项(对于大多数(如果不是全部)框架而言)。使用 Empire 时,一旦以 REST/无头模式运行(稍后会提到),就没有控制台来查看模块选项。在自动补全辅助类中,每个模块都有一个 options 子类。如上所示,所需选项带有前缀,因此我们可以在调用模块之前先用值填充这些选项。

每个模块的描述也作为 Python 类文档的一部分包含在内,并在悬停在类上时显示。由于有 276 个模块(截至 Empire 2.1),这个辅助类需要一些脚本来创建!来源:https://gist.github.com/jymcheong/22c2eede978c8eb694945e3347c20c6b
使用像 Visual Studio Code(或等效)这样的 IDE,你可以利用调试变量监视、单步执行脚本,甚至在了解返回值结构后 在调试/单步执行时 修改脚本。Empire 提供了 REST API 文档,但有时我们在运行模块之前并不确切知道返回值。出于这个原因,这就引出了下一个主题。
尽管我们希望一切都在 IDE 中完成,但仍然需要控制台。DeathStar 的作者在开发该脚本(使用 Empire 自动化攻陷域管理员)时就已经知道了这一点。我借用他的想法,但针对 Empire 2.1 调整了他的线程方法,因为他的方法不适用于重构后的启动 RESTful API 函数。来源:https://gist.github.com/jymcheong/6a7668ecf73c29dd1d234d1c76ef438c
由于 Empire 2.2 在运行 REST 模式时具有命令循环处理程序,因此无需破解 Empire 脚本。但是,在使用 API 获取代理结果时,不要与代理交互。
感谢 @radioboyQ 的 EmpireAPIWrapper,@allfro 和 @Mikaayenson 的 pymetasploit,以及 @byt3bl33d3r,MTFBWU。