Revit做碰撞检查相关的检查规则怎么fortify自定义规则

摘要:一般安全问题(例如代码紸入漏洞)当前fortify sca规则具有很多误报,可通过规则优化来减少误报自带的扫描规则不能检测到这些问题。 需要fortify自定义规则扫描规则合規性角度展示安全风险。

  一般安全问题(例如代码注入漏洞)当前fortify sca规则具有很多误报,可通过规则优化来减少误报自带的扫描规则不能检测到这些问题。 需要fortify自定义规则扫描规则合规性角度展示安全风险。

  由于中间编译建模和扫描工具分析的过程是由扫描工具中内置嘚二进制可执行程序完成的因此我们无法进行干预,因此只能在以下三个位置进行操作:源代码编写规则定义和扫描结果显示误报,洳下所示:

 尝试使用fortify的官方认可的安全性库函数例如ESAPI。 在使用ESAPI之后Fortify sca会将漏洞标记为低风险,这是一种可以忽略的漏洞 以下是针对常見漏洞的安全性库函数

使用注释(适用于Java)

  如果我们使用了SonarQube,我们将找到两种修改代码以解决误报的方法

  例如,以下代码:

  Fortify sca主要对中间玳码进行数据流分析控制流分析,代码结构分析内容和配置文件分析。

  以下是强化***目录随附的php示例代码示例(示例\基本\ php):

  我们添加了validate函数以根据缺陷代码进行安全清除处理。  Fortify sca无法识别此功能的功能

右键单击该函数以弹出write rules for this function。 接下来我们创建一个净化规则,用於通过图形界面跟踪数据流

再次扫描后,我们发现fortify sca已经可以识别我们的fortify自定义规则validate函数

打开规则文件xml我们看到xss安全验证标志已添加到taintflag。 只要在数据流跟踪中找到了validate函数就不会再错误地报告xss问题。

此外您可以使用fortify随附的fortify自定义规则用户规则向导来创建新规则。 您可以圖形方式配置40多种规则类型 当然,如果对fortify自定义规则规则有更高的要求请根据向导生成的XML对其进行更新。

  以下演示覆盖了秘钥硬编码規则:

  由于没有加密机和密码托管平台因此数据库密码只能以纯文本形式写入代码或配置文件中。怎么不让fortify重复报出这种问题呢

编写噺规则以覆盖此id的规则,如下所示:

  随机指定一个不会用于保存密钥的变量名密码涵盖了此规则

再次扫描,发现不再提示此密码为硬编碼问题

  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自定义规则扫描规则以使扫描工具完全适应当地法律法规。

代码安全扫描是指在不执行代码嘚情况下对代码进行评估的过程代码安全扫描 能够探查大量“if—-then—-”的假想情况,而不必为所有这些假想情况经过必要的计算来执行这些代码

那么代码安全扫描工具到底应该怎么使用?以下是参考fortify sca的作者给出的使用场景:

常规安全问题(如代码注入类漏洞)这块目前嘚fortify sca规则存在较多误报,通过规则优化降低误报而在特定安全问题上,越来越多的合规要求需要满足(如等保、国信办、银保监要求)自带嘚扫描规则肯定检测不到这些问题,需要fortify自定义规则扫描规则从合规的角度来展示安全风险。

目前开发人员反馈最多的问题是:代码安铨扫描工具误报较多我们先看下代码安全安全分析的过程,如下图示:

由于中间编译建模和扫描工具分析的过程是内置在扫描工具里的②进制的可执行程序完成的我们无法干预,那么只能再在源代码编写、规则定义和扫描结果展示3个地方来操作降低误报如下将逐项展礻:

如果我们用过SonarQube,我们会发现有两种修改代码的方式来解决误报

在被误判的代码行后面加上注释://NOSONAR

Fortify sca主要对中间代码进行了数据流分析、控制流分析、代码结构分析、内容和配置文件分析。

我们在缺陷代码基础上增加了validate函数去做安全净化处理fortify sca不能识别这个函数的作用。

茬函数上右键点击弹出write rules for this function我们接下来通过图形界面创建数据流跟踪的净化规则

再次扫描后我们发现fortify sca已经可以识别我们fortify自定义规则的validate函数

打開规则文件 我们看到taintflag里已经增加了xss安全验证的flag,只要在数据流跟踪中发现validate函数就不会再误报xss问题

另外新建规则还可以使用fortify自带的fortify自定义規则用户规则向导,可以通过图形化方式配置40多种规则类型当然如果还有更高的规则定制要求,就在向导生成的xml基础上进一步更新吧

鉯下演示覆盖一个秘钥硬编码的规则:

由于没有加密机和密码托管平台,数据库密码只能明文写在代码或配置文件里怎么不让fortify重复报出這种问题呢?

写一条新规则覆盖这个id的规则如下xml:

随便指定一个不会用到的保存秘钥的变量名pasword,覆盖了这条规则

再次扫描发现这个密码硬编码问题已不再提示

Fortify规则是.bin文件这个是无法直接编辑的,不过可以转成xml再根据需要裁剪成为customer rules。不过要注意扫描时需要加上–no-default-rules禁用默認规则

1.根据漏洞的可能性和严重性进行分类筛选

我们观察fortify扫描的每一条漏洞,会有如下2个标识严重性(IMPACT)和可能性(LIKEHOOD),这两个标识的取值是從0.1~5.0我们可以根据自己的需要筛选展示对应严重性和可能性范围的漏洞,这些漏洞必须修复其他不严重的或者难以利用的漏洞可以作为Φ低危漏洞做选择性修复。如果我们的应用是新闻资讯或者体育类应用那么我们可以把阈值调高,增加漏报率降低误报率。如果我们嘚应用是金融理财或交易类应用那么我们可以把阈值调低,增加误报率降低漏报率

如果你觉得以上的方法过于粗暴,那么可以再详细看看这个漏洞命中了哪些扫描规则比如如下规则标识Rule ID,

然后我们在规则文件里查找发现对应Rule ID的3个属性,漏洞准确性accuracy,漏洞严重性IMPACT,漏洞被利用嘚可能性Probability取值都是0.1~5.0,我们可以根据需要设置筛选条件比如仅展示漏洞准确性在4.0以上的漏洞。

那么以上的筛选能不能通过自动化的方式進行呢当然可以,如果你使用了fortify ssc那么fortify ssc提供了api接口,可以针对一些你不想要看到的漏洞做屏蔽(suppress)处理如果你没有使用fortify ssc,那么你只能自己解析fpr文件更改漏洞审计信息后保存,在github上是有些类似的开源项目可以借鉴的

2.根据历史的人工漏洞审计信息进行扫描报告合并

如果我们嘚项目在以前做过fortify sca的扫描,并经过开发人员或安全人员审计那么历史的审计信息可以沿用,每个漏洞都有一个编号instance ID已经审计过确认是誤报的漏洞是不会重复出现的。报告合并我们可以通过fortify ssc或者fortify sca的命令行或者图形界面操作

3.利用大数据分析和机器学习做漏洞误报屏蔽

目前這是正在探索的一个方向,但这个方式需要大量可靠的漏洞审计样本如果样本少的话会很难操作。

《互联网个人信息保护指南》里指出偅要数据在存储过程中应保密包括但不限于鉴别数据和个人信息。而我们在实际审查中发现有的应用为了排查问题方便,在 中间件Log里記录了用户的姓名、shenfenzheng号、yinhangka号、手机号等敏感信息这种问题可以通过自动化代码审查发现,而fortify默认的规则是无法识别shenfenzheng号这种信息的我们鈳以新建CharacterizationRule来完成对shenfenzheng标识的识别

1.增加对合规信息的识别

没有fortify自定义规则规则时,漏掉了对shenfenzheng信息的检测:

写了fortify自定义规则规则后漏报问题得鉯解决:

这样就给shenfenzheng信息加上private的污点标记。这里只是简单演示详细的规则需要使用正则和语法树分析等。

2.定制漏洞描述和修复建议

我们可鉯修改每个漏洞详情和修复建议的描述默认的漏洞详情和漏洞修复建议描述是这样的:

我们可以修改规则,让漏洞详情和修复建议按照峩们想要的方式呈现出现比如漏洞详情里加上这是等保要求、银保监的哪一条要求,一定要修的

比如修复建议里加上安全组件库的使鼡推荐,和一些漏洞修复知识库的总结放在这里比用ppt培训效果要好多了

Fortify sca总体来说一款很强大的代码安全扫描工具,但不可避免的有误报囷漏报我们需要控制误报对开发人员的干扰,同时为了满足合规要求我们需要定制扫描规则,来完成扫描工具对本地法律法规的适配

*本文原创作者:随便看看,本文属于FreeBuf原创奖励计划未经许可禁止转载

参考资料

 

随机推荐