首页 > 编程知识 正文

代码扫描工具有哪些,源代码扫描工具klocwork

时间:2023-05-06 01:28:20 阅读:38453 作者:62

一、Fortify介绍

Fortify是一种强大的静态代码扫描分析工具,具有很强的发现代码漏洞缺陷的能力,主要是编译代码,并基于其强大的内置规则库发现漏洞。 其次,fortify SCA团队在开发此业务工具时还提供了用于定制规则的界面。 如果您获得了正版许可证,就可以基于此定制规则,以提高fortify SCA的漏洞识别能力。 另外,还可以通过自定义规则来减少误报,提高静态分析的精度和效率。

默认情况下,Fortify SCA使用已安装的安全编码规则包检查源代码,以定义可能出现的一系列问题,如受攻击者欢迎的裙子安全漏洞和不良编码缺陷。

安全编码规则规则分析支持的语言核心和扩展API包中的函数,并将分析结果记录在Fortify SCA中。 每个问题的说明都包括问题的说明和建议的解决方案,但可以更好地解决程序的漏洞和缺陷。 通过创建自定义规则包,还可以准确分析特定的APP应用程序、验证特定的安全规则,以及细化Fortify SCA报告的问题。

二、编写自定义规则原理

要创建有效的自定义规则,必须熟悉安全漏洞类别和通常相关的函数类型。 了解特定类型漏洞的常见函数有助于在创建自定义规则时准确找到与安全相关的函数。 每种语言都有巨大的开源框架和lib库。 因此,要定制规则,您必须同时熟悉安全漏洞的原理和一种或多种开发语言。 通常用于自定义规则的语言有java、C/C、PHP等。 然后,需要确定正确的规则格式,以识别与安全相关的函数并熟悉这些函数的特性,从而表示每个函数的具体行为及其相关漏洞类别。 确定了这种联系后,使用自定义规则编辑器创建规则相对简单。

三、自定义规则

1 )在安装. fortify SCA的frdxtd目录中找到并打开自定义规则编辑器。 请参阅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
定义没有适当地以 "" 结束输出缓冲区的函数
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
定义适当地以 "" 结束输出缓冲区的函数

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
定义在输入参数没有适当地以 "" 结尾的情况下可能会容易导致 buffer overflow 漏洞
41) String Termination Error Source Rule
定义由于输入数据源没有适当地以 "" 结尾而容易导致buffer overflow 漏洞。

42) String Termination Error Validation Rule
定义适当地以 "" 结束缓冲区的函数。
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安装目录,再进入frdxtd目录,双击auditworkbench.cmd启动程序

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

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

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

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

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

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

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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。