看近年来的路由器后门,多数是内置了超级密码,可直接登录路由管理后台,或是后台开启了FTP,可以任意文件上传下载等,再有就是存在一些很明显的”漏洞”,这些勉强也说得过去,但如果直接监听端口,可以执行命令上传下载文件,那就有点太说不过去了。也许是为了远程调试设备,维护设备,但是,这些功能是不是有点过了呢?
描述
磊科(NetCore)路由器中内置了一个叫做IGDMPTD的程序,按照它的描述应该是IGD MPT Interface daemon 1.0。该程序会随路由器启动,并在公网上开放端口,攻击者可以执行任意系统命令、上传下载文件,控制路由器。
一切的开始源自于今年8月份买了一个磊科(NetCore)家用路由器。随后发现IGDMPTD,并做了测试工具验证。
Google后发现在今年8月25日,趋势科技的研究员Tim Yeh发表文章描述了这个”疑似后门”的IGDMPTD,并报告厂商。
http://blog.trendmicro.com/trendlabs-security-intelligence/netis-routers-leave-wide-open-backdoor/
随后在今年10月3日Tim Yeh再次发表文章,指出磊科官方并未完全删掉这个”后门程序”。
http://blog.trendmicro.com/trendlabs-security-intelligence/netis-router-backdoor-patched-but-not-really/
随后我在京东购买两款 NW774路由器,并安装官方最新升级固件(2014-11-7日更新),发现使用8月份编写的测试工具不需修改仍可正常使用。
废话不多说先看看这个”IGDMPTD”都能干嘛。
先拿我自己的路由器来测试一下。IGDMPTD的第一项功能就是可以执行Command。如下图所示,至于能执行哪些命令,这取决于路由器系统中busybox的阉割程度。
第二项功能就是可以上传/下载文件。同样的,能否成功取决于目录是否可写。
第三项功能是IGDMPTD内置了很多功能函数,具体功能和版本相关,下图是我使用的路由器版本提供的MPT功能。
我尝试了几款不同型号的路由器和不同版本的固件,新版本中基本全都提供了上图中的功能,在老版本中可能没有提供这么多 MPT功能,常用的有$WritieMac、$ReadMac、$ReadSsid、$WriteSsid、$ReadRegDomain、$WriteRegDomain、$TestUsb、$SetSsid、$GetSsid。
注意看$ReadWwwPasswd这条指令,可以获取路由器WEB登录密码,下图中的guest就是我路由器管理员登录密码。相比之下,DLink内置一个万能密码来登录路由管理页面简直弱爆了。
以上测试环境是内网。如果这个端口只是开在内网,那就没什么问题了,方便调试和维护路由器。但可怕的是IGDMPTD监听的IP地址是INADDR_ANY,,意味着这个端口将暴漏在公网上。为了验证该程序的危害,我用nmap随便扫了几个IP,并下载了/etc/passwd文件。
到这里相信大家已经见识到IGDMPTD的可怕之处了。希望官方能给大众一个合理的解释,我相信这是开发人员为了方便调试设备留下的程序,只是不小心将IP绑定在了公网。
IGDMPTD分析
/bin目录下存在一个”功能强大”的可执行文件igdmptd,该程序会随路由器启动,并监听端口,通过逆向分析发现其提供了任意命令执行、内置功能、文件上传下载功能。
程序运行环境为MIPS(Big Endian)。将igdmptd拖进IDA可自动识别,将程序解析为mips汇编指令。
create_server函数中创建了udp的socket网络连接,并绑定53413端口,sockAddr.sin_addr设置为INADDR_ANY,意味着53413端口将暴漏在公网。在netcore各路由器中几乎都是使用该端口,若被攻击者利用,后果不堪设想。
通过IDA静态分析可以发现几个比较有特点的函数。这也是igdmptd的主要工作函数,igdmptd的可怕之处就在于这几个函数。
do_mptlogin是登录验证函数。
验证通过会将登陆状态保存在全局变量中,第二次发包时就会绕过口令验证部分。也就是说,只要igdmptd被人成功连接一次, 后来者可直接发包使用igdmptd的其他功能,除非路由器重启,全局变量重置。
do_syscmd 用于执行系统命令。
do_getfile 可以从路由器下载任意文件到本地。
do_putfile 可以上传任意文件到路由器。
do_mptfun 提供一些常用功能,比如
另外宽带通这些宽带厂商与磊科合作出产的路由器也存在这些问题。
基本就是这些内容了,测试工具已销毁。
BCM芯片方案的磊科版本初步解决漏洞方法:可以DMZ把所有映射到任意IP上面,或把将UDP 53413和TCP 5357映射到任意IP上
新固件也出来了:(不推荐升级使用。本人已经测试过直接升级好了,但1.9这个固件存在问题,运行不到一天或者一天会出现dhcp不能正常获取而且固定ip也访问不到路由器和上不了网,无线方面看到无线信号但也连接不上去的问题。只能重启处理。如果大家刷了后有这个问题还是降级回去1.8bata4或者1.7.130315版本并做端口虚拟服务避免攻击吧。找磊科400反馈新固件的问题,看看会不会有新版本解决。)