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。