当前位置: 首页 > wzjs >正文

鄂尔多斯做网站的公司oppo手机应用商店

鄂尔多斯做网站的公司,oppo手机应用商店,西安软件开发培训机构,个人账号密码网站建设1. 引入 静态应用程序安全测试(Static application security testing)简称SAST,是透过审查程式源代码来识别漏洞,提升软件安全性的作法。 Joern 是一个强大的开源静态应用安全测试(SAST)工具,专…

1. 引入

静态应用程序安全测试(Static application security testing)简称SAST,是透过审查程式源代码来识别漏洞,提升软件安全性的作法。
Joern 是一个强大的开源静态应用安全测试(SAST)工具,专注于代码的语义分析。它通过将源代码转换为代码属性图(Code Property Graph, CPG),并使用专用查询语言 CPGQL 进行漏洞检测。
CPGQL(Code Property Graph Query Language)是 Joern 平台用于查询代码属性图(Code Property Graph, CPG)的专用查询语言。CPG 是一种将源代码的多种属性(如语法结构、控制流、数据流等)整合为统一图结构的表示方法,而 CPGQL 则提供了灵活强大的图查询能力。CPGQL 基于图论,支持节点(Node)、边(Edge)和路径(Path)的查询。
本文参考1中的查询语句,复现部分CPGQL,目的是为了熟悉Joern的使用,更好的理解CPGQL。

2. 整体过程

如下C代码与CPGQL均来自Joern官网(参考1)。

  1. 安装Joern,参考2,本文在ubuntu22.04下进行
wget https://github.com/joernio/joern/releases/latest/download/joern-install.sh
chmod +x ./joern-install.sh
sudo ./joern-install.sh

注意,如果网速慢,需要打开joern-install.sh,对其中curl命令加proxy(curl -x "http:xxxxyyyzzzeeeddd")。

  1. 将如下有有缺陷的c语言代码保存为 insecure_gets.c
int insecure_gets() {char str[DST_BUFFER_SIZE];gets(str);printf("%s", str);return 0;
}

这段代码使用了 C 标准库中的gets()函数,这是一个严重的安全隐患,可能导致缓冲区溢出攻击。

  1. 使用Joern将C代码转换为代码属性图CPG
/opt/joern/joern-cli/joern-parse insecure_gets.c --output insecure_gets.cpg.bin
  1. 使用Joern加载CPG
joern /data/yinbin/projects/ybresearch/joernlearn/insecure_gets.cpg.bin
  1. 在Joern的Shell中加载该CPG
joern> open("insecure_gets.cpg.bin")
val res2: Option[io.joern.console.workspacehandling.Project] = Some(value = Project(projectFile = ProjectFile(inputPath = "/data/yinbin/projects/ybresearch/joernlearn/insecure_gets.cpg.bin",name = "insecure_gets.cpg.bin"),path = /data/yinbin/projects/ybresearch/joernlearn/workspace/insecure_gets.cpg.bin,cpg = Some(value = Cpg[Graph[72 nodes]]))
)

使用open命令即可加载。

  1. 执行CPGQL

这里执行的CPGQL为({cpg.method("(?i)gets").callIn}).l,含义如下:

  • cpg:代表整个代码属性图(Code Property Graph)的根节点。
  • method("(?i)gets"):查找名称匹配正则表达式"(?i)gets"的方法:
    • (?i):正则修饰符,表示忽略大小写(匹配getsGETSGets等)。
    • gets:目标函数名。
  • callIn:获取调用这些方法的所有调用点(即查找哪些代码调用了gets())。
  • .l:将查询结果转换为列表并返回。

这个查询等价于:

“找出代码库中所有调用了gets()函数的位置,无论大小写。”

具体运行过程如下:

joern> ({cpg.method("(?i)gets").callIn}).l|
val res3: List[io.shiftleft.codepropertygraph.generated.nodes.Call] = List(Call(argumentIndex = -1,argumentName = None,code = "gets(str)",columnNumber = Some(value = 3),dispatchType = "STATIC_DISPATCH",dynamicTypeHintFullName = IndexedSeq(),lineNumber = Some(value = 3),methodFullName = "gets",name = "gets",offset = None,offsetEnd = None,order = 3,possibleTypes = IndexedSeq(),signature = "",typeFullName = "ANY")
)

这个结果说明:

  • code = “gets(str)”
    • 调用gets()的代码行,参数为str(对应之前代码示例中的char str[DST_BUFFER_SIZE])。
  • lineNumber = Some(value = 3)
    • 调用发生在第 3 行(与之前的代码示例一致)。
  • columnNumber = Some(value = 3)
    • 调用从第 3 列开始(缩进后的位置)。
  • methodFullName = “gets”
    • 被调用方法的全名是gets。
  • dispatchType = “STATIC_DISPATCH”
    • 静态调用(编译时确定调用目标)。

3. 总结

本文给出了从安装Joern到用Joern执行CPGQL找到C语言中不安全函数调用的流程的完整示例。

4. 参考

  1. joern官方查询语句说明,https://queries.joern.io/
  2. 深入浅出Joern(一)Joern与CPG是什么,https://lorexxar.cn/2023/08/21/joern-and-cpg/
http://www.dtcms.com/wzjs/802758.html

相关文章:

  • 网站优化是往新闻中心发新闻吗广州站在哪个区
  • 免费在线观看电影电视剧网站规划网站需要几个步骤
  • 新农村建设在哪个网站查食品网站建设 网站定制开发
  • 大同网站建设熊掌号windows网站模板
  • 网站开发设计模板网站建设业务方法
  • 怎样做网站的源代码优秀设计作品的网站
  • 淄博建设网站建设网站要买服务器
  • 旅游宣传网站建设方案高端品牌网站建设兴田德润在那里
  • 南通做百度网站的公司网站需求定制表单
  • 网站推广位怎么设置长春电商网站建设报价
  • 企业网站建设效益分析宣城网站 建设
  • 上海网站建设公司兴田德润简介惠州网吧
  • 关于机关单位网站的建设品牌seo公司
  • 陕西哪些公司做企业网站单位网站建设要多少钱
  • 什么网站可以做miR的差异表达图棋牌软件开发定制软件
  • 钢材贸易网站建设衣服商业网站建设策划书
  • 上海响应式网站wordpress 火车头采集
  • 企业网站是如何做的网上注册公司需要哪些材料和流程
  • 企业产品网站源码甘肃建设厅网站二级建造师报名时间
  • ui界面设计软件湖南网站seo地址
  • 宝安中心网站建设wordpress 同城生活
  • 电脑做视频的网站html制作网站的步骤
  • 模板建站有什么优势网络店铺的营销方法
  • 网站项目名称wordpress前台个人中心插件
  • 网络公司在哪里网站原创内容优化
  • 电子商务网站规划与管理惠州建设银行行号查询网站
  • 网站开发与运用网站的外链建设计划
  • 制作企业网站怎么报价建网页服务公司
  • 朝阳企业网站建设方案费用个人网页html代码
  • 娄底网站建设建站前端app开发流程