当前位置:首页 > 软件开放 > 正文内容

收藏本店源代码(收藏店铺怎么做)

软件开放5个月前 (05-06)207

Fortify是一款商业级的源码扫描工具,其工作示意图如下

首先Fortify对源码进行分析(需要编译),然后提取出相关信息保存到某个位置,然后加载规则进行扫描,扫描的结果保存为 .fpr 文件,然后用户使用 GUI 程序对结果进行分析,排查漏洞。

环境搭建

本文的分析方式是在 Linux 上对源码进行编译、扫描,然后在 Windows 平台对扫描结果进行分析,所以涉及 Windows 和 Linux 两个平台的环境搭建。

收藏本店源代码(收藏店铺怎么做)

环境搭建

环境搭建比较简单,省略。

工具使用

本节涉及代码

https://github.com/hac425xxx/sca-workshop/tree/master/fortify-example

Fortify的工作原理,首先会需要使用Fortify对目标源码进行分析提取源代码中的信息,然后使用规则从源码信息中查询出匹配的代码。

首先下载代码然后使用 sourceanalyzer 来分析源码

/home/HKS/sca/fortify/bin/sourceanalyzer -b fortify-example make

其中

·-b 指定这次分析的 id

展开全文

·后面是编译代码时使用的命令,这里是 make

分析完代码后再次执行 sourceanalyzer 对源码进行扫描

/home/HKS/sca/fortify/bin/sourceanalyzer -b fortify-example -scan -f fortify-example.fpr

其中

·-b 指定扫描的 id 和之前分析源码时的 id 对应

·-scan 表示这次是采用规则对源码进行扫描

·-f 指定扫描结果输出路径,扫描结果可以使用 auditworkbench.cmd 进行可视化的分析。

生成 .fpr 结果后可以使用 auditworkbench 加载分析

system命令执行检测

本节涉及代码

https://github.com/hac425xxx/sca-workshop/tree/master/fortify-example/system_rules

漏洞代码如下

int call_system_example(){ char *user = get_user_input_str(); char *xx = user; system(xx); return 1;}

首先通过 get_user_input_str 获取外部输入, 然后传入 system 执行。

1.RulePackID 表示这个规则文件的 ID, 设置符合格式的唯一字符串即可

2.RuleDefinitions 里面是这个xml文件中的所有规则,每个规则作为RuleDefinitions的子节点存在,比如示例中的 DataflowSourceRule 节点,表示这是一个 DataflowSource 规则,用于指定数据流跟踪的 source

我们开发规则实际也只需要在 RuleDefinitions 中新增对应的规则节点即可。

Fortify 也支持污点跟踪功能,下面就介绍如何定义 Fortify 的污点跟踪规则,首先我们需要定义 source ,DataflowSourceRule 规则用于定义污点源,不过这个只支持定义函数的一些属性作为污点源,比如返回值、参数等,返回值是污点数据,规则的解释如下:

1.首先 RuleID 用于唯一标识一条规则

2.FunctionIdentifier 用于匹配一个函数, 其中包含一个 FunctionName 子节点,表示通过函数名进行匹配,这里就是匹配 get_user_input_str 函数

3.然后 OutArguments 用于定义污点源, return 表示该函数的返回值是污点数据,如果该节点的值为数字 n , 则表示第 n 个参数为污点数据,n 从0开始计数。

定义好 source 点后,还需要定义 sink 点,DataflowSinkRule 规则用于定义 sink 点

这条规则的作用是设置 system 的第 0 个参数为 sink 点,规则解释如下:

1.VulnCategory 是一个字符串,会在扫描结果中呈现

2.FunctionIdentifier 用于匹配一个函数,这里就是匹配 system 函数

3.Sink 和 InArguments 用于表示函数的第 0 个参数为 sink 点

规则编写完后,保存成一个 xml 文件,然后在对源码进行扫描时通过 -rules 指定自定义的规则文件即可

/home/hac425/sca/fortify/bin/sourceanalyzer -rules system.xml -b fortify-example -scan -f fortify-example.fpr -no-default-rules

ps: -no-default-rules 表示不使用Fortify的默认规则,这里主要是在自己开发规则时避免干扰。

扫描的结果如下

规则作用是告知 Fortify 调用 custom_memcpy 函数时,第 1 个参数的污点数据会传播到第 0 个参数,结果如下

system命令执行检测 # 2

除了使用 DataflowSourceRule 、DataflowSinkRule 等规则来定义污点跟踪相关的属性外,Fortify还支持使用 CharacterizationRule 来定义污点跟踪相关的特性。

其中对应关系如下图所示:

根据文档的使用示例,修修改改很快就可以使用 CharacterizationRule 来搜索出涉及 system 命令执行的代码,代码路径如下

https://github.com/hac425xxx/sca-workshop/blob/master/fortify-example/system_rules/system_CharacterizationRule.xml

介绍具体的 CharacterizationRule 规则实现之前,先介绍一下 StructuralRule 规则,因为 CharacterizationRule 就是通过 StructuralRule 的语法来匹配代码中的语法结构。

StructuralRule 官方文档中的内容

Fortify在编译/分析代码过程中会把代码中的元素(代码块、类、表达式、语句等)通过树状结构体组装起来形成一颗 structural tree,然后扫描的时候使用 Structural Analyzer 来解析 StructuralRule ,最后输出匹配。

其中 StructuralMatch 使用 StructuralRule 的语法来匹配代码,然后在 Definition 里面可以使用一些API(比如TaintSource)和匹配到的代码元素来标记污点跟踪相关的熟悉,比如污点源、Sink点等,这里要注意一点:Definition 中可以访问到 StructuralMatch 中声明的所有变量,不论是通过 : 还是通过 [] 声明。

上述规则的作用就是

1.首先通过 StructuralMatch 匹配到 get_user_input_str 的函数调用对象 fc.

2.然后在 Definition ,使用 TaintSource 设置 fc 为污点源,污点标记为 PRIVATE.

规则解释如下:

1.首先使用 StructuralMatch 匹配 fc 为 system 的函数调用, e 为 fc 的第0个参数

2.然后在 Definition 使用 TaintSink 设置 e 为sink点,污点标记为 PRIVATE.

这样就表示如果 system 函数调用的第 0 个参数为污点数据且污点数据中包含 PRIVATE 标记,就会把这段代码爆出来。

其他的规则(函数建模,clean_data函数)也是类似这里不再介绍,最终扫描结果如下图:

在开发 Structural相关规则时可以在分析时使用 -Ddebug.dump-structural-tree 把代码的 structural tree 打印出来,然后我们根据树的结构就可以比较方便的开发规则,完整命令行如下

/home/hac425/sca/fortify/bin/sourceanalyzer -no-default-rules -rules hello_array.xml -b fortify-example -scan -f fortify-example.fpr -D com.fortify.sca.MultithreadedAnalysis=false -Ddebug.dump-structural-tree 2 tree.tree

打印出来的示例如下

关于苏州华克斯信息科技有限公司

专业的测试及安全产品服务提供商

Fortify | Webinspect | AppScan | SonarQube | 极狐GitLab

LoadRunner | UFT(QTP) | ALM(QC)

扫描二维码推送至手机访问。

版权声明:本文由飞速云SEO网络优化推广发布,如需转载请注明出处。

本文链接:http://bjqlhc.com/post/111808.html

分享给朋友:

“收藏本店源代码(收藏店铺怎么做)” 的相关文章

物流软件开发(物流软件开发公司)

物流软件开发(物流软件开发公司)

本篇文章给大家谈谈物流软件开发,以及物流软件开发公司对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、物流软件系统定制开发的公司有哪些? 2、物流app开发报价 3、物流软件系统开发应该注意些什么 物流软件系统定制开发的公司有哪些? 极其流行,同样也是竞争力极其大...

微信小程序跨境电商(微信小程序做跨境电商)

微信小程序跨境电商(微信小程序做跨境电商)

今天给各位分享微信小程序跨境电商的知识,其中也会对微信小程序做跨境电商进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、至臻小程序是正品吗 2、如何说明跨境电商市场潜力大 3、腾讯小鹅拼拼上线不到两年就要关停 4、优时通奶粉是正品吗 至臻小程序是...

小米手机工程模式代码大全(小米手机工程模式代码大全)

小米手机工程模式代码大全(小米手机工程模式代码大全)

今天给各位分享小米手机工程模式代码大全的知识,其中也会对小米手机工程模式代码大全进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、小米手机如何查看电池损耗代码? 2、怎么进入红米3MTK的工程模式的代码 3、小米手机一直工程模式 小米手机如何查看电池...

夸克浏览器怎么看百度网盘倍速(怎么用夸克浏览器看百度网盘)

夸克浏览器怎么看百度网盘倍速(怎么用夸克浏览器看百度网盘)

今天给各位分享夸克浏览器怎么看百度网盘倍速的知识,其中也会对怎么用夸克浏览器看百度网盘进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、夸克用倍速看,视频卡顿 2、夸克浏览器流畅播怎么用 3、百度网盘没有vip怎么倍速 4、百度网盘里的视频如何倍速...

海岛奇兵官方网站昆仑(昆仑海岛奇兵官网下载最新版本)

海岛奇兵官方网站昆仑(昆仑海岛奇兵官网下载最新版本)

本篇文章给大家谈谈海岛奇兵官方网站昆仑,以及昆仑海岛奇兵官网下载最新版本对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。 本文目录一览: 1、海岛奇兵官方版在哪里下载,求个链接。以及官方版用什么账号登陆 2、海岛奇兵怎么登陆昆仑账号 3、有谁玩手机网游海岛奇兵?知道的回答,海岛奇兵的官...

apk文件怎么获取xml(手机怎么找到apk文件)

apk文件怎么获取xml(手机怎么找到apk文件)

今天给各位分享apk文件怎么获取xml的知识,其中也会对手机怎么找到apk文件进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!本文目录一览: 1、apk是什么文件?apk文件怎么打开? 2、PMS解析AndroidManifest.xml详解 3、APK文件中的xml文...