MobSF/mobsfscan

GitHub: MobSF/mobsfscan

一款基于语义模式的静态分析工具,专为检测 Android 与 iOS 源码中的不安全代码模式而设计。

Stars: 773 | Forks: 123

# mobsfscan **mobsfscan** 是一个静态分析工具,能够发现你的 Android 和 iOS 源代码中不安全的代码模式。支持 Java、Kotlin、Android XML、Swift 和 Objective C 代码。mobsfscan 使用 [MobSF](https://github.com/MobSF/Mobile-Security-Framework-MobSF) 静态分析规则,并由 [semgrep](https://github.com/returntocorp/semgrep) 和 [libsast](https://github.com/ajinabraham/libsast) 模式匹配器提供支持。 在印度用 ![Love](https://cloud.githubusercontent.com/assets/4301109/16754758/82e3a63c-4813-11e6-9430-6015d98aeaab.png) 制作 [![Tweet](https://img.shields.io/twitter/url?url=https://github.com/MobSF/mobsfscan)](https://twitter.com/intent/tweet/?text=mobsfscan%20is%20a%20static%20analysis%20tool%20that%20can%20find%20insecure%20code%20patterns%20in%20your%20Android%20and%20iOS%20source%20code.%20Supports%20Java,%20Kotlin,%20Swift,%20and%20Objective%20C%20Code.%20by%20%40ajinabraham%20%40OpenSecurity_IN&url=https://github.com/MobSF/mobsfscan) [![PyPI version](https://badge.fury.io/py/mobsfscan.svg)](https://badge.fury.io/py/mobsfscan) [![License](https://img.shields.io/:license-lgpl3.0+-blue.svg)](https://www.gnu.org/licenses/lgpl-3.0.en.html) [![python](https://img.shields.io/badge/python-3.7+-blue.svg)](https://www.python.org/downloads/) [![platform](https://img.shields.io/badge/platform-osx%2Flinux-green.svg)](https://github.com/MobSF/mobsfscan/) [![Build](https://static.pigsec.cn/wp-content/uploads/repos/cas/2c/2c00db31cfb3d0cfb0e8190631a2236bbfe0bebc45914cef88e6ef4baf5b0b5b.svg)](https://github.com/MobSF/mobsfscan/actions?query=workflow%3ABuild) ## 在线课程与认证 ![MobSF Course](https://static.pigsec.cn/wp-content/uploads/repos/cas/3b/3bdb1ea4d2f9965856d06ca0bedb5c06cc5f990158c81ec6af8b4b9fb997d27d.png) [使用 MobSF 进行自动化移动应用安全评估 -MAS](https://opsecx.com/index.php/product/automated-mobile-application-security-assessment-with-mobsf/) ![Android Security Tools Course](https://static.pigsec.cn/wp-content/uploads/repos/cas/fc/fccfa4a00132110e57be58647d68a2636c5e163d1091549a7f9b277c72516f98.png) [Android 安全工具专家 -ATX](https://opsecx.com/index.php/product/android-security-tools-expert-atx/) ## 安装说明 `pip install mobsfscan` 需要 Python 3.7+ ## 命令行选项 ``` $ mobsfscan usage: mobsfscan [-h] [--json] [--sarif] [--sonarqube] [--html] [--type {android,ios,auto}] [-o OUTPUT] [-c CONFIG] [-mp {default,billiard,thread}] [-w] [--no-fail] [-v] [path ...] positional arguments: path Path can be file(s) or directories with source code options: -h, --help show this help message and exit --json set output format as JSON --sarif set output format as SARIF 2.1.0 --sonarqube set output format compatible with SonarQube --html set output format as HTML --type {android,ios,auto} optional: force android or ios rules explicitly -o OUTPUT, --output OUTPUT output filename to save the result -c CONFIG, --config CONFIG location to .mobsf config file -mp {default,billiard,thread}, --multiprocessing {default,billiard,thread} optional: specify multiprocessing strategy -w, --exit-warning non zero exit code on warning --no-fail force zero exit code, takes precedence over --exit-warning -v, --version show mobsfscan version ``` ## 示例用法 ``` $ mobsfscan tests/assets/src/ - Pattern Match ████████████████████████████████████████████████████████████ 3 - Semantic Grep ██████ 37 mobsfscan: v0.3.0 | Ajin Abraham | opensecurity.in ╒══════════════╤════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╕ │ RULE ID │ android_webview_ignore_ssl │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ DESCRIPTION │ Insecure WebView Implementation. WebView ignores SSL Certificate errors and accept any SSL Certificate. This application is vulnerable to MITM attacks │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ TYPE │ RegexAnd │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ PATTERN │ ['onReceivedSslError\\(WebView', '\\.proceed\\(\\);'] │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ SEVERITY │ ERROR │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ INPUTCASE │ exact │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ CVSS │ 7.4 │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ CWE │ CWE-295 Improper Certificate Validation │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ OWASP-MOBILE │ M3: Insecure Communication │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ MASVS │ MSTG-NETWORK-3 │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ REF │ https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05g-Testing-Network-Communication.md#webview-server-certificate-verification │ ├──────────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤ │ FILES │ ╒════════════════╤═════════════════════════════════════════════════════════════════════════════════════════════╕ │ │ │ │ File │ ../test_files/android_src/app/src/main/java/opensecurity/webviewignoressl/MainActivity.java │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ Match Position │ 1480 - 1491 │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ Line Number(s) │ 50 │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ Match String │ .proceed(); │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ File │ ../test_files/android_src/app/src/main/java/opensecurity/webviewignoressl/MainActivity.java │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ Match Position │ 1331 - 1357 │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ Line Number(s) │ 46 │ │ │ │ ├────────────────┼─────────────────────────────────────────────────────────────────────────────────────────────┤ │ │ │ │ Match String │ onReceivedSslError(WebView │ │ │ │ ╘════════════════╧═════════════════════════════════════════════════════════════════════════════════════════════╛ │ ╘══════════════╧════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╛ ``` ## Python API ``` >>> from mobsfscan.mobsfscan import MobSFScan >>> src = 'tests/assets/src/java/java_vuln.java' >>> scanner = MobSFScan([src], json=True) >>> scanner.scan() { 'results': { 'android_logging': { 'files': [{ 'file_path': 'tests/assets/src/java/java_vuln.java', 'match_position': (13, 73), 'match_lines': (19, 19), 'match_string': ' Log.d("htbridge", "getAllRecords(): " + records.toString());' }], 'metadata': { 'cwe': 'CWE-532 Insertion of Sensitive Information into Log File', 'owasp-mobile': 'M1: Improper Platform Usage', 'masvs': 'MSTG-STORAGE-3', 'reference': 'https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#logs', 'description': 'The App logs information. Please ensure that sensitive information is never logged.', 'severity': 'INFO' } }, 'android_certificate_pinning': { 'metadata': { 'cwe': 'CWE-295 Improper Certificate Validation', 'owasp-mobile': 'M3: Insecure Communication', 'masvs': 'MSTG-NETWORK-4', 'reference': 'https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05g-Testing-Network-Communication.md#testing-custom-certificate-stores-and-certificate-pinning-mstg-network-4', 'description': 'This App does not use TLS/SSL certificate or public key pinning to detect or prevent MITM attacks in secure communication channel.', 'severity': 'INFO' } }, 'android_root_detection': { 'metadata': { 'cwe': 'CWE-919 - Weaknesses in Mobile Applications', 'owasp-mobile': 'M8: Code Tampering', 'masvs': 'MSTG-RESILIENCE-1', 'reference': 'https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05j-Testing-Resiliency-Against-Reverse-Engineering.md#testing-root-detection-mstg-resilience-1', 'description': 'This App does not have root detection capabilities. Running a sensitive application on a rooted device questions the device integrity and affects users data.', 'severity': 'INFO' } }, 'android_prevent_screenshot': { 'metadata': { 'cwe': 'CWE-200 Information Exposure', 'owasp-mobile': 'M2: Insecure Data Storage', 'masvs': 'MSTG-STORAGE-9', 'reference': 'https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05d-Testing-Data-Storage.md#finding-sensitive-information-in-auto-generated-screenshots-mstg-storage-9', 'description': 'This App does not have capabilities to prevent against Screenshots from Recent Task History/ Now On Tap etc.', 'severity': 'INFO' } }, 'android_safetynet_api': { 'metadata': { 'cwe': 'CWE-353 Missing Support for Integrity Check', 'owasp-mobile': 'M8: Code Tampering', 'masvs': 'MSTG-RESILIENCE-1', 'reference': 'https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05j-Testing-Resiliency-Against-Reverse-Engineering.md#testing-root-detection-mstg-resilience-1', 'description': "This App does not uses SafetyNet Attestation API that provides cryptographically-signed attestation, assessing the device's integrity. This check helps to ensure that the servers are interacting with the genuine app running on a genuine Android device. ", 'severity': 'INFO' } }, 'android_detect_tapjacking': { 'metadata': { 'cwe': 'CWE-200 Information Exposure', 'owasp-mobile': 'M1: Improper Platform Usage', 'masvs': 'MSTG-PLATFORM-9', 'reference': 'https://github.com/MobSF/owasp-mstg/blob/master/Document/0x05h-Testing-Platform-Interaction.md#testing-for-overlay-attacks-mstg-platform-9', 'description': "This app does not has capabilities to prevent tapjacking attacks. An attacker can hijack the user's taps and tricks him into performing some critical operations that he did not intend to.", 'severity': 'INFO' } } }, 'errors': [] } ``` ## 配置 mobsfscan 在源代码目录的根目录下创建一个 `.mobsf` 文件即可配置 mobsfscan。你也可以使用 `--config` 参数来指定自定义的 `.mobsf` 文件。 ``` --- - ignore-filenames: - skip.java ignore-paths: - __MACOSX - skip_dir ignore-rules: - android_kotlin_logging - android_safetynet_api - android_prevent_screenshot - android_detect_tapjacking - android_certificate_pinning - android_root_detection - android_certificate_transparency severity-filter: - WARNING - ERROR ``` ## 忽略检测结果 你可以通过在触发检测结果的代码行添加注释 `// mobsf-ignore: rule_id1, rule_id2` 来忽略源文件中的检测结果。 示例: ``` String password = "strong password"; // mobsf-ignore: hardcoded_password ``` ## CI/CD 集成 你可以在 CI/CD 或 DevSecOps pipeline 中启用 mobsfscan。 #### Github Action 将以下内容添加到 `.github/workflows/mobsfscan.yml` 文件中。 ``` name: mobsfscan on: push: branches: [ master, main ] pull_request: branches: [ master, main ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4.2.2 - uses: actions/setup-python@v5.3.0 with: python-version: '3.12' - name: mobsfscan uses: MobSF/mobsfscan@main with: args: '. --json' ``` 示例:[使用 mobsfscan github action 的 pivaa](https://github.com/MobSF/pivaa/actions/workflows/mobsfscan.yml) #### Github 代码扫描集成 将以下内容添加到 `.github/workflows/mobsfscan_sarif.yml` 文件中。 ``` name: mobsfscan sarif on: push: branches: [ master, main ] pull_request: branches: [ master, main ] jobs: mobsfscan: runs-on: ubuntu-latest name: mobsfscan code scanning steps: - name: Checkout the code uses: actions/checkout@v4.2.2 - uses: actions/setup-python@v5.3.0 with: python-version: '3.12' - name: mobsfscan uses: MobSF/mobsfscan@main with: args: '. --sarif --output results.sarif || true' - name: Upload mobsfscan report uses: github/codeql-action/upload-sarif@v2 with: sarif_file: results.sarif ``` ![mobsfscan github code scanning](https://static.pigsec.cn/wp-content/uploads/repos/cas/30/301e90ccb851c5b5539722647f6dfe410c43020f7413013819aa9a86e37780b0.png) #### Gitlab CI/CD 将以下内容添加到 `.gitlab-ci.yml` 文件中。 ``` stages: - test mobsfscan: image: python before_script: - pip3 install --upgrade mobsfscan script: - mobsfscan . ``` 示例: #### Travis CI 将以下内容添加到 `.travis.yml` 文件中。 ``` language: python install: - pip3 install --upgrade mobsfscan script: - mobsfscan . ``` #### Circle CI 将以下内容添加到 `.circleci/config.yaml` 文件中 ``` version: 2.1 jobs: mobsfscan: docker: - image: cimg/python:3.9.6 steps: - checkout - run: name: Install mobsfscan command: pip install --upgrade mobsfscan - run: name: mobsfscan check command: mobsfscan . ``` #### Bitrise 将以下内容添加到 `bitrise.yml` 文件中 ``` security_audit: steps: - activate-ssh-key@4: run_if: '{{getenv "SSH_RSA_PRIVATE_KEY" | ne ""}}' - git-clone@8.4: {} - mobsfscan@1: {} - deploy-to-bitrise-io@2: {} ``` ## Docker ### 从 [DockerHub](https://hub.docker.com/r/opensecurity/mobsfscan) 获取预构建镜像 ``` docker pull opensecurity/mobsfscan docker run -v /path-to-source-dir:/src opensecurity/mobsfscan /src ``` ### 本地构建 ``` docker build -t mobsfscan . docker run -v /path-to-source-dir:/src mobsfscan /src ```
标签:Android安全, iOS安全, SAST, 代码审计, 目录枚举, 盲注攻击, 移动安全, 错误基检测, 静态代码分析