关于渗透测试在Web软件系统安全性测试中的应用研究*
2018-09-29冯亚玲王小娟
徐 莺,冯亚玲,邓 丹,王小娟
(中国电子科技集团第三十研究所,四川 成都 610041)
0 引 言
Web应用系统的应用越来越广泛,规模和复杂度不断提高,Web应用系统软件中的安全缺陷与漏洞也在不断增多,软件安全性问题日益突出。针对Web应用系统软件进行安全性测试,是保证软件安全性、降低软件安全风险的重要手段。目前,针对软件系统的安全性测试技术的研究较为普遍,成果较多,逐步形成了相关的主流技术。本文主要分析渗透测试技术在Web软件系统安全性测试的应用,研究相关方法和技术,为提升安全性测试质量和效果提供支撑。
1 安全性测试技术及主要内容
随着网络技术及信息安全技术的高速发展,软件安全性越来越成为一个重要的质量属性。在国标GJB5236-2004中,安全性被定义为软件的使用对人、业务、软件、财产和环境产生伤害的风险,定义的内涵是软件的失效安全性,即软件的重要功能、性能有效且可靠,避免造成重大安全事故,如人员、财产、环境的损失等。定义强调了软件的可用性,本质是软件的失效安全性。
在国标GB/T 11375-2007中,提出了软件/设备的抗风险能力,即保密安全性,强调软件自身能够抗攻击能力,确保在受到攻击的时候能够正确完成软件功能,避免敏感信息的泄露、系统资源的非法占用等。定义强调了软件的抗风险能力,本质是软件的可控性、可信性。随着网络技术的普及和发展,抗风险能力成为安全性测试更核心的内容。
借鉴国标中对软件测试的定位,可将软件安全性测试定义为确定软件的安全特性实现是否与预期设计一致的过程。然而,保密安全性的定义内涵决定其测试技术手段的开放性,使得安全性测试成为一个重点和难点。本文主要针对保密安全性测试进行相关探讨。
软件安全性测试的手段可类分为白盒级核查和黑盒级测评。其中,白盒级核查是基于测评对象的安全设计机制,测试验证实现与设计机制原理的一致性,确保测评对象按相关标准实现相应的安全功能,具备安全防护能力;黑盒级测评则是根据测评对象,直观构造相关攻击,以验证对象具备防御能力。攻击性测试的重要手段之一是渗透测试。
2 渗透测试技术与软件安全性测试
2.1 渗透测试技术基础
渗透测试(Penetration Test),是指测试者在客户允许下的范围内,采取黑客手段,真实模拟攻击者使用各种方法和技术对目标系统实施攻击,以检验系统在真实应用环境中的安全性的过程。它可以帮助用户发现系统中存在的潜在安全漏洞,从而有针对性地提供应对措施,提升系统的安全防护能力。图1列出了渗透测试的基本模型。
图1 渗透测试基本模型
2.2 安全性测试需求与渗透测试的应用
根据软件安全性内涵定义,参考国际、国家相关标准,提出应用系统软件安全性测试需求要素框架,将应用系统软件安全性分为4个方面,即软件自身防护机制实现正确性、安全功能正确性、抗攻击能力测试和安全漏洞测试,相关要素如图2所示。
图2 应用系统软件安全性测试需求要素
如图2所示,抗攻击能力的测试是一种开放性的测试和评估,包括抗网络攻击能力、抗本地攻击能力、抗病毒木马能力以及网络攻击审计能力。
安全漏洞测试则是直接关联常见的软件设计和软件实现中的安全漏洞的测试。渗透测试可作为安全漏洞测试的主要手段。渗透测试以应用软件系统为对象,发现系统软件中的代码安全问题,同时提供系统的安全风险评估。渗透测试也可作为软件抗攻击能力测试的重要手段,对抗敏感信息收集、已知脆弱性等测试要素进行测试及验证。其中,缓冲区溢出攻击和抗拒绝服务攻击导致被测对象直接失效、崩溃,一般不纳入渗透测试的范围,可作为安全性测试的重要内容。
以下重点探讨渗透测试在安全漏洞测试方面的方法及应用。
3 Web应用系统渗透测试实例
3.1 Web应用系统组成及实现技术
典型的Web应用系统接受外部输入进行相关处理,保持、更新数据库等过程,一般包括如下组件。
用户接口代码:Web应用系统的表示层,将客户端和Web服务器连接的接口,通过用户接口代码创建站点的可视、展现界面,常用的开发语言包括Java、JavaScript、VB和HTML等。
Web应用服务器软件:实现用户浏览器和Web应用的通信和交互,主要处理HTTP消息请求、管理组用户会话等。常见的Web站点使用的第三方厂商提供的Web服务器,如IIS、Apache等。
前端系统:前端系统实现用户接口代码和后台系统的交互和处理,在获得用户接口代码客户端提供的数据后,前端系统进行相关处理,典型的开发语言包括ASP、CGI和JSP等。
后台系统:Web应用系统的核心部分,直接与数据库系统对接,实现应用核心逻辑。Web应用系统中的后台系统通常是定制而开发的数据库系统,常见的如DB2、MySQL等。
3.2 针对被测系统的主要渗透攻击的设计
渗透测试以被测系统为边界,从不同安全防护层级(物理层、网络层、主机层、应用层)开展攻击性测试。针对Web应用系统软件,主要的渗透测试重点集中在主机层和应用层。针对本文案例系统的渗透测试方法及用例,主要包括如下内容。
3.2.1 SQL注入
SQL注入渗透的原理是,表单输入域或页面请求查询字符串等输入参数,插入恶意的SQL命令,获得服务器后台运行数据库中数据。
(1)操作步骤
查找注入点→获取数据库类型等关键信息→数据库提权(查找获得高用户权限如SA)→猜测数据库名、表名、字段等敏感信息来获取相关信息。
(2)渗透要点
采用单引号、判断句拼接的等方式,探测被测页面是否存在SQL注入漏洞。
常见的手工渗透测试语句,如表1所示。
表1 常见的手工渗透测试语句
3.2.2 跨站脚本
跨站脚本攻击的原理是通过代码的拼接,在远程Web客户端页面的HTML代码中插入非法脚本,如vBscriPt、Javascript、ACtivex、Flash等。用户请求页面浏览时,嵌入的脚本代码被执行,实现相关攻击。
(1)主要攻击步骤
查找非法脚本插入点→插入非法脚本→用户请求触发→进一步攻击.
(2)渗透要点
一般采用典型的脚本插入方式实施,主要针对可能出现漏洞的留言板、在线通信信息、文章发布页面等。如果页面对“<”“>”“;”“们”等特殊字符未进行过滤,检查页面标题处是否存在未闭合的标签,则攻击插入的恶意的代码就会被执行。
典型的手工测试执行语句如下:
http://xxbank.eom/、。mepage?redireet= 跨站攻击核心是非法脚本的构造,这是后续进行进一步攻击的关键,一般可利用跨站脚本漏洞窃取用户Cookie信息,劫持帐户,执行Flash内容,强行下载软件或进行网页挂马等。 (3)弱口令 弱口令问题是很多系统防护中最容易出现的问题。一些应用系统管理员用户使用默认的admin、manager作为用户名,口令使用与用户名相同或123456等弱口令。 弱口令的渗透操作一般可参考口令字典中的常用账号、口令进行猜测输入,也可以利用专门的工具探测网站密存的口令,根据密码特征分析加密方式如MD5加密,进行解密获得账号。 (4)文件上传 文件上传攻击是利用网站提供的文件上传功能上传恶意的脚本文件,进一步通过脚本执行非法代码。 常见的如一般文件上传功能及页面,还有一类是针对某些系统提供线上的文本编辑功能,功能集成的编辑器如ueditor、kindeitor等,而相关编辑器未采用防护控制机制的情况。 攻击操作主要针对相关功能页面进行文件上传,攻击核心是相关脚本文件的构造。作为针对Web应用系统的渗透测试,可以将找到文件上传漏洞作为测试目标。 针对某电子商务支付系统,基于常见的应用层风险点进行如下渗透过程。 弱口令攻击。在登录页面采用常见的弱口令进行登录,采用口令破解工具获得若干弱口令用户及口令信息,如图3所示。 登录进入用户系统,可看到所有的交易、刷卡信息。 渗透报告项目如表2所示。 表2 渗透报告项目 (1)文件上传、Getshell攻击 进入http://boss.icardpay.com/zxsale-sys2/login.action代码区,扫描存在S2-019漏洞,如图4所示。 图4 漏洞扫描页面 采用CKnife工具,直接连上http://boss.icardpay.com/zxsale-sys2/bak.jsp Cknife。进入后台代码区,找到数据库配置文件,如图5所示。需要说明的是,部分信息过于敏感,已做模糊化处理。 图5 后台代码区 通过数据库配置文件获得相关文件路径,成功连上数据库。 从代码区http://boss.icardpay.com/zxsale-sys2/aa.jsp中解密超级管理员账号“Luhai 123qwe”。以超级管理员登录系统后,可执行所有高权限操作,可直接编辑、修改相关代理商信息、状态;可对pos机进行管理,禁用设备等;大量用户信息泄露,包括身份信息,证件截图等;可设置、修改用户信息、权限等。 表3 渗透报告项目 SQL注入。在首页的代理管理页面,存在SQL注入漏洞(采用SQLmap工具扫描),如图6所示。 图6 注入漏洞页面 可注入数据库表Available databases,如图7所示。 图7 查询数据库表 如上述渗透过程,成功攻击某支付系统,主要的漏洞包括SQL注入、弱口令和文件上传。通过弱口令撞库、上传木马程序运行实现后台数据库攻击,取得数据库最高权限,从而可实现对系统数据的任意操作,安全风险巨大。 参见前面的渗透测试项报告,系统软件中主要的安全漏洞均与软件设计、代码安全缺陷直接相关,也客观体现出目前基于Web应用系统软件开发过程中代码安全性问题的严重性,有待开发者提升软件安全性设计与实现的意识和习惯。 表5列出了OWASP(应用程序安全项目组织)的一些典型安全漏洞原理与软件缺陷的关系。 表4 渗透报告项目 表5 OWASP的一些典型安全漏洞原理与软件缺陷的关系 针对Web应用系统软件引入渗透测试手段,加强安全性测试,强化软件的安全性设计与实现,越来越成为Web应用系统软件开发的重要方面。 Web应用系统是运行在互联网和TCP/IP的客户/服务器模式的应用系统,由于其运行环境以及操作环境的开发性,容易被攻击者实施信息探测,安全风险较高。渗透测试提供了一种开放的测试手段,是软件安全性测试的重要补充。针对Web应用系统软件安全性测试,引入渗透测试方法,发现相关安全性设计与实现缺陷,是提升安全性测试能力、强化软件安全性设计与实现水平的重要方面。3.3 渗透测试过程、实例及相关问题分析
4 Web应用系统渗透测试小结
5 结 语