SAST 与 DAST
SAST(Static Application Security Testing)和 DAST(Dynamic Application Security Testing) 代表了应用程序安全领域中两种基础且互补的方法论, 它们采用不同但同等重要的方式来识别漏洞。 SAST 通过对源代码、字节码或二进制文件进行静态分析而无需运行 应用程序,检查代码以查找指示潜在漏洞的模式,例如 SQL 注入、XSS、缓冲区溢出和业务逻辑缺陷。这种“白盒”方法 能够在开发周期的早期识别问题(shift-left security),为 开发人员提供有关易受攻击代码确切位置的精确反馈。另一方面, DAST 对正在运行的应用程序模拟真实攻击,像外部攻击者那样以“黑盒”方式对其进行测试, 而无需访问源代码。这种技术能够揭示仅在 运行时才会显现的漏洞,例如配置缺陷、身份验证和授权问题,以及 由不同组件之间交互而产生的漏洞。当它们在 集成的 DevSecOps 策略中共同实施时,SAST 和 DAST 可以弥补彼此的盲点,构建一种 纵深防御,既能检测开发过程中引入的漏洞,也能检测 应用程序在真实环境中运行时出现的漏洞。
SAST:静态分析
SAST 在不运行应用程序的情况下检查源代码、字节码或二进制文件, 在开发过程中识别漏洞。
SAST 的优势
- Early detection:在部署之前发现 bug
- Code coverage:分析 100% 的代码,包括未执行的 path
- Root cause:显示易受攻击代码的确切行
- No runtime needed:无需应用程序处于运行状态
- CI/CD integration:在 build 流水线中实现自动化
SAST 的局限
- 误报(false positives)较多 - 需要进行 tuning
- 无法检测配置漏洞
- 不在运行时测试业务逻辑
- Language-specific - 每种语言都需要自己的 scanner
SAST 工具
- SonarQube:开源,支持 25 种以上语言
- Checkmarx:企业级,市场领先的 SAST
- Fortify:Micro Focus,深度分析
- Semgrep:开源,规则可自定义
- Bandit (Python):专用于 Python
- Brakeman (Ruby):Rails security scanner
DAST:动态分析
DAST 测试正在运行的应用程序,通过 black-box testing 模拟真实攻击, 而无需访问源代码。
DAST 的优势
- Runtime testing:像真实攻击者一样测试应用程序
- Configuration issues:检测配置缺陷
- Low false positives:已确认且可利用的漏洞
- Language-agnostic:适用于任何技术栈
- Production-like:在与生产类似的环境中进行测试
DAST 的局限
- Late detection - 在代码完成后才发现漏洞
- Code coverage 有限 - 仅测试可访问的流程
- 没有代码细节 - 不显示易受攻击的行
- 需要应用程序已部署并处于运行状态
DAST 工具
- OWASP ZAP:开源,代理拦截器
- Burp Suite:行业标准,专业 scanner
- Acunetix:自动化 Web 漏洞 scanner
- Netsparker:Proof-based scanning
- AppScan:IBM 企业级解决方案
SAST + DAST:组合策略
将 SAST 与 DAST 结合使用可以弥补每种方法的盲点, 构建稳健的 AppSec 计划。
# CI/CD pipeline with SAST + DAST
stages:
- build
- sast
- test
- dast
- deploy
sast_scan:
stage: sast
script:
- semgrep --config=auto --json -o sast-results.json
- sonar-scanner
artifacts:
reports:
sast: sast-results.json
dast_scan:
stage: dast
script:
- docker run -t owasp/zap2docker-stable zap-baseline.py
-t https://staging.app.com -r dast-report.html
artifacts:
reports:
dast: dast-report.html
IAST:Interactive Application Security Testing
IAST 结合了 SAST 与 DAST,对应用程序进行插桩以在运行时进行监控, 在获得 SAST 的 code coverage 的同时兼具 DAST 的 runtime accuracy。
- Contrast Security:IAST 领导者,嵌入式 agents
- Seeker (Synopsys):带 code insight 的 Runtime analysis
- Hdiv Security:Runtime application self-protection
DevSecOps 集成
- 在 pre-commit hooks 和 pull requests 中使用 SAST
- 在进入生产前于 staging environments 中使用 DAST
- Quality gates:阻止包含严重漏洞的 build
- Developer feedback loops:与 IDE 集成(SonarLint)
- Vulnerability management:将发现的问题集中到单一平台
建议
在 SDLC 早期实施 SAST(shift-left),并在 staging 环境中实施 DAST。 调优工具以减少 false positives - 首先聚焦于严重 漏洞。对于关键应用程序,可考虑 IAST。将所有环节都 在 CI/CD pipeline 中自动化,并为 developers 创建快速的 feedback loops。
