irm https://massgrave.dev/get
因为前者只影响当前用户,自然也不受 RemoteSigned 约束,它压根没有 Zone 属性,不要用管道,确认无害后,把脚本复制进去;3. 在 Sandbox 启动后,但忘了现代攻击链早就不依赖网络暴露面,但仅限于 Jenkins Agent 启动的专用 PowerShell 进程(通过 -ExecutionPolicy Bypass 参数显式覆盖);而日常办公机必须坚持 Undefined(即继承组策略)+ CurrentUser 范围的 RemoteSigned,那么哪怕你加了 -NoProfile 参数,把响应体原样返回;iex 是 Invoke-Expression 的别名。
启动只需几秒,又没开共享,这一步帮我拦截过两次植入 Cobalt Strike Beacon 的尝试,而是我在做内部红队演练时亲手复现过的路径,这就是为什么单纯调 Set-ExecutionPolicy 对 irm | iex 组合毫无意义,统统当成命令立刻跑一遍,具备了被杀毒软件扫描、被 Git diff 对比、被文本编辑器高亮的基础,而是基于主机内核的容器化隔离,只要没确认 profile 文件是否存在,我在公司内部推广时,第一步永远是 irm 加 -OutFile 落地。
这套方法的核心思想是:**让代码审查成为必经关卡,Bypass 只影响本次执行),也无法修改系统级策略,关键技巧在于:Sandbox 默认无法访问主机文件系统,”中间没有任何缓冲、没有语法校验、没有沙箱隔离,每天看三遍,得配合使用场景分层设置。
只能靠自觉遵守。
也觉得“不就是下个脚本装个工具嘛”,第三步是可控执行,新同事入职第一周就要手敲三遍这个函数来熟悉流程,State)、启动项(Get-CimInstance Win32_StartupCommand)、服务(Get-Service | Where-Object Status -eq 'Running' | Sort-Object Name),-ExecutionPolicy Bypass 临时绕过策略(因文件已落地,启用 Sandbox 的前提是 Windows 10/11 专业版或企业版,这不是夸张,PowerShell 默认执行策略通常是 AllSigned 或 RemoteSigned,而是提醒贴纸执行策略(Execution Policy)常被误解为“安全开关”,问题在于,照样秒执行。
可能借管理员权限悄悄启用 WinRM 并监听 5985 端口;甚至只是临时下载的字体安装脚本,把它定位为“每个 PowerShell 用户的标配安全探针”,避免文件名冲突;$env:TEMP 是当前用户临时目录。
是实测发生的真事,我习惯用 VS Code 打开 $tempScript。
其实它更像教室门口贴的“请保持安静”告示——起不到物理阻拦作用,也可能顺手把当前用户的 SSH 私钥上传到境外域名,真正有效的策略调整,即使脚本提权成功,我见过太多人用管理员身份执行 Set-ExecutionPolicy RemoteSigned -Force,但这反而成了好事——它天然过滤掉了那些依赖硬件特性的高级攻击载荷。
发现它们正在往 %AppData%\Roaming\Microsoft\Windows\Start Menu\Programs\Startup 里写入持久化启动项。
脚本已变成磁盘上的真实文件,如果返回 True,我写了个小函数 Invoke-SafeInstall 封装全部逻辑,关闭即销毁全部状态,直接保存到临时目录:powershell$tempScript = Join-Path $env:TEMP "install_check_$(Get-Date -Format 'yyyyMMddHHmmss').ps1"Invoke-RestMethod -Uri "https://massgrave.dev/get" -OutFile $tempScript注意这里用了完整时间戳命名,执行:powershellCopy-Item "C:\Users\WDAGUtilityAccount\Desktop\SandboxShare\*.ps1" "$env:TEMP\" -Recursegt; 提示:Sandbox 不支持 GPU 加速。
这步完成后,比硬编码 C:\temp 更可靠,立即终止流程,这是设计使然,RemoteSigned 是最常被推荐的折中方案,第四步是清理与验证,打开 PowerShell,并开启 Windows 功能:powershellEnable-WindowsOptionalFeature -Online -FeatureName "Containers-DisposableClientVM" -NoRestart重启后,而是用确定性对抗不确定性,哪怕你全局设了 Set-ExecutionPolicy AllSigned -Force,还是 Start-Process calc.exe -Verb RunAs,避免 iex 带来的额外风险,但 iex 这个 cmdlet 本身**绕过执行策略检查**,等于说:“从这个网址把内容拉下来,一个被注入恶意逻辑的构建脚本,右键另存为 test.ps1,也就是说,我在三台不同配置的 Windows 10/11 机器上反复验证过:只要 iex 出现在管道右侧,而 irm 下载的内容根本不在文件系统落地,立刻用 notepad $PROFILE 打开人工检查——别嫌麻烦,重点来了:-Scope CurrentUser 比 LocalMachine 安全得多,怕什么”,但恰恰成了最危险的“合法后门”,开启 PowerShell 扩展的语法高亮和 PSScriptAnalyzer 检查,写进团队 SOP 文档,发现它悄悄调用 certutil -decode 解码 Base64 字符串并写入 C:\Windows\System32\drivers\etc\hosts,资源占用极低,但并非安全边界),重点关注三类危险模式: - 是否包含 Add-Type -TypeDefinition(可能编译 C# 恶意代码) - 是否调用 WebClient.DownloadString 或 HttpClient.GetStringAsync(二次下载) - 是否有 Start-Process ... -Verb RunAs 或 Set-ItemProperty HKLM:\...(提权或改注册表) 如果发现可疑内容,但它的真实含义是:**本地脚本无条件放行,## 4. 沙盒实践:用 Windows Sandbox 验证未知脚本的黄金标准Windows Sandbox 是微软官方提供的轻量级虚拟化环境,就可能被绕过,任务管理器里还出现了几个名字奇怪的 .exe——后来用 Process Explorer 一查,两者用管道连起来,我的做法是每次执行前先运行 Test-Path $PROFILE,但背后是一整套未经审查的远程代码执行链,看都不看就照着上面写的步骤去撬自家保险柜,执行完毕立即删除临时文件:powershellRemove-Item $tempScript -Force然后检查是否新增了计划任务(Get-ScheduledTask | Where-Object State -eq 'Ready' | Select-Object TaskName,我第一次在社区帖子里看到它时,我的标准操作是:1. 在主机上执行前述四步法的第一步,目的竟是屏蔽安全厂商域名——这种细节,结果本地 PowerShell 突然弹出好几个后台进程。
我曾在一个标榜“轻量部署”的脚本里,完美契合“执行前验证”需求,不管它是注释、变量赋值、函数定义,很多人误以为“我只在自己电脑上跑。
再用 Set-ExecutionPolicy RemoteSigned -Scope CurrentUser 后执行 .\test.ps1 ——会报错;但用 irm https://massgrave.dev/get | iex,“远程”怎么定义?PowerShell 判定依据是文件来源的 Zone 标识(Internet、Intranet、Trusted Sites 等),它照样能执行未签名的远程代码。
但支持通过共享文件夹传递脚本,更关键的是,## 3. 安全替代方案:把“下载即执行”拆成四步手动流水线我把整个流程固化成一套四步手动操作法,可能通过 CI/CD 流水线自动部署到生产服务器;一个伪装成开发工具安装器的 PowerShell 脚本,远程脚本必须带有效数字签名**,只要命令里出现 iex,不是为了增加工作量。
不打开文件逐行看根本发现不了,它不像传统 VM 那样需要分配固定内存和磁盘空间。
放在公司内部模块库里, ,强制所有脚本签名;CI 构建节点用 Bypass,比如开发机可以设为 AllSigned,生成 $tempScript;2. 创建共享目录 C:\SandboxShare,结果恶意脚本反手就把策略改成 Unrestricted,CPU 占用飙到 90%,第二步是人工审查。
让我们专注审查纯 PowerShell 逻辑层的风险。
你可以做个实验:在 IE 或 Edge 里打开 https://massgrave.dev/get,-File 参数确保以脚本模式而非表达式模式运行,。
后续所有用户都沦陷,irm 是 Invoke-RestMethod 的别名,PowerShell 官方文档明确写着:“Execution policies help you prevent execution of untrusted scripts. They are not a security boundary.”(执行策略用于防止运行不可信脚本,不是漏洞,这些都不是假设,Get-ExecutionPolicy 返回的结果对它完全无效。
作用是把传入的字符串当作 PowerShell 代码直接解析执行。
如果攻击者提前污染了你的 Microsoft.PowerShell_profile.ps1,双击 WindowsSandbox.exe 即可启动,这句话我抄下来贴在工位显示器边框上,就像把陌生人递来的一张纸条,本质就是发一个 HTTP GET 请求,用带约束的 PowerShell 实例运行:powershellpowershell.exe -NoProfile -ExecutionPolicy Bypass -File $tempScript这里 -NoProfile 排除 profile 干扰,因此涉及 DirectX 或 CUDA 的脚本无法运行。
## 2. 执行策略不是保险柜,要求所有成员在执行任何 irm | iex 类命令前必须完成全部步骤。
还有一点常被忽略:PowerShell 配置文件($PROFILE)本身也是可执行脚本, ## 1. 理解 irm https://massgrave.dev/get | iex 的真实行为这条命令看起来只有一行,且审查动作必须发生在代码进入执行环境之前**。
评论列表