网站建设、公众号开发、微网站、微商城、小程序就找牛创网络 !

7*24小时服务专线: 152-150-65-006 023-68263070 扫描二维码加我微信 在线QQ

无线安全团结互助,让我们共同进步!

当前位置:主页 > 技术资讯 > 网络安全 > 无线安全 >

我们的优势: 10年相关行业经验,专业设计师量身定制 设计师一对一服务模式,上百家客户案例! 企业保证,正规流程,正规合作 7*24小时在线服务,售后无忧

fortify sca自定义代码安全扫描工具扫描规则(源代码编写、规则定义和扫描结果展示)

文章来源:重庆网络安全 发布时间:2020-02-12 10:49:07 围观次数:
分享到:

摘要:一般安全问题(例如代码注入漏洞),当前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无法识别此功能的功能。

blob.png

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

blob.png

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

blob.png

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

blob.png

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


  2.覆盖规则


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


  或以强化安装目录随附的php示例代码(Samples \ basic \ php)作为示例


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

blob.png

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


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

blob.png

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

blob.png

3.裁剪规则


  Fortify规则是.bin文件,无法直接编辑,但可以转换为xml,然后根据需要定制为customer rules。 但是,请注意,您需要添加--no-default-rules来禁用扫描时的默认规则。


  扫描结果显示


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


  我们观察到,通过fortify扫描的每个漏洞都具有以下两个标记,严重性(IMPACT)和可能性(LIKEHOOD)。 这两个标记的值从0.1到5.0。 我们可以根据需要过滤并显示相应的内容。 严重性和可能性漏洞。 这些漏洞必须得到修复。 其他非严重或难以利用的漏洞可以有选择地修复为低风险漏洞。 如果我们的应用程序是新闻或体育应用程序,那么我们可以增加阈值以增加漏报率的比率。 如果我们的应用程序是财务管理或交易应用程序,那么我们可以降低阈值以增加误报率并降低误报率。

如果您认为上述方法过于粗鲁,则可以仔细查看此漏洞所攻击的扫描规则,例如以下规则标识了规则ID,

blob.png

  然后,我们搜索规则文件以找到与规则ID对应的三个属性。 漏洞的准确性,IMPACT,漏洞的严重性以及被利用的可能性都在0.1到5.0的范围内。 我们可以根据需要设置过滤条件。 例如,仅显示漏洞准确度高于4.0的漏洞。

blob.png

  上述筛选可以自动进行吗? 当然,如果您使用fortify ssc,则fortify ssc提供api接口,该接口可以消除您不希望看到的漏洞。 如果不使用fortify ssc,则只能自己解析fpr文件,更改漏洞审核信息并保存。 您可以从github上学到一些类似的开源项目。

  2.基于历史手动漏洞审核信息合并扫描报告


  如果我们的项目先前已被fortify sca扫描并由开发人员或安全人员进行审核,则可以使用历史审核信息。 每个漏洞都有一个编号instance ID。 已经过审核并确认为误报的漏洞将不再重复。 报告合并可以通过fortify ssc或fortify sca的命令行或图形界面进行。

blob.png

  3.使用大数据分析和机器学习掩盖误报


  目前,这是一个正在探索的方向,但是此方法需要大量可靠的漏洞审核样本,如果样本很小,将很难操作。

  Fortify sca通常是一种非常强大的代码安全扫描工具,但是不可避免地存在误报。 我们需要控制误报对开发人员的干扰,并且要满足合规性要求,我们需要自定义扫描规则,以使扫描工具完全适应当地法律法规。

本文由 重庆网络安全 整理发布,转载请保留出处,内容部分来自于互联网,如有侵权请联系我们删除。

相关热词搜索:fortify sca 自定义扫描规则 代码安全扫描工具 重庆网络安全

上一篇:Web Shell攻击:net.exe侦察,nbstat.exe扫描其他目标系统,最后使用PsExec横向移动
下一篇:入侵痕迹分析:.bash_history分析,日志分析,流量进程分析,隐藏后门排查,后门处理

热门资讯

鼠标向下滚动