跳过内容

MASTG-TECH-0014: Android 静态分析

静态分析是一种用于检查和评估移动应用程序源代码的技术,而无需执行它。 这种方法有助于识别潜在的安全漏洞、编码错误和合规性问题。 静态分析工具可以自动扫描整个代码库,使其成为开发人员和安全审计员的宝贵资产。

grep 和 semgrep 是两个很好的静态分析工具的例子。 然而,还有许多其他工具可用,你应该选择最适合你需求的工具。

示例:在 Android 应用中使用 grep 进行 Manifest 分析

静态分析的一个简单但有效的用途是使用 grep 命令行工具来检查 Android 应用的 AndroidManifest.xml 文件。 例如,你可以使用以下 grep 命令提取最小 SDK 版本(指示应用支持的最低 Android 版本)

grep 'android:minSdkVersion' AndroidManifest.xml

此命令在 manifest 文件中搜索 android:minSdkVersion 属性。 确保更高的 minSdkVersion 可以降低安全风险,因为旧版本的 Android 可能不包含最新的安全功能和修复。

示例:使用 semgrep 识别熵不足的种子

semgrep 是一个更高级的工具,可用于代码中的模式匹配。 它对于识别可能导致安全漏洞的复杂编码模式特别有用。 例如,要查找使用确定性种子初始化 SecureRandom 类的情况(这会损害随机性,从而损害安全性),你可以使用类似如下的 semgrep 规则

rules:
  - id: insecure-securerandom-seed
    patterns:
      - pattern: new SecureRandom($SEED)
      - pattern-not: $SEED = null
    message: "Using a deterministic seed with SecureRandom. Consider using a more secure seed."
    languages: [java]
    severity: WARNING

此规则将标记代码中 SecureRandom 使用特定种子初始化的任何实例,但排除种子为空的情况(这意味着安全的随机种子)。