Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
DarkWidow — 间接动态系统调用,通过改进的TartarusGate方法进行SSN + Syscall地址排序 + 通过APC Early Bird进行远程进程注入 + 生成一个牺牲进程作为目标进程 + 在生成的进程上实施(ACG+BlockDll)缓解策略 + PPID欺骗 + 从TIB解析API + API哈希 | Kitploit
工具/GitHubGitHub/reveng007/darkwidow
权限提升漏洞利用IDS/IPS规避后渗透利用恶意软件分析二进制分析学习与教育红队Payload 开发
GitHubreveng007/darkwidow

DarkWidow

间接动态系统调用,通过改进的TartarusGate方法进行SSN + Syscall地址排序 + 通过APC Early Bird进行远程进程注入 + 生成一个牺牲进程作为目标进程 + 在生成的进程上实施(ACG+BlockDll)缓解策略 + PPID欺骗 + 从TIB解析API + API哈希

80710437个月前Kitploit 审核通过

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享
查看仓库

DarkWidow

一款面向 Windows 的可定制投递工具。


特别鸣谢:

  1. BlackHat Asia, 2024 - 工具征集
  2. BlackHat USA, 2024 - 工具征集
  3. BlackHat SecTor, 2024 - 工具征集
  4. BlackHat Europe, 2024 - 工具征集
  5. Wild West Hacking Fest 2024 - Arsenal
  • 非常感谢 Soumyadeep Da 即 @SoumyadeepBas12 鼓励我申请这些会议,否则我不会这么做 :)
  • 非常感谢 Faran 即 @Chrollo_l33t 帮助我制作此工具的演讲幻灯片和 PPT :)

功能:

  1. 间接动态系统调用。(MITRE ATT&CK TTP:T1106)
  2. 通过修改版 TartarusGate 方法对 SSN + 系统调用地址进行排序
  3. 通过 APC Early Bird 进行远程进程注入,以切断 EDR 的遥测捕获。(MITRE ATT&CK TTP:T1055.004)
  4. 生成一个牺牲进程作为目标进程,不干扰环境中已打开的进程。
  5. 对生成的牺牲进程启用 ACG(任意代码保护)/BlockDll 缓解策略。
  6. PPID 欺骗(MITRE ATT&CK TTP:T1134.004)
  7. 从 TIB 解析 API 和 DLL(直接通过偏移(从 TIB)-> TEB -> PEB -> 解析 Nt API)(MITRE ATT&CK TTP:T1106)
  8. 受诅咒的 Nt API 哈希(MITRE ATT&CK ID:S0574)

额外福利:如果拥有管理员权限 =>

  1. 通过 杀死 EventLog 服务线程来禁用事件日志(MITRE ATT&CK TTP:T1562.002)

缺点:如果线程恢复,事件日志挂起期间发生的所有事件会再次被记录!

所以,决定直接杀死它们!

“这比挂起更具侵入性,但决定权始终在操作者手中。此外,杀死线程会在内核层面被记录。” - @SEKTOR7net

在间接系统调用植入中仅杀死这些线程时,遇到了一个错误。我无法获取 “eventlog” 的 SubProcessTag 值。所以决定杀死所有线程,即杀死整个进程(负责的 svchost.exe)。是的,这产生了 一个 IOC!。

=

1. EDR/Ring-3/用户态钩子绕过

2. 系统调用和返回语句从 ntdll.dll 的内存中执行

3. 基于调用栈中返回地址检查的 EDR 检测可以被绕过。

编译:

root@kitploit:~
直接通过 VS 编译器:

image

还要添加 /MT 编译器标志!=> 将 CRT 函数静态链接到二进制文件中(是的,你猜对了,这会使植入体臃肿)

image

  1. 也可以通过 compile.bat(推荐选项 1)
root@kitploit:~
./compile.bat

使用方法:

root@kitploit:~
PS C:> .\x64\Release\indirect.exe
[!] 错误!
[->] 语法:.\x64\Release\indirect.exe <要欺骗的PPID>

运行效果:

https://github.com/reveng007/DarkWidow/assets/61424547/62a90c5b-84af-4389-8ddc-9f7926debdcf

在 Sofos XDR 端点上成功执行且未产生告警:

SofosXDREvade


进一步改进:

  1. PPID 欺骗(Emotet 方法)
  2. 更隐蔽 的事件日志禁用使用场景!

部分代码及提供帮助的链接:

  1. TIB:

    • https://en.wikipedia.org/wiki/Win32_Thread_Information_Block
    • https://www.wikiwand.com/en/Win32_Thread_Information_Block
  2. GS 和 FS 寄存器:

    • https://stackoverflow.com/questions/39137043/what-is-the-gs-register-used-for-on-windows
    • https://stackoverflow.com/questions/10810203/what-is-the-fs-gs-register-intended-for#:~:text=The%20registers%20FS%20and%20GS,to%20access%20thread%2Dspecific%20memory.
  3. PEB LDR 结构:

    • BlackHat - 恶意软件作者不想让你知道的事 - 隐避的空进程注入 作者 @monnappa22

    • 来自上述链接的进程内存图片:
      alt text

    • 来自 labs.cognisys.group,作者 @D1rkMtr 的博客:
      alt text

  4. TIB -> TEB -> PEB -> 解析 Nt API 和 API 哈希

    • https://stackoverflow.com/questions/41277888/iterating-over-peb-dllname-shows-only-exe-name

    • https://doxygen.reactos.org/d7/d55/ldrapi_8c_source.html#l01124

    • labs.cognisys.group,作者 @D1rkMtr 的博客

root@kitploit:~

#include <stdint.h>
#include <stdio.h>
#include <Windows.h>

DWORD64 djb2(const char* str)
{
	DWORD64 dwHash = 0x7734773477347734;
	int c;

	while (c = *str++)
		dwHash = ((dwHash << 0x5) + dwHash) + c;


	return dwHash;
}

int main(int argc, char** argv)
{
	if (argc < 2)
	{
		printf("[!] Wrong!\n");
		printf("[->] Syntax: .\\%s <NTFuncName>\n\n", argv[0]);
		return 1;
	}

	const char* string = argv[1];

	DWORD64 hashvalue = djb2(string);

	printf("Hash Value: 0x%llX\n", hashvalue);

	return 0;
}

  1. ACG(任意代码保护)/BlockDll 缓解策略:

    • 链接:
    • 保护你的恶意软件 作者 @xpn
    • Wraith 作者 @winterknife
    • spawn 和 HOLLOW 作者 @0xBoku alt text
  2. PPID 欺骗检测:

    • PPID 欺骗检测 作者 @spotheplanet
    • 如果有时间,我会在此部分添加检测内容!-> [剩余..............................................!]
  3. Moneta 检测和 PESieve 检测:\

    • Moneta:
      alt text

    • PESieve:
      alt text

  4. Capa 扫描:
    alt text

  5. 植入进程的线程栈外观:

植入进程合法 Cmd 进程
alt textalt text

由此可知,通过在间接系统调用 POC 的 ntdll.dll 内存中执行返回指令,可以成功欺骗返回地址,使 ntdll.dll 位于调用栈顶部,EDR 会认为其合法性更高。 - @VirtualAllocEx 来自 DirectSyscall Vs Indirect Syscall
同时感谢 @peterwintrsmith!

  1. 指令回调规避:使用了这个 POC - syscall-detect 作者 winternl_t

image

  1. 我使用的事件日志配置:

alt text alt text

  1. 设置 SeDebugPrivilege:
    从 这里: alt text 到 这里: alt text

  2. 杀死事件日志线程:

    • rto-win-evasion 作者 @SEKTOR7net
    • Phant0m 作者 @hlldz
    • Goblin 作者 @winterknife
    • 通过挂起事件日志服务线程来禁用 Windows 事件日志 作者 @spotheplanet
      从 这里:
      alt text
      到 这里:
      alt text
    • 该方法在间接系统调用实现中导致错误。所以我最终杀死了负责的 svchost.exe 中的所有线程(原因:向上查看)。

Sophos XDR 事件日志记录场景:

  1. 场景 1:DarkWidow 在普通权限下执行

image

除了一个低严重性日志外,未产生任何严重告警!

  1. 场景 2:DarkWidow 在管理员权限下执行

image

一个低严重性日志 => APC 注入(和之前一样)

image

另一个中等严重性日志,因设置 SeDebugPrivilege 而产生。

image

DarkWidow V2:

为了绕过这种事件日志检测,我引入了 合成帧线程栈欺骗 的概念。

应用合成帧线程栈欺骗后的栈外观:

image

这是 NT API 线程栈

image

这是 shellcode(顺便说一句,这不是自制的,这是 Havoc Shellcode :)) 线程栈。

对于 shellcode 开发,我使用了 havoc 和以下配置:

image

注意:

在此项目中,并不真正需要新建线程起始地址欺骗,因为在 APC 注入技术中,APC 劫持了已有且合法运行的线程的执行流。感谢 @C5pider!

演示执行图片:

1708744707672

对抗 Sophos XDR 的演示视频:

演示视频 Youtube 链接

现在事件日志的状态如何?

image

没有生成任何日志。 我还从 DarkWidow V2 中移除了事件日志杀死部分,这同样减少了事件的生成!

我的 BlackHat Arsenal 演示视频可在此处找到:

演示视频 Youtube 链接

我的 WildWestHackinFest 演示幻灯片和视频链接可在此处找到:

  1. Google 幻灯片链接
  2. https://www.youtube.com/watch?v=xsibDZ6BpyA&t=1295s

未来更新计划:

  1. 将此版本移植到 C++ Clang 编译器,这将有助于执行 LLVM 混淆。
  2. 升级到 NtCreateUserProcess() 以执行间接系统调用和栈欺骗。
  3. 应用手动加载库功能以绕过映像加载内核回调。
  4. 应用模块踩踏功能。
  5. 加密的 shellcode 注入以避免内核触发的内存扫描(Caro-Kann)。

栈欺骗技术的检测(如我的一次研讨会/演讲中所述):

image

主要感谢(直接/间接(无意双关 :)))帮助我的人:

  1. @SEKTOR7net
  2. @peterwintrsmith
  3. @Jean_Maes_1994
  4. @D1rkMtr
  5. @spotheplanet
  6. @0xBoku
  7. @Sh0ckFR
  8. @winterknife
  9. @monnappa22
  10. @xpn
  11. @hlldz
  12. @d_tranman
  13. @SoumyadeepBas12
  14. @jack_halon
  15. @KlezVirus
  16. @C5pider

我希望没有遗漏任何人!

此项目是我学习 EDR 世界旅程的一部分!=> Learning-EDR-and-EDR_Evasion

下载工具
  • 来自上述链接的代码片段图片,我用于动态解析 API 而无需硬编码偏移:
    alt text

  • 我应用的 API 哈希代码: