mcpField
I
iotaudit

iotaudit

本地服务
github.com/emirmrkaljevic安全1今天更新

关于 iotaudit

iotaudit 是面向希望检查自有智能家居设备网络行为的本地审计工具,可采集或分析流量并生成评级与报告。它还支持审计差异比较和离线已知问题提示,所有处理均在本机进行。

主要功能

  1. 01设备流量捕获与分析
  2. 02A–F 安全评级及 HTML 报告
  3. 03检查目的地、加密与开放端口
  4. 04审计结果差异比较
  5. 05离线已知问题提示

适用场景

  1. 01检查摄像头或插座的网络通信
  2. 02查看设备是否使用明文或开放高风险端口
  3. 03比较两次审计并发现新增目的地
  4. 04为设备流量生成可复核报告

MCP 相关

提供 MCP 服务,MCP 客户端可调用 `analyze_pcap` 分析 PCAP 并生成报告;该工具也支持 PDF 输出。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"emirmrkaljevic-iotaudit": {
"command": "uvx",
"args": [
"iotaudit"
]
}
}
}
启动命令uvx iotaudit

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
pypiiotaudit0.1.11

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

iotaudit

CI License: MIT Python 3.10+ PyPI

支持我的开源工作:购买 SkinToScan 套装
如果你觉得这很有用,可以购买我的另一个项目 SkinToScan 套装来支持我。这是一次性购买,所得将直接用于资助我的开源工作。

购买单张图片检查,€4.49 购买 5 张图片套装,€19.99(热门) 购买 15 张图片套装,€54.99

你的智能宠物喂食器、摄像头或插座安全吗? iotaudit 会监控你自己的 IoT 设备在网络上的行为,并为每台设备评定 A-F 等级、给出一句话安全结论,以及生成一页式 HTML 报告。所有操作都在本地运行:无需账户、没有遥测数据,也不使用云服务。

它能回答你对廉价智能设备真正关心的问题:

  • 简而言之,结论是什么? 等级旁附有一句话结论。开放端口、公共 DNS、TLS 或明文传输,以及目的地国家/地区都是观测到的事实。视频、音频和其他流量模式则仅作为带置信度的指标。
  • 它会与谁通信? 域名(DNS + TLS SNI + HTTP Host)、IP、国家/地区、组织。报告会列出每台设备的目的地国家/地区(观测到的事实)。
  • 流量是什么样的? 每台设备都有独立指标,用于识别视频、音频、遥测或未知流量,每项置信度分为低、中或高。这是模式匹配,并不能证明实际发送了什么。
  • 是否经过加密? 明文 HTTP、未加密的 TCP、旧版 TLS,或高熵的“自定义”协议。
  • 开放了哪些端口? 可选的 nmap 扫描,并附带风险说明(telnet、RTSP、UPnP、ADB 等)。
  • 此 Banner 是否存在已知问题? 当版本字符串与整理过的 CVE 相匹配时,会提供简短的离线提示。除非版本完全匹配且条目为严重级别,否则不会影响等级。
  • 能否从互联网访问? 列出路由器通过 UPnP 开放的端口转发,以及它们指向的设备(只读,绝不会更改路由器设置)。
  • 空闲时会向外发送数据吗? 提供空闲上传检查和显示突发流量的时间线。
  • 视频传到了哪里? 局域网对等设备(手机 P2P)、云端或 STUN/TURN;如果已建立流,但数据从未实际经过你的电脑,也会如实说明。
  • 与上次审计相比有哪些变化? iotaudit diff 会比较两个已保存的 JSON 结果;如果出现新的目的地、国家/地区、开放端口、等级下降、未加密流量、UPnP 转发或设备,则以状态码 1 退出。

状态:0.1.10。热点 + ARP 捕获、pcap 和 PCAPdroid 分析、IPv6/NDP、设备类型识别、UPnP 端口转发审计、自愿启用的默认密码检查、带一句话安全结论的评级、HTML 和 PDF 报告、两次审计结果比较、离线已知问题提示、本地 Web UI 和 MCP 服务均已可用。完整漏洞源仍在 路线图中。

示例报告

一份与 Tuya 相关的宠物喂食器报告(已匿名化)。结论与评级并列显示:LAN 上 telnet 端口开放、使用公共 DNS、通过 TLS 与美国的云服务通信、使用未经验证的自定义加密,以及一套 P2P 视频配置;本次运行未观察到视频流。下方仍有详细摘要。报告还显示了一个奇怪的特殊用途“LAN 对等设备”,它并非真实设备:

iotaudit 报告示例

在浏览器中打开 docs/sample-report.html,查看完整版本。

演示

简短演示了捕获流量、检查 UPnP 端口转发,以及可选的默认密码检查(动画 SVG,无音频,不跟踪):

iotaudit 终端演示

安装

pipx install iotaudit
# or with the MCP server extra, and PDF export:
pip install "iotaudit[mcp]"
pip install "iotaudit[pdf]"
# latest from source:
pipx install "git+https://github.com/emirmrkaljevic/iotaudit"

捕获流量需要 root 权限(sudo)。可选的端口扫描需要 nmap。

快速开始

macOS
brew install nmap
pipx install iotaudit

# Just run it: pick your device from the list, then leave it alone (or use its app).
sudo "$(which iotaudit)" capture --mode arp --i-own-this-network

iotaudit 会扫描你的 LAN,列出设备(IP、MAC、供应商;将 Tuya/Espressif 标记为可能的 IoT 设备),并让你选择一个设备。随后,它会仅对该设备执行 ARP 欺骗,使其流量经过你的 Mac,最长捕获一小时(按 Ctrl+C 可提前停止,仍会生成报告),并在退出时恢复 ARP 表和 IP 转发。选定设备后,默认启用 --watch-lan(手机 P2P)和 IPv6/NDP 过滤器。

Linux
sudo apt install nmap
pipx install iotaudit

# Same ARP flow as macOS:
sudo "$(which iotaudit)" capture --mode arp --i-own-this-network

# Or hotspot mode: your laptop becomes an AP; re-pair the device to it (needs NetworkManager).
sudo iotaudit capture --mode hotspot --iface wlan0 --ssid iotaudit --password 'choose-a-pass' \
     --device 10.42.0.50 --scan --out feeder.html
分析现有捕获文件
# from Wireshark, your router, or OpenWrt `tcpdump -w`
iotaudit analyze capture.pcap --device 192.168.1.50 --json results.json --out report.html

报告将生成在 ./iotaudit-report.html,旁边还会生成对应的 .json 文件。

已知问题提示

iotaudit 会将已有的横幅信息与软件包中附带的小型目录进行比对 (src/iotaudit/data/known_issues.yaml)。可用的信息包括:

  • 端口扫描发现的开放服务,以及 nmap 产品和版本信息
  • 设备发送的响应中的 HTTP Server 标头
  • UPnP 或 SSDP 标头(包括 InternetGatewayDevice 通告)
  • 未要求身份验证的 RTSP 响应(前提是该响应已在捕获文件或扫描记录中)

运行时不会进行查询,也没有 hints --update-from 命令。只有安装新版 iotaudit 时,这个文件才会更改。

每条提示都只是可能性,并不能证明固件存在漏洞。提示文字始终会注明:可能存在问题,依据是版本字符串;请验证固件。参考链接指向该 CVE 的 NVD 页面。

提示会显示在 HTML 报告、PDF(PDF 与 HTML 内容相同)、设备 JSON 中的 known_issue_hints 字段,以及 MCP analyze_pcap 结果中。

评级规则。 除非同时满足以下两个条件,否则提示不会影响 A-F 评级:观察到的版本字符串与条目中列出的某个版本完全一致,且条目严重性为严重。在这种情况下扣除 25 分,与一个高危发现的扣分相同;此扣分会在受限数据上限应用后计算,因此即使捕获数据较少,也仍会影响评级。版本范围、没有精确匹配版本的产品名称、单独开放的端口,或严重性不为严重的条目,都不会改变得分。Telnet 端口开放、UPnP IGD 暴露,或 RTSP 无需身份验证,本身都不构成 CVE。只有当横幅信息或服务事实与相应条目匹配时,目录才会引用 CVE。

限制:

  • 该文件是经过筛选的短列表(大约包含 10 到 20 个问题),并非 NVD,也不是固件数据库。
  • 已修补的设备仍可能显示旧版本字符串;未修补的设备也可能隐藏版本信息。无论哪种情况,提示都会要求验证固件。
  • 横幅信息从 IPv4 数据包和 nmap 记录中读取,不会解析 IPv6 服务横幅。
  • 当捕获到的 RTSP 200 响应中没有 WWW-Authenticate 标头,或扫描附加信息中已注明这一点时,系统会记录 RTSP 无需身份验证。随附列表不会仅凭这一事实将其视为 CVE。只有在同时匹配到带版本信息的 RTSP 条目时,提示才会提及此情况。
  • 不会访问网络来刷新列表。

PDF 导出

pip install "iotaudit[pdf]"

# Writes report.pdf next to report.html:
iotaudit analyze capture.pcap --device 192.168.1.50 --out report.html --pdf
sudo "$(which iotaudit)" capture --mode arp --i-own-this-network --pdf

# Convert a report you already saved (HTML, or the JSON list of devices):
iotaudit report --pdf report.html
iotaudit report --pdf results.json --out results.pdf

在 analyze 和 capture 上使用 --pdf,会在 HTML 文件旁生成 PDF。打印样式会将评级 和判定放在每台设备页面的顶部(第一台设备与标题共用第 1 页;之后每台设备都从新页面开始), 确保表格行不会被拆开,并重复显示表头。 屏幕上显示的流量图表不会出现在 PDF 中。

渲染器是 xhtml2pdf,这是一个纯 Python 扩展(xhtml2pdf,由 iotaudit[pdf] 拉取)。 无需安装 Cairo 或 Pango。如果未安装该扩展,analyze 和 capture 仍会生成 HTML,并打印一行安装提示。iotaudit report --pdf 会打印同一行提示并退出,因为 PDF 是它唯一的输出。MCP 工具 analyze_pcap 会同时接收 pdf=true 和 report_path,并在 HTML 文件旁生成 PDF。

比较两次审计

iotaudit diff "$HOME/iotaudit/yesterday.json" "$HOME/iotaudit/today.json"
iotaudit diff "$HOME/iotaudit/yesterday.json" "$HOME/iotaudit/today.json" --json

# Same diff, printed after the HTML and JSON report:
iotaudit analyze capture.pcap --device 192.168.1.50 \
    --json "$HOME/iotaudit/today.json" --out "$HOME/iotaudit/today.html" \
    --compare "$HOME/iotaudit/yesterday.json"

设备按 MAC 地址匹配。如果任一侧没有 MAC 地址,则按 IP 地址匹配。同一 IP 地址对应不同 MAC 地址时,会被视为一台设备离开,另一台设备新加入。对于每台设备,报告会列出新增和消失的目标域名及 IP、新出现的国家、新开放端口、评级变化、判定变化、新发现的未加密流量,以及 JSON 中存在时的新 UPnP 转发。

出现安全相关变化时,退出代码为 1:新增设备、目标域名或 IP、国家、开放端口、评级变差、未加密流量,或 UPnP 转发。否则退出代码为 0,包括只有设备离开或评级变好时。判定变化无论如何都会打印,但本身不会导致退出代码为 1。输入缺失或无法读取时,退出代码为 2。使用 --compare 时,capture 和 analyze 会在写入报告后返回相同的退出代码。

capture 和 analyze 已经会写入 JSON(位于 HTML 文件旁,或写入 --json 指定的位置)。保留之前的文件并将其作为 --compare 参数传入,或者之后对两个文件运行 diff。 diff 上的 --json 会输出机器可读结果。在 capture 和 analyze 上,--json 仍表示结果文件的路径。

没有新变化时,Cron 不会输出内容。此脚本只会在出现安全相关变化时打印差异并以代码 1 退出:

#!/bin/sh
# 15 6 * * 1-5 "$HOME/iotaudit/check.sh"
report=$(iotaudit diff "$HOME/iotaudit/yesterday.json" "$HOME/iotaudit/today.json") || {
    printf '%s\n' "$report"
    exit 1
}
exit 0

不比较 LAN 对等设备。开放端口指扫描得到的 open_ports,而不是联系某个目标时使用的远程端口。UPnP 信息读取自类别为 upnp 的发现结果,或读取自顶层的 upnp.mappings 列表,并按 internal_client 联接。若保存的审计未检查 UPnP,则不会记录转发,因此下一次审计中的转发会显示为新增。其他发现结果不会逐条列出;如果这些发现导致评级或判定发生变化,仍会显示相应变化。

IPv6、P2P 视频和“未观察到”

来自摄像头或喂食器的实时视频通常不会发送到云端:它会在经过简短的 STUN/TURN 握手后,通过本地 Wi-Fi(P2P)直接发送到你的手机。iotaudit 会尽力捕获该视频流(--watch-lan 会欺骗设备↔手机通信,且捕获过滤器现在包含 IPv6 和 NDP),但两个 Wi-Fi 客户端之间的通信可能完全不会经过你的电脑。 这可能是因为接入点启用了客户端隔离、手机忽略了欺骗,或视频流使用了 IPv6 链路本地地址(fe80::)。发生这种情况时,报告会如实说明:

已建立实时视频连接,但此处未观察到:会话已协商(STUN),但未捕获到持续的视频流;它很可能直接传到了你的手机。未观察到 ≠ 未发生。

如需获得真实情况,请在路由器上捕获流量。--ipv6-ndp(实验性)也会对 IPv6 链路本地地址对进行 NDP 欺骗。

默认密码检查(选择加入)

iotaudit credcheck 192.168.0.50                 # telnet by default
iotaudit credcheck 192.168.0.50 --service telnet --service http

iotaudit 只会在你主动要求时进行这一次登录尝试。它会尝试一小组有文档记录的厂商默认凭据(例如 Mirai 时代摄像头出厂时使用的 root/xc3511),绝不会使用密码字典。你需要输入短语确认准确的 IP;它只会以局域网地址为目标,在每次尝试之间等待,在首次成功登录时停止,并且只报告**“默认登录已接受”或“未接受”**;它绝不会保留或使用会话。请仅在自己的设备上使用。

路由器端口转发(UPnP)

iotaudit upnp          # or --json

许多设备会悄悄请求路由器向其开放一个公共端口。iotaudit upnp 会列出所有 UPnP 端口转发及其指向的局域网设备。它只会发送两条只读 UPnP 查询,且仅发送给使用私有地址的路由器。它也会在每次 capture 后运行(使用 --no-upnp 跳过),并在发现转发指向受审计设备时添加一条发现项。如果没有设备响应,说明路由器上的 UPnP 已关闭,这是最安全的设置。

Web 界面和手机

iotaudit web                          # http://127.0.0.1:8765, token printed on start
sudo "$(which iotaudit)" web --lan    # also from a phone on the same Wi-Fi (token required)

在浏览器中查看报告、上传 pcap(包括 Android 上由 PCAPdroid 捕获的文件),并一键运行扫描与捕获。默认仅限本地主机;--lan 需主动启用、受令牌保护,且只响应私有地址范围内的客户端。iPhone 可以使用 Web 界面,但无法自行捕获;有关 Android 和 iOS 上可用与不可用的功能,请参阅 docs/phones.md。

MCP 服务

iotaudit-mcp        # exposes audit tools to a local assistant ("audit my pet feeder")

diff_results 会以与 iotaudit diff 相同的方式比较两个已保存的 JSON 审计结果。

同意与范围

iotaudit 只审计你自己的网络。它会拒绝非私有目标,并要求提供 --i-own-this-network(或交互式确认 I OWN THIS NETWORK)。在不属于你的网络上进行 ARP/NDP 欺骗可能违法。

发现项是基于观测流量的迹象,并非任何厂商有不当行为的证据。IP 地理定位由 DB-IP 提供。采用 MIT 许可证。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。