代码审计:Yakit 代码审计功能与项目管理
代码审计功能
代码审计功能:项目管理
代码审计功能:项目管理
Yak yso基本实现了ysoerial的大多数功能,相较于原版,更新后的Yak yso不需要java环境,它通过ui操作进行输入,并且拥有多种可供选择的输出格式。
不足的是之前的Yak yso只支持 templateImpl 链,近期更新主要是为了让Yak yso能够支持transform链。
在支持transform链后,笔者还写了一个小工具来测试链子的有效性。
但还存在链子太大,打shiro的时候header头过大导致失败的问题,文章最后会提供解决方案。
在syntax-flow zero to hero 中,已经介绍了一部分syntax-flow 语法的编写规则以及关于基础的一些使用,比如#->、#>、-->等,当然,在之前的公众号中也介绍了一部分config的使用。
在静态代码分析领域,我们经常遇到一系列复杂的概念,如指针敏感性(pointer sensitivity)、数据流敏感性(data flow sensitivity)和路径敏感性(path sensitivity)等。大多数相关文献充斥着晦涩难懂的数学公式和LaTeX算法,这些表述方式往往给人以高深莫测的印象。令人遗憾的是,这些所谓的“高级技术”在实际工程实践和漏洞挖掘中的应用效果往往难以体现。更有甚者,相关的实现代码常常被刻意或无意地隐藏在文献的角落,使得这些技术与实际应用之间产生了巨大的鸿沟。
过分依赖理论推导和数学模型,而忽视了实际应用的重要性。这种做法不仅使得相关知识难以被广大工程师所理解和应用,更是阻碍了整个领域的发展。我们需要的是更加实用、直观、易于理解的教学和研究方法。
代码审计可以帮助开发团队和安全从业人员在软件编码期间或者评估阶段发现和修复大部分安全隐患,提高应用程序的安全性和可靠性。
代码审计本身是代码行为分析的一个应用,代码行为分析本身是编译技术的一个小的分支。编译技术是代码审计的父级大学科。在代码审计的学习中,大家经常会有一些知识性问题:
“我应该去学习 AST 的构建与使用吗?AST 应该如何分析?”
“因为不了解 IR,所以不了解 IR 的分析”
“向 CodeQL 一样 AST 提取特征建模存储到数据库是什么过程”
在用户使用的过程中,我们经常会在问题讨论群里收到一些类似的报错反馈,如:
Error: Error invoking remote method 'DownloadOnlinePluginByUUID': Error: 12 UNIMPLEMENTED: unknown method DownloadOnlinePluginByUUID for service ypb.Yak
这些报错实际上都是一个原因,即用户的Yakit/Yaklang 版本过低导致的。用户要解决这种问题十分简单,即升级对应软件的版本。不过我们这期的科普小课堂可以稍微探讨一下:Yakit 和 Yaklang,为什么有两个"不同"的 Yak,以及它们之间的通信方式。
之前预告许久的SyntaxFlow功能已经登陆Yakit!
在往期知识分享中,我们介绍了MITM插件现在能够使用Cli接受动态的配置参数,使得其功能得到很大地拓展。在《CLI 参数助力 MITM 插件升级》一文中,Rookie师傅便介绍了如何使用该功能编写越权插件。而最近,交互插件系统中上新了一些官方的插件,其中包括了Yak 社区中需求声很高的越权插件以及两个小辅助插件。越权插件能够对存在可能的越权的数据包进行染色并做标记,相比以往具备更好地表现力。而两个小赋值插件能够对每个经过的报文修改成手动设置的Cookie和Header,提升渗透测试的效率。
本期知识文章将介绍这些插件的用法并着重介绍越权插件的相关原理,学习完相关原理后,读者也能够开发出类似的插件。
#-> 与 --> 语法是SyntaxFlow中高频出现的语法,其作用分别为寻找最顶级的定义与最底层的使用。也许你有注意到,在我们以往技术分享的文章,也出现了 #{} -> 与 --{} -> 语法,比如上期lingze老师分享的技术文章《吹爆SyntaxFlow!数据流分析实战解析》中的“进阶使用技巧”,就介绍了 hook 配置项的用法。而在本期文章中,将会介绍更多配置项的原理以及其用法。
简单来说,SyntaxFlow 是支持通过“定义-使用”的值关系进行追踪的,这个技术十分有用,可以充分发挥 SSA 的技术优势,精准追踪到想要的数据流。在 SyntaxFlow 设计中:
-> 表示向下追踪一级使用链的节点,--> 表示向下追踪使用链节点直到链结束。
#> 表示向上追踪一级定义链的节点,#-> 表示向上追踪支配(定义)链直到链结束。
{} 表示追踪设置追踪的时候的上下文或者参数。例如 -{depth: 5}-> 表示向下追踪定义链,追踪深度为5表示最多追踪5层。