Bw3ll/ShellWasp

GitHub: Bw3ll/ShellWasp

一款辅助构建跨 Windows 版本移植的 32 位 WoW64 syscall shellcode 模板的 Python 工具。

Stars: 173 | Forks: 25

# ShellWasp 2.1 ShellWasp 是最初用于利用 syscall 创建 shellcode 的工具,于 2022 年 8 月 12 日在 DEF CON 30 上发布。它也亮相于 2022 年 11 月的 Black Hat Middle East and Africa!2023 年 4 月 19 日,ShellWasp 2.0 发布,进行了大量更新,包括获取 OSBuild 的替代方法(通过 User_Shared_Data,通过 r12 获取 PEB),以及三种通过 WoW64 调用 syscall 的新方法(一种用于 Win7,两种用于 Win10/11)。在 ShellWasp 2.1 中,我们添加了新功能来获取函数参数的示例性和说明性值——既可以通过预计算的离线模式,也可以通过 AI 实时生成(如果提供 OpenAI 密钥)。计划在未来几个月内增加更多新功能。也将很快推出其他维护更新。 关于在 shellcode 中使用 Windows syscall 的主要资源可以在最新的权威会议演讲中找到,详情请参阅 HITB Amsterdam 2023 页面,包括完整的时长一小时的视频,以了解有关此项目的更多信息:https://conference.hitb.org/hitbsecconf2023ams/session/windows-syscalls-in-shellcode-advanced-techniques-for-malicious-functionality/ 幻灯片可在 HITB 下载。自最初在 [DEFCON 30](https://media.defcon.org/DEF%20CON%2030/DEF%20CON%2030%20presentations/Tarek%20Abdelmotaleb%20%20%20Dr.%20Bramwell%20Brizendine%20-%20Weaponizing%20Windows%20Syscalls%20as%20Modern%2032-bit%20Shellcode.pdf) 首次亮相以来,该项目经历了巨大的演变。ShellWasp 是一种帮助在 WoW64 shellcode 中执行 syscall 的方法,最新版本具有在 WoW64 环境中调用 syscall 的多种新颖方法,如 HITB Amsterdam 2023 演讲中所述。如果您正在构建使用多个 syscall 的复杂 syscall shellcode(不适合胆小的人),并且您想确保没有常见的调用方式(例如 fs:0xc0),那么这些新增功能可能会引起您的兴趣。不过为了简单起见,我建议从“更简单”的调用方式开始,即通过 fs:0xc0。 ShellWasp 自动构建 syscall shellcode 模板。该模板仅仅是——一个模板。用户仍需确定使用什么参数值以及如何生成它们。其目的是为那些打算手工创建 syscall shellcode 的人简化流程。支持几乎所有用户模式 syscall,包括我能找到函数原型的所有 syscall。ShellWasp 还解决了 syscall 的可移植性问题。它识别 OS build,ShellWasp 根据用户输入创建一个 syscall 数组,允许在运行时找到当前的 syscall 值 (SSN),而不必硬编码,这会限制您跨 OS build 使用它们的方式。ShellWasp 负责管理 syscall 数组,因此如果一个 syscall 被多次使用,syscall 数组中将只有一个条目。因此,ShellWasp 将允许动态获取 syscall 值 (SSN)。 ShellWasp 支持 Windows 7/10/11。它既使用现有的 syscall 表,也使用为较新版本的 Windows 10 和 11 新创建的 syscall 表。这些是通过原创过程创建的,即解析 WinDbg 结果。为了实现更紧凑的 shellcode 大小,ShellWasp 利用 JSON 格式的预计算 syscall 表。这使我们要保持最小的 shellcode 大小。 ShellWasp 创建的 shellcode 大小相对较小。用户可以选择要支持的 OS build,建议仅使用 Windows 7/10/11 中最近的一些版本,而不是所有可能的版本。这有助于保持更易于管理的大小。此外,调用 syscall 的方式在 Windows 7 和 Windows 10/11 之间有所不同。ShellWasp 将根据用户的选择自动处理这一点。我们已经使用我们的技术创建了适用于所有三种操作系统的 syscall shellcode。 ShellWasp 2.0 包括一些发现 OSBuild 的替代方法。ShellWasp 2.0 还提供了三种从 WoW64 调用 syscall 的新方法,全部无需 syscall、int 0x2e 或 fs:0xc0 ——两种用于 Windows 10/11,一种用于 Windows 7。这两种新方法前所未见(见下图)。 ShellWasp 不是 SysWhispers2/3 或 ElephantSe4l 以及 Freshycalls 等工作的替代品。这是利用 Windows syscall 的不同方向。确定 OS build 或 SSN 的方法并不重要。(ShellWasp 提供了几种确定方法。)ShellWasp 旨在以紧凑可靠的形式帮助促进 syscall shellcode。 ## 使用 ShellWasp ShellWasp 生成的汇编代码大小紧凑。此外,由于许多人开启了 Windows 自动更新,可能最好只选择较新的 OS build,而不是每一个可能的版本,这也有助于减小大小。用户可以轻松快速地重新排列 shellcode 中的 syscall。 ShellWasp 目前仅支持 Windows 7/10/11,这是一个设计选择。可以通过配置文件或 UI 轻松选择所需的 Windows 版本。更改也可以保存到配置中。 ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/shellwasp1.png?raw=true) ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/shellwasp3.png?raw=true) ![image](https://user-images.githubusercontent.com/49998815/201258739-bc8e4f11-d737-4a1f-a8e5-7f827f701717.png) 注意:您选择要针对的 OS build——不必针对每一个 build——然后选择要使用的 syscall。以上只是一个随机示例。ShellWasp 会处理很多细节,但您仍然需要构建参数和所需的结构。 ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/osbuild3.png?raw=true) ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/fsyscall.png.png?raw=true) ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/osbuild2.png?raw=true) ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/multWays.png?raw=true) ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/alt_invoke.png?raw=true) ![image](https://github.com/Bw3ll/ShellWasp/blob/main/images/altinvoke2.png?raw=true) ## 用法 通过 GitHub 下载并在命令行运行,例如 `py shellWasp.py` 所选 OS build/版本以及 Windows syscall 的所需设置可以添加到配置文件中。也可以在 UI 中添加或更改它们。 ## 更新 * 2026 年 3 月更新:ShellWasp 2.1 进行了重大的可用性升级,以生成更清晰、更真实的参数。它现在可以生成更丰富的说明性 syscall 参数,并在有帮助的地方提供可选的结构感知示例和字段级结构展开。这些旨在作为学习辅助工具。我还添加了分块处理和自动聚合功能,用于处理大批量 syscall,同时保留调用顺序并支持在单次运行中重复使用同一个导出。为了使更长的会话更易于管理,ShellWasp 现在支持持续更新的工作结果文件、恢复功能,以及带有时间戳的 JSON 快照和清理后的文本导出,以便审查和重用。更多更改即将推出。 * 2023 年 4 月 19 日 - ShellWasp 2.0 发布,包含大量更改,包括识别 OSBuild 的替代方法,以及三种以前未公开的通过 WoW64 调用 syscall 的方法(一种用于 Windows 7,两种用于 Windows 10/11)。 * 2022 年 11 月 1 日,添加了对 Windows 10 22H2 和 Windows 11 22H2 的支持。这些是最新的 Windows 版本。注意:我们不支持 Insider 预览版或 Server 版。 * 2022 年 11 月 1 日,更改了保存指向 syscall 数组指针的机制。在测试包含多个 Windows syscall 链的 shellcode 时,注意到堆栈上的值存在一些稳定性问题。为了避免这些问题,决定将堆栈清理(`add esp, 0xXX`)和 `pop edi` 更改为 `mov edi, [esp+0xYY]` —— YY 是本应从堆栈中“清理”掉的字节数。随后的 `push edi` 被保留。ShellWasp 在 edi 处维护一个指向 syscall 数组的指针,由于实际的 syscall 本身会破坏 edi 中包含的值,因此需要有一种方法在从远跳转到内核模式返回后恢复它。人们认为这种新的汇编代码将是实现这一点的更稳定的方法。当然,另一种选择是将指向 syscall 数组的指针存储在 ebp 或其他内存上的某个位置,然后可以用它来恢复 EDI。这在某些方面会更简单,因为可以避免计算返回的字节数。然而,人们认为 `mov edi, [esp+0xYY]` 对初学者来说更安全。如果将其存储在固定位置(如堆栈)的其他内存中,则可能会意外覆盖它。两种方法花费的时间和精力都很少。 ## 安装 提供了一个 setup 文件以帮助确保安装正确的库。 要设置 ShellWasp,只需使用以下命令:`py setup.py install` 您可以根据需要用 *python* 代替 *py*。这将确保安装 Colorama 和 keystone-engine。Keystone 用于编译汇编代码,以确保它是有效的汇编代码。但是,生成的字节当前不会显示,因为 ShellWasp 旨在生成一个模板,其参数需要自定义。这可能会在未来作为可选设置启用。 如果您不想使用 setup.py 文件,也可以手动安装它们。可以使用 `pip install keystone-engine` 和 `pip install colorama` 来实现。 ## 更正 请注意,我之前关于按地址排序技术不再有效的评论是不正确的。我为这个错误道歉。请记住,该工具主要针对 WoW64、32 位 shellcode,而不是作为其他 syscall 技术的替代品。我们的工作仍处于 WoW64 领域。 ## 许可证 本项目根据 MIT 许可证的条款发布。 ## 注意 请注意,此 GitHub 目前尚不完整,稍后将更新更多信息,包括安装说明。
标签:32位, Black Hat, DEF CON, DNS 反向解析, EDR 规避, HITB, Homebrew安装, Hpfeeds, Multi-Agent, Petitpotam, React, Shellcode, Syscalls, T1059, Windows 内核, WoW64, XML 请求, 中高交互蜜罐, 安全开发, 快速连接, 恶意软件开发, 技术调研, 数据展示, 汇编语言, 私有化部署, 系统调用, 红队, 逆向工具, 防御规避