腾讯安全中心 · 2015/07/21 14:09

博文作者:zhuliang

0x00 前言


随着互联网的发展,越来越多公司推出了智能路由器,这些智能路由器给用户带来了众多便利的功能,同时也采用了一些传统路由器不具备的安全特性,本文在简要分析下这些安全特性,供相关技术人员参考。

0x01 概述


传统路由器有意或无意地使用了种种不安全的特性,如预留后门,这些后门原本是为了现场调试方便,但是也开放了黑客进入的通道。又比如某些路由器WPS(Wi-Fi Protected Setup)的PIN码是可以根据路由器MAC地址推导出来的,这使得即使用户设置了复杂的WiFi密码,黑客也可以轻易破解进而渗透。另外,大部分路由器在固件更新时都没进行签名校验,这使得黑客可以通过固件更新来植入木马,进而永久控制用户的路由器……等等这些不安全特性,是导致用户隐私泄露和财产损失的帮凶。 在这样的背景下,智能路由器采用了一些安全特性,特别值得赞赏。

0x02 安全特性


下面以路由器生产商为单位,介绍其采用的安全特性及其安全特性带来的好处。只做纯技术的探讨,不涉及其他。

0x03 360安全路由器


现场调试接口RSA-1024加密和校验

路由器生产商为了在排错或调试时能直接得到rootshell,通常会在路由器上预留后门,参考github.com/elvanderb/T…及www.cnvd.org.cn/flaw/show/C…,这些后门能为生产商所用,也能被黑客所利用。特别是能远程利用的后门,黑客能远程获得路由器的所有权限,配合其它攻击能造成用户财产上的损失。

360的C301路由器是这样做的:公钥/etc/defdata/debug_telnet.pub.key存在于路由器的固件里,生产厂商用与debug_telnet.pub.key对应的私钥加密特定U盘的序列号,并把加密结果存放到该U盘根目录下的telnet.boot文件中,向C301路由器的USB接口插入该U盘,后台自动运行如下的命令行,也就是启动telnet的服务端:

#!bash
/usr/sbin/telnetd -l/usr/sbin/login -u 360user:alpha360 -i br0 &
复制代码

见程序debug_telnet如下代码:

telnet服务端启动后,只要telnet路由器的ip地址再输入用户名和密码(360useralpha360)便可以获得root shell

不难看出,要获得路由器的root shell有两个条件,一是要插入U盘,这要求能接触到路由器,同时也防止了远程利用;二是U盘根目录下的telnet.boot文件必须是用私钥加密U盘序列号的结果,而私钥掌握在生产商手中,黑客不能轻易获取到。

公钥的详情如下图所示:

总的来说,C301路由器采用非对称加密实现既能得到路由器的root权限,又能防止黑客获得root权限,相对于预留后门的做法,表现出值得传统路由器学习之处。

固件更新签名校验

C301路由器的固件采用了AES加密,解密后的固件里含有对该固件的签名,固件更新时会先进行签名校验,校验不通过则认为固件是篡改过的,从而拒绝固件更新。

0x04 小米路由器


固件更新签名校验

小米路由器进行固件更新时同样会进行签名校验,文件/usr/share/xiaoqiang/public.pem是它的公钥,用来校验签名正确与否。正因为这样,黑客如果想在不拆机的前提下刷入已植入木马的固件,只有两条路可走,一是通过入侵、社工或破解得到对应的私钥,然后对修改后的固件进行签名再刷入;二是通过漏洞,挖掘新的漏洞或者刷入有漏洞的旧版固件,然后再通过漏洞利用得到root shell进而刷入任意固件。一般来讲,第一条路是很难的,而为了堵住第二条路,可以通过限制降级来实现。

由此可见,在限制降级的前提下,在固件更新时进行签名校验,能有效地防止路由器被植入木马。

0x05 极路由


固件更新Hash校验

极路由进行固件升级的时候同样会进行校验,只不过是进行MD5的HASH检验,而不是用非对称算法来校验,虽然它下载固件时,用的是HTTP下载,可被劫持,但是固件的HASH信息是通过HTTPS来传输的,可保证安全,固件下载后会验证MD5值是否匹配,不匹配则不升级。这样只要保证升级服务器不被入侵就能保证刷入的固件是官方的。

固件升级时的校验被多次提到是因为它很重要。因为如果路由器被黑客通过管理界面刷入了被植马的固件,那么黑客就拥有了所有的权限,这样,我们平常教育用户使用复杂密码所付出的努力便付诸东流,不管设置多么复杂的密码、怎么经常修改密码黑客都可以通过木马获取到。

配置信息加密保存

极路由如mac地址、fac_uuid等配置信息是用DES算法加密后存在路由器的NOR FLASH上的,相对于传统路由器直接明文保存的,在有root shell的权限后,便可轻易得到WiFi密码、Web登录密码等敏感信息,加密保存在一定程度上提高了门槛。

WPS功能关闭

极路由是不提供WPS功能的,这样可以防止黑客通过WPS的PIN码破解,从而得到WiFi的WPA密码入侵。非要提供WPS功能的话,也应该做到下面两点,一是启用WPS防护,二是默认的PIN码要随机,不能推导出来。http://www.devttys0.com/2014/10/reversing-d-links-wps-pin-algorithm/和http://www.devttys0.com/2015/04/reversing-belkins-wps-pin-algorithm/就是两个反面例子,因为用户一般不会去修改默认的PIN码的,黑客只要根据MAC地址推导出PIN码后,便可以轻易破解出WiFi密码,不管密码有多复杂。

0x07 总结


尽管智能路由器在安全方面还有很大改进的空间,它所采用的安全特性,值得传统路由器生产商学习。

安全设计

为了保护用户的安全和防止用户因黑客入侵而造成损失,笔者认为,路由器厂商可以参考以下的安全设计规范。

智能路由器安全特性分析相关推荐

  1. 智能路由器开发之OpenWrt简介

    智能路由器开发之OpenWrt简介 1. 引言 1.1 智能路由器的重要性和应用场景 智能路由器作为网络通信的核心设备,具有重要的地位和广泛的应用场景.传统的路由器主要提供基本的网络连接功能,但随着智 ...

  2. 艾媒咨询:2015年度中国智能路由器市场监测报告

    近日,iiMedia Research(艾媒咨询)发布的<2015年度中国智能路由器市场监测报告>显示,2015年国内无线路由器市场为6520万,下滑超过10%,家用WiFi设备进入市场饱 ...

  3. 2015年度中国智能路由器市场监测报告

    近日,iiMedia Research(艾媒咨询)发布的<2015年度中国智能路由器市场监测报告>显示,2015年国内无线路由器市场为6520万,下滑超过10%,家用WiFi设备进入市场饱 ...

  4. 【智能路由器】离线缓存投毒实现分析

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 在路由器上实现广告植入已不是什么新鲜技术,绝大部分免费公共 ...

  5. 智能路由器OpenWrt 开发环境 及 编译分析(一)

    OpenWrt 开发环境及编译分析 OpenWrt的版本:Chaos Calmer 15.05 软件源:软件源就是一个应用程序安装库,很多很多的应用软件都在这个库里面.只要设定好软件源,就能很方便的安 ...

  6. 【智能路由器】ndpi深度报文分析源码框架

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 某些需求可能会要求路由能精确的分析出流经路由的流量是属于什 ...

  7. 【智能路由器】ndpi深度报文分析之协议分析器

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 本篇博客讲述ndpi已经实现的QQ协议分析器的实现 以及 ...

  8. 【智能路由器】动态域名(基于netfilter编程的DNS数据伪造)

    [智能路由器]系列文章连接 http://blog.csdn.net/u012819339/article/category/5803489 本文利用netfilter框架,做了一个在路由器上运行的L ...

  9. 《智能路由器开发指南》核心笔记(全)——转载的

    另外:  看     http://openwrt.bjbook.net/ 转载于:http://blog.csdn.net/sinat_36184075/article/details/722319 ...

最新文章

  1. Java学习总结:41(文件操作类:File)
  2. 重新建立域计算机账户与域控制器的联系
  3. 如何设计网站导航更利于SEO优化?
  4. mysql5.7跳过gitd_MySQL5.7在线开启/关闭GTID
  5. cocos2d-x3.0 实现HTTP请求GET、POST
  6. hex editor怎么搜索代码_代码审计从入门到放弃(三) phplimit
  7. [转](传输层)UDP协议
  8. python里随机抽取样本_概率分布和抽样分布基础知识及Python实现
  9. 修复版GEP宝塔内嵌版全解源码
  10. python random.random 缩短小数点儿后位数_Python random模块制作简易的四位数验证码...
  11. fork()的流程图
  12. 18 TaskScheduler任务调度器抽象基类——Live555源码阅读(一)任务调度相关类
  13. 潭州教育-Python学习笔记@基本数据类型:元祖字典
  14. 安全提示:勒索病毒漏洞与CPU漏洞务必小心
  15. wxWidgets+wxSmith版电子词典
  16. linux shell 切换目录,如何在Shell中快速切换目录?
  17. 在国内用Windows给BT做种,真是一山绕过一山缠(附解决方案)
  18. 学习LSSVM以及区别LSSVM和SVM看的几篇博文
  19. 《绿皮书》:剧情紧凑,语言很美
  20. (DDS)正弦波形发生器——幅值、频率、相位可调(一)

热门文章

  1. javaFx 设置圆角
  2. app性能测试_cpu测试方法
  3. 商用计算机推荐,打造商务新时尚!中小企业超值商用电脑推荐
  4. Process对象必须将UseShellExecute属性设置为False才能使用环境变量解决办法
  5. 七年级计算机与信息安全教案,计算机与信息安全教案
  6. 机器学习模型评价指标及R实现
  7. 使用 Google Breakpad 来助力解决程序崩溃
  8. FLASH片头动画制作经验
  9. python万花筒教程_Pandas万花筒:让绘图变得更美观
  10. mysql 1050_sql-MySQL“如果不存在则创建表”-错误1050