48 篇博文 含有标签「代码审计」
IRify / SSA / SyntaxFlow 静态代码分析与代码审计实战
查看所有标签代码审计:Yakit 代码审计功能与项目管理
代码审计功能
代码审计功能:项目管理
代码审计:编写高质量 SyntaxFlow 规则的方法
在syntax-flow zero to hero 中,已经介绍了一部分syntax-flow 语法的编写规则以及关于基础的一些使用,比如#->、#>、-->等,当然,在之前的公众号中也介绍了一部分config的使用。
原理剖析:静态代码分析中的数据流与敏感性
在静态代码分析领域,我们经常遇到一系列复杂的概念,如指针敏感性(pointer sensitivity)、数据流敏感性(data flow sensitivity)和路径敏感性(path sensitivity)等。大多数相关文献充斥着晦涩难懂的数学公式和LaTeX算法,这些表述方式往往给人以高深莫测的印象。令人遗憾的是,这些所谓的“高级技术”在实际工程实践和漏洞挖掘中的应用效果往往难以体现。更有甚者,相关的实现代码常常被刻意或无意地隐藏在文献的角落,使得这些技术与实际应用之间产生了巨大的鸿沟。
过分依赖理论推导和数学模型,而忽视了实际应用的重要性。这种做法不仅使得相关知识难以被广大工程师所理解和应用,更是阻碍了整个领域的发展。我们需要的是更加实用、直观、易于理解的教学和研究方法。
代码审计:从编译技术理解 SSA IR 代码审计
代码审计可以帮助开发团队和安全从业人员在软件编码期间或者评估阶段发现和修复大部分安全隐患,提高应用程序的安全性和可靠性。
代码审计本身是代码行为分析的一个应用,代码行为分析本身是编译技术的一个小的分支。编译技术是代码审计的父级大学科。在代码审计的学习中,大家经常会有一些知识性问题:
“我应该去学习 AST 的构建与使用吗?AST 应该如何分析?”
“因为不了解 IR,所以不了解 IR 的分析”
“向 CodeQL 一样 AST 提取特征建模存储到数据库是什么过程”
代码审计:SyntaxFlow 在 Yakit 中的项目编译与查询
之前预告许久的SyntaxFlow功能已经登陆Yakit!
代码审计:SyntaxFlow 配置项语法原理与用法
#-> 与 --> 语法是SyntaxFlow中高频出现的语法,其作用分别为寻找最顶级的定义与最底层的使用。也许你有注意到,在我们以往技术分享的文章,也出现了 #{} -> 与 --{} -> 语法,比如上期lingze老师分享的技术文章《吹爆SyntaxFlow!数据流分析实战解析》中的“进阶使用技巧”,就介绍了 hook 配置项的用法。而在本期文章中,将会介绍更多配置项的原理以及其用法。
代码审计:SyntaxFlow 数据流分析实战
简单来说,SyntaxFlow 是支持通过“定义-使用”的值关系进行追踪的,这个技术十分有用,可以充分发挥 SSA 的技术优势,精准追踪到想要的数据流。在 SyntaxFlow 设计中:
-> 表示向下追踪一级使用链的节点,--> 表示向下追踪使用链节点直到链结束。
#> 表示向上追踪一级定义链的节点,#-> 表示向上追踪支配(定义)链直到链结束。
{} 表示追踪设置追踪的时候的上下文或者参数。例如 -{depth: 5}-> 表示向下追踪定义链,追踪深度为5表示最多追踪5层。
代码审计:SyntaxFlow 跨函数与跨对象分析(一)
在第一篇 SyntaxFlow 引入文章 中,我们介绍了基本 SyntaxFlow 可以解决的问题,虽然我们屏蔽了大量的技术细节,但是很多读者并不只局限在“介绍”中,提出了很多比较经典的教科书中的问题。在接下来的系列文章中,我们将会花一些篇幅为大家介绍 SyntaxFlow 和 SSA IR 是如何解决教科书中的“高级话题”的。
代码审计:SyntaxFlow 代码审计技术介绍
代码审计技术在过去的一段时间的发展中,似乎受到了一个魔咒,安全从业人员的很难摆脱 *QL的影响,毕竟编译成数据库,然后通过 QL 来查询。或者通过把 AST 解析进 neo4j,通过 neo4j 的 QL: Cypher 或 API 来查询。甚至于我们在不使用 *QL 式的辅助工具的时候,也会通过 IDE 的 Query(关键字查询,定义查询,文件搜索)。甚至于我们也会戏称“搜索”是“代码审计”的核心操作。现状确实是这样,但是以搜索为切入点也会遇到其他的问题:
