基于污点分析的路由器固件漏洞大规模检测技术
工具设计
现有工具局限性
现有污点分析工具如Triton和bincat虽成熟,但不支持目标路由器采用的MIPS架构。
基于angr符号执行的尝试
选择angr框架因其支持MIPS/ARM等多架构。初期使用符号执行生成VEX IR程序轨迹进行静态污点分析,成功发现测试固件中的命令注入漏洞。
但面临状态爆炸问题:当遇到基于用户输入的分支指令时,angr会复制状态,导致分析时间过长(单个函数分析超2分钟,整个二进制分析超2小时)且存在内存泄漏问题。
转向Reaching Definitions分析
采用angr的Reaching Definitions分析生成函数内的use-def关系图。该分析将程序中的原子(寄存器、栈变量、堆变量)构建为使用-定义关系图。
以漏洞代码为例:
|
|
污点源为get_querystring_value(用户输入),污点汇聚点为system。通过分析use-def图,可确定数据是否从源传播到汇聚点。
工具总结
工具利用angr的Reaching Definitions分析生成路由器固件函数的use-def关系图,通过图分析检测用户输入是否到达危险函数(如system)。分析时间从2小时缩短到约2分钟。
漏洞发现成果
PROLiNK PRC2402M路由器
发现近20个命令注入漏洞,其中10个无需认证且可通过WAN接口访问。获得CVE-2021-35400至CVE-2021-35409。
漏洞代码模式:
|
|
污点源:web_get,污点汇聚点:system/do_system/popen
后门密码发现
发现硬编码后门密码"user",通过特殊验证逻辑可登录管理界面:
|
|
后续修复版本中发现备用密码字段Password_backup=nE7n$8q%5m
栈缓冲区溢出
由于缺乏边界检查,多处使用sprintf导致缓冲区溢出,可覆盖返回地址控制程序执行。
拒绝服务漏洞
通过注入超大数值参数使脚本陷入无限循环,导致路由器停止响应:
|
|
时间线
- 6月9日:报告10个命令注入漏洞
- 6月11日:厂商提供修复
- 7月9日:报告后门、缓冲区溢出、DoS漏洞
- 7月23日:厂商完成修复
D-Link路由器分析
DIR-1960
发现约200个结果,经排查确认4个需认证的HNAP API命令注入漏洞。
DIR-X1560(ARM架构)
工具成功适配ARM架构,但固件抽象层较多。发现基于CMS/TR-069框架的复杂架构:
|
|
关键漏洞示例:
|
|
DAL与RCL/RUT连接分析
通过分析OID表建立MDMOID与RCL处理函数的映射关系:
|
|
使用工具辅助查找调用特定MDMOID的DAL函数,最终发现4个命令注入漏洞。
工具现状与展望
目前工具主要针对命令注入漏洞,对复杂固件(如DIR-X1560)仍需人工分析HNAP函数的调用关系。未来计划扩展支持缓冲区溢出、use-after-free等其他漏洞类型的检测。