rohanambati-bot/Malware-Whisperer

GitHub: rohanambati-bot/Malware-Whisperer

面向执法与取证的全栈 Android 恶意软件分析平台,结合静态分析、动态沙箱与网络欺骗层,生成可操作的取证报告。

Stars: 1 | Forks: 0

# Malware Whisperer **专为执法机构与网络取证设计的 Android APK 恶意软件分析平台** 这是一个全栈应用程序,能够对可疑的 Android APK 执行静态分析、动态沙箱执行、网络欺骗(DNS Sinkhole + 伪造的 C2 蜜罐)以及证据关联分析——最终为 CID 调查官生成可操作的取证报告。 ## 架构 ``` ┌──────────────┐ ┌──────────────────────────────────────┐ ┌──────────────────┐ │ Frontend │◄─────►│ Backend (FastAPI) │◄─────►│ Android Emulator │ │ React/Vite │ API │ Static + Dynamic + Deception Engine │ ADB │ (malware-sandbox)│ └──────────────┘ └──────────────────────────────────────┘ └──────────────────┘ │ ┌──────────────┼──────────────┐ ▼ ▼ ▼ DNS Sinkhole Fake C2 Honeypot SQLite DB (UDP port 53) (HTTP catch-all) (evidence store) ``` **技术栈:** - 后端:Python 3.12, FastAPI, Uvicorn, SQLite (aiosqlite), YARA, Androguard, JADX - 前端:React 18, TypeScript, Vite, Tailwind CSS, D3.js, Motion (Framer) - 沙箱:Android Emulator (API 35), ADB, Frida(可选) - AI:Google Gemini(可选,用于生成调查官摘要) ## 功能特性 ### 静态分析 - **权限分析** —— 提取并分类所有声明的权限(正常/危险/签名) - **YARA 签名扫描** —— 19 条取证规则:短信窃取器、键盘记录器、勒索软件、银行钓鱼覆盖攻击、间谍软件、Dropper、屏幕录制、通过 Firebase 的 C2 通信、加密货币矿工等 - **IOC 提取** —— APK 中内嵌的 URL、域名和 IP 地址,经过验证和过滤以去除框架噪音 - **证书分析** —— 签名者主题/颁发者、SHA-1 指纹、跨样本匹配 - **可疑 API 检测** —— 模拟器检测、调试器检测、root/su、Frida、动态代码加载、发送短信、位置追踪、滥用辅助功能 - **反分析检测** —— 识别沙箱规避代码,确保此类样本永远不会被标记为“安全” - **混淆评估** —— 加密的 ZIP 条目、加壳的 DEX、反射、动态加载信号 - **逆向工程** —— 原始 ZIP 字符串提取、原生库扫描、针对加密 APK 的反混淆技术 ### 动态沙箱 - **模拟器实时执行** —— 通过 ADB 在真实的 Android 模拟器上安装并运行 APK - **Logcat 捕获** —— 30-120 秒的观察窗口,捕获所有设备活动 - **次级行为检测** —— 将运行时日志分类为:数据外泄、释放二级 APK、文件生成、命令执行、权限提升、动态代码加载、原生库加载 - **安装诊断** —— 针对 ABI 不匹配、缺少 splits、无桌面图标应用的结构化错误检测 - **安全 UI 刺激** —— 中立交互(点击、滑动、菜单、monkey 事件)以触发潜伏的恶意软件 - **GPS 位置设置** —— 可配置的坐标,用于触发基于位置感知的恶意软件 - **网络重定向** —— 在可 root 的模拟器上使用 iptables NAT,将 DNS 和 HTTP 重定向到欺骗层 ### 网络欺骗 - **DNS Sinkhole** —— 纯 Python 异步 UDP 服务器拦截所有域名查询,并将响应伪造为你的 IP - **伪造 C2 蜜罐** —— HTTP 全捕获端点捕获恶意软件信标,并对其进行分类(注册/命令/数据外泄/信标/指纹识别) - **实时 WebSocket** —— 将事件流实时传输到前端仪表板 - **案件关联** —— 每个捕获的事件都通过 SHA-256 打标签关联到对应的 APK 案件 ### 威胁情报 - **基于关联的评分** —— 来自权限、YARA、IOC、API 和运行时行为的加权证据;在升级威胁级别前需要多个独立信号达成一致 - **VirusTotal 集成** —— 哈希信誉查询(文件绝不会被上传至 VT) - **MITRE ATT&CK 映射** —— 将检测到的行为映射到移动端的 ATT&CK 技术 - **证书交叉匹配** —— 查找共享相同签名证书的其他样本 ### 报告与调查 - **取证 PDF 报告** —— 自动生成档案,包含所有发现结果、按严重程度排序的 C2 活动、证据保管链 - **AI 调查官摘要** —— 由 Gemini 驱动的自然语言总结,适合非技术背景的调查人员(无 API 密钥时回退到模板生成) - **证据账本** —— 经 HMAC 签名的防篡改审计日志,记录每一个操作 - **C2 事件描述** —— 每个捕获的事件都会获得一句通俗易懂的单行解释 ### 安全性 - **身份验证** —— 存储于 HttpOnly cookie 中的 JWT,采用恒定时间密钥比较 - **CSRF/CORS 防护** —— 来源允许列表、Referer 验证 - **速率限制** —— 针对上传和登录的基于 IP 的限流 - **路径遍历防护** —— 对所有上传文件进行文件名过滤处理 - **证据完整性** —— 带有验证端点的 HMAC 签名审计链 - **隐私保护** —— API 响应中对 IMEI/MAC/OTP 进行脱敏处理 - **沙箱隔离** —— 一次性模拟器,APK 绝不被修改/打补丁,不绕过反检测机制 ## 项目结构 ``` malware-whisperer-backend/ ├── app/ │ ├── main.py # FastAPI app, routes, middleware, honeypot │ ├── analysis.py # Static analysis engine + threat scoring │ ├── yara_rules.py # 19 YARA detection rules │ ├── sandbox.py # Dynamic sandbox (ADB runtime) │ ├── sandbox_orchestrator.py # Emulator lifecycle management │ ├── dns_sinkhole.py # DNS sinkhole server │ ├── anti_analysis.py # Anti-analysis detection │ ├── secondary_behaviors.py # Runtime behavior categorization │ ├── install_diagnostics.py # APK install failure detection │ ├── reverse_engineer.py # Advanced IOC extraction │ ├── jadx_decompiler.py # JADX integration │ ├── zip_inspector.py # Encrypted/packed APK detection │ ├── pcap_generator.py # Synthetic PCAP writer │ ├── pcap_parser.py # PCAP analysis │ ├── ai_brief.py # Gemini AI officer's brief │ ├── behavior_log.py # Event classification + descriptions │ ├── reports.py # PDF report generation │ ├── db.py # SQLite database (aiosqlite) │ ├── events.py # WebSocket event bus │ ├── platform_utils.py # Cross-platform path detection │ ├── frida_generator.py # Frida script generation │ ├── apk_package.py # APK/bundle unpacking │ └── tld_list.py # Valid TLD list for IOC validation ├── .env # Configuration (see below) ├── requirements.txt # Python dependencies └── whisperer.db # SQLite database (auto-created) malware-whisperer-frontend/ ├── src/ │ ├── pages/ │ │ ├── UploadPage.tsx # APK upload │ │ ├── AnalysisPage.tsx # Static + dynamic results │ │ ├── DeceptionPage.tsx # DNS sinkhole + C2 live feed │ │ ├── TrafficPage.tsx # Behavior event timeline │ │ ├── KillChainPage.tsx # D3 network graph │ │ ├── CidPage.tsx # Evidence ledger + AI brief │ │ └── ReportPage.tsx # Forensic report + PDF export │ ├── components/ # Reusable UI components │ ├── lib/ # API client, derive functions, utilities │ └── types/ # TypeScript interfaces ├── package.json └── vite.config.ts ``` ## 前置条件 - **Python 3.12+** - **Node.js 18+** 及 npm - **Android Studio**(用于 SDK、Emulator 和 AVD Manager) - **JADX** 反编译器(可选,用于完整的 Java 反编译) - **Frida**(可选,用于运行时动态插桩:`pip install frida-tools`) ## Android Studio 与模拟器配置(分步指南) ### 步骤 1:安装 Android Studio 1. 从 https://developer.android.com/studio 下载 2. 运行安装程序 —— 接受所有默认选项 3. 首次启动时,让设置向导安装 **Android SDK**(它会自动选择一个默认位置): - **Windows:** `C:\Users\\AppData\Local\Android\Sdk` - **macOS:** `~/Library/Android/sdk` - **Linux:** `~/Android/Sdk` 4. 将 `ANDROID_HOME` 环境变量设置为此路径(应用会自动检测,但显式设置是最安全的) ### 步骤 2:安装必需的 SDK 组件 打开 **Android Studio → Settings → SDK Manager**(或从终端运行 `sdkmanager`): ``` # Platform Tools (ADB) sdkmanager "platform-tools" # Emulator sdkmanager "emulator" # System Image — 必须是 google_apis (rootable),而不是 google_apis_playstore sdkmanager "system-images;android-35;google_apis;x86_64" # (可选)在 Intel/AMD 机器上运行 ARM APK 时,x86_64 image 会通过 ndk-translation 转译 ARM ``` ### 步骤 3:创建 AVD (Android Virtual Device) **选项 A:通过 Android Studio UI** 1. 打开 **Tools → Device Manager → Create Device** 2. 选择硬件:**Pixel 6a**(或类似设备) 3. 选择系统镜像:**API 35, Google APIs, x86_64** 4. 为 AVD 命名:**`malware-sandbox`** 5. 设置以下推荐选项: - RAM: 2048 MB - Internal Storage: 6 GB - SD Card: 已启用 - GPU: Auto - Boot: Fast Boot **选项 B:通过命令行** ``` # 创建 AVD avdmanager create avd \ -n malware-sandbox \ -k "system-images;android-35;google_apis;x86_64" \ -d pixel_6a # 验证其是否存在 emulator -list-avds # 应该显示:malware-sandbox ``` ### 步骤 4:为恶意软件分析配置 AVD 编辑 AVD 配置文件以优化分析环境: - **Windows:** `C:\Users\\.android\avd\malware-sandbox.avd\config.ini` - **macOS/Linux:** `~/.android/avd\malware-sandbox.avd/config.ini` 推荐设置(大部分默认已开启): ``` hw.cpu.ncore = 4 hw.ramSize = 2048 hw.lcd.density = 420 hw.lcd.height = 2400 hw.lcd.width = 1080 hw.gps = yes hw.camera.back = emulated hw.camera.front = none image.androidVersion.api = 35 tag.id = google_apis PlayStore.enabled = false fastboot.forceFastBoot = yes ``` ### 步骤 5:启动模拟器 ``` # 以 headless 模式启动(无 GUI 窗口)— 适合服务器/后台运行 emulator -avd malware-sandbox -no-window -no-audio # 或者带 GUI(用于调试/demo) emulator -avd malware-sandbox ``` 等待 30-60 秒完成启动,然后验证: ``` adb devices # 预期输出: # List of devices attached # emulator-5554 device ``` ### 步骤 6:验证 root 权限(DNS 重定向所需) ``` adb root # 预期:"adbd is already running as root" 或 "restarting adbd as root" adb shell id # 预期:uid=0(root) adb shell which iptables # 预期:/system/bin/iptables ``` 如果 `adb root` 提示 "cannot run as root in production builds" —— 说明你选了**错误的镜像**(PlayStore 版)。请返回步骤 2 并使用 `google_apis`(而不是 `google_apis_playstore`)。 ### 步骤 7:(可选)安装 JADX JADX 用于 Java 反编译。如果未安装,系统将回退到原始字符串提取。 1. 从 https://github.com/skylot/jadx/releases 下载 2. 解压到某个文件夹(例如 `Android/Sdk/tools/jadx/`) 3. 在 `.env` 中设置 `JADX_BIN`: - Windows: `JADX_BIN=C:\path\to\jadx\bin\jadx.bat` - Linux/macOS: `JADX_BIN=/path/to/jadx/bin/jadx` 或者直接将 `jadx` 添加到你的 PATH 环境变量中。 ### 步骤 8:(可选)安装 Frida Frida 提供更深度的运行时插桩(加密密钥追踪、网络 Hook)。 ``` # 安装 Frida CLI pip install frida-tools # 下载适用于 x86_64 Android 的 frida-server # 匹配通过以下命令显示的版本:frida --version # 从以下地址下载:https://github.com/frida/frida/releases # 推送到 emulator: adb push frida-server--android-x86_64 /data/local/tmp/frida-server adb shell "chmod 755 /data/local/tmp/frida-server" ``` 在 `.env` 中设置: ``` FRIDA_SERVER_PATH=/data/local/tmp/frida-server ``` ## 配置与安装 ### 1. 克隆代码库 ``` git clone https://github.com/YOUR_USERNAME/malware-whisperer.git cd malware-whisperer ``` ### 2. 后端配置 ``` cd malware-whisperer-backend python -m venv .venv # Windows: .venv\Scripts\activate # Linux/macOS: source .venv/bin/activate pip install -r requirements.txt ``` ### 3. 配置环境变量 将 `.env.example` 复制为 `.env` 并编辑: ``` cp .env.example .env ``` 关键设置: ``` # 必需 ADMIN_ACCESS_KEY=your-secure-random-key JWT_SECRET_KEY=your-jwt-secret AUDIT_HMAC_KEY=your-hmac-key DISABLE_AUTH=true # Set false in production # Android SDK(如果设置了 ANDROID_HOME 则会自动检测) # ANDROID_HOME=/path/to/Android/Sdk # 可选集成 # GEMINI_API_KEY=your-gemini-key # 用于 AI briefs # VT_API_KEY=your-virustotal-key # 用于 hash lookups ``` ### 4. 前端配置 ``` cd malware-whisperer-frontend npm install ``` ### 5. 创建 Android 模拟器 ``` # 创建 AVD(如果不存在) avdmanager create avd -n malware-sandbox -k "system-images;android-35;google_apis;x86_64" -d pixel_6a ``` ## 运行项目 **请按以下顺序启动:模拟器 → 后端 → 前端** ### 终端 1:Android Emulator ``` emulator -avd malware-sandbox # 等待完全启动,然后验证: adb devices # 应该显示:emulator-5554 device ``` ### 终端 2:后端 ``` cd malware-whisperer-backend python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 ``` 你应该看到: ``` [INIT] Set Windows ProactorEventLoop for subprocess support ====================================================================== ANDROID ENVIRONMENT DETECTION ====================================================================== ANDROID_HOME [FOUND] /path/to/Android/Sdk ADB [FOUND] /path/to/adb ... ====================================================================== DNS Sinkhole Server successfully listening on port 53 Uvicorn running on http://0.0.0.0:8000 ``` ### 终端 3:前端 ``` cd malware-whisperer-frontend npm run dev ``` ### 在浏览器中打开 导航至 **http://localhost:5173** ## 使用说明 1. 通过上传页面上传可疑的 **APK** 2. **审查静态分析** —— 权限、YARA 命中情况、IOC、证书、可疑 API 3. **运行动态分析** —— 点击 "Run Runtime Analysis" 在模拟器中执行 4. **监控网络欺骗** —— 观察 DNS Sinkhole 和 C2 蜜罐捕获实时流量 5. **导出报告** —— 下载取证 PDF 或生成 AI 调查官摘要 ## API 端点(核心路由) | 方法 | 路径 | 用途 | |--------|------|---------| | POST | `/api/upload` | 上传并分析 APK | | GET | `/api/apks` | 列出所有已分析的 APK | | GET | `/api/apks/{sha256}` | 获取完整的分析结果 | | POST | `/api/sandbox/run/{sha256}` | 运行动态分析 | | GET | `/api/sandbox/status` | 检查模拟器就绪状态 | | GET | `/api/c2/events` | 列出捕获的 C2 事件 | | GET | `/api/dns/sinkhole/status` | DNS Sinkhole 状态 | | GET | `/api/dns/sinkhole/verify` | 验证 DNS 拦截是否生效 | | GET | `/api/behavior` | 行为事件时间轴 | | GET | `/api/evidence` | 证据账本(证据保管链) | | GET | `/api/report/{sha256}` | 下载取证 PDF | | POST | `/api/officer-brief/{sha256}` | 生成 AI 摘要 | | WS | `/ws` | 实时事件流 | ## 配置参考 | 变量 | 默认值 | 描述 | |----------|---------|-------------| | `DISABLE_AUTH` | `true` | 在本地使用时禁用身份验证 | | `SANDBOX_PROVIDER` | `adb_runtime` | 沙箱模式 (`adb_runtime` / `emulator`) | | `SANDBOX_DURATION` | `30` | 运行时捕获窗口(秒) | | `SANDBOX_UI_STIMULUS` | `true` | 发送安全交互以触发潜伏的恶意软件 | | `SANDBOX_SET_LOCATION` | `true` | 在模拟器上设置 GPS 坐标 | | `DNS_SINKHOLE_PORT` | `53` | DNS Sinkhole UDP 端口 | | `SINKHOLE_IP` | `127.0.0.1` | 用于欺骗所有域名解析的 IP 地址 | | `FULL_IOC_EXTRACTION` | `true` | 提取所有 IOC(无限制) | | `MAX_APK_SIZE_MB` | `200` | 最大上传大小 | | `GEMINI_API_KEY` | _(空)_ | Google Gemini API 密钥(可选) | | `VT_API_KEY` | _(空)_ | VirusTotal API 密钥(可选) | ## 安全实现 - **身份验证:** JWT(HttpOnly cookie, HS256, 24 小时过期) - **CSRF:** 对状态更改方法执行 Origin/Referer 允许列表检查 - **CORS:** 显式来源允许列表,支持可选的正则表达式 - **速率限制:** SlowAPI(每小时 10 次上传每分钟 5 次登录) - **输入验证:** 文件名过滤、大小限制、后缀名允许列表 - **证据完整性:** 带有篡改检测验证的 HMAC 签名审计日志 - **隐私保护:** API 响应中对 PII(IMEI/MAC/OTP)进行脱敏 - **沙箱隔离:** 一次性模拟器,尽力清理,不修改 APK ## 局限性(客观评估) 1. **未拦截 HTTPS C2 通信** —— 仅限 DNS 和明文 HTTP;不对加密流量进行解码(设计上不含 TLS MITM) 2. **固定的观察窗口** —— 延时或基于触发的 Payload 可能不会在 30-120 秒的运行中被激活 3. **可被模拟器检测** —— 复杂的恶意软件能够检测到沙箱并保持潜伏(会被标记为反分析行为,但无法观测到实际 Payload) 4. **启发式评分** —— 非 ML/AI;属于基于确定性的规则关联 5. **DNS 噪音** —— Sinkhole 会捕获所有模拟器流量,包括操作系统的后台请求;尚未过滤为仅针对特定应用 6. **需要可 Root 的模拟器** —— DNS/HTTP 重定向需要使用 `adb root`(必须使用 google_apis 镜像,而非 google_apis_playstore) ## 未来路线图 - [ ] 利用沙箱 CA 进行 TLS 拦截,以实现对加密 C2 流量的可见性 - [ ] 从特定应用的查询中过滤掉操作系统级别的 DNS 噪音 - [ ] 在已标注的恶意软件语料库上训练基于机器学习的威胁分类模型 - [ ] 多 AVD 配置文件(不同的 API 级别、制造商) - [ ] Docker 容器化以实现便携式部署 - [ ] 真实设备沙箱支持(已 Root 的物理手机) - [ ] 基于样本聚类自动化生成 YARA 规则 ## 许可证 本项目为 CID 网络犯罪黑客松开发。许可条款待定 (TBD)。 ## 作者 由 Malware Whisperer 团队构建。
标签:AV绕过, FastAPI, React, Syscalls, 动态沙箱, 威胁情报, 安全取证, 安卓恶意软件分析, 开发者工具