李建春,谢瑞云,张旭博
随着物联网、云计算等新一代信息技术的发展,互联网的规模和应用场景不断扩大和延伸。作为网络通信中的中转节点和传输媒介,路由器应用日趋广泛。它的安全性、健壮性决定了整个网络的安全性和可靠性。
由于路由器在网络通信中至关重要的地位和日益增长的数量,使得路由交换设备的安全性问题受到越来越多的关注。因此,借助管理手段,加强对路由器的安全管理变得尤为重要。在家用路由器中,一般采用web管理接口登录的方式登录管理路由器。这种方式方便快捷、便于操作,但背后存在着较大的安全隐患。攻击者利用路由器系统中存在的漏洞及后门,可以获得路由器的管理权限,对网络安全造成了极大威胁。
本文提出了一种基于固件分析的路由器web页面评估技术,并利用此方法分析了D-link系列路由器web页面漏洞。
路由器作为网络层的一种互联设备,是网络中信息传递的中枢,在网络通信中扮演着至关重要的作用。为了维护网络中路由设备的正常运作,网络管理员经常需要通过各种方式登录路由器进行相关配置和管理。
登录管理路由器一般有以下5种方式[1],其特点如表1所示:
表1 路由器登录管理方式对比
(1)使用串口管理路由器。通过路由器的console口,直接将路由器与计算机的串口相连,在计算机上运行终端仿真软件(例:windows操作系统的超级终端)登录路由器,采用命令行的方式对路由器进行管理。
(2)使用Telnet方式管理路由器。通过网络,利用路由器对Telnet服务的支持,在已知路由器接口IP地址的情况下,使用远程登录方式访问路由器。
(3)使用SSH方式管理路由器。Telnet因为采用明文发送口令和数据,存在安全隐患,容易被人截获。很多网络设备都不开放Telnet服务,而改用更安全的SSH方式。SSH是建立在应用层和传输层基础上的安全协议,使用了多种加密和认证方式,解决了传输数据加密和身份认证的问题,以保证远程登录管理路由器的安全。
(4)通过专门的网络设备管理软件管理路由器。一些大型路由器厂商为管理特定设备而开发和实现专门管理程序来管理设备。这种方式能够最有效地管理特定的网络设备。
(5)使用web方式管理路由器。通过网络,利用路由器对Http服务的支持,使用浏览器登录到web用户界面管理路由器。
在路由器中,使用嵌入式web服务器实现设备图形化界面的远程登录和管理。web服务器工作流程,如图1所示。路由器内嵌的web服务器,具有界面友好、操作方便的特点。但是,便捷的背后却存在较大的安全隐患[2]。
图1 嵌入式web服务器工作流程
通过流程分析可知,web方式登录管理路由设备的安全威胁主要来自于两方面:
(1)Http认证过程。Http认证通过明文方式实现且是基于一次性的口令保护,容易在传输过程中被监听截获。即使采用Https服务代替非加密的Http,为web服务器与HTML浏览器提供一个安全传输通道,也可通过某些降解方式被监听。
(2)路由器系统漏洞及后门。目前,路由设备的安全状况不容乐观,主要威胁来自于层出不穷的安全漏洞和后门。路由器发展到现在,其固件代码的安全性并没有像普通计算机。智能手机发展迅速,一些漏洞利用缓冲机制如NX、alsr、stackcanary等,没有在路由器中大规模启用,使得路由器的漏洞利用变得非常简单。利用路由器的漏洞及后门,攻击者可以获取路由器的控制权限,从而监听、截获及修改经过该设备的所有用户数据,通过篡改路由器关键配置参数,进行网络劫持和网络钓鱼攻击,严重威胁个人用户和企业单位的数据安全。攻击者甚至可以利用大量被劫持的设备对整个网络发起DDoS攻击,从而威胁整个网络的安全。
为了分析路由器web漏洞,常见的路由器评估方法有三种,即黑盒分析、白盒分析和灰盒分析[3]。
白盒分析。从代码级别(可能是反汇编代码、
反编译的伪代码或源代码),通过动态调试或静态反汇编,分析和理解程序的功能、逻辑,找到程序的安全问题等。
黑盒分析。从程序的外部,通过观察程序运行时的行为、规则等,猜测和断定程序可能的实现方法,从而判断是否存在脆弱点等。
灰盒分析。借助一些专有工具(可能需要自己编写),如api监视工具、陷阱工具、内存比较工具、文件监视工具等,对目标程序进行监控,看其发生了什么操作、调用了哪些api、产生了哪些结果、在系统哪些地方安插了HOOK或过滤等,以此猜测和断定程序可能的实现细节
本文提出的分析方法是基于白盒分析的一种方法。
基于固件分析的路由器安全评估技术,在没有源代码的情况下,通过对固件进行分析,获取web应用程序;对程序的行为、数据流进行分析,获取程序的功能、流程、规则及技术实现细节等。利用该技术,可实现对web功能的安全评估,并可对其进行优化、功能增强和漏洞填补等,其中主要包含两项技术。
动态调试。通过调试器对固件中的web应用程序进行追踪分析,清楚了解程序运行后的内部状态、运算结果等信息。
静态反汇编/反编译工具。把程序变为可读的汇编代码或伪代码,然后分析程序的结构、流程和逻辑等。
路由器固件分析是指通过对固化在设备文件系统中可执行程序进行解析从而获取设备的运行机制和功能实现过程,有助于检测设备中隐藏的安全漏洞,从而提高设备的安全性。固件分析流程如图2所示。
图2 路由器固件分析流程
(1)固件获取。固件获取通常采用两种方式,一种是从路由器厂商提供的官方直接下载,本文所使用的D-link系列路由器固件就是通过这种方式获取。二是针对其他无法从官网上直接下载的固件,采用以硬件接入的方式,通过UART串口,直接从路由器闪存中获取。
(2)固件解包及文件系统提取。文件系统中包含路由器实现各种功能所依赖的全部可执行程序和配置文件信息。这些信息对路由器固件的分析至关重要。然而,不同的路由器所使用的文件系统格式和文件系统的压缩算法不尽相同,增加了文件系统提取的难度。文件系统提取一般采取两种方式——手动提取和自动提取。自动提取是使用Binwalk这一全自动固件分析实现文件系统的提取[4]。Binwalk工具能够自动识别固件中所包含的所有可识别的文件类型,然后递归提取。相比于手动提取方式,简单地使用file命令识别文件类型。Binwalk利用libmagic动态库获取所有幻数签名列表,分段扫描路由器固件文件的内存镜像,并对比列表判断每一段是否含有文件幻数标识,最后根据记录的偏移量确定固件文件布局,具体算法流程如图3所示。
图3 Binwalk算法流程
(3)可执行程序分析。在提取出固件的文件系统后,得到了一系列可执行程序和配置文件信息。随后,可以采用动态或静态的方式对这些可执行程序进行分析。路由设备固件中,可执行程序一般是编译后的二进制代码。通过使用ida反编译工具对可执行代码进行反汇编。因为一般家用路由器采用的是MIPS架构,所以可以得到相应的MIPS汇编代码,然后解析汇编代码,可生成函数之间的调用关系图和函数内部的控制流图。对控制流图中MIPS指令进行语法分析和程序指令的语义分析,即可解析出程序中各函数的功能和执行过程。
从D-link官网获取DIR-100型路由器固件,使用Binwalk工具提取出固件的文件系统,提取过程
及结果如图4所示。据图4结果显示,成功从固件中提取出了Squashfs文件系统——squashfsroot。Squashfs是一种只读格式的文件系统,因其较高的压缩率,被多种网络设备所采用。
图4 DIR-100型路由器文件系统提取过程及结果
在提取的文件系统中,可以发现许多实现路由器各种功能的可执行程序。其中,webs程序作为控制路由器web页面登录的可执行程序尤其引人关注。运用IDA工具对webs程序进行反汇编,得到了webs中各函数的调用关系图,发现了一个与登录验证相关的自定义函数alpha_auth_check,其调用关系如图5所示。
通过对alpha_auth_check函数控制流图(如图6所示)中的MIPS指令进行进一步分析,得出该函数从自定义函数alpha_httpd_parse_request中接收一个参数。
图5 登录验证相关函数调用关系
图6 alpha_auth_check函数控制流程
它是一个指向一个数据结构体的指针,里面有一个字符串指针,会指向从Http请求里接收到的各种数据,如Http头信息和请求地址URL,参数存储在寄存器$s2中;然后再将接收到的参数进行字符串strcmp比较操作,调用check_login函数,实际上就是身份验证检查。如果一旦有字符串比较成功或check_login成功,它会返回1;否则,它会重定向浏览器到登录页,返回-1。因此,如果字符串比较成功,就能够跳过身份验证直接登录到路由器的web页面。
按照2.2中所述流程,分别提取出D-link系列DI-524UP、DI-604+、DI-604UP及 TM-G5240等几款路由器多型固件版本文件系统。发现各型固件文件系统中都是由可执行程序webs提供路由器管理员界面操作功能。将webs程序二进制文件加载到IDA中进行分析,得到可执行程序中各功能函数调用关系图。它与3.1中DIR-100型路由器webs程序函数调用图类似,认证功能都是由自定义函数alpha_auth_check实现的。
在深入分析各型路由器较早版本固件中alpha_auth_check函数控制流图后发现,在调用后续函数进行身份认证前,都会从自定义函数alpha_httpd_parse_reques中接收到的参数同固定字符串“xmlset_roodkcableoj28840ybtide”做字符串比较操作,比较操作控制流程如图7所示。如果比对成功,将会跳过接下来的身份认证过程直接登录到路由器web管理界面。
图7 D-link系列路由器特殊字符串比较过程
在对D-link系列路由器不同型号固件对比分析的基础上,针对各型路由器不同版本固件进行对比分析,分析结果如表2所示。
表2 D-link系列各型路由器固件对比
从表2的对比结果可以发现,更新前后的固件差异主要体现在两方面。一方面是新固件自定义认证函数中没有Http头信息、请求地址URL等参数传递,另一方面新固件中也没有特殊字符串的比较过程。
如图8所示,一方面在alpha_httpd_parse_request函数跳转到alpha_auth_check的过程,老版本固件中可以看到alpha_auth_check函数接收了一个参数。它是一个指向一个数据结构体的指针,里面有一个char*指针会指向从Http请求中接收到的各种数据。比如,Http头信息和请求地址URL,参数存储在寄存器$s2中。此处,最大的区别在于更新后的固件在跳转过程中没有包含Http头信息和请求地址URL信息的参数传递到alpha_auth_check函数,即Http头信息、请求地址URL等信息不再作为校验的依据。
图8 alpha_httpd_parse_request函数中的alpha_auth_check函数
如图9所示,另一方面,通过使用Biniff二进制文件比较工具对比更新前后固件中认证函数控制流图后发现,更新后固件删去了对特殊字符串的比较验证,而在老版本中正是通过将Http头信息和请求地址URL中所包含的User-Agent值与特殊字符串进行比较。一旦比对成功,将跳过后续的身份认证。而固件的更新也正是主要通过对上述webs可执行程序中上述两方面内容进行的修改,从而修补了老版本固件中存在的验证绕过后门的情况。
图9 alpha_auth_check函数更新前后对比
本文首先分析了路由器的多种登录方式和web页面登录所面临的安全威胁,然后介绍了常见的评估方法和技术流程,并在此基础上提出了基于固件分析的路由web安全评估方法,且利用该方法对D-link系列多款路由器进行了安全评估,发现了其存在的web页面漏洞。最后,通过对比分析验证了该方法的可行性和有效性。该方法可用于安全厂商或者安全评估人员对路由器的安全评估和分析,以提高路由产品的安全防护能力。
[1] 夏虹.路由器的登录访问与安全[J].网络安全技术与应用,2008(02):32-33.XIA Hong.Logon Access and Security of Routers[J].Network Security Technology and Application,2008(02):32-33.
[2] 夏暄.基于嵌入式Linux的无线宽带SOHO路由器的设计与实现[D].苏州:苏州大学,2008.XIA Xuan.The Design and Implementation of Wireless Wideband SOHO Router Based on Embadded Linux[D].Suzhou:Soochow University,2008.
[3] 陈铭.软件漏洞逆向分析技术研究[D].成都:电子科技大学,2007.CHEN Ming.Research on Reverse Analysis of Software Vulnerabilities[D].Chengdu:University of Electronic Science and Technology of China,2007.
[4] 吴少华.揭秘家用路由器0day漏洞挖掘技术[M].北京:电子工业出版社,2015.WU Shao-hua.Disclosure of 0day Vulnerabilities in Home Routers[M].Beijing:Publishing House of Electronics Industry,2015.