移动安全 安全管理 应用案例 网络威胁 系统安全应用安全 数据安全 云安全
当前位置: 主页 > 信息安全 > 应用安全 >

若何反编译D-Link路由器固件法度并发现它的后门

时间:2013-11-04 12:13来源:TuZhiJiaMi企业信息安全专家 点击:
一时髦起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件法度v1.13。利用东西Binwalk,很快的就从中发现并提掏出一个只读SquashFS文件系统,没用多大年夜工夫我就将这个固件法度的web serve
Tags后门(33)应用安全(1006)路由器(60)D-Link(7)  

  一时髦起,我下载了D-link无线路由器(型号:DIR-100 revA)的固件法度v1.13。利用东西Binwalk,很快的就从中发现并提掏出一个只读SquashFS文件系统,没用多大年夜工夫我就将这个固件法度的web server (/bin/webs)加载到了IDA中:

  /bin/webs中的字符信息

  基于上面的字符信息可以看出,这个/bin/webs二进制法度是一个点窜版的thttpd,供给路由器治理员界面把持功能。看起来是颠末端台湾明泰科技(D-Link的一个子公司)的点窜。他们乃至很有心计的将他们良多自定义的函数名都辅以“alpha”前缀:

  明泰科技的自定义函数

  这个alpha_auth_check函数看起来很成心思!

  这个函数被良多处所调用,最较着的一个是来自alpha_httpd_parse_request函数:

  调用alpha_auth_check函数

  我们可以看到alpha_auth_check函数领受一个参数(是存放在存放器$s2里);假定alpha_auth_check返回-1(0xFFFFFFFF),法度将会跳到alpha_httpd_parse_request的结尾处,不然,它将继续措置要求。

  存放器$s2在被alpha_auth_check函数利用前的一些把持代码显示,它是一个指向一个数据布局体的指针,里面有一个char*指针,会指向从HTTP要求里领遭到的各类数据;好比HTTP头信息和要求地址URL:

  $s2是一个指向一个数据布局体的指针

  我们此刻可以摹拟出alpha_auth_check函数和数据布局体的大年夜概模样:

  alpha_auth_check本身是一个很是简单的函数。它会针对http_request_t布局体里的一些指针进行字符串strcmp比较把持,然后调用check_login函数,实际上就是身份验证查抄。假定一旦有字符串比较成功或check_login成功,它会返回1;否者,它会重定向浏览器到登录页,返回-1;

  alpha_auth_check函数代码片段

  这些字符串比较过程看起来很是有趣。它们提取要求的URL地址(在http_request_t数据布局体的偏移量0xB8处),查抄它们是不是含有字符串“graphic/”或“public/”。这些都是位于路由器的Web目次下的公开子目次,假定要求地址包含如许的字符串,这些要求便可以不经身份认证就可以履行。

  但是,这最后一个strcmp倒是相当的吸引眼球:

  alpha_auth_check函数中一个很是有趣的字符串比较

  这个把持是将http_request_t布局体中偏移量0xD0的字符串指针和字符串“xmlset_roodkcableoj28840ybtide”比较,假定字符匹配,就会跳过check_login函数,alpha_auth_check把持返回1(认证经由过程)。

  我在谷歌上搜刮了一下“xmlset_roodkcableoj28840ybtide”字符串,只发此刻一个俄罗斯论坛里提到过它,说这是一个在/bin/webs里一个“很是有趣”的一行。我很是同意。

  那么,这个神秘的字符串事实是和甚么东西进行比较?假定回顾一下调用路径,我们会发现http_request_t布局体被传进了好几个函数:

  事实证实,http_request_t布局体中处在偏移量0xD0处的指针是由httpd_parse_request函数赋值的:

  查抄HTTP头信息中的User-Agent值

  将http_request_t + 0xD0指针指向头信息User-Agent字符串

  这代码实际上就是:

  知道了http_request_t偏移量0xD0处的指针指向User-Agent头信息,我们可以猜测出alpha_auth_check函数的布局:

  换句话说,假定浏览器的User-Agent值是“xmlset_roodkcableoj28840ybtide”(不带引号),你便可以不经任何认证而能拜候web节制界面,可以或许查看/点窜路由器的设置(下面是D-Link路由器(DI-524UP)的截图,我没有DIR-100型号的,但DI-524UP型号利用的是不异的固件):

  拜候型号DI-524UP路由器的主界面

  基于HTML页上的源代码信息和Shodan搜刮成果,差不多可以得出如许的结论:下面的这些型号的D-Link路由器将会遭到影响:

  • DIR-100

  • DI-524

  • DI-524UP

  • DI-604S

  • DI-604UP

  • DI-604+

  • TM-G5240

  除此以外,几款Planex路由器明显也是用的一样的固件法度:

  • BRL-04UR

  • BRL-04CW

  你很酷呀,D-Link。

  脚注:全能的网友指出,字符串“xmlset_roodkcableoj28840ybtide”是一个倒序文,反过来读就是“editby04882joelbackdoor_teslmx”——edit by 04882joel backdoor _teslmx,这个后门的作者真是位天才!

------分隔线----------------------------

推荐内容