基于污点分析的路由器固件漏洞规模化挖掘
在最近几个月的工作中,我们开发了一套基于污点分析的自动化工具,用于检测路由器中的安全漏洞。该工具针对D-Link DIR-878路由器1.12A1固件中的CVE-2019-8312至CVE-2019-8319等命令注入漏洞进行了优化设计,目标是实现比人工分析更快的漏洞发现速度。
技术方案
现有工具局限性
虽然Triton和bincat等成熟污点分析工具存在,但它们不支持目标设备使用的MIPS架构,因此我们选择基于angr框架开发定制方案。
angr符号执行的瓶颈
初始方案使用angr的符号执行功能进行动态污点跟踪,但面临状态爆炸问题:
- 单个函数分析超时设置为2分钟
- 实际分析耗时超过2小时
- 存在内存泄漏导致内存耗尽
改进方案:到达定义分析
最终采用angr的Reaching Definitions静态分析技术:
- 构建函数内的use-def关系图
- 将原子操作(寄存器/栈变量/堆变量)建模为图节点
- 通过图遍历分析用户输入(source)是否影响危险函数(sink)
示例漏洞代码分析:
|
|
对应的use-def关系图清晰地展示了从get_querystring_value
到system
的污染传播路径。
漏洞发现成果
PROLiNK PRC2402M路由器
- 发现20个命令注入漏洞(10个可通过WAN接口未授权访问)
- 典型漏洞模式:
1 2 3 4 5
void qos_sta_settings() { cli_list = web_get("cli_list", body, 0); sprintf(command, "/sbin/sta_qos.sh setup %s", cli_list); system(command); }
- 额外发现:
- 硬编码后门密码
user
- 栈溢出漏洞(未检查边界的sprintf)
- 拒绝服务漏洞(通过超大循环值导致无限循环)
- 硬编码后门密码
D-Link DIR系列路由器
- DIR-1960:发现4个需认证的HNAP API命令注入
- DIR-X1560(ARM架构):
- 逆向分析复杂的分层架构(DAL/RCL/RUT)
- 通过MDMOID映射表定位漏洞链
- 最终发现4个深层命令注入漏洞
技术演示
工具将分析时间从2小时缩短至2分钟,效率提升60倍。目前主要支持命令注入检测,未来计划扩展缓冲区溢出、UAF等漏洞类型的检测能力。
完整漏洞细节和厂商修复时间线请参阅原文技术分析部分。