今天早上,DDoSecrets 发布了一个令人兴奋的新文件系统镜像,包含正在使用的 Flock 自动车牌识别摄像机的分区。404 Media 和 Wired 对此进行了联合调查。我下载了数据集,现在彻底被技术狂热者盯上。
来自名为 stegan0gram 的团体的黑客收集了这些数据。一次采访中,一名黑客对 404 Media 和 Wired 说:“为什么只要摧毁[Flock 摄像机],不如逆向工程它们,揭开那些监视我们的秘密?”他补充道:“我们在现场解放了硬件,解除武装,然后继续对摄像机及其相关太阳能设备进行逆向工程。”以下是我目前发现的一些秘密。
我在空闲时间处理数据并撰写这些通讯。如果你想支持我的工作,考虑成为付费支持者。
这台摄像机运行的是已过时、已停止支持的 Android 版本,Flock 摄像机使用的是修改版 Android。提取固件时,这台 Flock 摄像机运行的具体版本是 2025 年 6 月 5 日的构建。
尽管是相对较新的构建,但这台 Flock 摄像机运行的是 Android 8.1。该 Android 版本于 2017 年发布,且在 2021 年正式停止获得 Google 的支持(更多信息请参阅 Android 生命周期页面)。虽然 Google 在 2021 年之前为 Android 8.1 发布了安全补丁,但该摄像机的 Android 补丁级别为 2018-06-05。该摄像机已缺少过去八年的 Android 安全更新。
Android 运行在 Linux 内核之上。这台 Flock 摄像机使用的是 2017 年发布的 Linux 3.18.71。3.18 系列一直维护到 2019 年 5 月,最终版本为 3.18.140——这台摄像机比那还落后 69 个版本。该内核已超过九年未更新。
以下是这款相机可能存在的、且会影响其内置组件的几个公开已知的安全漏洞:我实际上并没有这款 Flock 相机来亲自测试这些漏洞,也无法确认相关攻击方法是否真的有效;但我知道的是,这款相机的补丁版本发布时间远远早于这些漏洞的出现时间(尽管相关补丁早已可用多年)。
CVE-2021-1905(Qualcomm Adreno GPU):该漏洞属于“使用已释放的内存资源”(use-after-free)类型。任何在 Flock 相机上运行的代码(包括那些没有权限的应用程序)都可能通过 GPU 驱动程序破坏内核内存,从而完全控制设备。该漏洞已于 2021 年 5 月得到修复。
CVE-2018-9568(“WrongZone”):该漏洞源于内核对 IPv6 协议的socket处理机制存在缺陷,导致恶意程序能够获取系统 root 权限。该漏洞已于 2018 年 12 月得到修复。(相关攻击代码可在此处查看。)Flock 公司在给 404 Media 和 Wired 的声明中表示,他们非常重视网络安全问题,并制定了公开的安全漏洞披露政策,鼓励安全研究人员直接向他们报告潜在的安全漏洞。我们尚未通过该渠道收到任何漏洞报告;由于信息有限,我们无法对相关指控进行详细评估。如果有人确实发现了真实的安全漏洞,我们鼓励他们通过我们的漏洞报告流程提交技术细节,以便我们的安全团队进行审查并采取相应措施。
数据来源:如果你想进一步了解这些漏洞的详细信息,DDoSSecrets 公司已将相关数据集发布在了他们的网站上。
Android 版本和补丁级别在多个地方都有列出,但最容易找到它们的地方是在系统分区中。如果你下载 partitions/24_system.img(1.5 GB)并解压,你会发现一个名为 build.prop 的文件,其中包含以下内容:ro.build.version.sdk=27 ro.build.version.release=8.1.0 ro.build.version.security_patch=2018-06-05 ro.build.date=Thu Jun 5 57 UTC 2025 Linux 版本可以在引导分区中找到。如果你下载 partitions/21_boot.img(32 MB)并解压,你会在名为 kernel 的文件中找到内核映像。你可以使用以下命令查看 Linux 版本:❯ tail -c +16496 kernel | zcat 2>/dev/null | grep -am1 'Linux version' Linux version 3.18.71-perf-gaf770dc (android@e593ce924ef6) (gcc version 4.8 (GCC) ) #1 SMP PREEMPT Thu Jun 5 45 UTC 2025凭证进入 Flock 的实时生产基础设施 在深入细节之前,我想强调一点:未经许可使用泄露的凭证连接到 Flock 的服务器是非法的。
这台 Flock 摄像头的 Android 固件包含 20 个独立的 Flock 应用程序,其中 19 个共享一个名为 com.flocksafety.android.common.lib 的库。如果你反编译该库,你会发现 CameraSettings 类中有一个有趣的方法:public final String getHpnotiqApiKey { return "HaJ3FgupAm8顺便说一下,那些凭证可能仍然有效且处于激活状态(不过我不太确定,因为我没有亲自测试过):CPkOAuOKFwNhPavKO01Htxbn6yIwASro 和 ZRExGjbVjBB1wx04RmsMeWKbpMO5zQxLKNZg25D-1LUKbfQbmByajx-8lyB6LwSV。这些凭证可以用来生成“bearer tokens”;具体操作方法是:将这些凭证发送到相应的服务器,然后会收到一个有效期很短的 FlockAuth0Token,该令牌可用于与 Flock 的后端服务器进行交互,并使设备能够以该相机的身份进行身份验证。
相关的密钥存储在系统的某个分区中。请下载文件 partitions/24_system.img(大小为 1.5 GB),解压后你会看到多个 Flock 应用程序(如 flock-sambuca、flock-collins、flock-phone-home 等),每个应用程序中都包含一个名为 K 的文件。你可以任意选择一个应用程序进行反编译,然后在 com.flocksafety.android.common.lib 文件中查找 CameraSettings。这个共享库被包含在所有 19 个应用程序中,因此密钥实际上存在于每一个应用程序中。
flock-sambuca 是用于生成这些凭证的应用程序;其 Auth0ServiceManager 类负责构建凭证请求的相关数据。hpnotiq.flocksafety.com 和 device-.flocksafety.com 这两个 URL 地址都存储在 K 文件中的字符串资源文件(resources/res/values/strings.xml)里。
认证所需的客户端 ID 和密钥则存储在另一个分区中(文件名为 partitions/27_persist.img,大小为 32 MB),解压后你会看到文件 flock/auth0/auth0_cred。这个分区没有经过加密,其设计目的是确保数据在设备进行出厂重置后仍然能够被保留。
相机的 MAC 地址以及与 hpnotiq 服务器之间的 2,264 次通信记录都保存在文件 partitions/53_media.img(大小为 18 GB)中;这些数据被封装在一个加密容器内。不过,解密这个加密容器所需的密钥实际上存储在同一分区内的文件 expand_1fcdafef903c40cab3aff81bec914d01.key 中。一旦这个密钥被解密,相关的日志文件会被压缩成 .tar.gz 格式,保存在 media/0/media/crashpack/ 目录下。
这台特定的摄像头位于密尔沃基郊区。Flock 摄像头的日志记录了 155 次摄像头位置 GPS 坐标,全部相距约 100 米左右,我认为这只是一个从不移动的接收器的普通 GPS 抖动。出现频率最高的坐标是 43.10151313, -88.05270186。如果你在 Google 地图上搜索它,你会到达密尔沃基西北部的一个郊区。
我从未去过密尔沃基地区,但看起来这台 Flock 摄像头位于名为 Wauwatosa 的城市,地址是 N Mayfair Rd,靠近 Webster 公园。
使用 Google 街景,我在 N Mayfair Rd 周围寻找 Flock 摄像头。GPS 位置似乎略有偏差,实际上它位于街道西侧,靠近公