首页 > 其他分享 >【安全测试】fortify分享培训资料

【安全测试】fortify分享培训资料

时间:2022-09-26 17:22:24浏览次数:77  
标签:源代码 代码 扫描 安全 fortify 测试 分享 培训资料

一、安全测试类型介绍

 

 

二、安全测试工具介绍

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

相关文章