介绍 PoIEx - Points Of Intersection Explorer
我们很高兴地宣布,现在将一款之前仅限于内部使用的工具公开发布,旨在改进基础设施即代码分析,并增强 Visual Studio Code,使其能够在手动代码分析活动中实现实时协作。PoIEx 现已在 Github 上提供。
如今,面向云的解决方案已不再是流行语,云提供商提供越来越智能的基础设施服务,处理的功能范围从简单的对象存储到复杂的任务,如用户认证和身份访问管理。随着云基础设施复杂性的增加,应用程序逻辑与基础设施之间的交互在确保应用程序安全方面开始发挥关键作用。 由于最近许多备受关注的事件源于 Web 和云相关技术的不安全组合,关注它们交汇的“点”对于发现新漏洞至关重要。 PoIEx 是一款新的 Visual Studio Code 扩展,它通过枚举、绘制和连接所谓的“交互点”,帮助测试人员分析代码与基础设施之间的交互。
介绍“交互点” - 一种新颖的 IaC-应用分析方法
交互点标志着代码与底层云基础设施交互的位置,揭示了已实现的逻辑与定义相关云服务配置的 IaC 之间的连接。 在执行手动审查以寻找可利用应用程序逻辑滥用底层基础设施服务的混合云-Web 漏洞时,枚举 PoI 至关重要。 PoIEx 识别并可视化 PoI,使安全工程师和云安全专家能够更好地理解和识别面向云的应用中的安全漏洞。
PoIEx:增强 VSCode 以支持代码审查
PoIEx 同时扫描应用程序代码和 IaC 定义,利用 Semgrep 和自定义规则集,查找与 IaC 相关的代码部分,并在一个美观、用户友好的视图中可视化结果。工程师可以浏览基础设施图,并快速跳转到使用所选基础设施资源的应用程序代码相关部分。
PoIEx:增强代码审计功能
如果您使用 VSCode 审计大型代码库,您可能已经注意到它的所有功能都是针对开发人员社区的需求量身定制的。在 Doyensec,我们通过 PoIEx 解决了这个问题。该扩展通过高效执行代码审查所需的所有功能增强了 VSCode,例如高级协作能力、使用 VS Code 注释 API 的笔记记录以及与 Semgrep 的集成,使其也可以作为独立的 Semgrep 和项目协作工具使用,无需任何其 IaC 特定功能。 在 Doyensec,我们将 PoIEx 用作协作和审查增强工具。下面我们介绍其非 IaC 相关的功能以及我们的使用案例。
✍️ 笔记记录即组织化线程
PoIEx 为 VSCode 添加了评论功能。用户可以在任何代码位置放置便签,而无需编辑代码库。 在 Doyensec,我们通常使用包含 VULN、LEAD、TODO 等前缀的命名约定来组织线程。我们发现,当多个测试人员在同一项目上工作时,将共享注释直接放置在代码库上可以大大提高效率。 在协作模式下,成员会为每个回复或线程创建收到交互式通知,从而实现关于线索、笔记和漏洞的实时同步。
👨💻 PoIEx 作为 VSCode 的独立 Semgrep 扩展
PoIEx 也可以作为 VSCode 的独立 Semgrep 扩展使用。PoIEx 允许用户扫描整个工作区,并在 VSCode 的“问题”选项卡中清晰地呈现 Semgrep 的发现。
此外,通过右键单击问题,可以应用标志并将其状态更新为:❌ 误报、🔥 热点或 ✅ 已解决。在协作模式下,状态会同步,以避免重复检查。
扩展设置允许用户为 Semgrep 设置自定义参数。例如,我们当前使用 --config /path/to/your/custom-semgrep-rules --metrics off 来关闭指标并设置使用我们的自定义规则。
扫描可以从扩展侧边菜单启动,结果可通过 VS Code 问题子菜单进行探索。用户可以智能地使用内置搜索功能来查找感兴趣的线索。
🎯 面向项目的设计
PoIEx 允许与其他用户实时同步发现和评论。使用协作功能时,团队所有协作者之间需要共享一个 MongoDB 实例。 这种面向项目的设计使我们能够映射项目,并与分配到特定活动的测试人员共享加密密钥。此设计功能确保敏感数据在静态时是加密的。 注释和扫描结果会同步到 MongoDB 实例,而代码库保持本地化,每个审查者必须共享相同的版本。
真实世界分析示例 - 使用 PoIEx 解决 Tidbits 第 1 集
如果您不熟悉,CloudSec Tidbits 是我们的博客文章系列,展示 Doyensec 在云安全测试活动中发现的有趣的真实世界漏洞。博客文章和实验可以在此存储库中找到。
第 1 集描述了一种特定类型的漏洞,当用户输入用于实例化 AWS SDK 客户端时会影响应用程序逻辑。如果没有适当的检查,用户可能能够强制应用程序使用实例角色,而不是外部凭证来与 AWS 服务交互。根据功能的不同,此类漏洞可能允许针对内部基础设施进行不必要的操作。
下面,我们将介绍在代码审查中,一旦使用 PoIEx 打开和探索代码库时识别该问题的过程。
下载并在 VS Code 中打开后,通过使用 PoIEx 运行 Semgrep 并选择 main.tf 文件来显示基础设施图,从而检查 Lab 1 的代码库。结果应类似于以下内容。
关于 aws_s3_bucket.data_internal 的通知代表该存储桶的两个发现。
点击它,会打开一个新选项卡来可视化它们。
第一组包含 PoI 和 Semgrep 发现,而第二组包含所点击实体的 IaC 定义。
在这种情况下,我们看到在 app/web.go:52 处有一个 S3 PoI。点击后,我们将重定向到在 web.go#L50 定义的 GetListObjects 函数。虽然它只是列出 S3 存储桶中的文件,但 SDK 客户端配置和存储桶名称都作为参数在其签名中传递。
快速搜索其用法将显示易受攻击的代码。
|
|
如果 aws_config.Credentials 由于输入中缺少密钥/密钥而被设置为 nil,则将使用凭证提供者链,并假定实例的 IAM 角色。在这种情况下,自动检索到的凭证拥有对内部 S3 存储桶的完全访问权限。从 S3 存储桶结果选项卡快速跳转到 TF 定义。
列出后,执行 DownloadContent 函数(在 web.go 第 129 行)并将存储桶的内容暴露给用户。
此时,审查员知道如果使用空的 AWS 密钥或密钥调用该函数,导入数据功能最终将使用实例的角色下载内容,从而允许内部存储桶名称作为输入。
要利用此漏洞,请向端点 /importData 发起请求,使用空凭证和内部存储桶名称。
敬请关注!
这个项目是在 Doyensec 研究岛上怀着爱心完成的,由 Michele Lizzit 为他在苏黎世联邦理工学院(ETH Zurich)的硕士论文编写,在 Francesco Lacerenza 的指导下完成。 快来试试 PoIEx!从 GitHub 安装最新版本,并通过点赞、错误报告或建议来做出贡献。