360 开启了晶核模式,怎么去尝试权限维持
1. 放弃传统方法,转向无文件和内存驻留
在晶核模式下,任何涉及到文件落地、注册表写入、服务创建的传统权限维持方法都极有可能被拦截。因此,我们的核心思想是:不落地、不留痕、内存驻留
- 无文件攻击:避免将任何可执行文件(
.exe
、.dll
)写入磁盘。所有的恶意代码都应该通过 PowerShell、C# 或其他脚本语言在内存中运行 - 内存驻留:将恶意代码注入到合法的、白名单内的进程中,如
svchost.exe
、explorer.exe
等。这样,恶意代码就可以利用合法进程的信任度来绕过安全软件的监控 - 使用 PowerShell 或 C#:利用 PowerShell 的反射式加载(Reflective Loading)技术,可以直接在内存中执行 .NET 程序集。360 晶核模式对 PowerShell 脚本的监控非常严格,因此需要使用混淆、加密等技术来绕过其行为分析
2. 利用系统自带的合法进程和功能
晶核模式的核心是识别恶意行为,而不是简单地拦截所有操作。因此,我们可以利用那些系统自带的、360 无法或不敢拦截的合法进程来执行我们的恶意代码
- 利用
COM
或WMI
:Windows Management Instrumentation (WMI) 和 Component Object Model (COM) 是系统核心组件,它们允许本地和远程执行代码。许多安全软件无法直接拦截这些操作,因为这可能会导致系统功能异常- 你可以通过
WMI
在目标机器上远程执行代码,而无需将可执行文件写入磁盘。这种方法非常隐蔽,因为WMI
流量是合法的 - 通过
COM
组件,你可以利用那些具有特权的 COM 对象,执行一些平时受限的操作
- 你可以通过
- 利用计划任务(Scheduled Tasks):虽然创建新的计划任务可能会被晶核模式拦截,但你可以尝试修改已有的、合法的计划任务
- 命令:
schtasks
- 思路:找到一个不显眼的、定期执行的系统任务,然后修改它的执行命令,让它执行你的无文件后门例如,你可以让它定时执行一个 PowerShell 脚本,该脚本从网络上下载并执行恶意代码
- 命令:
- 利用
runas
或其他 Windows API:如果可以拿到高权限,可以尝试利用runas
或类似的 API 来启动一个拥有更高权限的新进程,然后将恶意代码注入到新进程中
3. 持久化技巧
在权限维持方面,可以考虑以下几种高级技巧:
- DLL 劫持:找到一个启动时会加载 DLL 的合法程序,并将一个恶意的 DLL 文件放置在它会寻找的路径中。当程序启动时,它会加载你的恶意 DLL,从而执行你的代码
- 晶核模式的挑战:晶核模式通常会阻止未签名的 DLL 加载到敏感进程中,因此你需要找到一个没有签名检查的合法程序,或者你的 DLL 需要经过特殊处理
- COM 劫持:攻击者可以修改 Windows 注册表中的 COM 组件路径,将合法的 COM 组件替换为恶意的。当应用程序调用这个组件时,就会执行恶意代码
- 晶核模式的挑战:晶核模式会对注册表中的关键键值进行监控,因此这种方法需要非常小心,或者找到一个未被监控的注册表键
- 利用驱动程序:这是最高级的权限维持方法,但难度也最大。你可以尝试加载一个恶意的内核驱动程序。内核驱动拥有最高的权限,可以绕过几乎所有的用户态安全防护
- 晶核模式的挑战:360 晶核模式的核心就是内核级防护,它会严格检查所有加载的驱动程序。如果你没有一个经过微软签名的驱动程序,很难成功