把端口落到进程
Windows 的暴露面同样由监听端口决定,区别在于端口与进程的对应关系要靠查询建立。核查的目标是把每个监听端口映射到具体进程,并给出业务归属:445、3389、5985、5986 这几个默认存在的端口尤其需要说明是否必要、是否限制来源。找不到归属的对外监听端口,一律列为处置项。
基本信息
| 加固项 | 暴露面清单 |
|---|---|
| 适用平台 | Windows 10/11 与 Windows Server 2016+ |
| 风险等级 | 高 |
| 基线 | 对外监听逐条有业务归属与来源限制 |
| 执行权限 | 建议以管理员身份运行,便于解析进程信息 |
典型使用场景
- 交付核查:给出主机对外暴露端口的完整清单
- 事件排查:发现异常监听端口,反查进程与启动路径
- 变更复核:安装软件后确认新增了哪些监听端口
- 边界收口:与防火墙策略对照,确认放行范围与监听范围一致
- 横向排查:同类主机端口清单不一致时,找出被额外开启的机器
核查命令
核查命令
Get-NetTCPConnection -State Listen | Select-Object LocalAddress,LocalPort,OwningProcess | Sort-Object LocalPort | Select-Object -First 30
Get-NetTCPConnection -State Listen | ForEach-Object { [PSCustomObject]@{ Port=$_.LocalPort; Addr=$_.LocalAddress; Proc=(Get-Process -Id $_.OwningProcess -ErrorAction SilentlyContinue).ProcessName } } | Sort-Object Port -Unique | Select-Object -First 30
Get-NetUDPEndpoint | Select-Object LocalAddress,LocalPort | Sort-Object LocalPort | Select-Object -First 20输出读法
| 字段或端口 | 含义 | 判读要点 |
|---|---|---|
| LocalAddress | 监听地址 | 全部地址表示任何可达来源都能连,回环地址仅本机 |
| LocalPort | 监听端口号 | 与业务清单比对,未登记端口列为处置项 |
| OwningProcess | 占用端口的进程号 | 用进程号反查进程名与可执行文件路径 |
| 445 | SMB 服务 | 文件共享入口,需确认是否对外与是否限制来源 |
| 3389 | 远程桌面 | 勒索入口常客,公网暴露需叠加多层防护 |
| 5985 与 5986 | WinRM 远程管理 | 确认是否必要,并限制到管理网段 |
系统进程持有的端口要单独深挖:PID 4 对应的 System 进程可能代表内核态服务(如 SMB 与 HTTP 服务),此时用 Get-NetTCPConnection 只能看到进程名。可结合 HTTP 服务的状态查询命令进一步定位是哪个服务在占用。
监听地址决定暴露范围:全部地址与回环地址的含义完全不同,判读时先看地址列再看端口。只按端口号统计会把本机回环上的服务也算成对外暴露,结论偏差会直接影响整改清单的准确性。
与防火墙结果合并
端口清单要与防火墙配置一起看:主机防火墙规则决定哪些端口真正可达。建议报告分两栏,一栏列本机监听端口,一栏列放行规则,两者取交集才是实际暴露面。云主机还要再加一栏云侧安全组,三层对齐之后结论才完整,排查端口不通时也能迅速定位是服务没起还是被挡住了。