你家的智能电视已成为AI抓取经济的节点
- #隐私
- #安全
- #AI抓取
- #智能电视
- #住宅代理
Include Security的工作让我们日复一日地与AI打交道(黑客攻击、使用、训练等)。我们都知道最近针对数据中心(以提升AI能力为目的)的社区级反对声音。但你可能不知道的是,那些分布式AI训练努力可能正在使用你家里的设备。本文将探讨Bright Data公司如何利用其住宅代理网络,促进现代AI模型从互联网抓取训练数据。
Bright Data是一家数据收集公司,销售其号称全球最大的住宅代理网络访问权限,该网络拥有超过4亿个家庭IP地址,客户通过它路由网络抓取流量。该网络的后端来自一个SDK:嵌入在消费者应用程序中的软件,在用户同意后,将他们的手机或智能电视变成出口节点。
我们将记录普通用户应该了解的关于该公司SDK在你的系统(如手机和智能电视)上做什么的信息。我们将探讨他们的SDK如何工作,哪些平台已经搭载了它,以及为什么你的联网电视是AI模型从互联网抓取训练数据的最佳代理。
为什么这件事很重要 AI公司依赖网络抓取的内容:用于预训练、检索、代理接地和搜索。但现代网络无法从数据中心抓取。Cloudflare、DataDome、HUMAN等公司会限制或阻止来自已知云IP的请求。解决方法就是住宅代理。通过Comcast或T-Mobile用户的连接路由的抓取任务,从属于付费住宅客户的IP到达目标网站。Krebs在2025年10月报道称,“来自Aisuru和其他来源的大量代理正在推动与各种AI项目相关的大规模数据收集工作。”追溯到2019年的学术测量表明,这些网络被大量滥用。FBI在今年早些时候发布了一份正式建议。
现有的大多数新闻都集中在非法的住宅代理供应上:僵尸网络(Aisuru、Kimwolf)、木马化应用(HUMAN Security的PROXYLIB披露)、预感染的物联网硬件(谷歌/Mandiant的IPIDEA打击)。这些都是坏角色。另一方面,合法的供应方受到的审查要少得多。如今,Bright Data自称是全球最大的住宅代理网络,宣传“1.5亿+ IP”,这些IP来自嵌入在合作伙伴应用程序中的同意SDK。本研究记录了该SDK如何工作,哪些平台已经搭载了它,以及为什么联网电视是终极住宅代理。
为什么联网电视(CTV)是理想代理 联网电视(即智能电视)几乎是完美的住宅代理。与手机相比:
| 因素 | 手机 | 智能电视/CTV |
|---|---|---|
| 电力 | 大部分时间靠电池 | 始终插电 |
| 网络 | WiFi + 蜂窝 | 始终WiFi,高速 |
| 在线时间 | 间歇性 | 24/7待机 |
| 带宽上限 | 低(蜂窝上限) | 实际上无限 |
| 用户注意力 | 频繁使用 | 通常无人看管 |
| 同意UI | 手机屏幕上的文字 | 通过电视遥控器箭头键导航的文字 |
| 企业/家庭监督 | 较高(MDM、移动EDR) | 几乎没有 |
电视永远不会电量不足1%,不会在WiFi网络之间切换,也不会在用户睡觉时被锁定。
一些合作伙伴发布商确实在其隐私政策中披露了与Bright Data的关系,PlayWorks就是一个例子。但隐私政策披露对于电视来说是一种错误的控制界面。用遥控器箭头键翻阅法律文件很困难,而且应用内的同意对话框并没有传达出付费的Bright Data客户即将通过用户家庭互联网路由其抓取流量。
The Verge记录的Roku应用Petflix是一个典型案例。其选择加入屏幕显示:“为了免费享受Petflix并减少广告,您允许Bright Data偶尔使用您设备的空闲资源和IP地址从互联网下载公共网页数据。Bright Data只会将您的IP地址用于经批准的业务相关用例。除您的IP地址外,不会访问或收集您的任何个人信息。完毕。”Petflix对话框说“偶尔”。而SDK公开可查询的配置设置了max_bw_monthly_wifi: 200,000,000,000字节——每月默认WiFi流量预算为200 GB。
Bright Data列为合作伙伴的对象 Bright Data公开了一个合作伙伴清单端点。该端点无需认证,任何人都可以获取。以下是我能通过公开来源高度确信地识别的清单中的名称:
| 合作伙伴ID(来自配置) | 实体 | 规模 |
|---|---|---|
| playworks_digital | PlayWorks Digital Ltd | 400+ CTV游戏;通过Comcast、Sky、Cox、LG、Samsung、Vizio、Roku覆盖约2.5亿电视家庭 |
| cloudtv | CloudTV | 集成在125+电视品牌和15+ OEM中 |
| longvision_media_hong_kong_co_limited | Longvision Media HK (LongTV) | 香港和马来西亚500万OTT用户 |
| viber_media_s_r_l | Viber Media S.à r.l. (Rakuten) | Viber消息应用月活2.5亿-8.2亿 |
| supercent_inc | Supercent (韩国) | 2023年韩国下载量第一的移动发行商 |
| moonfrog_labs_private_limited | Moonfrog Labs (Stillfront子公司) | 仅Teen Patti Gold就有约1000万月活;以9000万美元收购 |
| hola_networks | Hola Networks | Bright Data的前身;高峰时期用户数在数千万到约1亿+(据Hola自己的历史营销资料) |
其他(desoline、free_time、ott_studio、global_microtrading、m_m_media、easystaff_lp)也存在,但难以从公开来源识别。bright_screensavers、bright_videos和brightdata是Bright Data自己的应用。
关于合作伙伴清单能证明什么:被列入Bright Data的配置意味着集成可能曾经存在过。这本身并不能证明特定发布商当前发布的应用在生产中包含SDK。对于任何被点名的发布商,都需要逐应用验证。合作伙伴清单直接证明的是:Bright Data在一个未经认证的公共端点中提供了这份名单。至少三个以CTV为重点的实体(PlayWorks、CloudTV、Longvision)将用户设备货币化为住宅代理出口节点。特别是PlayWorks,根据其自己的营销材料,其CTV分布覆盖主要电视平台和ISP,覆盖家庭数量达数亿。
Bright Data SDK如何将用户设备变成住宅代理出口节点? Bright Data SDK是一个公开文档化的商业产品,通过Bright Data的SDK集成文档提供给发布商(也有适用于网页的JavaScript版本)。以下内容基于该公开表面,并结合了对iOS框架的反向工程以及对其运行时流量30天的检测结果。
该SDK作为iOS框架(brdsdk.framework)嵌入在合作伙伴应用中。我对二进制文件进行了反向工程,并从一个安装了同意SDK的合作伙伴应用的研究设备群中捕获了30天的流量。
未经认证的配置
每次启动时,SDK会调用:
GET https://clientsdk.bright-sdk.com/sdk_config_ios.json?appid=<bundle>&ver=<sdk-version>&uuid=sdk-ios-<32hex>
该端点从任何有意义的角度来说都是未经认证的。服务器仅基于两个查询参数进行门控:appid(应用包ID,可在合作伙伴应用的App Store列表中找到)和ver(SDK版本字符串)。提供这些参数以及任意随机生成的UUID,服务器就会返回与真实设备相同的响应:功能标志、空闲检测阈值(电池百分比、CPU/内存上限、WiFi与蜂窝规则)、按国家划分的带宽等级以及我上面展示的合作伙伴清单。
这些分支中的每一个都值得单独检查:决定设备何时有资格中继的空闲规则、将对等流量绕过VPN的路由标志、将跨平台安装拼接成一个身份的地图,以及按国家划分的带宽上限。
对等隧道
获取配置后,SDK会打开一个持久的WebSocket连接到:
wss://proxyjs.brdtnet.com:443
该主机名解析为AWS Global Accelerator IP(截至本文撰写时为3.33.193.183和15.197.193.114)。TLS证书的CN=*.luminatinet.com——这是Bright Data在2018年之前的企业名称Luminati Networks的域名。品牌重塑于2018年公开宣布。活跃的SDK基础设施仍然使用旧证书,这是一个有用的检测依据:当前面向客户的代理服务位于brightdata.com品牌的域名上,因此你网络上的任何luminatinet.com / brdtnet.com流量都是对等隧道层面,而不是客户端的Bright Data使用。服务器自我标识为uWebSockets: 20。
对等端点无需认证即可升级。服务器接受任何TLS有效的WebSocket升级,并立即向连接的客户端推送一个应用层帧,其中包含客户端的公共IP。然后,握手展开:
- 服务器→客户端:tunnel_init 建立会话,返回客户端的公共IP。
- 服务器→客户端:cid_set 服务器为客户端分配一个会话跟踪标识符,格式为
<IP>-<token>/ls<N>c<M>p443_<IP>_<counter>。我们确认此格式与从真实设备捕获的SDK遥测流量中的cid字段匹配。 - 服务器→客户端:status_get 服务器轮询设备的状态,包括空闲状态、电池、网络类型和可用带宽。设备会持续发送遥测数据:idle、wifi_connected、mobile_connected、mobile_type(LTE/5G)、roaming、battery_level、using_battery、screen_on、on_call、cpu_usage、mem_usage、raw_bw、bw、ipv6_supported、appid(宿主应用)、sdk_version、platform以及分配的cid。这是持续向第三方发送物理设备状态的信息流,通过一个由宿主应用发布商选择文本的同意对话框实现。
握手完成。一旦设备报告有利状态,服务器的工作匹配层就可以推送cmd_tun帧:单独的抓取作业指令,SDK会将这些指令作为HTTP请求执行到第三方网站,使用用户的住宅IP作为源地址。
WebSocket上的每个帧都是纯JSON,带有固定信封:
{
"type": "ipc_call" | "ipc_post" | "ipc_result" | "ipc_error",
"cmd": <command>,
"cookie": <correlation-id>,
"err_code": 0,
"msg": { ... }
}
从二进制中提取并在线路上验证的完整命令词汇表:
| 方向 | 命令 | 目的 |
|---|---|---|
| 服务器→客户端 | tunnel_init | 打开会话,回显公共IP |
| 服务器→客户端 | cid_set | 分配会话标识符 |
| 服务器→客户端 | status_get | 轮询设备空闲/电池/带宽 |
| 服务器→客户端 | cmd_tun / tun | 分发抓取作业 |
| 服务器→客户端 | dns | 请求目标DNS解析 |
| 服务器→客户端 | consent | 请求同意状态 |
| 客户端→服务器 | status_send | 周期性心跳,附带设备状态 |
| 客户端→服务器 | tun_report / tun_ack / tun_fin | 中继作业生命周期响应 |
| 客户端→服务器 | tunnel_init_decline | 拒绝会话 |
| 客户端→服务器 | logs | 向服务器发送诊断日志 |
没有消息签名、HMAC、客户端证书或设备认证。只有TLS层和服务器的IP信誉过滤器来限制哪些对等方实际接收作业。对于熟悉商业恶意软件协议设计的读者来说:这比典型的C2(命令与控制)安全性要低得多。
SDK何时认为你“空闲” 配置中有一份明确的规则书,规定设备何时有资格中继他人的流量:
"idle_metrics": {
"ignore_screen_on": true, // 即使屏幕亮着也中继
"ignore_on_call": true, // 即使正在通话也中继
"max_bw_ratio": 1,
"min_battery": 0.2,
"wifi_on_battery": true,
"min_battery_wifi": 0.2,
"max_cpu_usage": 70,
"max_mem_usage": 90,
"mem_screen_off": true,
"idle_timeout": 30,
"not_idle_timeout": 10
}
ignore_screen_on和ignore_on_call标志值得注意:“空闲”并不意味着用户不在设备旁。它意味着设备的CPU、内存和电池在SDK的阈值内。正在通话、积极看屏幕的用户也被视为适合中继的空闲状态。
跨平台身份关联 配置中还包含一个map字段,用于将相同用户在不同平台上的安装关联起来。
评论