前言
测试开发工程师一直想将安全测试真正融入测试工作中,在测试工作过程中,测试工程师一般会更加注重对于功能的测试,对于安全测试,关注度则较低。直到前不久众所周知的用户信息泄露问题的发生,人们才真正的意识到安全测试的重要性。一提起软件安全,大部分人首先想到的都是信息泄露,无论是通过购物平台泄露,还是在浏览网页信息,好像都无法避免信息的泄露。
其实,除了信息泄露,在软件的整个开发和使用过程中,都有可能存在安全隐患,比如,数据库信息的泄露,黑客恶意攻击,后台的数据篡改等。与其他岗位的人不同的是,测试工程师不仅要知道信息泄露,在软件开发周期中所有环节可能涉及的安全问题也是测试工程师需要一并关注的问题。那什么是安全测试?为何进行安全测试?在工作过程中,如何开展安全测试呢?那接下来,就此好好聊聊吧!
1.1 What?--请问什么是安全测试呢?
安全测试是在软件产品开发基本完成时,验证产品是否符合安全需求定义和产品质量标准的过程。安全测试是检查系统对非法侵入渗透的防范能力。
1.2 Why?--为什么进行安全测试呢?
1)进行安全测试,原因之一是为了提升IT产品的安全质量;
2)同时,也是为了尽量在发布前找到安全问题予以修补降低成本;
3)验证安装在系统内的保护机制能否在实际应用中对系统进行保护,使之不被非法入侵,不受各种因素的干扰。
2 安全测试的目标
安全测试的目标就是要通过对系统进行精心、全面的脆弱性安全测试,发现系统未知的安全隐患并提出相关建议,确保系统的安全性。主要分为应用程序级别和系统级别的安全测试两类。
3 安全测试与功能测试的区别
安全测试与功能测试,同属于测试工作的范畴,那二者必然有相同和不同之处,从大量相关测试经验中可以总结出安全测试与功能测试的相同点和不同之处:
Same
Summary | Detail |
目标类似 | 都是尽早反馈系统的缺陷 |
过程类似 | 了解需求→设计并编写用例→用例评审→测试用例执行→产出测试报告 |
提前预测 | 会对不同的业务场景有目的的进行探索,对研发代码时刻保持警惕 |
Different
Summary | 功能测试 | 安全测试 |
目标不同 | 发现设计、编码等产生的BUG | 发现安全隐患 |
问题发现模式不同 | 违反功能定义为判断依据 | 违反权限与能力的约束为判断依据 |
预测内容不同 | 以系统所具有的功能为思考域 | 要预测安全隐患 |
4.1 安全开发生命周期
SDL( Security development lifecycle )即安全开发生命周期,是微软提出的从安全角度指导软件开发的过程。将安全的考虑集成在软件开发的每一个阶段,利用威胁模型改进安全流程。
一个完整的安全开发流程包含从需求调研到运维整7个阶段,每个阶段都有其相应的安全职责。通过下图可以很清晰的看到每个阶段的职责所在。
需求阶段和培训阶段,是产品同事需要关注的阶段。在需求阶段,产品人员需要通过需求调研对此次需求中涉及到的安全点进行评估,并将安全需求点落实到prd中。如,京喜达财务系统,网格站代理佣金需求中,页面需要展示财务结算同事的姓名,电话,邮箱信息等敏感信息,产品需要将此需求在安全说明部分进行声明。在培训阶段,需要对该功能的使用者进行线上或线下的相关培训,培养他们的安全意识等。
设计和研发阶段,是需要研发同事关注并做到的,他们在开发设计过程中需要对prd中的安全点考虑在内,包含对可能的攻击面的分析和安全API以及组件的开发等。
测试阶段,是测试同事需要格外关注的阶段。在这个阶段,研发同事的工作已经完成,测试同学介入,需要在全面的测试展开前,就应该提前对prd进行梳理,预测可能存在的安全问题,将其落实到测试case中,防止测试点遗漏,还需要组织相关人员对此进行用例评审,在测试展开过程中,需要对此次需求的安全点进行验证,同时还要保证,本次的改动点不会影响其他功能的正常使用。最后需要输出一份测试报告。
上线阶段,测试和研发一起关注。在此阶段,研发和测试同学需要关注上线的过程中是否会出现问题,要进行安全漏洞的监控与扫描,保证上线过程中不会出现漏洞,同时,还需要编写一份应急方案,方便运维等人员的使用。
运维阶段,是运维同事需要关注的阶段。在此极端,需要定时进行安全巡查,保证软件在使用过程中不会出现安全问题,一旦出现安全问题,在执行应急方案的同时,需要对此情况进行上报,与研发一起解决这个安全问题。
4.2 安全测试流程
5.1 What?--请问什么是安全测试呢?
序号 | 功能安全测试验证点 | 详细说明 |
1 | 业务逻辑漏洞 | 1、金额数据、商品数量篡改2、最大数限制修改3、修改金额,如无后端校验情况下,0.01元买到了价值100元的商品 |
2 | 登录与身份验证 | 1、用户名与密码不一致时进行校验,无法登陆2、验证码未限制一次性使用 3、验证码可无限次获取--造成短信轰炸4、密码有提示--生日+身份证后几位等5、修改密码时校验原密码--新密码与原密码不可一致6、流水号有规律--其余用户可根据此规律遍历获取数据7、重复注册与登录--同一个用户名注册多次和重复登陆8、缺少账号密码锁定机制(无限次重试)9、密码强度--大小写and特殊字符and长度 |
3 | 越权测试 | 1、手动更改url的参数访问无权访问的页面(http)2、拿到更高权限人员的账号和密码,通过接口调用等方式进行操作3、人员权限和数据权限思虑周全(总部和省区权限不同等) |
4 | 文件上传与下载 | 1、文件上传次数不做校验,使得恶意上传,沾满资源池2、文件的类型和大小不做控制3、任意文件均可下载,导致有木马病毒等(对于有安全隐患的不应该允许下载)4、可以通过../../等方式跳转到其他目录获取相关重要文件5、不登录系统,直接输入文件url可直接下载 |
5 | 敏感信息 | 1、数据库/日志/提示等泄露2、人员的邮箱电话等信息(如数据库加密,页面脱敏)3、使用https密文传输,非http明文传输 |
6 | Sql注入 | 1、get型注入2、post型注入3、cookie型注入4、登录认证型注入 |
7 | 重要数据 | 重要文件附加水印 |
在测试过程中,要转换看问题的视角,在测试过程中,要将自己定位为恶意破坏规则的用户,以破坏的视角看待问题。同时,无论是在理解prd还是编写测试用例的时候,要以专业的态度识别出其中有价值的数据。
苏测检测技术有限公司是一家致力成为中国的信息化建设质量保障机构的第三方软件检测单位,为相关主管部门、软件企业、通信运营商、国家电网及南方电网等提供测试服务项目;公司主要经营范围包括行业应用的软件及信息化系统的功能、性能、安全测试服务、软件工程造价咨询、信息化工程绩效评估、信息安全风险评估、信息系统项目管理等。,公司成成立于2015年;总部位于山东济南,在江苏南京、河南郑州、山西太原设立分部,合作伙伴包括各级政府、企事业单位和龙头企业。为国内客户提供以咨询、检验检测、评估评价服务为主线的信息化系统质量保障—体化服务,对信息化系统可研、需求分析、设计、编码、集成、上线、运营阶段所涉及的文档、软硬件进行全面检验检测和质量把关。咨询电话:400-658-0098 公司邮箱:manager@sucetest.com