一、Fortify介绍     

Fortify是一款强大的静态代码扫描分析工具,其发现代码漏洞缺陷的能力十分强悍,主要是将代码经过编译,依托于其强大的内置规则库来发现漏洞的。其次fortify SCA团队在开发此商业工具时,也提供了自定义规则的接口,只要经过正版授权后,便可以在此基础上自定义规则,来增强Fortify SCA的漏洞识别能力,同时经过自定义规则,也可以降低误报,使静态分析的准确度和高效性。

默认情况下,Fortify SCA使用安装的安全编码规则包来检查源代码,并定义一系列可能出现的问题,如可被攻击者李勇的安全漏洞和不良的编码缺陷。

安全编码规则中的规则分析受支持语言的核心和扩展的API包中的函数,并将分析结果记录在Fortify SCA中。每一个问题的解释包含了对问题的描述和建议的解决方案,一边更好的解决程序中的漏洞和缺陷。也可以通过创建自定义规则包来准确地分析特定的应用程序,验证专门的安全规则以及细化Fortify SCA所报告的问题。

二、编写自定义规则原理

要编写有效的自定义规则,就必须熟悉一直的安全漏洞类别和通常与他们相关的函数类型。深入理解各类经常出现在特定类型漏洞的函数,有利于在编写自定义规则过程中能够准确地找到与安全相关的函数。任何一门语言,都有其庞大的开源框架和lib库。所以自定义规则,既要精通安全漏洞原理,又要熟练掌握一门或几门开发语言,一般自定义规则用的比较多的语言有java、C/C++、PHP等。其次必须识别与安全相关的函数,并熟悉这些函数的特性以此来确定能够体现各个函数具体行为和与之相关的漏洞类别的正确规则形式。一旦确定好了这种联系,使用自定义规则编辑器来创建规则就相对简单了。

三、自定义规则

1). 在fortify SCA安装的bin目录下找到打开自定义规则编辑器,CustomRulesEditor.cmd,如下图所示:

2). 打开编辑器后,选择File ——>Generate Rule,弹出规则向导框。

3). 自定义规则模板可以按照漏洞类型(Category)和规则类型(Rule Type)进行分类,不管是何种方式分类,这些模板大体上分为,数据污染源tainted规则,数据控制流规则,数据传递规则,以及漏洞缺陷爆发的sink规则。只要理解了这些规则模板,和开发语言的函数特征,建立规则就简单了。

如下是fortify自定义规则向导中的规则选项:

1) Access Control: Database  Validation Rule
定义验证对数据库中所存储的信息的访问权限的函数 (授权函数)。这个规则可以发现与未经授权的访问相关的漏洞Alias Rule
在安全编码规则包或自定义规则的范围内定义核心和扩展API 所发现的能够模拟其他函数行为的函数。
2) Allocation Rule
定义内存分配的函数。这个规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞
3) Buffer Overflow Detection Rules for 'scanf' Family of Functions
定义像 scanf() 家族函数一样运行的函数。这些规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞
4) Buffer Overflow Detection Rules for 'sprintf' Family of Functions
定义像 sprintf() 家族函数一样运行的函数。这个函数可以在格式化字符串中并置多个起始缓冲区,并将格式化字符串的多个内存单位复制到目标缓冲区。这个规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞

5) Buffer Overflow Detection Rules for 'strcat' Family of Functions
定义像 strcat() 家族函数一样运行的函数。它在目标缓冲区的末端并置了多个起始缓冲区的内存单位。这些规则有助于跟踪缓冲区大小并检测 buffer overflow 漏洞
6) Buffer Overflow Detection Rules for 'strcpy' Family of Functions
定义像 strcpy() 家族函数一样运行的函数。它可以将多个内存单位从起始缓冲区复制到目标缓冲区。这些规则有助于
跟踪缓冲区大小并检测 buffer overflow 漏洞
7) Cross-Site Scripting Sink Rule
定义在输入参数没有进行适当验证的情况下有可能在浏览器中执行恶意代码的函数
8) Cross-Site Scripting Source Rule
定义充当输入源的函数,如果这样的函数没有经过适当的验证,会导致浏览器执行恶意代码。
9) Cross-Site Scripting Validation Rule
定义发送到网页前需要进行适当的数据验证的函数
10) Generic Pass-Through Rule
定义一个其输入参数会和输出参数交互数据的函数。
11) Generic Semantic Rule
定义可能出现的 dangerous function
12) Generic Sink Rule
定义在输入参数没有进行适当验证的情况下有可能带来多种安全漏洞风险的函数
13) Generic Source Rule
定义充当输入源的函数,如果这样的函数没有经过适当的验证,会导致多种安全漏洞。
14) Generic Validation Rule
定义能够针对多种安全漏洞而进行适当验证的函数
15) HTTP Response Splitting Sink Rule
定义在输入参数没有进行适当验证的情况下有可能破坏 HTTP 响应头文件的函数
16) HTTP Response Splitting Validation Rule
定义加入 HTTP 响应头文件之前已进行适当的数据验证的函数
17) Integer Overflow Sink Rule
定义易于发生 integer overflow 漏洞的函数,这种漏洞会在输入参数验证不当的情况下导致逻辑错误和 buffer overflow。
18) Log Forging Sink Rule
定义在输入参数没有进行适当验证的情况下有可能向日志文件写入恶意或伪造条目的函数
19) Pass-Through Rule that Indicates that Outgoing Value does not End with a Newline Character
定义未在输出参数中附加换行符的参数
20) Pass-Through Rule that Indicates that Outgoing Value does not End with a Null Character
定义没有适当地以 "\0" 结束输出缓冲区的函数
21) Pass-Through Rule that Indicates that Outgoing Value Ends with a Newline Character
定义在输出参数中附加换行符的参数
22) Pass-Through Rule that Indicates that Outgoing Value Ends with a Null Character
定义适当地以 "\0" 结束输出缓冲区的函数

23) Pass-Through Rule that Indicates  that Outgoing Value is  Deobfuscated
定义充当去模糊化例程的函数
24) Pass-Through Rule that Indicates  that Outgoing Value is not  Numeric
定义处理输入参数的函数,以使其输出参数不为数字。
25) Pass-Through Rule that Indicates that Outgoing Value is Numeric
定义处理输入参数的函数,以使其输出参数为数字。
26) Pass-Through Rule that Indicates  that Outgoing Value is Poorly  Encrypted
定义对输入参数所执行的加密方式较差的函数,如基于 64位的编码。
27) Pass-Through Rule that Indicates  that Outgoing Value Represents  the Length of the String
定义输出参数可以表示字符串长度的函数
28) Password Management Sink Rule
定义采用永远不会被破译或去模糊化的明文密码作为参数的函数
29) Password Management: Weak Cryptography Sink Rule
定义采用加密方式较差的密码作为参数的函数
30) PCI Violation Sink Rule
定义有可能将信用卡数据显示给攻击者的函数
31) PCI Violation Source Rule
定义将信用卡数据引入应用程序的函数
32) PCI Violation Validation Rule
定义信用卡数据显示给攻击者前可以对这些数据进行适当验证的函数
33) Privacy Violation Sink Rule
定义在输入参数处理不当的情况下由于向攻击者显示私人信 息而导致可能危及用户隐私的函数
34) Privacy Violation Source Rule
定义作为私人数据源的函数,如果处理不当,会危害用户隐私。
35) Privacy Violation Validation Rule
定义能适当处理私人数据且不会危及用户隐私的函数。
36) SQL Injection Sink Rule
定义在输入参数没有进行适当验证的情况下有可能执行恶意SQL 或对数据库所存储的数据提供未经授权的访问权限的函数
37) SQL Injection Source Rule
定义充当输入源的函数,如果这样的函数没有经过适当的验证,会导致 SQL 被注入到数据库查询中。
38) SQL Injection Validation Rule
定义在利用数据进行 SQL 查询之前能够对这些数据进行适当验证的函数
39) String Length Rule
定义能够计算字符串长度的函数。这个规则有助于跟踪字符串的长度,以便检测 buffer overflow 漏洞。
40) String Termination Error Sink Rule
定义在输入参数没有适当地以 "\0" 结尾的情况下可能会容易导致 buffer overflow 漏洞
41) String Termination Error Source Rule
定义由于输入数据源没有适当地以 "\0" 结尾而容易导致buffer overflow 漏洞。

42) String Termination Error Validation Rule
定义适当地以 "\0" 结束缓冲区的函数。
43) System Information Leak Sink Rule
定义在输入参数处理不当的情况下可能向攻击者显示有用的系统信息的函数
44) System Information Leak Source Rule
定义作为系统信息数据源的函数,如果处理不当,会向攻击者泄漏有用的数据。
45) System Information Leak Validation Rule
定义能够适当处理系统数据的函数

4) .选择规则包语言,点击next,然后填写报名,类名,函数名

5). 点击next,设置sink点

四. 运行自定义规则

需要将编写好的自定义规则包放在Fortify SCA指定的文件夹下方可生效。默认一般是在${FortifyInstall}/Core/config/customrules/目录下。你可以在${FortifyInstall}/Core/config/fortify-sca.properties进行配置自定义路径

五、Fortify代码扫描使用教程

1、进入Fortify安装目录,再进入bin目录,双击auditworkbench.cmd启动程序

2、打开扫描窗口,点击Scan Java Project

3、选择要扫描的项目目录,点击确定按钮

4、弹出java代码版本选择窗口,选择版本后,点击OK

5、弹出审计向导窗口,点击Scan按钮开始扫描

6、扫描开始,等待扫描结束,等待时间根据项目大小而定,可能时间会很长

7、扫描结束后,显示扫描结果。到此使用Fortify 17.10进行源代码漏扫的方法就介绍完了。

初始fortify,还存在很多认知的不足,欢迎路过的伙伴们留言指正。。。望不吝赐教!!!

Fortify代码扫描工具相关推荐

  1. 想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研

    想做一个整合开源安全代码扫描工具的代码安全分析平台 - Android方向调研 http://blog.csdn.net/testing_is_believing/article/details/22 ...

  2. java 静态扫描_静态代码扫描工具 – (八)- 扫描Java项目

    静态代码扫描工具 – (八)- 扫描Java项目 1.准备好Java项目代码 只要是java语言实现的项目均可. 比如,自动化测试的代码,测试平台等均可以. 本次案例,使用java语言实现的测试平台来 ...

  3. Java学习之代码扫描工具的使用方法

    有些刚进行Java学习的小伙伴对Java代码扫描工具还不是很了解,不知道该如何使用,下面千锋重庆的小编就来告诉大家使用方法. 1.插件的安装 由于使用的mac所有以Mac下idea插件安装流程为例,首 ...

  4. Android Studio 工具:Lint 代码扫描工具(含自定义lint)

    什么是 Lint Android Lint 是 SDK Tools 16(ADT 16)开始引入的一个代码扫描工具,通过对代码进行静态分析,可以帮助开发者发现代码质量问题和提出一些改进建议.除了检查 ...

  5. [C++]TscanCode代码扫描工具

    TscanCode介绍 TscanCode 是腾讯研发的静态代码扫描工具,最早的版本是基于 cppcheck 二次开发.之后又重新自研,不仅支持 C++,还支持 C#,Lua 语言,在发掘 C++ 空 ...

  6. Android和iOS静态代码扫描工具

    Android 名称 来源 功能特点 检查SQL注入 检查NullPointException 支持IDE情况 Android Lint Android SDK 针对Android,检查范围广 否 是 ...

  7. java代码扫描工具比较_代码扫描工具的选型和Sonar最佳实践

    目标 在编码阶段发现NNE空指针异常.IO流未正确关闭等致命性bug,杜绝此类"零容忍"线上异常的发生. 技术选型 关于代码扫描工具,比较主流的有Sonar.FindBugs.Al ...

  8. coverity代码检测工具介绍_Coverity代码扫描工具

    1.说明:Coverity代码扫描工具可以扫描java,C/C++等语言,可以和jenkins联动,不过就是要收钱,jenkins上的插件可以用,免费的,适用于小的java项目 2.这是Coverit ...

  9. 静态代码扫描工具汇总

    一.概述 在软件开发过程中,开发团队往往要花费大量的时间和精力发现并修改代码缺陷.传统的代码评审.同事复审,通过人工方式来检查缺陷仍然是一件耗时耗力的事情.而静态代码扫描工具能够在代码构建过程中帮助开 ...

  10. 静态代码扫描工具(多种)简要入门介绍-SonarQube社区版-免费、TscanCode工具、PMD工具、flake8工具

    SonarQube社区版-免费 适用语言:Java, C#, JavaScript, TypeScript, CloudFormation, Terraform, Kotlin, Ruby, Go, ...

最新文章

  1. 电动车逆变器的基础知识
  2. TP 框架没有考虑完善的功能点:1、表达式查询不支持INSTR形式的查询
  3. php 小数点 乘法,js小数点数字相乘、把小数点四舍五入保留两位小数
  4. Linux驱动开发常用头文件
  5. html怎么弄艺术字体,如何为图片加上艺术字的图文方法步骤
  6. CSS3简介、新增选择器、属性选择器、伪元素选择器、伪元素
  7. Git操作,有时候会遇到“git did not exit cleanly (exit code 128)”错误
  8. SpringCloud入门之Maven系统安装及配置
  9. 完美解决office2013 错误1402
  10. mysql主从复制(原理以及配置)
  11. 超强阵容实操教学, 0 基础 Flink 训练营免费抢报啦!
  12. Atitit 知识管理的艺术 艾提拉著作 这个实际上涉及到知识的管理(获取 ,存储,索引,查找等方法 目录 1. 记不住的本质 2 1.1. 真的没有记住 2 1.2. 暂时没有搜索到,可能是
  13. linux 程序的权限设置,Linux权限设置详解
  14. 如何规划自己的人生未来
  15. TDengine在图扑工业物联网监控平台中的应用
  16. 基于Arduino、STM32进行红外遥控信号接收
  17. USB通信协议与供电协议全解
  18. 锂离子电池电量计的选择
  19. html5图片邀请函,html5,邀请函.doc
  20. ICME2021:基于机器视觉的RD模型

热门文章

  1. ModbusTCP协议
  2. 数字图像处理-图像复原
  3. 在虚拟机安装windows xp时所需要的序列号
  4. 调用MYSQL存储过程实例
  5. editview软键盘弹出和隐藏
  6. 网吧技术员应聘问卷你能答多少
  7. windows98 java_在win98下安装JSP环境
  8. 计算机无法识别psp usb设备,PSP降级导致USB连接电脑识别问题解决办法
  9. 2021年总结:缘起性空,归来不少年——回顾这荆棘的一年
  10. 《水经注地图发布服务中间件》for Linux 版发布