作者:京东物流 陈维
本文我们将以围绕系统安全质量提升为目标,讲述在功能安全测试&安全渗透测试上实践过程。
希望通过此篇文章,帮助大家更深入、透彻地了解安全测试。
安全前置扫描主要是识别白盒漏洞、黑盒漏洞问题,针对 JSRC 类问题,需要通过渗透测试进行漏洞发现。
安全测试根据开展的阶段不同,测试对象不同,可以分为:功能安全测试、安全渗透测试。
以下是两者定义、两者的区别:
两者定义 | 功能安全测试 | 在安全开发生命周期(SDL)的测试验证阶段,对应用系统进行检验,验证是否符合安全需求定义和产品质量标准的过程 。 |
---|---|---|
安全渗透测试 | 在功能安全测试完成后和产品正式上线发布前,以黑客视角对应用系统的可以被利用的安全漏洞进行发现和检查,以保护资产和重要数据的机密性、完整性和可用性。 |
| | 功能安全测试 | 安全渗透测试 |
---|---|---|---|
两者区别 | 出发点不同 | 以发现系统所有可能的安全隐患为出发点 | 以成功入侵系统,证明系统存在安全问题为出发点 |
视角不同 | 站在防护者角度思考问题,尽量发现所有可能被攻击者利用的安全隐患,并指导其进行修复 | 渗透测试是以攻击者的角度来看待和思考问题 | |
思考域不同 | 以系统所具有的功能为思考域 | 不但包括系统的功能,还有系统的机制、外部环境、应用与数据自身安全风险与安全属性等 |
具体内容:
功能安全测试:
在功能测试阶段进行,由各业务线测试工程师进行,主要包括以下几个方面:
• 人员权限设置,是否满足需求文档中的说明:
1). 是否初始化好所有的角色;
2). 每个角色是否按最小权限进行功能配置;
•权限测试:水平越权、垂直越权、交叉越权;
•敏感信息处理是否符合规范;
1). 加密存储;
2). 显示屏蔽;
3). 脱敏导出;
4). 操作安全日志记录;
安全渗透测试:
逻辑安全测试 | 登录逻辑安全测试 | 主要测试登录验证逻辑是否可以绕过,是否存在验证码、是否可以撞库和暴力破解 |
---|---|---|
修改密码逻辑安全测试 | 针对修改密码逻辑顺序绕过问题测试,针对修改密码中短信、邮件发送逻辑和其中验证码逻辑做相关测试 | |
验证码逻辑测试 | 对验证码复杂度和验证码验证顺序逻辑、验证码验证重放攻击做安全测试 | |
认证模块测试 | 对手机短信、ca 证书等强认证模块的绕过测试 | |
客户端安全测试 | XSS 测试 | 用户输入畸形脚本及标签过滤转义 |
CSRF 测试 | 验证服务器是否添加会话 TOKEN 及验证 referer | |
JSON 挟持测试 | 检测 json 格式变化及是否验证 referer | |
XSIO 测试 | 测试是否限制图片 postion 为 absolute | |
基础认证钓鱼测试 | 检查是否可以修改 img 标签的 src 属性构造基础钓鱼页面 | |
URL 跳转测试 | 检测用户能否修改应用的 url 参数使页面跳转到指定页面 | |
Flash 安全测试(客户端) | 测试 Flash 配置中 allowscriptaccess、allowNetworking 是否合理配置 | |
cookie 安全测试 | 测试重点 cookie 是否使用了 HttpOnly | |
CRLF 测试 | 检查用户输入在 HTTP 头中返回,并且没有过滤%0a%0d | |
服务端安全测试 | SQL 注入测试 | 在数据库交互操作的输入点,输入 sql 语句测试是否可以执行 |
上传漏洞测试 | 在上传功能点,测试服务端是否对上传文件类型进行有效限制 | |
信息泄露测试 | 测试应用是否对系统报错、测试页面等进行有效处理,是否会泄露系统敏感信息 | |
文件下载安全测试 | 在文件下载或者读取功能上,测试功能设计是否合理,是否文件名称和路径用户可控 | |
HTTP 头测试 | HTTP 头代理伪造、HTTP 头 PUT 请求等畸形数据测试 | |
远程代码执行测试 | 提交特定的代码,测试代码是否会被应用执行 | |
路径遍历测试 | 访问各个路径,测试是否可以显示路径下文件信息 | |
垂直权限测试 | 检测普通用户是否能进入当前用户权限不能进入的功能,执行高权限操作 | |
Flash 安全测试(服务端) | 检查配置文件 crossdomain.xml 是否配置合理 | |
水平权限测试 | 测试用户是否只能操作自己当前用户的资源,是否能够操作其他相同权限用户的资源 | |
SSRF 漏洞 | 测试相关服务是否存在对内部网络探测 | |
框架安全测试 | struts 框架安全测试 | 针对 struts2 表达式代码执行漏洞进行测试 |
springMVC 框架安全测试 | 针对 springMVC 标签多个代码执行漏洞进行测试 | |
openssl 安全测试 | 针对 openssl“心脏出血” 等漏洞进行测试 |
Step1:确定项目是否需要安全评审
参考标准(来源安全部):
•公司重点战略项目
•外网新系统
•大量外部人员使用的内网系统(建议 15 人以上)
•含重大商业机密,特殊敏感性的系统;
•新采购的乙方项目或外包项目;
•上面几类系统在重大升级时。
Step2:依托 SDL 流程开展安全测试:
Step3:测试阶段的功能安全测试:
安全用例设计->测试执行->漏洞报告
Step4:上线前的提交渗透测试
SDL 测试阶段开展功能安全测试:
①确定测试方案:功能安全测试、安全渗透测试、代码白盒扫描、应用黑盒扫描。
②安全用例设计
③功能安全用例: 基于功能点,从权限控制、越权类、数据类 维度进行用例设计。
SDL 上线前提交安全渗透测试.
Step1:使用测试工具:
•BurpSuite 安装:
下载地址:https://portswigger.net/burp/communitydownload
Proxy SwitchyOmega(代理插件):代理插件下载地址
•浏览器代理配置:
•BurpSuite -Proxy 监听配置:
•BurpSuite 使用:
浏览器启用 Proxy 进行代理,通过 BurpSuite 进行数据抓取:
Proxy-Repeater 进行请求包的重发:
Proxy-Intruder 进行暴力爆破:
选定变量参数 -- 参数化 -- 批量重发请求 -- 结果获取分析。
Step2:测试执行
Step3:整理报告
定义:指权限控制功能不严谨,系统用户可以访问或者操作未授权的功能或者数据。
水平越权场景:当系统存在多个相同权限的用户时,A 用户越权访问或操作到 B 用户的资源。
垂直越权场景:当系统存在不同权限的用户时,低权限用户越权访问或操作到高权限用户的资源。
未授权访问:用户在没有通过认证授权的情况下能够直接访问需要通过认证才能访问的页面或者信息。
提交了大量的举证单信息:
定义:由攻击者构造请求,由服务端发起请求的安全漏洞,SSRF 攻击的目标是外网无法访问的内部系统(正因为请求是服务端发起的,所以服务端能请求到与自身相连而与外网隔离的内部系统)。
定义:跨站脚本攻击是一种针对网站应用程序的安全漏洞攻击技术,是代码注入的一种。允许恶意用户将代码注入网页,其他用户在浏览网页时会受到影响。恶意用户利用 XSS 代码攻击成功后,很可能获得很高的权限。
XSS 分为:反射型,存储型,DOM 型。
本文主要讲述了功能安全测试&安全渗透测试 的定义、区别、开展方案,以及实践举例。
这两中安全测试既可在项目开展 SDL 流程的过程中开展,同时也可将安全渗透测试单独拿出来,针对组内外网系统,专项进行渗透测试。
通过这样的测试,可以降低遗漏到 JSRC 外部白帽问题数。