fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
摘要:一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
由于中间编译建模和扫描工具分析的过程是由扫描工具中内置的二进制可执行程序完成的,因此我们无法进行干预,因此只能在以下三个位置进行操作:源代码编写,规则定义和扫描结果显示误报,如下所示:
源代码编写
编码规格
尝试使用fortify的官方认可的安全性库函数,例如ESAPI。 在使用ESAPI之后,Fortify sca会将漏洞标记为低风险,这是一种可以忽略的漏洞。 以下是针对常见漏洞的安全性库函数
1)xss
org.owasp.esapi.Encoder/Encoding/Escapefrom
2)文件路径操作
org.owasp.esapi.getValidDirectoryPathororg.owasp.esapi.getValidFilename
3)SQL注入
org.owasp.esapi.Encoder.encodeForSQL
org.apache.commons.lang.StringEscapeUtils.escapeSql
4)命令注入
org.owasp.esapi.Encoder.encodeForOS
使用注释(适用于Java)
如果我们使用了SonarQube,我们将找到两种修改代码以解决误报的方法。
注释
在错误判断的代码行之后添加注释:// NOSONAR
String name = user.getName(); //NOSONAR
注解
将@SuppressWarnings批注添加到类或方法
@SuppressWarnings("squid:S1309")
publicclass Example {
...
@SuppressWarnings("all")
public void example(){
}
}
squid:S1309是扫描规则编号
相同的fortify sca还提供了注释功能,Fortify Java Annotations
例如,以下代码:
publicclass User {
public finalstatic String PASSWORD_LABEL = "password";
privateString userId;
privateString userKey;
publicvoid printUserData() {
System.out.println("Fortify[userId=" + userId + ", " + PASSWORD_LABEL + "=" +userKey + "]");
}
}
扫描平台将报告publicfinal静态字符串PASSWORD_LABEL =“ password”中的PasswordManagement:Hardcoded Password漏洞。
使用后
@FortifyNotPassword
publicfinal static String PASSWORD_LABEL = "password";
@FortifyPassword
private String userKey;
可以使用以下注释:
FortifyCheckReturnValue
FortifyCommandInjectionSink
FortifyCommandInjectionValidate
FortifyDangerous
FortifyDatabaseSource
FortifyFileSystemSource
FortifyNetworkSource
FortifyNonNegative
FortifyNonZero
FortifyNotNumberPassthrough
FortifyNotPassword
FortifyNotPrivate
FortifyNumberPassthrough
FortifyPCISink
FortifyPCISource
FortifyPCIValidate
FortifyPassthrough
FortifyPassword
FortifyPrivacySink
FortifyPrivacyValidate
FortifyPrivate
FortifyPrivateSource
FortifySQLSink
FortifySQLValidate
FortifySink
FortifySource
FortifySystemInfoSink
FortifySystemInfoValidate
FortifyValidate
FortifyWebSource
FortifyXSSSink
FortifyXSSValidate
规则定义
Fortify sca主要对中间代码进行数据流分析,控制流分析,代码结构分析,内容和配置文件分析。
1.创建一个新规则
以下是强化安装目录随附的php示例代码示例(示例\基本\ php):
我们添加了validate函数,以根据缺陷代码进行安全清除处理。 Fortify sca无法识别此功能的功能。
右键单击该函数以弹出write rules for this function。 接下来,我们创建一个净化规则,用于通过图形界面跟踪数据流。
再次扫描后,我们发现fortify sca已经可以识别我们的自定义validate函数
打开规则文件xml,我们看到xss安全验证标志已添加到taintflag。 只要在数据流跟踪中找到了validate函数,就不会再错误地报告xss问题。
此外,您可以使用fortify随附的自定义用户规则向导来创建新规则。 您可以图形方式配置40多种规则类型。 当然,如果对自定义规则有更高的要求,请根据向导生成的XML对其进行更新。
2.覆盖规则
以下演示覆盖了秘钥硬编码规则:
或以强化安装目录随附的php示例代码(Samples \ basic \ php)作为示例
由于没有加密机和密码托管平台,因此数据库密码只能以纯文本形式写入代码或配置文件中。怎么不让fortify重复报出这种问题呢?
编写新规则以覆盖此id的规则,如下所示:
随机指定一个不会用于保存密钥的变量名密码,涵盖了此规则
再次扫描,发现不再提示此密码为硬编码问题
3.裁剪规则
Fortify规则是.bin文件,无法直接编辑,但可以转换为xml,然后根据需要定制为customer rules。 但是,请注意,您需要添加--no-default-rules来禁用扫描时的默认规则。
扫描结果显示
1.根据漏洞的可能性和严重性进行分类和筛选
我们观察到,通过fortify扫描的每个漏洞都具有以下两个标记,严重性(IMPACT)和可能性(LIKEHOOD)。 这两个标记的值从0.1到5.0。 我们可以根据需要过滤并显示相应的内容。 严重性和可能性漏洞。 这些漏洞必须得到修复。 其他非严重或难以利用的漏洞可以有选择地修复为低风险漏洞。 如果我们的应用程序是新闻或体育应用程序,那么我们可以增加阈值以增加漏报率的比率。 如果我们的应用程序是财务管理或交易应用程序,那么我们可以降低阈值以增加误报率并降低误报率。
如果您认为上述方法过于粗鲁,则可以仔细查看此漏洞所攻击的扫描规则,例如以下规则标识了规则ID,
然后,我们搜索规则文件以找到与规则ID对应的三个属性。 漏洞的准确性,IMPACT,漏洞的严重性以及被利用的可能性都在0.1到5.0的范围内。 我们可以根据需要设置过滤条件。 例如,仅显示漏洞准确度高于4.0的漏洞。
上述筛选可以自动进行吗? 当然,如果您使用fortify ssc,则fortify ssc提供api接口,该接口可以消除您不希望看到的漏洞。 如果不使用fortify ssc,则只能自己解析fpr文件,更改漏洞审核信息并保存。 您可以从github上学到一些类似的开源项目。
2.基于历史手动漏洞审核信息合并扫描报告
如果我们的项目先前已被fortify sca扫描并由开发人员或安全人员进行审核,则可以使用历史审核信息。 每个漏洞都有一个编号instance ID。 已经过审核并确认为误报的漏洞将不再重复。 报告合并可以通过fortify ssc或fortify sca的命令行或图形界面进行。
3.使用大数据分析和机器学习掩盖误报
目前,这是一个正在探索的方向,但是此方法需要大量可靠的漏洞审核样本,如果样本很小,将很难操作。
Fortify sca通常是一种非常强大的代码安全扫描工具,但是不可避免地存在误报。 我们需要控制误报对开发人员的干扰,并且要满足合规性要求,我们需要自定义扫描规则,以使扫描工具完全适应当地法律法规。
相关热词搜索:fortify sca 自定义扫描规则 代码安全扫描工具 重庆网络安全
上一篇:Web Shell攻击:net.exe侦察,nbstat.exe扫描其他目标系统,最后使用PsExec横向移动
下一篇:入侵痕迹分析:.bash_history分析,日志分析,流量进程分析,隐藏后门排查,后门处理
人机验证(Captcha)绕过方法:使用Chrome开发者工具在目标网站登录页面上执行简单的元素编辑,以实现Captcha绕过
牛创网络: " 人机身份验证(Captcha)通常显示在网站的注册,登录名和密码重置页面上。 以下是目标网站在登录页面中排列的验证码机制。 从上图可以
2020-01-26 12:44:09 )8872( 亮了
自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
牛创网络: "自动发现IDOR(越权)漏洞的方法:使用BurpSuite中的Autozie和Autorepeater插件来检测和识别IDOR漏洞,而无需手动更改每个请求的参数
2020-01-30 14:04:47 )6288( 亮了
Grafana CVE-2020-13379漏洞分析:重定向和URL参数注入漏洞的综合利用可以在任何Grafana产品实例中实现未经授权的服务器端请求伪造攻击SSRF
牛创网络: "在Grafana产品实例中,综合利用重定向和URL参数注入漏洞可以实现未经授权的服务器端请求伪造攻击(SSRF)。该漏洞影响Grafana 3 0 1至7 0 1版本。
2020-08-12 14:26:44 )4301( 亮了
Nginx反向代理配置及反向代理泛目录,目录,全站方法
牛创网络: "使用nginx代理dan(sui)是http响应消息写入服务地址或Web绝对路径的情况。 写一个死的服务地址是很少见的,但它偶尔也会发生。 最棘手的是写入web绝对路径,特别是如果绝对路径没有公共前缀
2019-06-17 10:08:58 )3857( 亮了
fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)
牛创网络: "一般安全问题(例如代码注入漏洞),当前fortify sca规则具有很多误报,可通过规则优化来减少误报。自带的扫描规则不能检测到这些问题。 需要自定义扫描规则,合规性角度展示安全风险。
2020-02-12 10:49:07 )3505( 亮了
整理几款2020年流行的漏洞扫描工具
牛创网络: "漏洞扫描器就是确保可以及时准确地检测信息平台基础架构的安全性,确保业务的平稳发展,业务的高效快速发展以及公司,企业和国家 地区的所有信息资产的维护安全。
2020-08-05 14:36:26 )2536( 亮了
微擎安装使用技巧-微擎安装的时候页面显示空白是怎么回事?
牛创网络: "我们在公众号开发中,有时候会用到微擎,那我们来看一下微擎安装的时候页面显示空白是怎么回事吧
2019-06-08 15:34:16 )2261( 亮了
渗透测试:利用前端断点拦截和JS脚本替换对前端加密数据的修改
牛创网络: " 本文介绍的两种方法,虽然断点调试比JS脚本代码替换更容易,但是JS脚本代码替换方法可以实现更强大的功能,测试人员可以根据实际需要选择适当的测试方法
2020-01-07 09:34:42 )1995( 亮了
从工业界到学界盘点SAS与R优缺点比较
牛创网络: "虽然它在业界仍然由SAS主导,但R在学术界广泛使用,因为它的免费开源属性允许用户编写和共享他们自己的应用程序 然而,由于缺乏SAS经验,许多获得数据分析学位的学生很难找到工作。
2019-07-13 22:25:29 )1842( 亮了
41款APP侵犯用户隐私权:QQ,小米,搜狐,新浪,人人均被通报
牛创网络: "随着互联网的不断发展,我们进入了一个时代,每个人都离不开手机。 但是,APP越来越侵犯了用户隐私权。12月19日,工业和信息化部发布了《关于侵犯用户权益的APP(第一批)》的通知。
2019-12-20 11:28:14 )1775( 亮了