手动阅读代码是一个耗时的过程。它也容易出错,因为很容易错过重要的细节。作为开发人员和渗透测试人员,我们需要找到一种方法来自动化这个过程。SAST 是一种可以帮助我们完成这项任务的技术。
SAST 并非万灵药。它仅适用于可以访问开源项目源代码或白盒渗透测试的用例。但是,它可以帮助您找到一些唾手可得的成果并节省时间。
静态应用程序安全测试 (SAST) 是静态代码分析的一个子集,用于提高代码的安全性和可靠性。SAST 可检测旧依赖项、秘密检测、导致漏洞的逻辑错误等。SAST 包括对网络安全产生二次影响的测试,例如视觉代码复杂性、代码歧义和可能导致漏洞的非直观做法。
SAST 工具通常是强化版的正则表达式模式匹配器,用于查找代码中的已知漏洞。例如,SAST 工具可能会查找 Python 代码中eval
、 exec
或pickle
的使用情况,这些函数可用于执行任意代码。
我将 SAST 方法分为三类:
漏洞检测:我使用Semgrep 、 Bandit 、 Nodejsscan等工具来查找代码中的攻击媒介。通常可以找到容易发现的漏洞,例如未经清理的输入、不良加密或易受攻击的库。顺便说一句,Semgrep PRO 版本有更多规则;如果项目开发人员不超过 10 人,则免费。
秘密检测: Gitleaks 、 Trufflehog或Grep可以帮助您找到代码中的秘密。这很重要,因为秘密可用于提升权限或访问敏感数据。通常,数据库连接字符串、API 密钥或密码都存储在代码中。
错误配置: Checkov或Trivy等工具可以帮助您找到错误配置。错误配置通常存在于“基础设施即代码”(IaC) 文件中,但也可能存在于代码本身中。例如,错误配置的 docker-compose 文件会将数据库暴露给互联网。对于扫描 Dockerfile,我建议结合使用hadolint和grype
SAST 工具并不完美。它们会给你误报和漏报。**但是,与随机利用某些应用程序相比,它节省了很多时间。我在渗透测试活动和比赛中使用了 SAST 工具。它帮助我开始使用代码库,并给了我一些关于在哪里寻找漏洞的提示。
我建议你从Hack The Box开始。这个平台提供了一些挑战,例如获取源代码和查找漏洞。然后在真机上利用它们。这是学习如何在实践中使用 SAST 工具的好方法。
或者,如果您是开发人员,您可以在 CI/CD 管道中使用 SAST 工具。这样,您就可以熟悉这些工具及其输出。同时,您还可以提高应用程序的安全性。
我准备了一份指南清单,帮助您开始使用 SAST 和秘密检测。这些指南是我论文的一部分,对于任何对 SAST 工具感兴趣的人来说都是一个很好的起点。
在检测机密时,请记住:如果黑客知道,它就不是机密。即使是经验丰富的开发人员也可能意外地将密码或连接字符串推送到远程源代码控制中。本指南使用各种工具提供了快速简便的方法来减轻这种风险。
本指南重点介绍如何使用预提交钩子和 CI/CD 管道进行秘密检测。虽然代码主要侧重于 GitLab,但最后一部分也将介绍 GitHub。
本指南有效地概述了在 GitLab 中启动静态应用程序安全测试 (SAST) 的步骤。SAST 是一个使用静态代码分析来识别潜在漏洞的过程。
本备忘单介绍了用于扫描基础设施即代码 (IaC) 工件的有用工具,并提供了如何将它们集成到您的 CI/CD 管道中的示例。
我在 Golang 中创建了一个自定义工具,可以帮助我快速将正则表达式与庞大的代码库进行匹配。
精度和方差之间存在无限的权衡。
假设您需要更多变化,并且不介意进行更多手动检查。在这种情况下,您可以尝试RegFinder ,它类似于grep
,但更适合秘密检测(在更大的存储库中速度更快、输出清晰、忽略某些文件扩展名)。或者您可以直接使用 grep。最有价值的是存储库中的正则表达式,而不是您将使用的工具。
grep -n -r your_app/ -Ef regex_dir/general.txt
或者
./regfinder.elf -d your_app/ -f regex_dir/general.txt
扩展现有的正则表达式模式很简单。此工具不适用于自动化管道。但是,如果您需要查找非标准机密或进行其他评估(例如安全审查),则它会派上用场,因为这些评估需要更多的手动工作。
如果您对其他工具有丰富的经验,请发表评论。感谢您的阅读。