ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

Sliver 进程管理命令组实战:ps / procdump / terminate / services 源码解析与用法指南

Sliver 进程管理命令组实战:ps / procdump / terminate / services 源码解析与用法指南 网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载前言在 SliverAdversary Emulation Framework的客户端控制台中processes命令组承担了会话与 Beacon 上进程维度的全部侦察与控制能力枚举进程、渲染进程树、内存转储、终止进程以及Windows 平台专属的服务枚举与管理。本篇文章以 client/command/processes/README.md 为骨架深入 commands.go 及各子命令实现源码逐一讲解每个命令的参数、RPC 调用链、异步 Beacon 任务处理与典型的红队实战用法。阅读完本文你将掌握ps的多种过滤方式、-f完整元数据模式及其 EDR 触发风险ps内置的已知安全产品进程检测机制彩色高亮procdump的按 PID / 按名称内存转储、落盘与 Loot 收纳terminate的强杀与常规终止差异Windows 专属services子命令族的枚举、详情、启停操作。一、命令组概览从常量到 Cobra 注册所有命令名称以常量形式定义在 client/constants/constants.go 中如PsStr ps、ProcdumpStr procdump、TerminateStr terminate、ServicesStr services以及ServicesInfoStr/StopStr/StartStr分别对应info/stop/start而 commands.go 的Commands()函数则负责把这些常量组装成完整的 Cobra 命令树并统一挂载到consts.ProcessHelpGroupProcess帮助分组下。从源码可以看到命令组最终向控制台注册了四个顶层命令return []*cobra.Command{psCmd, procdumpCmd, terminateCmd, servicesCmd}其中servicesCmd还通过AddCommand挂载了三个子命令info、stop、start。services顶层命令额外设置了flags.RestrictTargets(consts.WindowsCmdsFilter)注解参见 flags.go 中的RestrictTargets实现意味着只有在当前目标是 Windows 时该命令才可见——这与服务枚举底层依赖 Windows 服务控制管理器SCM的事实一致。所有命令的 flag 绑定都通过flags.Bind(, false, cmd, ...)完成flags.go并统一提供--timeout/-t参数默认值flags.DefaultTimeout 60秒用于控制 gRPC 调用超时。二、ps远程进程侦察与内置安全产品检测ps命令是进程命令组中使用频率最高的侦察工具实现在 ps.go。2.1 命令行参数根据 commands.go 中psCmd的 flag 定义完整参数如下参数短参默认值说明--pid-p-1按 PID 过滤--exe-e空按可执行文件名过滤子串匹配忽略大小写--owner-o空按进程所有者过滤必须配合-f使用--print-cmdline-cfalse打印命令行参数必须配合-f使用--overflow-Ofalse溢出终端宽度显示被截断的行--skip-pages-S0跳过前 N 页输出--tree-Tfalse以进程树形式打印--full-ffalse显示完整进程元数据owner、架构、会话信息——可能触发 EDR--timeout-t60gRPC 超时秒数2.2 参数间的相互约束PsCmd入口处做了非常实用的防御性校验ps.go同时请求--tree与--full时会打印警告并忽略完整元数据请求因为进程树渲染不需要 owner/架构等字段请求--owner或--print-cmdline但没有-f时直接报错并提示请加上 -f 标志。2.3 植入端过滤降低 EDR 暴露面源码注释明确指出一个关键设计决策因为完整进程列表在部分平台尤其是 Windows上可能触发 EDR过滤必须由植入端implant完成。因此客户端只把FullInfo布尔值与请求上下文发给植入端ps, err : con.Rpc.Ps(context.Background(), sliverpb.PsReq{ FullInfo: fullInfo, Request: con.ActiveTarget.Request(cmd), })这意味着一行ps也可能产生可观测的进程枚举行为-f更是会放大风险——这也是注释中may trigger EDR警告的由来。2.4 会话与 Beacon 的双路径响应PsCmd需要同时支持交互式 Session 与异步 Beacon 两种目标当响应中的Response.Async为真时命令会注册con.AddBeaconCallback(taskID, ...)回调在任务完成、proto.Unmarshal解码后打印结果否则走同步打印路径。这一模式在procdump、terminate、services中完全一致是 Sliver 客户端处理双目标类型的通用范式。2.5 输出渲染与已知安全产品高亮PrintPSps.go负责最终的表格渲染根据目标 OS 决定表头Windows 完整模式下为pid / ppid / owner / arch / executable / sessionLinux/macOS 则没有 session 列按pid、ppid数值升序排序tw.SortBy通过settings.PaginateTable支持分页--skip-pages、--overflow非交互模式下强制 overflow。文件顶部维护了一张knownSecurityTools映射表ps.go覆盖了 Symantec、Carbon Black、Elastic、Windows Defender/MDE、CrowdStrike、Bitdefender、Trend Micro、SentinelOne、Sysmon、Cylance、Tanium、Rapid7、ESET、Cybereason、Palo Alto Cortex 等数十个安全产品进程名。其作用有两点行级着色procRow中命中安全产品表的进程以红色渲染console.StyleRed而当前会话/Beacon 自身的 PID 以绿色渲染console.StyleGreen一眼即可定位汇总警告findKnownSecurityProducts去重收集命中项在表格下方以Security Product(s): ...的警告形式汇总输出。2.6 供其他命令复用的辅助函数GetPIDByName按可执行文件名在当前目标上反查 PIDprocdump -n依赖它SortProcessesByPID按 PID 排序供pstree使用。三、pstree进程树渲染虽然ps -T即可触发树形视图但树形渲染的核心逻辑封装在 pstree.go 的PsTree类型中它基于github.com/xlab/treeprint实现node结构体以Value进程信息、Children map[int32]*node、Parent构建多叉树insert通过findParent递归查找 PPID 匹配的父节点找不到父节点的进程挂到虚拟根节点Pid: -1下reorder处理孤儿进程将暂时挂在根下的进程重新挂回其真实父进程下同时特别跳过 Windows 的[System Process]自环边界情况源码注释还引用了 issue #1340filterProc沿用与ps相同的着色逻辑植入进程 PID 绿色、安全产品红色。树形模式下PrintPS会取当前 Session/Beacon 的 PID 作为implantPID传入NewPsTree然后Process Tree:信息块输出整棵树。四、procdump进程内存转储procdump命令实现在 procdump.go用于将远程进程的内存镜像拉取到本地是取证与凭据提取场景的利器。4.1 参数一览参数短参默认值说明--pid-p-1目标 PID--name-n空目标进程名通过GetPIDByName反查 PID--save-s空保存到指定文件存在则覆盖--loot-Xfalse同时存入 Loot 库--loot-name-N空Loot 条目名称可选默认按主机名PID时间戳生成--timeout-t60gRPC 超时秒数--save标志还注册了文件路径补全carapace.ActionFiles()与completers.RegisterLocalFilePathFlagCompletion交互式输入时可按 Tab 补全本地保存路径。4.2 执行流程优先使用-p指定的 PID若-p为-1且提供了-n则调用GetPIDByName解析名称校验超时值必须大于 0显示Dumping remote process memory ...旋转动画con.SpinUntil调用con.Rpc.ProcessDump发起ProcessDumpReq同样支持异步 Beacon 回调路径响应到达后若启用了--loot则先写入 Loot再根据saveTo决定落盘方式。4.3 落盘与 Loot 收纳未指定--save时PrintProcessDump会用procdump_hostname_pid_*模板创建临时文件os.CreateTemp并打印Process dump stored in: 路径指定--save时以0600权限打开/覆盖目标文件LootProcessDump生成procdump_hostname_pid_UTC时间戳.dmp文件名通过 loot 包的CreateLootMessage/SendLootMessage将二进制数据clientpb.FileType_BINARY收纳进团队 Loot 库供后续团队共享与二次分析。五、terminate进程终止terminate.go 实现远程进程终止命令要求恰好一个位置参数PIDterminate PID [-F/--force]--force/-Fdisregard safety and kill the PID即跳过安全确认直接强杀参数解析用strconv.Atoi严格校验非法 PID 直接报错调用con.Rpc.Terminate发送TerminateReq{Pid, Force}同样兼容 Beacon 异步回调结果输出统一走PrintTerminateRPC 错误则红色报错成功则打印Process PID has been terminated。Cobra 侧还为位置参数注册了carapace.ActionValues()补全提示process ID帮助用户理解参数语义。六、servicesWindows 服务管理仅限 Windowsservices.go 实现了services命令族源码注释明确表示希望这个命令仅是临时的 Windows 限制但当前实现中每个子命令都会首先校验目标 OS非 Windows 直接提示The services command is currently only available on Windows并返回。6.1 子命令与参数命令参数说明services-H/--host默认localhost枚举目标上的服务列表services info ServiceName-H/--host查看单个服务详细信息services stop ServiceName-H/--host停止服务services start ServiceName-H/--host启动服务对应的 RPC 依次为Services、ServiceDetail、StopService、StartServiceByName相关请求/响应类型定义可参考 protobuf/sliverpb/sliver.proto。-H参数意味着支持查询远程主机的服务由植入端代为执行。6.2 服务状态与启动类型的可读化源码用常量映射了 Windows SCM 的状态码与启动类型services.go并通过translateServiceStatus/translateServiceStartup输出人类可读文本状态Stopped / Start Pending / Stop Pending / Running / Continue Pending / Pause Pending / Paused启动类型Device (Boot) / Device (System) / Automatic / Manual / Disabled。6.3 表格输出与自适应宽度PrintServices会读取终端宽度term.GetSize根据con.Settings.SmallTermWidth判断宽屏/窄屏宽屏展示Service Name / Display Name / Status / Startup Type / Binary Path / Account六列窄屏退化为三列并按服务名升序排序若枚举过程中存在部分服务读取错误会在表格下方以警告形式说明信息可能不完整。PrintServiceDetail则以键值对形式打印单服务的 Display Name、Description、运行账户、二进制路径、启动类型与当前状态并优先显示 RPC 返回的自定义状态消息。七、实战组合建议结合各子命令的特性常见的红队工作流可以这样编排# 1. 快速侦察目标进程确认无敏感误伤 ps # 2. 查找可疑/目标进程的完整信息注意 EDR 风险 ps -f -e lsass # 3. 以进程树形式观察父子关系定位可疑子进程 ps -T # 4. 对目标进程做内存转储并同时存入 Loot 团队库 procdump -n lsass.exe -X # 5. 清理痕迹或处置无关进程先确认 PID再加 -F terminate 1234在 Windows 目标上services族可以辅助判断目标主机是否运行了安全代理服务与ps内置的安全产品检测形成互补services | grep -i -E defender|falcon|sentinel services info ServiceName八、源码阅读索引若希望深入理解进程命令组背后的 RPC 与植入端实现建议按以下顺序阅读当前仓库命令注册与帮助分组client/command/processes/commands.go进程枚举与安全产品检测client/command/processes/ps.go进程树渲染client/command/processes/pstree.go内存转储与 Loot 集成client/command/processes/procdump.go进程终止client/command/processes/terminate.goWindows 服务管理client/command/processes/services.go命令名常量与帮助分组client/constants/constants.goFlag 绑定与目标过滤工具client/command/flags/flags.go进程相关的 protobuf 消息定义protobuf/sliverpb/sliver.proto小结processes命令组是 Sliver 控制台中最面面俱到的进程操作集合ps承担带安全产品感知的侦察pstree提供层级视角procdump打通内存取证到 Loot 的完整链路terminate提供进程处置能力services则补齐了 Windows 服务维度的管理与枚举。理解这些命令背后的 flag 约束、RPC 双路径Session/Beacon以及植入端过滤、客户端渲染的分工哲学能帮助你在对抗演练中更精准地使用它们同时更清醒地评估每一步操作在目标机器上可能留下的 EDR 暴露面。赞分享网络安全【免费下载链接】sliverAdversary Emulation Framework项目地址https://gitcode.com/gh_mirrors/sl/sliver点击查看免费下载相关推荐Sliver 证书管理命令组源码解析certificates 命令的查询、过滤与过期监控实现Sliver 证书管理命令组源码解析certificates 命令的查询、过滤与过期监控实现 本篇技术指南以 SliverAdversary Emulati网络安全Sliver Beacon 任务管理命令组深度解析tasks / tasks fetch / tasks cancel 实战指南Sliver Beacon 任务管理命令组深度解析tasks / tasks fetch / tasks cancel 实战指南 导读 在 Sliver 中网络安全runc ps 命令完全指南查看容器内进程列表的实现原理与实战用法runc ps 命令完全指南查看容器内进程列表的实现原理与实战用法 导读 runc ps 是 runc 提供的一个轻量级命令用于查看指定容器内正在运行的进程容器运行时云原生创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表