大家在测试功能的时候,很少和安全联系起来,觉得安全测试是由专业的安全团队、运维等部门负责的,其实并没有我们想象中这么高深,能熟练理解接口和掌握接口测试,就可以在功能测试中融合安全测试,但是首先要培养安全测试思维。
一、为什么说安全测试很重要
互联网的发展给我们的生活提供了便捷,但是我们知道网络是一把双刃剑,在方便我们的同时也带来了一些风险,比如数据泄露、对电力和通信等系统的攻击、网站篡改、勒索攻击、木马病毒等安全问题频发,国家对网络安全也是特别重视,特别是金融行业来说。几个月前国家金融监督管理总局湖北监管局公布了一张罚单,湖北银行股份有限公司被罚款290万元,多项违规行为中包含了数据安全管理方面的不足。还有年初国家金融监管总局对中国银行和中信银行的行政处罚,违法违规事实中也包括了安全问题。除了会被罚款,安全问题对业务也会造成影响,假设用户利用漏洞1分钱下单购买了价格昂贵的商品,或者绕过某些校验或限制,不仅直接造成资金损失,还会影响声誉,降低信任度,导致更大的业务损失。所以作为开发和测试人员要重视信息安全,而不是把他当成只是安全或运维部门要关注的事情。安全问题的重要性包括但不限于:
- 减少数据泄露风险,保护用户隐私;
- 防止经济损失;
- 提升系统稳定性和可靠性,确保业务连续性和稳定性;
- 提升用户信任,维护企业声誉,增强合作伙伴和投资者的信心,扩大市场份额;
- 遵守行业法规和标准,满足合规性要求;
我们作为银行的信息系统,涉及众多敏感信息,比如证件信息、账户信息、交易记录、资产信息、信贷记录、联系方式、社会关系、经营信息和工作信息等,更应该提高安全开发水平和能力,保护数据安全。但是当前安全形势也比较严峻,比如:
- 攻击手段不断升级,比如供应链攻击;
- 新兴技术带来的挑战,比如量子计算的快速发展可能对加密技术构成威胁;
- 安全意识淡薄,企业和个人缺乏足够的安全意识,安全文化缺失;
- 安全领域专业人才短缺,人才短缺和培训不足,导致在面对安全威胁时缺乏足够的应对能力;
- 安全标准规范之后,一些新的安全威胁和攻击手段可能超出现有标准的覆盖范围;
二、功能测试和安全测试的关系
我们知道了安全测试很重要,但是功能测试和安全测试有什么关系呢。
首先我们看看它们之间的区别。功能测试关注于验证业务逻辑以及系统能否按预期执行功能,安全测试主要关注于识别系统中的安全漏洞和弱点,防止潜在的恶意攻击和数据泄露。在进行功能测试的时候,发现的缺陷就是真的缺陷,不符合需求说明、业务场景、使用习惯等,而安全漏洞并不是指已经对系统造成了实际损害,而是有可能威胁到系统,需要修复从而避免对系统造成损害的隐患,所以才称之为安全漏洞。虽然有洞但是不一定已经漏水,但要及时补上防止日后漏水。功能思维是用户和产品思维,是合法用户对系统执行的正常和异常操作,而安全思维是黑客思维,是非法用户发起的恶意行为。
从前面看来功能测试和安全测试好像没有什么关系,但是我们回忆一下最简单的登录框:当我们输入系统不存在的用户名进行登录,系统提示用户名错误,或者短信验证方式,输入系统不存在的手机号时,系统提示手机号不存在,大家觉得这有问题吗。从功能角度来说,这好像没什么问题,提示也很准确,但是从安全的角度,这就是敏感信息泄露,暴露了哪些是系统用户,哪些不是,可以暴力破解。所以功能测试和安全测试是有联系的。安全测试也可以通过手工测试的方式,针对系统的各功能和组件,进行一些黑盒或者灰盒测试。在实现功能的时候往往容易留下安全隐患,这就是功能安全,比如对文件上传和下载的处理、表单处理等等。
所以我们要站在防护者的角度,结合系统功能和业务流程,尽量发现可能被攻击者利用的安全隐患,在功能测试中融入安全测试思维,可以
- 增强系统的整体安全性,提升系统的防御能力;
- 提高测试的全面性,减少潜在的安全风险;
- 促进早期发现和修复漏洞,降低修复成本,提高软件质量和可靠性;
- 提升开发团队的安全意识和安全开发能力;
- 满徐合规性要求,降低法律风险;
- 提升用户体验,为用户提供安全、稳定、可靠的产品;
安全漏洞和普通的漏洞一样,越到后期修复成本越高。因此在功能稳定的情况下,尽早开展安全测试,才能得到更好的投入产出比。
三、功能安全测试点
下面我们具体看下在功能测试中怎么融入安全测试。
1 登录/会话管理
- 是否明确透露账户有效性
- 登录失败次数过多,是否有锁定账户
- 是否有限制不可以在多客户端同时登录
- 超时是否自动登出,超时后token/cookie是否销毁
- 账号失效,是否无法操作系统(失效账号的凭证操作系统,而不只是测试失效账号能否登录)
- 测试账户是否有销毁
- 弱密码弱口令,比如admin/123456
- 找回密码是否可以通过绕过某些步骤/填写其他手机号从而修改他人密码
- 密码复杂度要求
- 定期更换密码
- 新密码和原密码一致性校验
2 加密与数据保护
- 敏感信息显示屏蔽,脱敏导出
- 敏感信息加密传输
- 数据库、日志存储敏感信息需要加密
- 最小化收集信息
- 数据分级分类
3 权限管理
- 最小授权:每个角色是否按照最小权限进行配置
- 未授权访问:用户在没有通过认证授权的情况下是否能直接访问需要通过认证才能访问的页面或者信息
- 水平越权:当系统存在多个相同权限的用户时,A用户越权访问或操作B用户的资源
- 垂直越权:当系统存在不同权限的用户时,低权限用户越权访问或操作高权限用户的资源
4 业务逻辑
- 金额数据、商品数量、最大数限制是否可通过接口篡改
- 流水号、业务号是否有规律可循
- 流程是否可跳过中间某些步骤
- 短信轰炸
5 文件上传
- 文件类型、大小、上传次数限制
- 上传文件内容包含恶意语句是否会执行
- 抓包修改上传文件类型和后缀
6 文件下载
- 修改文件名/ID,越权下载文件
- 跳过登录直接下载文件
- 通过../../跳转其它目录获取重要文件
7 SQL注入
针对url、搜索框、文本框、登录注册等表单处测试
admin' or '1'='1
8、XSS测试
针对搜索框、留言板或评论框、url、cookie、http请求头、富文本编辑器、文件上传、第三方库和插件处测试
9、安全审计
- 安全配置
- 日志记录
- 系统相关文档
四、最佳实践
在实际应用中,最佳实践是在流水线中集成安全测试工具进行自动化扫描,然后在功能测试阶段注意功能安全,在功能测试完成后再由专业的安全测试团队进行渗透测试。
总结:早期发现潜在的安全漏洞,可以节省修复时间和成本,避免造成损失;同时通过形成安全测试文化,有助于提升团队安全开发能力。但是最重要的是不管开发和测试都要培养安全意识,在工作中融入安全思维指导开发和测试工作。
我们畅想一下,AI在安全测试中有什么应用,比如自动化渗透测试、用户异常行为自动化分析、流量数据自动化分析、自动化响应和处置、恶意代码智能分析检测等,也是可以深入去学习和探索的。