ARTICLE DETAIL

资讯详情

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

网络设备漏洞挖掘:从信息收集到CNVD通杀漏洞实战

网络设备漏洞挖掘:从信息收集到CNVD通杀漏洞实战 做网络设备方向的漏洞挖掘挺有意思外面的人总觉得信息收集就是拿去扫描器跑一圈然后等结果。但真正能拿到CNVD通用软硬件漏洞证书的人往往赢在信息收集阶段——目标选对了固件拆透了指纹代码熟后面挖洞几乎就是流水线工作。这篇想把整个流程复盘一遍重点聊聊怎么把一个点变成影响全系列设备的通杀漏洞以及在CNVD平台走通用漏洞流程时要注意的细节。我自己接触CNVD有几年了中间踩过不少坑。最典型的是第一次挖到一个看似很严重的问题结果提交后只评了个低危原因是影响范围描述不清楚、只有单一版本复现审核员没法确认它是通用型漏洞还是个别设备的问题。后来才慢慢悟过来网络设备领域的通用漏洞本质上拼的不是运气而是对产品线和固件代码的熟悉程度。你也别把这件事想得太高深只要流程对、方法对新手同样可以在几个星期内挖出人生第一个CNVD证书。好下面直接从证书评定规则讲起这是整个方向的地图。没有这张图你会在后半程迷路。1. 弄懂CNVD证书规则通杀才不是瞎折腾1.1 通用软硬件漏洞证书和事件型漏洞证书的差别先明确一个概念在CNVD体系里漏洞证书不是只有一种。我们平时挂在嘴边、找工作想写在简历上的CNVD证书一般指通用软硬件漏洞类型的证书比如某厂商生产的路由器、防火墙、交换机、NAS、工控网关这类产品被发现有共性缺陷。还有一类是事件型漏洞通常意味着漏洞只影响某个特定部署场景或者只是一次性事件这种往往没有通用证书。很多人提交后拿不到证书很可能是把事件型漏洞当通用漏洞提交了。比如你发现某台学校网站的某套系统有XSS但它不是公开出售的通用软件审核员看完很可能只给编号或者直接忽略。而网络设备不一样厂商会批量生产、大量销售同样一台设备全国可能有几十万个在线实例天然符合通用性这一条。1.2 网络设备通杀漏洞的含金量在哪里所谓通杀我理解的不是那种写个脚本批量打全网的可疑思路而是说同一个漏洞模式能覆盖一个产品家族的多个型号甚至跨代际存在。比如某厂商的智能网关产品线中低端和高端产品其实用同一套Web管理框架你在入门款上发现了一个配置接口未授权访问那么高端型号大概率也可能存在因为代码是同一个分支剪出来的。这种通杀漏洞在CNVD评级里相当占便宜。审核员判断危害等级时除了漏洞本身的技术严重度还会重点看影响范围。同样一个普通命令注入如果只影响一个工程师手搓的开发板顶多算个中危但如果影响某厂商全系路由器并且固件下载量巨大评级大概率会往上走。证书等级的差异直接影响积分和曝光度这是最现实的收益。1.3 高校学生、甲方安全工程师和新手为什么建议先做网络设备我接触过不少刚入门做漏洞挖掘的读者一上来就盯着OA系统、电商系统天天跟WAF斗智斗勇挖了几个月可能一个通用证书都拿不到。网络设备方向对新手其实更友好原因有三。第一网络设备的固件迭代极慢。很多厂商一年才更新一两次甚至出了严重漏洞才临时发补丁代码基线常年不变你发现的问题可以稳定复现很久。第二网络设备的攻击面很固定。翻来覆去无非是Web管理接口、telnet/SSH、SNMP、UPnP、TR-069、诊断工具这些比互联网应用的业务逻辑简单得多。第三固件是静态的你能拿到整个文件系统慢慢分析不像Web系统是个黑盒在白盒环境下挖洞难度下降不少。2. 网络设备信息收集先把家底摸清楚2.1 不要撒网先锁定一家厂商和一个产品线信息收集的第一步往往是定方向这一步很多人草率了。我今天打开FOFA搜router明天上Quake搜防火墙这种东一榔头西一棒子的做法效率极低。你要做的是挑一家厂商最好是有完整产品矩阵、固件更新又不太勤快的公司然后围绕它的几款明星设备深入研究。我自己比较喜欢选那种有中小企业路由器无线网关企业级交换机分类的厂商。原因很简单这类设备通常跑着精简版Linux或者VxWorksWeb管理端很多是用GoAhead或是嵌入式轻量级服务器写的代码结构相似度高特别容易出通杀型漏洞。你先去官网把所有型号、硬件版本、固件版本号列一张表再配合更新日志标出哪些型号还在维护哪些已经进入EOL生命周期结束。EOL设备别放过厂商往往不再修复但用户还在大量使用漏洞价值有时候反而更高。2.2 暴露资产测绘指纹比标题更值钱锁定产品线后下一步是在公网测绘平台寻找真实暴露资产。这一步的主要目的不是直接打而是验证影响范围和产品代码复用程度。我习惯用FOFA和Quake交叉验证。先用最简单的关键词比如厂商英文名、设备型号、Web管理端的标题再进一步提取特征。这里说的指纹不只是favicon或者title还包括HTTP返回头中的Server字段很多嵌入式设备会带lighttpd/1.4.x、httpd/2.0之类特征登录页的固定JS文件名比如/js/security.js、/cgi-bin/luci静态资源路径里的产品代号比如/images/company_logo.png通过URL路径能反推设备型号证书中的组织单位有些设备默认使用相同的自签名证书。把这些指纹收集到自己的笔记里然后用Nuclei或者自己写的Python脚本去做存活探测最后统计一个粗略的在线设备数量。这个数字在你提交CNVD报告的时候可以直接用例如经互联网测绘受影响设备在线数量超过5万台审核员看到这种描述会明显更当真。2.3 固件下载和解包信息收集的最大金矿如果说指纹是地图那固件就是金矿。多数厂商在官网支持中心会提供历史固件下载链接注意下载时别只拿最新版要把相邻的几个旧版本一起拉下来。有时候还需要去论坛、网盘找一些已经下架的存量固件这些老固件通常藏着很多历史问题。固件拿到手后先做解包。我常用的工具是binwalk先binwalk 固件.bin看看有没有文件系统特征遇到ubifs、jffs2、squashfs就解出来。如果遇到加密固件可以先看看官方uboot或者bootloader配置很多设备的加密其实是XOR变换或者简单AES密钥密钥就硬编码在bootloader里。解开后重点关注几个路径/etc/看shadow、passwd、default_config默认配置里经常有调试密码。/web或/wwwWeb管理端的全部源码挖漏洞主要看这里。/sbin/后台服务二进制很多命令注入漏洞的触发点在这里。/lib/libnvram*网络设备的配置存储接口nvram的读写逻辑会直接影响漏洞利用方式。比如我解包某款企业路由器固件时在/web/cgi-bin/下看到有ping_test.cgi顺手看了下它调用了系统ping命令而且参数直接拼接了用户输入这就是典型的命令注入入口。整个过程没有用到任何复杂的现代工具就是binwalk加grep。2.4 把设备服务列表和常见功能点摸一遍信息收集最后一步是搭一个本地环境把设备的服务开起来。手头有真机最好没有真机也可以用模拟器比如qemu跑部分固件但网络设备外设多模拟器不一定能完整跑起来。我建议条件允许还是买台二手设备几百块钱能把整个攻击面摸得明明白白。启动设备后用nmap扫描所有端口然后逐个确认服务版本。网络设备常见开放端口有80/443、22、23、161/162SNMP、1900UPnP、4567/8080等。接着把Web管理端的目录结构爬一遍记录登录接口、配置导出、日志查看、系统诊断、固件升级这些功能点。这些功能点会在后面漏洞挖掘阶段变成具体的测试对象。3. 从信息到漏洞四类最值得先看的通杀切入点3.1 硬编码账号和默认配置最朴实但最有效挖网络设备漏洞第一优先永远是固件里的硬编码信息。为什么因为这类漏洞是天然的通杀——同一个固件刷到成千上万台设备上硬编码的账号密码在所有设备上都存在甚至跨型号通用。具体做法解包固件后在文件系统里对关键词做全量检索我通常会把admin、password、passwd、secret、backdoor、debug、test这些词捞出来然后过滤掉正常业务代码重点看初始化脚本、配置文件、二进制字符串三类内容。比如有些设备在/etc/init.d/里写了echo admin:admin | chpasswd如果后面没做强制修改那这台设备出厂就是弱口令。还有一种更隐蔽的情况Web管理后台隐藏了一个调试接口固件代码里写死了用户名密码常量。这种接口不会出现在登录页面上但路由存在只要你用固定的串访问就能直接查看系统信息。我在一个无线网关固件里就见过类似代码最终确认影响该厂商三款不同型号的路由器。3.2 未授权接口和访问控制缺陷企业网络设备的高发区企业级网络设备比家用设备更看重功能比如访客网络管理远程维护零配置上线这些能力因而会开放一些原本不该匿名访问的接口。很多开发为了图省事把接口设计成只需要在内网/特定网段可访问但没有加真正的身份校验结果公网IP一旦能直接访问就成了未授权接口。挖掘思路其实很朴素用Burp Suite抓一遍Web管理端的所有请求特别是登录前的接口或者登录后返回的一些资源引用。重点看静态文件路径中是否包含配置文件比如/backup/config.xml、/tmp/system.conf是否存在/cgi-bin/下的管理命令在没有会话Cookie时是否仍然返回数据登录接口是否存在记住密码或者调试模式参数改一下参数是否就能绕过登录。曾经有一个厂商的商用AP控制器平台默认将设备信息、WiFi密码、管理员密码哈希存储在某个后台JSON接口里这个接口原本应该校验来源IP但固件里校验逻辑写反了直接导致未登录也能读取全部配置。当我用同一产品线的另一个型号固件验证时发现接口路径完全一致这就是通杀。3.3 命令注入和远程执行诊断功能是重灾区网络设备最容易出现命令注入的位置通常是Web管理端自带的系统诊断功能比如ping测试、traceroute、Nslookup、网络抓包。这些功能需要调用系统命令完成如果开发者直接把用户输入拼进system()或popen()又没有严密过滤后果就是可以执行任意命令。我自己的习惯是在固件里搜索调用外部命令的关键字popen、system、exec、shell_command、doSystem。定位到函数后再看参数来源。如果是Web请求参数紧紧盯住参数值有没有经过转义。然后在不影响设备稳定性的前提下做非常克制的输入测试比如提交127.0.0.1、带空格的DNS地址、带分号的IP字段等等。一个很重要的经验是很多开发会过滤;和|但不会过滤$()和反引号。你可以构造既包含常见命令又包含特殊字符的畸形输入看返回结果是否出现命令执行的特征。这类漏洞一旦确认修复建议通常会写对输入做白名单校验而不是黑名单过滤这也是CNVD审核员比较认可的专业表述。3.4 补丁对比和历史漏洞变种用厂商自己的修复找突破口如果你盯着一家厂商的产品线足够久会发现一个规律厂商这次修复了一个命令注入漏洞修复方式往往只是在漏洞点加了个strstr过滤。随后这个修复代码会被同步到其他型号的固件分支中但其他型号可能还残留了另一个调用链或者过滤可以被编码绕过。这就是补丁对比的价值。具体怎么做下载漏洞公告中提到的受影响版本固件和修复后的版本固件用BinDiff或diaphora对比关键二进制函数的差异。看到厂商改了哪些地方就能精确知道漏洞点在哪。然后拿着这个修复差异去其他型号的固件里搜同样的函数如果其他型号没有同步修复恭喜你一个新通杀漏洞到手了。我自己觉得这个方法特别适合那些对某个厂商已经有一定积累的人。比如某厂商的智能交换机曾经爆过一个命令注入漏洞公告里的补丁只改了web_cmd.cgi的输入过滤但我后来在它的另一款工业级交换机固件里搜索同一个.cgi文件发现这个文件整个都是老版本压根没同步任何补丁。这种漏洞提交后审核员会非常认可因为它有明确的版本对比、有完整的漏洞根因不是靠猜出来的。4. 从验证到提交CNVD最后一公里最容易翻车4.1 影响面验证一台设备不算数一个产品线才算说实话很多人挖到漏洞后最兴奋但也最容易在这里翻车。你在一台设备上复现了漏洞别急着提交。先冷静下来做影响面验证这也是通杀能不能被承认的关键。首先是多版本验证。至少拿三个不同版本的固件测一遍同时确认是全部受影响还是有部分版本已经修复。如果新版本已经修复那你要在报告中明确列出受影响版本范围不能模糊成所有版本。其次是跨型号验证。如果条件有限也至少把固件下载下来做静态确认看看同一段代码是否存在于其他型号的Web目录中。最后是在线资产统计用指纹去测绘平台搜一下估算暴露设备数量。这些数据最终都会变成报告里最有说服力的证据。4.2 漏洞报告怎么写才能过审核提交CNVD不是发一条朋友圈报告质量直接决定审核速度。我自己总结了一个比较标准的写法漏洞名称一定要规范通常是厂商名称产品名称具体功能模块漏洞类型例如某厂商XX系列无线路由器Web管理接口命令注入漏洞。漏洞描述部分除了说明漏洞现象要把技术根因讲清楚比如由于ping_test.cgi未对用户提交的IP参数进行过滤直接拼接入system()执行导致远程攻击者可在未授权的情况下执行任意命令。复现步骤要简练但可操作不要贴大段代码而是写清楚登录后台-进入系统诊断-输入特定字符串-观察返回结果。如果你使用了PoC建议把PoC放在附件中并简单说明演示效果不要附带批量利用脚本。影响范围要给出具体的型号和固件版本列表最好再加一行根据FOFA检索公网受影响设备约XX台。CVSS评分建议认真填。网络设备的管理接口如果直接暴露公网那么AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H这种组合很常见。分数填高了审核员会觉得你夸大填低了又会低估漏洞价值所以最好先搭个本地环境按实际条件去调整。比如某些漏洞需要登录后台才能触发那PR就要写成L或H不能无脑填N。4.3 激励汇总、审核周期和证书获取提交入口在CNVD官网的漏洞提交板块需要注册账号。提交后系统会生成漏洞编号之后进入审核阶段。通用软硬件漏洞的审核周期一般不固定快的一周慢的可能一个多月。中间如果审核员对描述有疑问可能会在平台内留言或打电话核实保持联系方式畅通很重要。审核通过后你会得到一个CNVD编号例如CNVD-2023-XXXXX。通用软件漏洞证书通常以CNVD证书的形式发放个别漏洞还会结合厂商确认情况给出更高一些的积分。证书可以在平台个人中心下载很多安全从业者把这个当作能力证明。但我想提醒一句证书和学习漏洞挖掘方法本身相比后者重要得多。你真正应该积累的是看固件的敏感度和理解产品业务逻辑的能力证书只是副产品。4.4 合规底线授权和边界问题不容含糊最后这部分必须说因为网络设备漏洞挖掘很容易越过安全研究和非法入侵的界线。你所有的测试都应该限制在自己拥有、或者获得厂商/平台授权允许测试的范围内。公网测绘得到的大量设备可以作为影响面统计的参考数据但绝对不要对未授权的在线设备直接发起测试哪怕只是发一个验证请求也可能触犯相关法律法规。CNVD本身也提倡白帽在合法合规的前提下提交漏洞。在报告中如果你提到公网设备数量建议注明是通过公开测绘数据估算不要贴具体IP更不要展示任何可能危害到真实设备的验证截图。有些漏洞信息在厂商修复前是需要保密处理的提交后不要急着公开遵守平台规则也是对自己负责。另外一个细节是如果你参与了厂商SRC或其他漏洞平台的项目提交到CNVD之前最好确认是否有排他协议。有些厂商SRC不允许同时提交到第三方平台这种情况下先尊重厂商规定或者直接放弃CNVD证书别为了一个证书把自己搞出一堆事。测了不少网络设备固件之后我最大的体会是信息收集和固件解包花费的时间和挖洞本身差不多五五开甚至更高。但恰恰是前面那些慢工细活决定了你能挖到的是孤立问题还是可以覆盖全产品线的通杀漏洞。我自己现在拿到一个陌生设备第一反应不是开扫描器而是先把固件下载下来解包看看Web目录里有多少个.cgilibnvram里存了哪些敏感配置。这个过程听起来不酷但实际产出远高于那些到处乱撞的测试。如果你也想拿CNVD网络设备方向的通用漏洞证书不妨从一家你熟悉或有现成设备的厂商开始先把它所有型号的固件都下载下来对比差异摸清攻击面然后沿着硬编码、未授权访问、命令注入、补丁对比这四条路依次过一遍。走完这条路你对通杀的理解就不再是一个玄学词而是一套可以重复执行的方法论。
返回列表