ARTICLE DETAIL

资讯详情

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

Windows内网安全:ipc$共享攻击实验与防御加固全解析

Windows内网安全:ipc$共享攻击实验与防御加固全解析 先聊点实在的在内网安全评估和红蓝对抗里ipc$共享可以说是 Windows 环境绕不开的一个老朋友。很多刚接触安全的朋友听到ipc$漏洞攻击会觉得特别高级其实说白了它打的不是某个零day而是 Windows 为了远程管理方便而暴露出来的一个隐藏共享入口再加上口令太弱、补丁缺失、签名没开这些常见的配置债。这篇文章其实是一次我本人在隔离虚拟机环境里完整跑通的实验记录覆盖了从原理、环境搭建、攻击验证到防御加固的全过程。严格来说ipc$本身并不是漏洞它是 Windows 默认创建的隐藏进程间通信共享用来支撑远程管理、命名管道和网络枚举这些功能。真正的风险在于一旦这个入口配上弱口令、空会话或者旧的 SMB 协议就会变成攻击者横向移动的跳板。所以这个实验最大的价值不是教你打下一台机器而是让你站在攻击者的视角看清楚自己的 Windows 主机到底是怎么被人一步步拿下的。特别适合刚入行做渗透测试、在甲方做安全运维的同学以及所有想搞懂 SMB 安全机制的人。1. 实验背景ipc$ 到底是什么为什么总被盯上1.1 从进程间通信IPC说起先补充一个基础概念。IPC 全称是 Inter-Process Communication也就是进程间通信这是操作系统层面的一个通用术语指的是不同进程之间交换数据和消息的机制。Windows 里常见的命名管道、邮槽、共享内存都属于进程间通信的范畴。而ipc$这个隐藏共享名字里的 IPC 就是借用了这个概念它实际上是一个网络层面的命名管道入口供 SMB 协议在主机之间建立远程通信的管理通道。换句话说你在网络上看到的一堆 445 端口流量很多底层走的都是这套通信机制。理解这一点很重要因为后面你看到的空会话枚举、named pipe 远调、计划任务创建本质上都是在利用这个进程间通信的管道做文章。把它理解了就不容易把ipc$和 C$、D$ 这种磁盘共享搞混。C$、D$ 是给管理员远程访问磁盘用的而ipc$更像是一条先建立信任关系的验证通道。1.2 ipc$ 隐藏共享的管理用途Windows 为了便于域管理员和运维人员做远程维护在系统安装完成后会默认创建一组隐藏共享包括 C$、D$ 这样的盘符共享以及 Admin$ 和 IPC$。这些共享在后面加了一个美元符号普通用户在文件资源管理器里看不到它们但通过网络路径是可以直接访问的。ipc$的特殊之处在于它不映射到任何具体目录也不存储实际的文件内容它存在的意义就是允许客户端和服务器之间建立临时连接然后在这个连接上进一步访问其他共享资源。比如你要远程执行一条命令通常会先和目标的ipc$建连通过身份验证后再访问 C$ 或 Admin$最终投放工具或创建服务。注意ipc$是系统内置共享默认开放而且管理员的授权本身是合理需求。真正需要防御的是匿名访问和弱口令验证通过之后的那一系列操作。1.3 常见攻击形态历年来围绕ipc$和 SMB 生态发生的攻击大体有几种形态空会话匿名枚举、账号密码暴力破解、SMBv1 漏洞利用比如永恒之蓝 MS17-010、Pass-the-Hash 哈希传递以及 SMB Relay 中继攻击。我这次实验做的是其中最典型、门槛也最友好的两类空会话枚举和弱口令验证后的横向移动。前者能让你在不提供任何账号密码的情况下去探测目标共享列表、部分用户名和组信息后者则是通过弱口令拿到一个普通用户的权限再借助 ipc$ 这个入口尝试访问管理员共享并执行命令。把这两个跑通你对 Windows 身份验证流程和 SMB 协议的理解会有一个质的提升。2. 实验环境与工具选型2.1 为什么必须隔离环境做这类实验最忌讳的就是拿生产环境或真实公网机器测试。我在本地用的方案是 VMware Workstation网络模式全部设置为仅主机Host-Only这样攻击机和靶机之间可以互通但完全无法访问外部网络也不会被任何外部扫描器盯上。隔离环境的好处有三个第一可以放心大胆地关闭 Windows 防火墙、故意设置弱口令不用怕影响到别人第二漏洞利用和横向移动过程中会产生大量暴力破解和恶意流量在隔离网络里不会污染公司或学校的真实网络第三方便拍快照。我在实验前给两台靶机各拍了一个干净快照后面无论打成什么样一条 revert 命令就能恢复。重要所有攻击步骤请只在你有授权的虚拟环境、CTF 平台或自建靶场中进行。这是安全从业者的基本底线。2.2 靶机与攻击系统选择这次实验我准备了三个虚拟机规格都不高非常轻量靶机 AWindows 7 SP1 x64模拟一台未打补丁的老旧办公电脑重点演示 SMBv1 和高危漏洞问题靶机 BWindows Server 2012 R2模拟一台没有改默认共享、密码较弱的域内服务器重点演示横向移动和后渗透操作攻击机Kali Linux 2024自带 nmap、smbclient、enum4linux、Metasploit 等全套工具有人可能会问为什么还要用生命周期外的 Windows 7因为很多历史漏洞在 Windows 10 和 Windows Server 2019 上已经被默认配置和补丁压死了实验看不到效果。用老系统做靶机恰恰是为了还原当年攻击者的视角。这些虚拟机只在我实验时开机平时处于关机状态不接入任何生产网段。2.3 仿真靶场的扩展思路如果你想把靶场搭得更贴近真实内网还可以引入网络设备模拟器比如 hotkey 相关社区里常见的 hiksimulator它被用来模拟网络摄像机IP Camera设备。真实的办公内网里往往有成百上千个摄像头、门禁、传感器这些设备很多都开着 Web 端口和流媒体端口安全基线极差。在攻防演练中攻击者拿下一台 Windows 主机后下一步扫描到的往往就是这些海康、大华之类的设备。用 hiksimulator 在靶场里挂几路虚拟摄像头流可以让你的实验环境从纯 Windows 域升级成混合物联网内网训练价值完全不一样。不过这一步我是放到扩展阶段做的本次 ipc$ 实验的核心还是先把 SMB 通道打通。2.4 网络拓扑规划网络规划如表所示三台机器都在同一个 Host-Only 网段 192.168.56.0/24角色操作系统IP 地址说明攻击机Kali Linux192.168.56.10执行扫描、枚举和连接操作靶机 AWindows 7 SP1192.168.56.20演示 SMBv1 漏洞、弱共享权限靶机 BWindows Server 2012 R2192.168.56.30演示默认共享、横向移动所有机器都关闭了除 Host-Only 外的其他网卡DNS 也不依赖外部。这样既保证了通信效率又避免了任何外部变量干扰实验结果。3. 攻击实验全流程一步步还原入侵过程3.1 第一步主机发现与服务枚举攻击的第一步永远是探测目标我用 nmap 对网段做了一次快速主机发现nmap -sn 192.168.56.0/24这条命令通过 ICMP 和 TCP 探测存活主机很快就拿到了两个靶机的 IP。接着做精细的端口扫描重点看 135、139、445 这三个端口它们是 Windows 远程管理服务的核心端口nmap -sS -p 135,139,445 -O 192.168.56.20 192.168.56.30从结果可以看到Windows 7 靶机的 139 和 445 全部开放Server 2012 也是同样状态。这里顺便补一句139 端口对应的是 NetBIOS Session Service445 端口对应的是 SMB over TCP两个端口都是 SMB 服务的载体。在现代 Windows 环境里如果你把 139、445 直接暴露到公网基本等于告诉全世界的扫描器来试试我。3.2 第二步空会话枚举验证拿到开放端口后我没有急着上字典爆破而是先尝试空会话。空会话是经典的 SMB 匿名连接方式用户名为空、密码也为空在 Windows Server 2003 时代一度非常猖獗。我直接用 smbclient 做了验证smbclient -L //192.168.56.20 -N-L表示枚举共享列表-N表示不输入密码。在未做安全加固的 Windows 7 上这条命令果然成功了它把本机所有共享列表都吐了出来包括 C$、ADMIN$、IPC$以及可能存在的自定义共享。这就是典型的空会话信息泄露虽然现代系统默认限制了匿名枚举但在很多老旧内网设备、打印机、NAS 上你仍然能看到类似的问题。在 Server 2012 上执行同样的命令返回的是NT_STATUS_ACCESS_DENIED说明较新的系统默认安全策略已经封堵了匿名访问。这条对比非常直观让我意识到同一套攻击手法在不同版本系统上的效果差异很大程度上取决于系统的默认安全基线。3.3 第三步弱口令验证与用户枚举空会话在 Server 2012 上走不通那就换弱口令路线。安全评估中弱口令永远排名第一的高危问题。我先用 enum4linux 做了一次匿名用户枚举看能不能获取到系统用户列表enum4linux -U 192.168.56.30在空会话受限的情况下枚举到的信息非常有限但它的 SID 枚举功能还在通过 SID 反查可以拿到管理员组的 RID 列表。比如本地管理员组的 RID 通常是 500普通用户从 1000 开始这个规律可以用来猜测内置账号。真正的突破来自于弱口令验证我用了一组非常偷懒的字典直接测试管理员最常见的那几个组合administrator/admin、administrator/123456、administrator/Pssw0rdcrackmapexec smb 192.168.56.30 -u administrator -p admin,123456,Pssw0rd --sharescrackmapexec 是内网横向移动里非常好用的工具它会自动尝试建立 SMB 连接验证账号密码是否正确还能顺带列出共享列表。当它显示[]且后面跟着(Pwn3d!)标志时意味着这段凭据不仅是有效的而且拥有管理员权限。这次实验里靶机 B 的 administrator 密码被设置成了 123456很轻松就被打穿了。这里必须强调一点真实环境中千万不要一上来就用海量字典做暴力破解账户锁定策略会在连续输错几次后把账号锁死反而会暴露自己。更稳妥的方式是先做小范围关键词猜测再结合社工信息生成定向字典最后才考虑大字典跑。3.4 第四步通过 ipc$ 建立连接与横向动作拿到有效管理员凭据后我回到 Linux 攻击机上用 smbclient 直接建立到 IPC$ 的连接smbclient -L //192.168.56.30 -U administrator%123456此时返回的共享列表完整且清晰C$、D$、ADMIN$、IPC$ 全部可见。这只是开始接下来我用net use语法在 Windows 上做等价操作把目标 C$ 盘映射到本地net use \\192.168.56.30\ipc$ /user:administrator 123456 net use Z: \\192.168.56.30\C$ /user:administrator 123456第一条命令是建立 IPC 通道第二条命令把 C$ 盘映射成了本地 Z 盘。映射成功后我在 Z 盘下写入了一个带有特定标记的测试文件用来验证文件共享能力。这一步在很多红队操作里就是投放挖矿程序、勒索病毒或后门的起点在实验里我们只放了一个无害的 txt 文件。要实现远程命令执行我用 Metasploit 中的 psexec 模块做了一次完整的演示。psexec 的原理是先通过 ADMIN$ 共享上传一个服务二进制文件再通过 Windows 服务控制管理器远程创建服务并启动从而获得 SYSTEM 权限msfconsole use exploit/windows/smb/psexec set RHOSTS 192.168.56.30 set SMBDomain . set SMBUser administrator set SMBPass 123456 run模块运行成功后直接返回了一个NT AUTHORITY\SYSTEM权限的会话这意味着我已经完全控制这台 Server 2012。整个链路总结起来就是弱口令 - ipc$ 验证 - ADMIN$ 上传 - 创建服务 - SYSTEM 权限这也是大量内网横向移动工具的共同底层逻辑。3.5 实验现象记录整个过程里有个值得注意的细节当 psexec 模块成功执行后靶机 B 的事件日志里会留下服务创建记录和登录记录。如果你是一名防守方这些日志就是你抓住攻击者的关键证据。我在实验结束后专门去翻了事件查看器看到System日志里多了几个类型为服务创建的事件Security日志里也记录了来自 192.168.56.10 的登录行为。攻防一体的感觉就是这么来的。4. 为什么能打下来漏洞根因分析4.1 空会话问题空会话能通本质上是 SMB 协议在设计初期对匿名访问过于信任。Windows NT 时代的很多网络功能比如浏览列表、枚举共享、获取域名信息都依赖空会话来完成所以当时默认放开了匿名枚举。后来安全问题越来越严重微软才逐步通过RestrictAnonymous这个安全选项去限制匿名用户的访问权限。但即使到了今天空会话仍然可能在三种场景中出现一是老系统没有打补丁二是部分应用为了兼容性主动放开了匿名枚举三是 NAS 设备或网络打印机嵌入了不安全的 SMB 协议栈。这也提醒我们协议层面的默认设置往往是最容易被忽略的薄弱点。4.2 弱口令是最大的洞很多人在讨论 ipc$ 漏洞时喜欢盯着某个具体 CVE 编号但根据我自己的观察企业中真正被攻破的案例绝大多数都是弱口令导致的。你打了再多补丁只要密码是 123456、Pssw0rd、Password1 这种攻击者用工具扫一圈就能在一小时内控制整台机器。弱口令之所以如此顽固是因为它牵扯到人性和密码策略的执行力度。很多老系统在装机时默认启用了内置 Administrator 账户而运维为了图省事从不修改密码或设置为简单密码这就等于把一栋大楼的钥匙压在门口地垫下面。在这次实验里整个攻击链路最核心的一环就只是猜中了管理员密码其他都是顺理成章的系统功能。4.3 SMB 签名缺失与中继风险另一个容易被忽视的问题是 SMB 签名。SMB 签名是一种对 SMB 数据包做完整性校验的机制可以防止中间人篡改数据包。如果服务器没有强制启用 SMB 签名攻击者就可以在获取到一份 Net-NTLM 认证请求后把这份凭据中继到另一台服务器上实现 SMB Relay 攻击。我在实验中没有完整演示 Relay但在 4.4 防御部分我会专门提到如何开启签名。这里只想强调一个理念哪怕你的密码够强如果客户端和服务器之间的通信链路可以被篡改和转发攻击者依然有机会利用你的身份。所以防御不是单点加固而是链路加固。4.4 补丁管理与协议降级老生常谈的 SMBv1 和永恒之蓝还是要拉出来讲一遍。SMBv1 是一个非常古老的协议版本设计时根本没有考虑太多安全因素导致它成为大量蠕虫和漏洞的重灾区MS17-010 永恒之蓝就是利用 SMBv1 的缓冲区溢出漏洞实现远程代码执行的。在 Windows 7 靶机上我特意没有禁用 SMBv1配合缺失补丁Metasploit 里的ms17_010_eternalblue模块可以直接打穿系统。整个过程大概只需几秒钟和之前手工走 ipc$ 通道的路径完全不同。它给出的教训是协议越多、越老攻击面就越大能用 SMBv2 或 v3 就尽量别开 v1。5. 检测与防御加固蓝队视角5.1 最小化暴露修改或禁用默认共享前面说了ipc$和 C$、ADMIN$ 都是系统默认共享对于大多数非域环境的个人电脑来说这些共享完全用不上禁用它们可以显著缩减攻击面。你可以在注册表中关闭默认共享然后重启服务[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Server] AutoShareServerdword:00000000 AutoShareWksdword:00000000AutoShareServer 影响的是服务器系统Windows ServerAutoShareWks 影响的是工作站系统Windows 桌面系统。设置完成后重启服务器服务。需要提醒的是这个操作对域控制器影响较大因为某些域内功能依赖默认共享请先在测试环境验证再上生产。我更推荐的做法是不是域环境就直接关是域环境就在防火墙层面限制来源 IP。5.2 账户与口令策略针对弱口令这个最大的洞我建议至少做到以下几点。第一修改内置 Administrator 账户名称并给它设置至少 14 位以上的复杂密码最好能定期轮换。第二禁用 Guest 账户。第三启用账户锁定策略设置阈值比如 5 次锁定 30 分钟这样能有效缓解远程暴力破解。第四不要把本地账户密码设置得和域账户一样否则攻击者一旦拿下本机就能用同一套密码在域内横向扩散。这些策略可以通过本地安全策略-账户策略-密码策略/账户锁定策略来配置。虽然麻烦但这是内网防爆破最基础的一部分。5.3 SMB 协议加固在支持新协议栈的系统版本上关闭 SMBv1 可以用 PowerShell 一条命令Remove-WindowsFeature FS-SMB1 # Windows Server Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocol -NoRestart # Windows 10/11然后强制启用 SMB 签名和加密设置 SMB 服务端的最低安全等级Set-SmbServerConfiguration -RequireSecuritySignature $true -Force Set-SmbServerConfiguration -EncryptData $true -Force开启签名后SMB Relay 攻击的成功率会大幅下降因为中间人篡改数据包时签名校验会直接失败。客户端的签名策略可以通过组策略计算机配置-管理模板-网络-Lanman 工作站里的启用不安全的安全签名来统一管理。这也是为什么企业基线检查中SMB 签名是一个高频排查项。5.4 网络层控制在防火墙或交换机 ACL 上严格限制 135、139、445 端口的访问来源只允许必要的管理网段访问。对于用户终端和服务器可以通过 Windows Defender 防火墙出站入站规则阻断这些端口对所有非白名单 IP 的访问。对公网环境则必须将 445 端口彻底封禁绝不能让 SMB 服务暴露到公网。如果是大型内网建议把核心业务服务器与用户终端划分到不同 VLAN并在东西向流量上部署入侵检测规则专门监控 Anomaly SMB 流量和 SMB 一次性连接频率。因为攻击者一旦在横向移动就会产生大量 SMB 连接这种节奏和正常运维有明显区别是很好的检测特征。5.5 日志与主动监控等到攻击发生后正是日志给了防守方发现和溯源的机会。我在实验总结里整理了需要重点监控的安全事件 ID事件 ID含义监控价值4625登录失败大量失败次数表明存在密码喷射4776凭据验证可以关联到 NTLM 爆破4624登录成功尤其是类型 3 网络登录需要关注来源 IP4698任务创建攻击者常通过计划任务做持久化7045服务安装psexec 攻击会在系统日志中留下服务创建记录1102审核日志被清空攻击者清理痕迹的典型动作你可以结合 Sysmon 进一步加强进程创建和网络连接的审计。我在实验里之所以能轻松复现整个攻击路径从日志角度反着看也一目了然攻击机访问 445、用管理员账号登录、创建服务、启动服务、产生连接。这套链条对防守方来说就是现成的告警规则。5.6 主动自查方法与其被动等告警不如主动检查自己的内网有没有开放不安全的共享。我平时常用的两种自查方式如下。第一在本机检查默认共享是否关闭Get-SmbShare如果看到 C$、ADMIN$、IPC$ 全部还在就想想是不是真的需要。第二用 nmap 扫一下内网网段里的 445 开放情况再配合 smbclient 做匿名枚举测试nmap -p 445 --open 192.168.56.0/24 smbclient -L //目标IP -N建议企业的安全团队每月或者每季度做一次这种扫描并把开放了匿名枚举、空会话共享、SMBv1 的设备列入整改清单。扫描过程本身产生的流量非常小不会对业务造成影响。6. 实验踩坑与常见问题实录6.1 445 端口不通实验中最常踩的坑是攻击机和靶机之间 445 端口不通。排查时我一般按照这样的顺序先确认两台机器在同一网段并且能互相 ping 通再检查 Windows 防火墙很多时候默认规则是仅允许域配置文件下的 445 入站Public/Private 配置文件全部拦截最后确认 Server 服务和 Computer Browser 服务是否已经启动。如果用的是 Windows 10/11 做靶机还要确认 SMB 1.0 支持功能没有被完全移除。6.2 net use 或 smbclient 常见的报错有次我明明输入的账号密码正确net use 却返回错误 1326意思是用户名或密码不正确。排查后发现是因为目标机器上的 administrator 账户被重命名了真实账号是 admin而我还一直用 administrator 这个名字在猜。另一次返回错误 1219意思是不允许使用同一用户名建立多个连接通常是之前已经有过一个连接到该目标的登录会话我手动清理了一下本地凭据缓存就好了。6.3 psexec 失败签名与 UAC 限制psexec 在较新的 Windows 系统上失败最常见的原因是目标强制开启了 SMB 签名而攻击模块默认没有使用签名导致数据包被丢弃。另一个常见原因是 Windows 的 UAC 远程限制当本地管理员账户是内置的 Administrator 时它具备远程管理员权限但如果你用的是普通管理员组的其他成员账户在远程访问 ADMIN$ 时会被 UAC 过滤掉最终只有标准用户权限psexec 自然起不来。解决方法是使用内置 Administrator 账户或者把注册表LocalAccountTokenFilterPolicy设置为 1。6.4 实验后的清理与恢复做实验不是打完了就完事。每次实验结束后我都会把靶机恢复到实验前的快照或者在靶机上检查计划任务、服务、共享目录里是否残留了测试文件。尤其是用 psexec 打过的靶机系统日志里会留有很多服务创建记录这也是我刻意保留的观察攻击痕迹对防守方来说是非常有价值的经验。你需要把那些测试用的共享映射全部断开Metasploit 会话及时关闭避免靶机在实验后成为网段内的一个污染源。6.5 安全边界提醒最后一条也是最重要的一条一切攻击手法只能在隔离实验网段或明确授权的靶场中进行。很多人看了一些攻击教程就手痒拿公司网络甚至外网试这已经涉嫌违法而且会给自己和企业带来巨大风险。安全从业者的核心能力不是打得穿而是守得住。实验的意义是让防守方先理解进攻者的思维再反过来把防御做到位。7. 从实验到实战的一点扩展思路跑完这个 ipc$ 实验其实还能往三个方向继续深入。第一个方向是把环境升级成完整域环境加入域控、DNS、DHCP 和若干域成员主机然后用 BloodHound 这类工具分析域内攻击路径你很快会发现 ipc$ 弱口令只是第一张多米诺骨牌后面还能做 DCSync、Kerberoasting、GPO 劫持。第二个方向是往靶场中加入摄像头、门禁等物联网设备模拟器比如前面提到的 hiksimulator 这类 IPC 模拟器让整体网络更加接近真实办公场景锻炼攻防双方在混合网络中的应急处置能力。第三个方向是把自己的实验过程整理成检测规则把第 5 章提到的事件 ID 组合成 SIEM/EDR 告警再拿这套实验环境当蓝队训练场去验证规则看看能不能在攻击发生的瞬间就告警。根据我个人经验类似 ipc$ 这样的老技术并不会因为系统升级而彻底消失它只是换了个形式继续存在。你今天在 Server 2012 上做的实验明天可能在某个 Windows Server 2022 的边缘设备管理接口上又冒出来。技术的攻防从来不是一锤子买卖而是一场持续迭代的循环实验、总结、加固、再实验。希望这篇记录能帮你把这条链路跑通真正从攻击实验里学到防御知识。
返回列表