基于网页静态分析的Web应用系统弱口令检测方法
2016-03-28田峥薛海伟田建伟漆文辉
田峥,薛海伟,田建伟,漆文辉
(国网湖南省电力公司电力科学研究院,湖南长沙410007)
基于网页静态分析的Web应用系统弱口令检测方法
田峥,薛海伟,田建伟,漆文辉
(国网湖南省电力公司电力科学研究院,湖南长沙410007)
针对现有基于动态截取方式的Web应用账号弱口令检测方法操作繁琐、自动化程度较低,无法满足信息安全监督工作的需要。本文提出一种基于网页静态分析的Web应用系统弱口令检测方法,通过对登录页面的表单进行识别与分析,实现对登录关键信息的自动提取。基于此方法,实现了一个可对Web应用账号进行自动化弱口令检测的系统原型,并支持常见数字和字母组合的验证码识别。系统自动化程度较高,具有较好的实用性和应用前景。
Web应用系统;弱口令;动态截取;静态分析;验证码识别
近年来,随着互联网技术的发展,以及近期“互联网+”概念的提出,越来越多传统行业融合互联网发展新形态、新业态,如今许多企业的业务开展都离不开Web应用系统。以电力行业为例,国家电网公司管理信息大区中80%以上的信息系统都是采用B/S模式开发的,用户仅需通过浏览器即可访问应用系统。然而,Web应用系统在提供便捷性的同时,也带来了不小的安全隐患。正是由于其开放性和访问的便捷性,Web应用一直是黑客的重点攻击对象,据Gartner的数据表明,当前网络75%以上的攻击都是针对Web应用进行的〔1〕。
账号口令安全是Web应用系统的第一道防线,也是Web应用安全的基础。特别是在电力行业,绝大多数的Web应用系统都需要用户登录后才能操作,系统的首页通常就只有一个登录框,因此口令安全就显得尤为重要。弱口令问题虽然看起来不起眼,但实际危害却很大〔2〕。信息安全是一个纵深防御的过程,其防护强度取决于系统中最薄弱的一环。一旦Web系统存在弱口令漏洞,就等于向入侵者敞开了一扇大门,可能成为系统中那块最致命的短板。
Web安全的攻与防是密不可分的。只有通过从用户或入侵者的角度对目标系统进行渗透测试,了解其攻击的手段和原理,才能更加有的放矢地采取防护措施,取长补短,实现最有效的防御。文中也将沿用这种思路,试图站在入侵者的角度,研究Web应用系统弱口令检测的关键技术,以此来为Web应用的口令安全提供防护思路和解决方案。
从检测方法来看,Web应用系统的弱口令检测可以分为白盒检测和黑盒检测两类方法〔3〕。白盒检测最早应用在针对软件源代码的安全测试中,这种方法通过检查软件内部的逻辑结构,在软件系统中设置多个检查点,在对软件进行逻辑路径遍历的过程中,检查程序在每个监测点的状态是否与预期状态一致,进而判断软件系统是否存在安全缺陷。对于弱口令检测来说,白盒检测是指通过直接查询数据库的方法,将存放用户名和口令的表数据提取出来,然后将查询到的用户口令与事先定义好的弱口令字典进行匹配,检查是否存在弱口令的情况。这类方法可以对应用系统弱口令情况进行全面的排查,做到无遗漏、无死角,且检测效率高。但由于需要直接连接数据库,因此无法进行远程操作,且要求测试者对应用系统的数据库信息和表结构非常清楚。
黑盒检测则是一类更为常见的弱口令检测方法。相对于白盒检测,黑盒检测是一种基于数据驱动的测试,这种检测不需要了解软件系统的内部情况、逻辑结构等,只需知道程序的输入、输出接口和主要功能即可。穷举法(又名暴力破解)是弱口令黑盒检测的一种主要方法,其原理是利用应用系统的登录接口,对所有符合弱口令条件的用户口令进行逐一验证,如果其中某一种情况能够登录成功,则说明该账号存在弱口令情况。这类方法的优势是简单、方便,可远程操作,但是缺点是有容易受到应用系统的登录限制,例如,如果应用系统具备登录失败锁定功能,则穷举法将无法实施。目前来说,电力行业的大多数Web应用系统都不具备登录失败锁定功能,因此对Web应用系统的弱口令黑盒检测方法的研究仍然是有意义的。
对于一个Web应用系统而言,其账号口令分为很多种,包括主机操作系统账号、Web服务器管理后台账号、应用系统账号等。目前市面上已经有很多暴力破解工具可以完成对前面两类弱口令的黑盒检测,如绿盟的极光漏扫工具,可以对常见操作系统及Web中间件的弱口令进行探测,类似的工具还有X-Scan、H-Scan等〔4〕。然而对于应用系统账号口令,目前尚无很好用的自动化测试工具。Burpsuite和Hydra虽然可以实现对Web登录表单的暴力破解,但操作较繁琐,且对存在验证码的登录表单无能为力。因此,针对Web应用账号的弱口令检测方法是文中重点关注的对象。
基于穷举法对Web账号弱口令进行检测的关键是如何获取登录过程中向服务器发送的HTTP数据结构,数据结构中包含了登录所需的关键信息,如用户名、口令、验证码等。获取这些信息后,就可以利用数据重放的方式,不断尝试不同的用户名和口令组合,达到暴力破解的目的。目前,获取登录HTTP数据结构常采用动态截取的方式,Burpsuit的intruder模块就是采用这种方式的代表。其原理是通过类似设置HTTP代理的方式,截取用户登录过程中向服务器发送的HTTP数据包,从而得到登录所需的关键信息,如登录url,用户名和口令字段名称、是否需要验证码等信息。这类方法的优点是识别较准确,但操作较繁琐,自动化程度不高,无法批量操作,且对https的支持不好。
文中设计了一种基于静态分析的登录HTTP数据结构获取方法,可直接通过解析登录页面的HTTP源码,识别出登录表单的关键信息。该方法的优势是适用性强,只要能获取到网页源码就可以完成分析,不受限于Web应用的类型,无论是http或https都适用,且自动化程度较高,可以进行批量操作。
1 基于网页静态分析的弱口令检测
1.1 静态分析处理流程
图1 登录表单识别和分析流程
静态分析的关键是对登录表单的识别与分析,处理流程如图1所示。可分为表单识别、表单分析和字段提取3个主要步骤。在获取了登录页面的HTML源码之后,表单识别模块开始对源代码进行分析,找出其中的登录form表单,然后对form表单进行分析,提取登录时所指向的URL链接,并判断是否存在验证码,如果存在验证码,则还需要拿到更新验证码的URL。最后是提取登录所需要的所有参数,包括用户名、密码、验证码字段和隐藏字段(如果存在)的参数,并进行封装,便于后续的暴力破解。
1.2 登录表单识别
此模块的主要作用就是分析html的源代码,并从中找出登录的form表单。在html的源代码中,可能存在一个或者是多个form表单。对于只存在一个form表单的情况,则无需判断,此form表单必定为登录的form表单。若是多个form的情况,则需要对html源代码分析。因此,这一步的核心功能就是对于存在多个form表单的情况,找出其中用于登录的form表单。通过对登录表单和其他非登陆表单的差异性分析,文中找出了其中的2个关键指标用于对登录表单进行鉴别,分别为action的值和input的数量。
1)action值分析:登录表单中action的值通常为登录提交的url(全路径或相对路径),或者是javascript方法名,而无论是哪一种情况,action的值通常会包含“login”“check”“validate”等字样。因此,我们可以通过判断form表单是否存在action属性、其内容是否存在上述关键字来鉴别是否为登录表单。
2)input标签分析:登录表单中input标签的数量通常不会大于3个,分别用于输入用户名、密码和验证码(如果有),而且其中有且只有一个类型是“password”的input标签,用于输入密码。网页中的其他表单通常不具备这样的特征,以与登录表单最相似的注册表单为例,其类型为password的input标签有2个,且总数通常大于3。
综合上述两种分析方法,可以很精确地定位到登录表单的位置。接下来就是对表单中的数据进行分析和提取。
1.3 登录表单分析
有3个关键的信息需要通过登录表单的分析进行提取,分别是登录提交的url地址、登陆字段名的获取、以及验证码的判断。由于关键信息都在input标签中,因此先利用DOM分析树的方法提取出表单中所有的input标签,去掉其他的干扰信息,然后对上述3个信息进行逐个提取。
1.3.1 登录url的提取
在大多数情况下,登录的form使用的是POST方法,且登录的URL为form表单中action属性的值。但action值可能会有以下几种情况:
1)action为绝对url地址,action的值是一个完整的URL链接。如action的值为:HTTP:// www.example.com/path1/login。那么实际的登录URL即为action的值。
2)action的值为以‘/’开头,action的值为一个相对的URL。如action的值为“/path1/path2/ login”。则最后页面实际提交的URL为host+action。假设host为www.example.com,则实际登录的URL为www.example.com/path1/path2/login。
3)action的值直接为一个相对链接,action的值为一个相对的URL。如”path5/login”(注意与第2种情况的区别)。则页面最后提交的URL为: url.path+‘/’+action。假设当前页的URL为www.example.cm/index1/home.html,则页面实际提交的URL为www.example.com/index1/path5/ login。
4)action的值为javascript方法名,说明提交表单的操作是在javascript方法里完成的,而登录的url地址一定会在该方法中的某个位置体现,因此需要继续对该javascript方法进行分析。如果javascript方法的流程较复杂,或者登录的url地址不是以完整的形式出现在页面源码中,则有可能出现action值识别不成功的情况,这时需要采用其他的方法来获取登录url了,比如采用类似burpsuite的动态抓包的方式。
1.3.2 验证码的判断
验证码通常是一张<img>标签的图片,且具有src,alt和onclick 3个属性。
1)src属性:如果一个img标签是验证码标签,则此img标签的src必然会有值,且此值就是生成验证码的URL链接。但是存在src属性的img标签却不一定是验证码的标签。所以img标签存在src属性是此img标签为验证码标签的必要不充分条件。利用此特征可以过滤很多无用的img标签。
2)alt属性:Img标签的alt属性主要是一个解释说明的作用。但是如果alt的属性中有“验证码”或者是“captcha”等字样,则说明此img标签必然为验证码标签。
3)onclick属性:与src属性类似。如果一个img标签存在onclick属性,则此img标签一定为验证码标签,但是验证码不一定存在onclick标签。所以存在onclick属性是成为验证码标签的充分不必要条件。
综合上述特征,可以精确地判断出表单中是否存在验证码。如果存在,则验证码所在img标签的src属性值即为生成验证码的链接。由于src的值同样也有可能是一个相对的URL,要得到一个完整的URL,处理方式与前面获取登录URL的方式相同。
1.3.3 登录参数名的提取
登录参数主要包含2类,一类是主要登录参数(用户需要在界面上输入),如用户名、密码和验证码;另一类是次要参数,这些参数是藏在页面上的,不需要用户输入,部分是固定值,部分是会随着页面而改变。当用户点击提交按钮之后,次要参数也会随着发送到后台。
提取登录参数名可以等价于提取对应的input标签,因为input标签所对应的name属性值即为登录参数。
1)提取主要参数:主要参数包括用户名、密码和验证码。验证码参数名的提取在前面验证码的判断部分有提到过。密码字段的参数名也相对简单,找到类型为“password”的input标签即可。而用户名所在input标签的查找方式则采用了一些小技巧。用户名的input标签和密码的input标签一般都会相邻,且用户名会位于密码的上方。所以在找到了密码的input标签之后,结合用户名的常用字段名如“username”,“user”,“uname”,就不难定位到用户名的input标签了。
2)提取次要参数:在去掉了主要参数的所有的input标签之后,在登录表单中剩下的其他的input标签都是次要参数。在这些次要参数的input标签中,部分input标签是有value属性并且是有值的,部分标签是没有value属性的。对于那些value属性有值的input标签,此值就是默认值。
2 Web账号弱口令检测系统原型
基于上述HTTP静态分析方法,设计一个对Web应用账号进行自动化弱口令检测的系统原型。图2给出了系统的框架图。该系统可实现对包含验证码的Web登录表单进行暴力破解。
从图2可以看出,系统主要包含4个关键流程,分别是:登录页面获取、登录表单的识别与分析、验证码识别和暴力破解。其中:1)登录页面获取是指系统根据输入的url链接自动向服务器发出HTTP请求,并获取服务器响应数据,提交给登录表单识别模块进行分析;2)登录表单的识别与分析集成了上述HTTP静态分析技术,根据服务器的响应数据,自动识别出登录页面中的登录表单关键信息;3)如果登录表单需要填写验证码,登录表单识别模块会把生成验证码的链接发送给验证码模块,验证码识别模块通过调用开源的光学字符识别引擎tesseract-ocr来对常见的数字+字符类型的图片验证码进行识别〔6〕;4)暴力破解则是最后的穷举登录阶段,向服务器发送包含不同用户名、密码组合的HTTP请求包,并根据服务器响应数据自动判断是否登录成功。
图2 弱口令检测系统框架
此外,文中提出了一种验证码识别的错误纠正机制,根据验证码识别的结果(是否为字符或数字)以及服务器反馈的数据(是否包含验证码、错误等关键字)来自动判断验证码是否识别正确,如果识别有误,则使用相同的用户名和密码进行重复尝试,直到验证码识别正确为止。这样就保证了弱口令不会被漏检。图3展示了系统的运行界面。该系统主要有下列几个特点:
图3 弱口令检测系统运行界面
1)软件能自动分析出网页中的登录表单,提取用户名和密码字段并进行自动填充,整个弱口令检测过程自动化程度较高。
2)软件能够对常见数字加字母的验证码进行自动识别,识别过程不需要人工干预。
3)软件支持批量化的弱口令探测,使用者可输入一个IP段或多个url链接,软件可同时对多个目标进行分析,执行效率较高。
3 总结
文中对Web应用系统的弱口令检测技术进行了探讨,重点分析了采用穷举法对Web应用账号进行弱口令检测的关键技术。为解决现有基于动态截取的弱口令检测方法的低效率、自动化程度低等问题,文中设计了一种基于网页静态分析的弱口令检测方法,并实现了一个可对Web应用账号进行自动化弱口令检测系统原型。该系统同时对多个Web应用系统进行批量的、自动化的弱口令检测,无需人工干预,具有较好的实用性和应用前景。
〔1〕尹海翔.Web账号管理安全设计思路〔J〕.无线互联科技,2015(12):87-88.
〔2〕txcbg.网站安全的大敌—弱口令〔J〕.电脑爱好者,2011 (15):65.
〔3〕王欣.Web应用系统安全检测关键技术研究〔D〕.北京邮电大学博士研究所学位论文.北京:2011.
〔4〕邹俊豪,张岩.基于网络安全扫描的网络信息安全研究〔J〕.计算机与网络,2013(24):65-67.
〔5〕吴海燕,苗春雨,刘启新,等.Web应用系统安全评测研究〔J〕.计算机安全,2008(4):44-46.
〔6〕闻宏强,周华,陆澄澹,等.验证码识别原理探讨〔J〕.电子技术与软件工程,2014(16):132,172.
Weak password detection of Web application system based on webpage static analysis
TIAN Zheng,XUE Haiwei,TIAN Jianwei,QI Wenhui
(State Grid Hunan Electric Power Corporation Research Institute,Changsha 410007,China)
The existing weak password detection method based on dynamic intercept is of low complexity and low degree of automation,which can not meet the needs of information security supervision.In this paper,a weak password detection method based on the static analysis of webpage is proposed,which automatically extracts the key information of login process by identifying and analyzing the form of the login page.Based on this method,a system prototype which can automatically detect the weak password for Web application and supports captcha recognize of common digital and letter combinations is realized. The system has a high degree of automation,and has good practicability and application prospect.
Web application;weak password;dynamic intercept;static analysis;captcha recognize
TP393.08
B
1008-0198(2016)05-0047-04
10.3969/j.issn.1008-0198.2016.05.012
田峥(1983),男,湖南长沙人,计算机应用技术专业工学博士。
2015-11-13 改回日期:2016-03-18