一、安全测试类型介绍
二、安全测试工具介绍
11测试软件 | 面向测试场景 |
AWVS | 适用于系统漏洞扫描 |
nessus | 适用于系统和数据库漏洞扫描,包括但不限于:主机、网络设备扫描 |
appscan | 适用于网站等WEB应用进行自动化的应用安全扫描和测试 |
burpsuite | 适用于WEB应用程序的集成攻击测试。包括但不限于:http请求爆破/爬取关键信息/DOS攻击,使用TCP洪水攻击耗尽服务器资源 |
fortify | 适用于对应用软件的源代码进行静态的分析,将源代码中存在的安全漏洞扫描出来,并给予整理报告; |
nmap | 适用于快速地扫描大型网络,包括但不限于:探测一组主机是否在线/扫描主机端口 |
fossid | 适用于检测代码库中任何的开源代码痕迹,不论是整个开源组件的引用,还是仅仅引用了一小段代码片段 |
OWASP Dependency-Check | 适用于检查项目依赖包存在的已知、公开披露的漏洞,良好的支持Java和.NET |
McAfee | 适用于扫描监控和查杀病毒,通过设置规则来防病毒(包括未知病毒) |
三、代码审计介绍
1、代码审计是什么
代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析,通过自动化工具或者人工审查的方式,对程序源代码逐条进行检查和分析,发现这些源代码缺陷引发的安全漏洞,并提供代码修订措施和建议。
代码审计(Code audit)属于高级渗透测试服务,代码覆盖率能达到100%,能够找到普通安全测试所无法发现的安全漏洞
2、为什么要做代码审计?
1、等保三级要求
应用的安全评估(包括应用安全扫描、渗透测试及风险评估),应不存在中高级风险以上的漏洞(例如SQL注入、跨站脚本、网站挂马、网页篡改、敏感信息泄露、弱口令和口令猜测、管理后台漏洞等);
2、代码与架构复杂
几十万、几百万行代码、一个业务分几十个模块几十个代码仓库家常便饭;
开发语言多种多样,各种自研框架、流行框架应接不暇、架构还非常复杂。
3、99%的大型网站都被拖过库,泄漏大量用户数据。
提前做好代码审计工作,将先于黑客发现系统的安全隐患,提前部署好安全防御措施,保证系统的每个环节在未知环境下都能经得起黑客挑战,进一步巩固客户对企业及平台的信赖
3、代码审计工作模式
工具:fortify(是一个静态的、白盒的软件源代码安全测试工具)
自动分析+人工验证
关键词:
自动、批量、静态,白盒,人工、手动、验证
4、fortify工作原理?
通过内置的五大主要分析引擎:数据流、语义、结构、控制流、配置流等,对应用软件的源代码进行静态的分析,分析的过程中与它特有的软件安全漏洞规则集进行全面地匹配、查找,从而将源代码中存在的安全漏洞扫描出来,并给予整理报告。
关键词:
1、内置规则集
2、可自定义规则集
3、结果不完全可靠
5、应用场景
1. 即将上线的新系统平台;
2. 存在大量用户访问、高可用、高并发请求的网站;
3. 存在用户资料等敏感机密信息的企业平台;
4. 互联网金融类存在业务逻辑问题的企业平台;
5. 开发过程中对重要业务功能需要进行局部安全测试的平台;
四、如何开始代码审计
1、流程
2.步骤
- 安装fortify,参考【安全测试】fortify安装指导
- 下载代码,git clone xxx.git
- 打开workbench,选择AdvanceScan,选择代码文件夹,选择保存信息,开始扫描
- 扫描完成后查看扫描结果
- 导出报告
五、代码审计结果分析
1.fortify面板介绍
- “Issues(问题)”面板
- “Analysis Trace(分析跟踪)”面板
- “Project Summary(项目摘要)”面板
- “Source Code Viewer(源代码查看器)”面板、
- “Function(函数)”面板
- Issue Auditing(问题审计)”面板
2.SQL注入浅析
源码:$query="SELECT * FROM users WHERE id=$_GET['id']";
正常查询:select * from users where id=1
注入查询1: select * from users where id=1 or 1=1
注入查询2:select * from users where id=1 or 1=2
3.sql注入攻击的解决方案
- 普通用户与系统管理员用户的权限要有严格的区分。
- 强迫使用参数化语句。
- 加强对用户输入的验证。
- sql语句预编译
select * from test where name like "'%${cityCode}%'" 注入成功:statement = select * from test where name like '%cxk'; DELETE FROM test WHERE name like '%cxk%' select * from test where name like ? args: WrappedArray(JdbcValue(%cxk%))
注入失败:statement = select * from test where name like '%cxk\'; DELETE FROM test WHERE name like \'%cxk%'
3.sql注入案例分析:【安全测试】sql注入案例分析
4.js动态代码注入
示例:
evalResponse: function() { try { return eval((this.transport.responseText )); } catch (e) { this.dispatchException(e); }
风险:js代码使用了eval函数来解析服务端的响应
解决方案:
不要用eval函数来解析,采用自定义解析函数。
eval 存在安全问题,因为它会执行任意传给它的代码, 在代码字符串未知或者是来自一个不信任的源时,绝对不要使用 eval 函数。
5.硬编码密码风险:程序中采用硬编码方式处理密码,一方面会降低系统安全性,另一方面不易于程序维护。
解决方案:
fortify可能会误报,比如一些带关键词的变量:password、passwd、pass、password_xxx、xxx_passwd等 修复方式: 程序中所需密码应从配置文件中获取经过加密的密码值。对于误报的变量,只有修改变量名。
6.Cross-Site Scripting:Dom
风险:攻击者会创建恶意的 URL,然后采用电子邮件或者社会工程的欺骗手段诱使受害者访问此 URL 的链接。当受害者单击这个链接时,他们不知不觉地通过易受攻击的网络应用程序,将恶意内容带到了自己的电脑中
解决方案:
(1)与SQL注入防护的建议一样,假定所有输入都是可疑的,必须对所有输入中的script、iframe等字样进行严格的检查。这里的输入不仅仅是用户可以直接交互的输入接口,也包括HTTP请求中的Cookie中的变量,HTTP请求头部中的变量等。 (2)不仅要验证数据的类型,还要验证其格式、长度、范围和内容。 (3)不要仅仅在客户端做数据的验证与过滤,关键的过滤步骤在服务端进行。 (4)对输出的数据也要检查,数据库里的值有可能会在一个大网站的多处都有输出,即使在输入做了编码等操作,在各处的输出点时也要进行安全检查。 (5)在发布应用程序之前测试所有已知的威胁
六、参考
其他安全测试用例详情参考 【安全测试】安全测试通用测试用例集
标签:源代码,代码,扫描,安全,fortify,测试,分享,培训资料 From: https://www.cnblogs.com/happylumei/p/16731671.html