chaitanya-hack1O1/Firmsec-IoT-Firmware-Vulnerability-Scanner

GitHub: chaitanya-hack1O1/Firmsec-IoT-Firmware-Vulnerability-Scanner

FirmSec 是一款 IoT 固件静态安全扫描器,通过检测嵌入式组件版本、多源 CVE 匹配、硬编码凭证扫描和二进制加固检查,帮助安全团队在固件审计初期快速完成安全分诊与风险评估。

Stars: 0 | Forks: 0

# FirmSec - IoT 固件漏洞扫描器 FirmSec 是一款用于 IoT 和嵌入式设备的固件安全分析工具。它可以帮助研究人员、学生和产品安全团队检查固件镜像、检测嵌入式组件、识别可能的 CVE、查找硬编码凭证、检查 binary 加固情况,并生成安全报告。 该项目被设计为第一阶段的固件审计工具。它最适合用于分诊(triage):发现需要关注的问题、减少明显的误报,并生成清晰的报告以供进一步的手动验证。 ## FirmSec 的功能 - 检测固件类型、架构、熵和置信度。 - 在可用时使用 `binwalk` 提取基于 Linux 的固件。 - 定位最有可能的文件系统根目录。 - 检测嵌入式库版本,如 BusyBox、OpenSSL、Dropbear、curl、dnsmasq、lighttpd、uhttpd 和 Linux kernel 字符串。 - 从多个受信任的来源查找 CVE: - NVD / NIST - CVE.org / MITRE - CISA 已知被利用漏洞(Known Exploited Vulnerabilities) - 尽可能根据产品标识和版本过滤 CVE。 - 使用 NVD CPE 数据来减少仅依赖关键字匹配造成的错误。 - 当 build flag、OS 上下文或配置可能产生影响时,标记需要手动验证的 CVE。 - 扫描硬编码凭证和敏感值。 - 检查 ELF binary 保护: - NX - PIE - stack canary - RELRO - 在 binary 中搜索危险函数。 - 计算风险评分。 - 生成 PDF 报告。 - 提供 Flask Web 界面。 - 比较两个固件版本,以展示库、CVE、凭证和 binary 加固方面的变更。 ## 静态分析与动态分析 FirmSec 目前主要侧重于静态分析。 静态分析意味着在不完全运行固件的情况下对其进行检查。示例包括从 binary 中读取字符串、检测版本、匹配 CVE、检查文件内容以及检查 ELF 元数据。 这非常有用,因为它可以快速展示可能存在的安全问题,但并不能总是证明漏洞是可利用的。例如,某个 CVE 可能与检测到的 BusyBox 版本相匹配,但受影响的 BusyBox applet 可能并未编译到固件中,或者无法从任何正在运行的服务中进行访问。 因此,FirmSec 将 CVE 结果视为漏洞分诊,而不是可利用性的保证。 动态分析则意味着在模拟器或测试设备中运行固件或服务,并检查是否实际能够触达存在漏洞的代码路径。这可以在未来的版本中通过基于 QEMU 的模拟、runtime 功能检查和安全的 service 探测来实现。 ## CVE 匹配 FirmSec 避免了几个常见的固件扫描器错误: - 它不仅仅依赖关键字搜索。 - 当 NVD CPE 数据可用时,它会检查受影响的产品标识。 - 尽可能检查版本范围。 - 它合并来自多个来源的重复 CVE。 - 为依赖于 build flag、OS 上下文或 runtime 配置的 CVE 添加置信度说明。 可能的 CVE 置信度值包括: - `product-and-version-match` - 组件和版本似乎匹配。 - `needs-manual-verification` - 该 CVE 可能取决于编译选项、平台、runtime 配置或可达性。 ## 项目结构 ``` firmsec/ app.py Flask web interface requirements.txt Python dependencies modules/ firmware_detector.py Firmware type and architecture detection firmware_analyser.py Firmware extraction and static analysis cve_lookup.py Multi-source CVE lookup and filtering credential_scanner.py Hardcoded credential scanning report_generator.py PDF report generation network_scanner.py Network/device scan helpers firmware_comparator.py Compare two firmware versions rtos_cve_database.py RTOS-specific CVE matching data ``` ## 环境要求 Python 包: ``` pip install -r requirements.txt ``` 用于进行更深入固件分析的推荐系统工具: ``` sudo apt install binwalk squashfs-tools p7zip-full nmap file binutils ``` 可选工具: ``` sudo apt install checksec ``` 某些固件提取功能取决于宿主机的 OS 和已安装的提取器。为了获得最佳效果,建议使用 Linux 或 WSL。 ## 安装说明 克隆项目并进入该文件夹: ``` clone the repo cd firmsec ``` 安装 Python 依赖项: ``` pip install -r requirements.txt ``` ## 使用说明 ### Web 界面 启动 Flask 应用: ``` python app.py ``` 打开: ``` http://127.0.0.1:5000 ``` Web UI 支持: - 固件分析 - 网络扫描 - 固件类型检测 - 固件比较 - PDF 报告下载 报告保存在 `reports/` 目录中。 输出: Screenshot 2026-06-20 222103 Screenshot 2026-06-20 222144 Screenshot 2026-06-20 222523 Screenshot 2026-06-20 222601 ## 固件比较 FirmSec 可以比较两个固件版本并展示: - 升级的库 - 降级的库 - 已修复的 CVE - 新引入的 CVE - 未更改的 CVE - 凭证变更 - binary 加固变更 - 整体安全趋势 这在检查供应商的固件更新是否真正提升了安全性时非常有用。 ## 报告输出 生成的报告包括: - 整体风险评分 - 通俗易懂的总结 - 凭证发现 - 嵌入式库 CVE - CVE 置信度状态 - binary 保护结果 - 建议 ## 局限性 - CVE 匹配并不等同于漏洞利用确认。 - 某些漏洞取决于编译时选项或特定于平台的行为。 - 当镜像被加密、打包、经过供应商定制或缺少提取器支持时,固件提取可能会失败。 - 静态分析并不总是能够证明存在漏洞的服务是否可达。 - 动态模拟尚未完全实现。 - 网络扫描只能用于自己拥有或已获授权的目标。 ## 未来路线图 未来可能的改进: - 基于 QEMU 的固件模拟。 - Runtime BusyBox applet 验证。 - 安全的 service 可达性检查。 - 检测模拟固件内正在运行的 Web endpoint。 - 针对 BusyBox、OpenSSL、curl 和 dnsmasq 等组件的 CVE 到功能映射。 - SBOM 生成。 - HTML 报告导出。 - 提供更多对 RTOS 和微控制器固件的支持。 - 针对 CVE 过滤和报告生成的 CI 测试。 ## 安全与法律声明 FirmSec 旨在用于防御性安全研究、教育、授权审计和产品安全测试。未经许可,请勿将其用于任何设备、固件、服务或网络。 扫描器可能会识别出可能的漏洞,但最终的风险决策应包括人工审查、供应商公告、固件上下文和安全验证。 ## 总结 FirmSec 是一款针对 IoT 设备的静态固件安全扫描器。它有助于识别可能的 CVE、硬编码凭证、薄弱的 binary 保护、高风险组件以及固件变更。
标签:Flask, Python, 云安全监控, 固件安全分析, 嵌入式设备, 无后门, 物联网安全, 逆向工具, 静态分析