Mobile-Security-Framework-MobSF扩展开发:自定义静态分析规则编写指南
规则开发基础
MobSF的静态分析规则系统基于YAML格式配置文件,通过结构化定义实现代码模式检测。规则文件主要存储在StaticAnalyzer/views/android/rules/目录,核心规则引擎实现在static_analyzer.py中。
规则系统支持多维度检测,包括代码特征匹配、权限分析和配置检查。典型规则包含唯一ID、检测类型、匹配模式和结果描述四个基本要素,如android_niap.yaml所示的密码学检测规则:
- id: FCS_COP.1.1(2)
type: code
choice_type: or
message: Cryptographic Operation - Hashing
selection: 'The application perform cryptographic hashing services {}.'
choice:
- - 'DigestUtils\.md5\(|\.getInstance\(.{0,48}(?:md4|md5|rc2|rc4|RC4|RC2|MD4|MD5)'
- 'not in accordance with FCS_COP.1.1(2) and uses the cryptographic algorithm RC2/RC4/MD4/MD5'
- - '\.getInstance\(.{0,48}(?:\.SHA1|\.SHA256|\.SHA384|\.SHA512|SHA-1|SHA-256|SHA-384|SHA-512|sha-1|sha-256|sha-384|sha-512)'
- 'in accordance with a specified cryptographic algorithm SHA-1/SHA-256/SHA-384/SHA-512'
class: Selection-Based Security Functional Requirements
规则文件结构
基本字段定义
每个规则条目必须包含以下核心字段:
| 字段名 | 类型 | 描述 |
|---|---|---|
| id | 字符串 | 规则唯一标识符,建议采用"类别_功能.版本"格式 |
| type | 字符串 | 检测类型,支持code/manifest/strings等 |
| choice_type | 字符串 | 匹配逻辑,支持or/and/all等组合方式 |
| message | 字符串 | 规则描述信息 |
| selection | 字符串 | 结果格式化模板 |
| choice | 列表 | 检测模式与结果描述的映射关系 |
多类型检测支持
规则系统支持多种检测类型,通过type字段指定:
- code: 代码模式检测,使用正则表达式匹配源码
- manifest: AndroidManifest.xml权限和组件检测
- strings: 字符串常量分析,检测硬编码密钥等敏感信息
自定义规则开发流程
1. 创建规则文件
在规则目录下创建新的YAML文件,建议命名格式为custom_<功能>_rules.yaml。文件需符合UTF-8编码,采用2空格缩进。
2. 定义规则结构
以下是检测硬编码API密钥的示例规则:
- id: CUSTOM_HARDCODED_API_KEY
type: strings
choice_type: or
message: Hardcoded API Key Detection
selection: 'The application contains {}.'
choice:
- - 'api_key\s*=\s*["''][A-Za-z0-9]{32,}["'']'
- 'potential hardcoded API key with 32+ characters'
- - 'secret\s*=\s*["''][A-Za-z0-9]{40,}["'']'
- 'potential hardcoded secret key with 40+ characters'
class: Custom Security Checks
3. 正则表达式编写规范
规则中的正则表达式需遵循以下规范:
- 使用非贪婪匹配
{0,48}限制匹配范围 - 通过
|实现多模式匹配 - 使用
\s*处理空格变化 - 对特殊字符使用
\转义
复杂模式可拆分为多个子规则,通过choice_type: and实现组合检测:
- id: CUSTOM_SSL_PINNING_BYPASS
type: code
choice_type: and
message: SSL Pinning Bypass Detection
selection: 'The application may allow {}.'
choice:
- - - 'X509TrustManager'
- 'checkServerTrusted'
- 'return\s*;'
- 'SSL pinning bypass through empty trust manager implementation'
class: Custom Security Checks
规则调试与部署
规则验证方法
- 将自定义规则文件放置到规则目录
- 启动MobSF服务:
./run.sh - 上传测试APK进行静态分析
- 在报告中查看自定义规则检测结果
常见问题排查
- 规则不生效:检查YAML格式是否正确,可使用YAML Lint验证
- 误报率高:优化正则表达式,增加上下文约束
- 性能问题:避免过度复杂的正则,拆分大型规则文件
高级规则特性
多类型组合检测
通过组合不同类型的检测规则,实现更精准的安全分析。例如结合代码检测和权限分析:
- id: CUSTOM_LOCATION_TRACKING
type: code
choice_type: and
message: Potential Location Tracking
selection: 'The application may track user location {}.'
choice:
- - - 'LocationManager'
- 'requestLocationUpdates'
- 'with location update requests'
class: Custom Privacy Checks
requires_permission:
- android.permission.ACCESS_FINE_LOCATION
规则优先级与抑制
通过priority字段设置规则优先级(1-10,默认5),高优先级规则将优先执行。对于误报项,可通过创建抑制文件suppression.yaml实现结果过滤。
规则开发实例
实例1:检测不安全的SharedPreferences使用
- id: CUSTOM_INSECURE_SHAREDPREFS
type: code
choice_type: or
message: Insecure SharedPreferences Usage
selection: 'The application uses SharedPreferences {}.'
choice:
- - 'getSharedPreferences\(.{0,48}MODE_WORLD_READABLE'
- 'with WORLD_READABLE mode (potential data leakage)'
- - 'getSharedPreferences\(.{0,48}MODE_WORLD_WRITEABLE'
- 'with WORLD_WRITEABLE mode (potential data tampering)'
class: Custom Security Checks
实例2:检测WebView远程代码执行风险
- id: CUSTOM_WEBVIEW_RCE
type: code
choice_type: and
message: WebView Remote Code Execution Risk
selection: 'The application has WebView configuration allowing {}.'
choice:
- - - 'WebSettings'
- 'setJavaScriptEnabled\(true'
- 'addJavascriptInterface'
- 'JavaScript interface injection vulnerability'
class: Custom Security Checks
规则维护与贡献
自定义规则应遵循以下维护实践:
- 定期更新规则以应对新漏洞模式
- 为复杂规则添加详细注释
- 通过单元测试验证规则有效性(参考tests_android.py)
MobSF社区欢迎规则贡献,可通过提交PR将优质规则合并到官方仓库,遵循贡献指南中的代码规范。
总结
自定义静态分析规则是扩展MobSF检测能力的关键方式,通过YAML配置文件可以快速实现新的安全检测逻辑。规则开发应遵循"精确匹配、低误报、高性能"原则,结合正则表达式和逻辑组合实现复杂安全场景的检测。
建议开发者从简单规则开始实践,逐步掌握高级特性,最终构建适合特定业务需求的规则集。定期回顾官方规则库的更新,保持规则体系的时效性和准确性。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考



