APP下载

信息系统应用安全测试的有效方法与案例研究

2018-02-26刘春慧

网络安全技术与应用 2018年2期
关键词:测试方法漏洞工具

◆刘春慧



信息系统应用安全测试的有效方法与案例研究

◆刘春慧

(上海欣能信息科技发展有限公司 上海 200025)

当前信息安全不容乐观,“大安全”态势越来越明显,信息系统的安全需求越来越高,对软件测试人员也提出了更高的要求。本文结合安全测试的项目实践,介绍了安全测试的重点内容,总结了易发的安全测试隐患检查项、安全(渗透)测试的一般步骤,并列举典型案例进行阐述,通过总结有效的测试方法,指导软件测试人员完成应用安全测试工作。本文成果可为相关应用与研究提供参考。

信息系统;应用安全;安全测试;渗透测试;出厂测试

0 前言

当前,我们正处于信息技术高速发展的时代,“大云物移”应用日渐深化,万物互联态势日益明显。但是,国家互联网应急中心、中国信息安全评测中心等权威信息发布的年度综述和安全态势均体现出:云信息系统的高危漏洞比例、受攻击频次均居高不下,信息安全不容乐观。正所谓,水上“波光潋滟”,水下“暗流涌动”。《中华人民共和国网络安全法》于2017年6月正式颁布实施,进一步推动了各行业的网络安全建设,将信息安全的关注度推向了新的高度。

笔者所在的公司主要提供行业应用软件,主要行业用户常规信息安全督查工作常抓不懈,相应的考核力度也是非常大,这就要求我们必须重视软件的安全研发和安全测试工作,提供安全可靠的应用系统。近年来,测试团队在多个项目进行了安全测试,逐步探索积累,形成了一套有效的安全测试方法。一般而言,信息安全包括主机和网络安全、数据库安全、应用安全。本文主要以应用安全为研究对象,针对出厂测试这一环节,分别从技术、管理上对应用安全测试进行阐述,研究整套有效的测试方法。

1 安全配置

1.1支撑软件配置管理

对支撑类软件实行评估备案管理制度,包括操作系统、数据库、数据仓库、实时库、大数据平台、云计算平台、应用服务、各种开发编译软件、第三方开发组件、浏览器软件等非自主开发的软件。未完成备案的软件不能在研发过程中引用。评估备案工作中最要的是技术评估,搭建评估环境和评估Demo,组织开发、测试人员着重从安全性、性能、兼容性来评估,形成技术评估报告。

1.2测试环境配置

(1)环境隔离

测试过程中要经常解决各种缺陷,如果连接现场生产环境,极有可能造成现场生产数据破坏、网络及服务器高负荷运行、甚至会将安全漏洞传染给现场环境,给信息系统的安全运行带来极大的安全隐患。所以严禁连接现场运行环境进行开发、调试、测试工作,必须部署独立的、与现场运行环境隔离的测试环境。

(2)部署加固

测试服务器及客户端,要按管理规范进行相应的加固处理。在部署、使用的过程中,不可随意破坏原有的加固策略,这不仅破坏了主机的加固策略,而且也给应用系统带来了潜在的提权、开端口、弱口令等隐患,如下是重点关注事项:

①防火墙:不可随意关闭已开启的防火墙。

②用户权限:为应用安装的操作系统的用户不可随意提权。即使安装应用时需要提权、管理员账户等,安装完成后,要恢复原有加固配置。

③弱口令:安装应用服务、中间件等设置强口令(8位以上,数字、字母、大小写、特殊字符组合);尤其注意引入的第三方组件口令也需要设置强口令。

1.3版本管理

版本管理是给予源码有序标识、方便回溯和提交稳定运行版的基础。在实际的研发过程中通常要测试若干个过程版本,一套通俗易读、行之有效的版本体系,会给开发、测试、发布带来诸多便利,推荐采用源代码过程版本号(以下称源码版本号)与最终发布版本号(以下称发布版本号)相关联的版本命名规则。

源代码版本:应用简称+主版本号+副版本号+编译批次+首次构建日期。

发布版版本:应用简称+主版本号+副版本号+构建日期。

若代码标签号为:APP_Ver 1.0.001.12(11) Build 2017-06-09。

则版本号对应为:APP_Ver 1.0.001.12 Build 2017-06-09。

2 应用安全测试

应用安全包含身份鉴别、访问控制、安全审计、剩余信息保护、通信完整性、通信保密性、抗抵赖、软件容错、资源控制等方面内容,这些在等级保护具体要求中都有详细的对标检查项。本文从实战角度,研究总结了易发的安全测试隐患检查项,安全(渗透)测试的一般步骤,并列举几个典型案例来进一步分析阐述。

2.1安全测试检查项

(1)配置类

配置类内容包括:新支撑软件引入、支撑软件版本升级;数据库连接、用户/密码类公用关键信息非加密配置;源码版本(含外包源码)。

测试方法:对比检查项目中《测试发布流转单》、《支撑软件配置清单》、配置库中源码的版本号。

(2)身份鉴别

身份鉴别内容包括:简单密码;多次登录失败未处理;通过万能密码或绕过认证登录系统。

测试方法:设置长度小于8位,或者大于8位但不符合规范的密码(大小写、数字字母混合、有特殊字符),测试是否成功设置并登录成功;三次连续登录失败,测试是否退出程序或锁定账户;与开发沟通(有条件的话可以反编译),检查登录处理机制;使用专业扫描渗透工具配合。

(3)访问控制

访问控制内容包括:权限体系未采用“权限最小化”原则;权限存在特权或紊乱;关键业务未绑定IP。

测试方法:对一个单独业务用户赋予正常必须权限后,测试能否进行非授权操作;使用系统管理员或其他管理类的账户登录,测试业务功能;根据业务需求,测试必须绑定IP的功能是否只能在合规IP主机下完成。

(4)数据安全

数据安全内容包括,敏感信息未加密存储;敏感信息未加密网络传输;对外接口(Webservice、http、tcp等)未认证,能够直接调用。

测试方法:测试数据库表、各类审计日志是否加密保存敏感信息;用fiddler之类的工具网络抓包,测出有无敏感明文信息;使用专业的扫描工具。

(5)资源控制

资源控制内容包括:登录后长时间无交互,未能自动终止会话;未对最大并发连接数进行限制;未限制单用户的资源配额。

测试方法:登录系统,静置15分钟以上(或具体业务应用系统需求的失效时间),测试系统的会话是否失效;利用LoadRunner之类的性能测试工具,测试最大并发连接数;手动操作某功能发起一个超大的数据请求,测试是否终止该请求的正常返回。

(6)安全审计

安全审计内容包括:未提供安全审计日志、或者安全审计日志不全。

测试方法:结合业务需求,测试登录、数据库连接、业务CUD、关键信息获取、服务切换、程序异常等安全审计日志是否完整,是否存在敏感信息。

(7)通用漏洞

通用漏洞内容包括:SQL注入、SQL语句任意执行、跨站脚本(XSS)、目录遍历、任意文件上传、任意附件越权下载、服务器端请求伪造(SSRF)、跨站请求伪造(CSRF)、XML或JSON对象注入、第三方组件弱口令或缺省口令、远程代码执行、反序列化、开发框架漏洞、开启未经申请的端口等。

测试方法:使用专业的扫描工具、注入工具、专项工具。

(8)异常处理

异常处理内容包括:异常信息处理不当,意图暴露明显(如用户不存在、密码错误等);程序异常时,暴露完整调用堆栈信息。

测试方法:查看系统提供交互功能的输出信息;制造异常情况,测试异常抛出是否未经过处理。

2.2安全(渗透)测试一般步骤

安全(渗透)测试,一般可按照“一概览、二扫描、三针对、四恢复、五总结”的流程来发现可用漏洞并渗透到目标系统,如图1所示。

图1 应用安全(渗透)测试的一般步骤

“一概览”是对目标系统人工访问,结合可以查看的文件,大致了解编程语言和所用的框架;随意输入一些不可能存在的文件或路径,查看服务器如何处理无效资源、异常处理情况;登录一下,看看返回信息的处理是否专业;与研发沟通,了解系统的实现框架、开发语言、集成方式等。

“二扫描”是用多种扫描工具对目标系统进行扫描,包含开放端口、系统漏洞、应用系统漏洞等。每种工具都有其擅长的领域,所以用多种工具综合扫描,尽可能避免有遗漏。对一般的安全测试,到这一步可将漏洞结果反馈至研发人员整改即可;对进一步的渗透测试,则需要分析、筛选扫描出来的漏洞,选择有渗透价值的漏洞。

“三针对”是利用截包工具、重放工具、破解工具、专项渗透工具等对筛选出来的漏洞(特别是高危漏洞)进行针对性的渗透;或者根据漏洞规则自编渗透脚本、渗透请求来渗透目标系统。在此环节中,渗透测试人员需要尽可能地入侵系统中,获得服务器或应用系统的部分(或全部)访问控制权。

“四恢复”是对渗透过程中创建的用户、上传的文件、更改的文件及配置等所有变更要逐一恢复原样,避免对系统产生次生危害。

“五总结”是对本次测试过程中方法、发现的问题要记录总结,形成报告,汇报项目负责人,反馈研发人员,以利于问题整改和经验积累。

2.3渗透测试案例

(1)XML对象注入漏洞

①第一步,用专业扫描工具对该系统进行扫描,发现存在一个XML对象注入漏洞post ***.rpc.d?__rpc=true。

②第二步,用截包工具,截获POST请求报文,附加远程调用(故意乱写一个Bean调用,可导致服务端异常),并查询服务器的用户密码文件,如图2所示。

图2 XML对象注入简化报文

调用之后,响应报文不仅返回了服务端的堆栈调用异常信息,还成功将passwd文件内容返回,如图3所示。

图3 XML对象注入后返回的简化内容

③第三步,拿到passwd、以及服务器上的其它有用文件后,可以开展一系列更深入的渗透攻击。

(2)框架漏洞

某WEB系统访问网页名称是.action结尾,推断应该引用了struts框架。众所周知,struts的部分版本存在S2-045漏洞,通过此漏洞可绕过主机系统权限,远程执行命令,且可添加具有root权限的用户,对系统执行任意操作。

①第一步,使用struts漏洞专用检测工具检测,果真发现存在S2-045漏洞。

②第二步,上传渗透脚本。通过Struts S2-045的EXP先上传普通小马到网站根目录。上传成功后,再通过小马上传菜刀马。

③第三步,通过菜刀连接,可以获取服务器文件、命令执行、连接远程数据库等敏感信息。通过文件搜索,在服务器发现大量用户的用户数据,至此该系统由于框架漏洞,初步渗透完成。

3 结语与展望

本文总结了多个系统的安全测试案例,探索了一整套有效的测试方法,实践证明该方法有效、可推广,也可作为软件测试部门的安全测试工作规范。当然,随着信息化水平的不断提高,系统集成复杂度也在不断提升,软件框架及开发语言百花齐放、精彩纷呈,应用安全也面临新形势、新问题、新威胁,我们在应用安全测试这一方向上还需要进一步探索研究、补充完善。

[1]陈威,季佳育,王刚.如何做好信息系统上线前安全测试[J].华北电力技术,2011.

[2]张艳玲,詹雄,房磊.国家电网公司信息安全督查工作提升实践[J].电力信息与通讯技术,2015.

猜你喜欢

测试方法漏洞工具
基于泊松对相关的伪随机数发生器的统计测试方法
漏洞
波比的工具
波比的工具
基于云计算的软件自动化测试方法
DLD-100C型雷达测试方法和应用
准备工具:步骤:
“巧用”工具
三明:“两票制”堵住加价漏洞
漏洞在哪儿