安全无小事!!!
常见安全测试及其测试策略
失效的访问控制:
原理-越权
水平越权:用户A登录后尝试访问用户B的数据(如修改URL中的用户ID)
垂直越权:普通用户尝试访问管理员接口(如/admin/deleteUser)
未授权访问:未登录用户直接访问需授权接口(如/api/user/profile)
影响面-可以获取未授权的信息
规避-身份和数据信息的对齐校验,sql的where
测试手段-扫描工具、手动用例设计和执行
越权用例设计思路:
基于接口提取越权场景,设计越权测试用例的方法(分析当前接口可能存在和用户对象关联的数据,如果有多个对象数据存在,对不同对象进行组合并定义期望值)
前端页面逐个版块分析是否允许进行未授权访问,如果不允许进行测试验证。
敏感数据泄漏:
原理-敏感数据暴漏(身份证、银行卡、真实姓名、家庭地址、钱包地址、手机...)
影响面-可以通过抓包或代理方式获取隐私数据
规避-敏感信息加密
测试手段-扫描工具,人工识别(对敏感数据都要对接口抓包检查一下)
注入:
原理-如果接口请求的参数没有入参协议校验或者实现入参参数化,被测服务就存在注入的风险,可以通过sql注入脚本拼接参数值传递到被测服务并且被被测服务执行。
影响面-如果是sql脚本被被测服务执行可能会被攻击用户获取数据库的连接方式或其他大量的敏感数据,如果是os脚本,攻击用户可以随意执行作系统指令更加危险。
规避-参数化、入参协议校验、返回体协议闭环
测试手段-常用的工具sqlmap、appscan、burpsuite,或者手工设计sql注入测试用例
不安全的设计:
原理-比方说没有权限控制、用户间的数据隔离
影响面-存在安全隐患
规避-设计评审(了解所有不安全的设计,设计时进行规避)
测试手段-设计评审靠经验把控,比方说:关键操作需多因素认证(如短信+密码);错误次数超限后锁定账户
安全配置错误:
原理-服务存在配置的位置,没进行正确的配置(默认账号密码未更改、配置开关)
影响面-存在安全隐患
规避-软件发布前检查配置情况
测试手段-扫描工具(能检测部分的错误安全配置)
自带缺陷和过时的组件:
原理-组件或服务版本等自身存在缺陷(案例:php5.X版本可以直接利用漏洞绕过登录行为访问任何页面)
比方说:PHP 5.x 系列中的会话处理漏洞,多个PHP 5.x版本存在会话固定和会话劫持漏洞,可能导致攻击者通过操纵会话ID获取其他用户权限
影响面-存在安全隐患
规避-更新最新版本
测试手段-针对性的扫描工具
身份识别和身份验证错误:
原理-破解秘钥冒充其他用户身份
影响面-能模拟其他用户行为
规避-加强口令
测试手段-常见的加密方法和默认的key iv请求校验(准备好常见的弱口令的秘钥,判断是否能够请求成功)
软件和数据完整性故障:
原理-应用的运行代码以及应用发送的数据可能受到篡改
影响面-发送非法篡改的数据到被测服务
规避-签名认证
测试手段-需求设计阶段,核心业务理解,当前接口不应该能被随意篡改或请求,抛出问题
安全日志和监控故障:
原理-如果被测服务没有实现日志采集或监控,就算是存在安全风险
影响面-遇到安全攻击问题没法追踪
规避-实现安全日志和故障的监控(单用户高并发请求、非200状态码的监控、大数据包请求的监控、秘钥校验请求失败频繁监控)
测试手段-无
服务端请求伪造:SSRF
原理-如果被测服务会通过某个参数查询依赖服务数据,对这个参数进行数据篡改,可以实现对依赖服务的探测和攻击
影响面-攻击底层服务
规避-范围很大
测试手段-无