4. 网络拓扑分析与攻击面理解

说实话,做渗透测试或者安全评估,很多人一上来就拿着扫描器乱扫。我觉得这样效率很低。

为什么?因为你连网络长什么样都不知道。你连资产在哪、数据往哪流都不清楚,扫出来的漏洞再多,也拼不成一条真正的攻击路径。

我个人习惯,第一步永远是先搞定拓扑。说白了,就是画地图。你得知道敌人在哪,才能决定从哪打。

4.1 什么是暴露路径?

暴露路径,就是攻击者能从外部接触到你内部资产的一条完整链路。它不只是一个IP,一个端口,而是一连串的“跳板”。

我举个例子。你在公网上开了一个VPN网关。攻击者通过暴力破解进去了,然后他顺着VPN隧道,访问了内网的一台文件服务器。文件服务器上有个 Web 应用,存在文件上传漏洞。他利用这个漏洞,拿到了服务器的Shell。最后,他在这个服务器上找到了运维的密码本,直接登录了核心数据库。

你看,这就是一条完整的暴露路径。

每个环节,都是一个暴露面。我们的工作,就是把这些面全部找出来。

一个经验:别只看防火墙策略。很多暴露路径是从“合法访问”开始的,比如VPN,比如跳板机。攻击者不会硬闯,他们会借用你信任的通道。

4.2 攻击面:到底有多少种?

攻击面,我一般把它分成三类。你记住这三类,评估的时候才不会漏。

攻击面类型 具体内容 我碰到过的坑
网络攻击面 开放端口、暴露服务、边界设备、VPN、Web服务 曾经有一个客户,防火墙策略做得很严,但邮件服务器有个接口没关,被用来做代理
软件攻击面 应用漏洞、API接口、中间件、插件、第三方SDK 最常见的是第三方库。有一次,一个老旧的前端组件里藏了个XSS,所有人都没注意
人员/物理攻击面 社工、钓鱼、U盘、机房访问、Wi-Fi劫持 物理攻击最容易被忽略。我记得有个项目,攻击者直接混进机房插了个小盒子

你想想看,如果只盯着网络攻击面,软件和数据层的风险就会漏掉。反之亦然。我觉得,做风险分析,必须把这三种面放到一张图上一起看。

4.3 拓扑分析:我常用的三步法

拿到一个网络拓扑图,怎么着手分析?我一般会做三件事。

第一步:绘制“信任流”

别只看物理连接,要看数据流向。是谁允许访问谁的?

  • 源:谁发起的请求?用户端、外部应用、还是内部自动化脚本?
  • 目标:请求落到哪个服务器、哪个数据库?
  • 协议与端口:这是关键。HTTP (80/443) 和 SSH (22) 的风险等级完全不同。

我在项目中遇到过,拓扑图上画的是“办公室-核心交换机-服务器”。但真实的流量是“办公室-互联网-云WAF - 阿里云-内网”。画错了,防守就全错了。

第二步:标记“暴露点”

在信任流上,把所有“从外部能直接接触到的点”圈出来。这些就是暴露点。比如:

  • 公网IP和域名
  • 对外开放的端口(尤其是非标准端口)
  • VPN、远程桌面、堡垒机
  • 面向公网的API网关
注意:千万别小看那些“仅供内部使用”的接口。我曾经见过,运维把内网数据库端口直接映射到了公网,只因为“临时调试”。这个就叫“隐形暴露面”,最危险。

第三步:推导“攻击路径”

有了暴露点和信任流,你就可以串联路径了。我会问自己:

  • 从暴露点A进去,我能看到什么?
  • 我看到的东西,能让我接触到什么敏感数据?
  • 接触数据之前,我需要绕过几层认证、几段网络隔离?

这三步走下来,你基本就能把一张静态的拓扑图,变成一张动态的攻击面地图。

4.4 工具与自动化分析

纯手工搞,太慢了。尤其是涉及几十上百个网段的大项目。我一般会这样组合工具:

  • Nmap + Masscan:快速探测存活主机和开放端口。Masscan 扫大网,Nmap 扫细节。
  • BloodHound:分析AD域内的信任关系和攻击路径。这个工具我强烈建议你学一下,它能让你看到“能走多远”。
  • Shodan / FOFA:用来检查公网暴露面。把你公司的IP段丢进去,看看有多少“惊喜”。
  • 自定义脚本:我个人会用 Python 写个简单的分析脚本,把 Nmap 的结果导入,自动画出信任流。

工具是辅助,思路才是核心。你拿 BloodHound 扫了一圈,但分不清哪个账户是管理员,其实信息量还是不够。你得理解它的输出,理解业务逻辑。

4.5 把手绘的拓扑变成攻击面地图

这就是本章最核心的东西。我把它总结成一个流程,你可以照着做。

自动发现与攻击面映射流程 自动发现与攻击面映射流程 自动化扫描 Nmap / Masscan 人工渗透验证 漏洞利用 / 凭证测试 拓扑建模 BloodHound / 自定义 攻击面列表 网络 / 软件 / 物理 暴露路径推导 串联资产与信任流 风险评级 高 / 中 / 低 注意事项 1. 自动化扫描会漏掉“隐藏面”,比如内部API、非标准端口。 2. 人工验证可以补漏,但容易漏掉横向移动路径。 3. 别把工具输出当最终结果,要结合业务上下文。

4.6 一个真实案例

我之前帮一个金融客户做评估。他们拓扑图看着挺标准:办公网、生产网、测试网,三层隔离。

但我的自动分析脚本发现了一个奇怪的流量:生产网的一台服务器,在凌晨3点,不断向测试网的一台机器发连接。端口是 4444。

这个端口不在任何白名单里。我手动连了一下,那边居然跑着一个反向Shell。

我们顺藤摸瓜,发现测试网那台机器早就被攻陷了。攻击者通过测试网,跳到生产网,把数据库的余额表改了个乱七八糟。

结论:拓扑图上的隔离,永远不会等同于现实中的隔离。人、流程、配置,任何一个地方出了错,隔离就是一张纸。你的攻击面分析,必须能穿透这张纸。

4.7 给你一个小提示

做暴露路径分析,别只盯着技术。我建议你把这个结果展示给老板看。

怎么展示?别丢一堆IP和漏洞列表。画一张图,标出“攻击者从公网出发,经过A到B再到C,最后拿到核心数据需要几步”。每一步可能被哪条防线拦住?哪些防线是空的?

这样一来,老板能看懂,也知道该往哪投钱。这才是风险分析的价值所在。

好了,这一章就讲到这。拓扑分析这块,动手比动脑更重要。我建议你找个自己的环境,或者找个靶场,按我上面的三步法走一遍。你会发现,原来那些不起眼的角落,藏着那么多“惊喜”。