杨勇,胡勇(四川大学电子信息学院,成都 610065)
基于跨站脚本的路由设备跨域攻击模型
杨勇,胡勇
(四川大学电子信息学院,成都610065)
路由设备有连接局域网和广域网实现不同网络互相通信的作用,同样也起到数据处理、网络管理等安全作用。类似于广泛重视和研究的Web服务器漏洞,路由设备如路由器、Wi-Fi等管理平台也同样存在漏洞,攻击者可以通过跨站脚本攻击绕过路由设备的网络访问管理,从而禁用或改变它的功能设置,使攻击者获得访问权限并展开进一步的攻击。因此,必须防止路由设备的跨站脚本攻击,保证其安全。
跨域攻击指的是利用网站存在的前端安全漏洞或跨域安全设置缺陷进行的Web攻击。传统的安全思维是按资产、功能优先保护核心业务等,非核心业务的安全等级一般没有核心业务高,但跨域Web攻击可以从一般域攻击到核心域。
路由设备特别是路由器、Wi-Fi接入点存在的脚本漏洞威胁有下面几种。
1.1跨站脚本攻击(XSS)
跨站脚本攻击[2-3],是Web前端的攻击,当用户浏览该网页时,嵌入网页的恶意代码就会被执行,从而达到攻击者攻击的目的。XSS攻击类型分为反射型和存储型[1]。通过跨站脚本攻击可以获取操作权限、提权、针对性挂马等。
1.2CSRF(Cross-Site Request Forgery)跨站请求伪造
CSRF与XSS攻击方式差异很大。XSS利用站点内的信任用户,而CSRF则通过伪装来自受信任用户的请求来利用受信任的网站。与XSS攻击相比,CSRF攻击不多,正因为如此,对其进行防范的资源也相当稀少,使其变得难以防范,所以被认为比XSS更具危险性。当前,CSRF的防范已被越来越多的网站所重视。
路由设备脚本攻击需要考虑多方面的问题。首先从客户浏览器的一般访问过程开始研究,逐步完成各个环节的攻击,最后实现跨域攻击。路由设备本身并没有过多的交互面板,也不需要使用外部数据库、服务器,基本的数据参数只需要简单地保存在路由设备的存储器中,所以能完成路由设备脚本攻击的方法集中在登录界面的基础认证方式上。本节通过还原客户访问网络的一般过程,逐步实现脚本漏洞攻击。
2.1跨站脚本攻击的触发条件研究
按照用户的一般访问网络过程,具有一定安全意识的用户在进行浏览器操作时,会选择性访问较为安全的网站,那如何在一个安全的网页上放置攻击者设计的脚本代码,就是首先需要考虑的。跨站脚本攻击就能达到这个目的,攻击者往Web页面里插入恶意脚本代码,当用户浏览该网页时,嵌入该页面的脚本代码会被执行。这个过程的重点就是突破网站服务器的安全防御和绕过浏览器的安全策略。
对于家庭用户,可在其访问率较高的网站寻找存储型跨站漏洞或者隐蔽性更好的DOM型脚本漏洞。对于特定用户,例如会员、管理员、VIP等具有特殊权限,能够控制网络访问、流量控制的用户,可以进行更具有针对性的攻击策略。会员有很多有意义的操作或者有我们需要的内部个人资料,所以我们可以通过XSS对已登录访问者进行有权限操作。笔者认为cookies的盗取应该算作这一项,因为其目的也是获取用户操作权限(盗口令包括在内),从而获取用户某些信息或者进行权限下的相关操作。此类攻击的重点是上述所说的突破网站服务器的安全防御。
浏览器的安全策略同样不能忽视,使用脚本攻击技术就需要考虑如何跨域,受同源策略所限,不同域名是无法进行随意访问的。让窗口或框架在不同域页面之间跳转,是件很寻常的事情,所以跳转操作总是被允许的。只有试图读写页面内容时,才会受到限制。而对于跨子域的访问限制并没有如此严格,一类可行的技术是通过设置document.domain实现跨域,当两个二级域名,URL协议,端口都相同的网页,自身都通过JavaScript显示地设置了相同的 document.domain值,并且此值至少等于自身的二级域名,它们之间才可以相互作用。也就是说,当网页作者指定document.domain属性为域名的后半部分时,读写许可将扩展至二级域名。例如:http://www.aaa.com下的某个页面,将document.domain属性设置成aaa.com,同时 http:// home.aaa.com下的某个页面,也将document.domain属性设置成 aaa.com,它们之间即可完成跨子域的访问。因为,只有以 aaa.com结尾的站点上的文档,才可能将其document.domain属性设置为aaa.com,这样就确保了同一个服务提供者的页面,才能互相提供权限,从而完成交互操作。在开发人员方面这是很方便的跨域技术,但是在攻击者眼中这简直就是一个大后门,黑客只需要找到*.aaa.com下任意一个XSS漏洞,在任意一个子域名里的网页都可以跨域攻击a.aaa.com和b.aaa. com。
2.2基础认证与权限认证绕过策略
有了上述的跨站条件,接下来需要考虑的就是绕过认证和在用户正常访问网页时毫无征兆地触发代码,跨站访问伪造(CSRF)技术就可以实现。路由器的默认网关(即路由器访问地址)都是类似的URL设置,这给攻击者创造了可实现跨站访问伪造攻击的条件。通过遍历默认用户名、口令实现登录认证,前提是路由器的设置仍为默认用户名和口令。
大量的测试研究表明,路由器之间底层的代码差别很大,但整体的设计思路有很明显的相似点,尤其需要着重说明的是权限认证,其共同点是都在请求操作时在请求头(request header)[5]中添加cookie或者类cookie方式的header。经过一定数量的路由检测,主要的权限认证绕过漏洞有:仿造cookie,类cookie权限认证shell,设备自身认证缺陷。
相当一部分路由器其cookie的设计比较巧妙,每次认证都会生成随机数的cookie,并且使用session技术设置了存在时间。还有的设备并没有直接使用cookie,而是使用了类似于 cookie认证的“authorization”,其原理大同小异,将其赋值部分通过一定格式的编码后放在请求头文件中。在伪造访问时攻击者只要加上这个cookie或者类似cookie的“authorization”便可以成功。
2.3访问伪造技术研究
研究出基础认证与权限认证的基本原理,就可以相对应地构造脚本代码了,在IE浏览器以及现有的Chrome、Firefox等主流浏览器都可以使用设计较为简单的脚本攻击。现在的大部分家用路由器都提供了Web管理功能,就是将路由器的LAN口和计算机相接,在浏览器中输入一个地址就会弹出一个对话框,提示用户输入用户名和密码。因此我们可以设想,如果提交数据的方式已知,可以构造一段脚本。
而在IE6.0或者Chrome、Firfox上存在一种比较特殊的URL访问方法实现路由器认证:http://admin:admin@192.168.0.1,这种方法可以不需要手动输入用户名和密码完成路由器的直接认证和跳转。这样攻击者便可构造出可跨站的方法,简单的方法有让用户单击超链接、浏览器自动请求资源,如标签:
这里使用更具有实用性的DOM技术实现起来更加方便。通过调用
function StartCSRF(){
for(var i=1;i<=3;i++){
var ifr=document.createElement("iframe");
ifr.setAttribute('name','csrf'+i);
ifr.setAttribute('id','csrf'+i);
if(i==1){
ifr.setAttribute('src','http://admin:admin@192.168.0.1'); }
ifr.setAttribute('width',0);
ifr.setAttribute('height',0);
document.body.appendChild(ifr);
}}
StartCSRF();
function CSRF1(){
var ifm1=document.getElementById("csrf2").contentWindow;
ifm1.document.write("