报告: 我们继续微信聊天?(简体中文摘要 )

注:本摘要未翻译所有研究发现,请阅读我们的英文报告了解研究发现的详细信息。本摘要仅翻译了完整报告中的“探讨”和“建议”章节。 探讨 “业务层加密”为何重要?

By Mona Wang, Pellaeon Lin, and Jeffrey Knockel 

2024年10月15日

阅读英文报告 重要发现 (https://citizenlab.ca/2024/10/should-we-chat-too-security-analysis-of-wechats-mmtls-encryption-protocol )

  • 微信拥有超过十亿月活跃用户,我们分析了微信使用的主要网络协议MMTLS的安全性和隐私特性,并发布了首篇公开研究报告。
  • 我们发现MMTLS实际上是修改自TLS 1.3协议,微信开发者在其中修改了部分加密机制,并在某些修改中引入了漏洞。
  • 进一步分析发现,早期版本的微信使用了一种不同且更不安全的自制协议,称为“业务层加密”。业务层加密包含多个安全漏洞,在我们测试的新版本微信中,业务层加密与MMTLS同时被使用。
  • 虽然我们没有找到完全破解微信网络加密的方法,但其加密仍存在一些弱点,例如使用了确定性的初始化向量(Initialization Vector),且缺乏前向保密特性(forward secrecy)。对于一款拥有十亿以上用户的应用程序,其安全性仍有待提高。
  • 近期一些其他研究指出,中国市场中的应用程序经常不遵循密码学界公认的最佳实践,而选择开发自制的加密系统,这些系统往往存在大小不一的漏洞。本研究为这一现象提供了更有力的证据。
  • 我们在研究中开发的工具程序和技术方法文件,已在我们的GitHub存储库中发布。这些工具程序和技术文件将有助于其他研究人员进一步探索微信系统的内部工作方式。


既然我们已经在报告中提到,业务层加密外面会再包裹一层较为安全的MMTLS加密,那么业务层加密即使不安全,又会有什么实质影响?在腾讯回复我们的信件中,主要提到的是业务层加密的各种问题,信中也暗示了他们正在逐步将业务层加密中有问题的AES-CBC加密法替换为AES-GCM,这表明腾讯对业务层加密的问题有所顾虑。

首先,我们研究了旧版微信(v6.3.16, 2016发布),当时业务层加密是微信传输网络数据的唯一一层加密。其次,由于业务层加密会将内部的请求网址未加密暴露,我们猜测微信设计的服务器端架构中可能由不同内部服务器端点来处理不同类型的网络请求(不同类型的网络请求包含不同的“requestType”数值,以及不同的“cgi-bin”网址)。例如,微信的服务器端架构可能由最外层的服务器端点来解开MMTLS加密,再根据不同的请求类型将内部请求转发至负责的内部服务器端点(转发时不再重新加密,仅依赖业务层加密提供的安全性)。在这种假设的架构下,如果微信内部网络中存在网络窃听者,它们将可以直接攻击这些被转发请求所使用的业务层加密。 

为何不直接使用TLS?

根据腾讯自行公开的技术文件以及我们研究的验证,MMTLS(微信所使用的“外层”加密)主要是基于TLS 1.3。该技术文件显示MMTLS的设计者对非对称加密法有深入理解。

文件中解释了不使用TLS的理由:因为微信大多数的网络数据传输只需在一次请求和响应循环中完成(中国业内称为“短连接”),因此特别需要底层协议的0-RTT特性。MMTLS只需一来一回的下层TCP包建立TCP连接,即可立即开始传输数据,相比之下,TLS 1.2在TCP连接建立后需要增加一次来回的TLS握手才能开始传输数据。

虽然TLS 1.3草案标准中提出了0-RTT(不增加网络延迟)建立安全连接的方法,此外TLS协议通过版本号、CipherSuite、扩展机制提供了良好的可扩展性。然而,TLS 1.3草案标准当时仍在制定过程中,基于标准的实现也遥遥无期,并且TLS 1.3是一个针对所有软件制定的通用协议,如果结合微信自身特点,仍有很大的优化空间。因此最终选择基于TLS 1.3草案标准,设计了我们自己的安全通信协议MMTLS。

然而,即使在该文件撰写的2016年,TLS 1.2也已提供了会话恢复(session resumption)的功能。更有甚者,即使当时TLS 1.3在IETF协议制定流程中仍属草案,若微信需要会话恢复功能,由于微信对服务器端和客户端代码拥有完全控制权,部署当时仍在测试中的TLS 1.3实现并非难事。

尽管MMTLS设计者付出了大量努力,总体来看,微信所使用的安全协议在安全性和性能上均不如TLS 1.3。一般情况下,设计一套既安全又高效的传输协议并非易事。

传输协议为了进行握手而使用额外的包来回造成延迟,这一问题长期困扰着应用程序开发者。TCP和TLS的握手流程各自需要一次包来回,意味着在传输任何新数据之前,协议需要等待两次包来回,造成延迟。如今,已有如TLS-over-QUIC等协议,结合了传输层和加密层的握手,仅需一次包来回即可完成握手开始传输数据。QUIC提供了一种兼顾安全性和高效性的解决方案,同时具备强健的前向保密加密(forward secrecy),并减少了先前协议建立连接所需的包来回次数。我们建议微信改用标准的QUIC协议。

最后,除了考虑网络性能,客户端应用程序的性能也是一个重要课题。微信的协议设计中,每个网络请求都需要进行两层加密,这意味着相比于行业标准协议只需一次加密,微信客户端应用程序需要花费近乎两倍的计算资源和时间。

中国应用程序自制加密法的趋势

本研究的发现与我们早先的研究结果共同指出了一项趋势:中国应用程序广泛地使用自制的加密法。通常,选择不使用行业标准的TLS,并开发自制的非标准加密法,与行业公认的安全最佳实践背道而驰。尽管在TLS普及的早期(2011年)存在一些合理的对TLS不信任的原因,例如EFF和Access Now对证书签发机构生态系统的担忧,TLS的发展在之后已经基本稳定,机制变得更加透明且可审计。

如同MMTLS,我们过去研究过的所有自制协议相较于TLS都存在一些安全漏洞,在某些情况下,这些自制协议甚至可能被网络攻击者轻松破解。全球互联网的发展趋势正逐步普及国际标准的QUIC和TLS以保护数据传输,而中国行业的这种背离趋势令人担忧。

罗曼·阿宁问答:即使在流亡中也要追究普京责任

Roman Anin Russian reporter GIJC23
IStories 很快就成为俄罗斯最著名的调查新闻网站之一。2020年12月,成立仅几个月后,该媒体发布了一篇关于弗拉基米尔·普京的女儿和女婿的深度报道。

“作为一个独裁者,他不喜欢别人调查他家族的腐败问题。这篇报道非常受欢迎。”37岁的调查记者兼“重要故事”(简称 IStories)的创始人罗曼·阿宁(Roman Anin)说道。

阿宁向国内的多方人士询问,回国是否安全。他们全都告诉他,一旦过境,他很可能会被逮捕——从那以后他再也没有回国。

这篇报道在 YouTube 上迅速积累了大量浏览量(见下方视频),引起了广泛关注,以至于俄罗斯记者兼诺贝尔和平奖得主德米特里·穆拉托夫(Dmitry Muratov)警告阿宁,这将会带来麻烦。

四个月后,警方突袭了阿宁的家以及 IStories 在莫斯科的办公室。阿宁表示,警方没收了他家中的所有文件和电子设备,包括他女友的设备。尽管莫斯科的新闻编辑室当时是空的,但他形容这次经历是他一生中最紧张的时刻。(IStories 毫不畏惧地将这次危险的经历转化为教学材料,为其他记者制作了当家中遭遇警方突袭时应采取措施的 GIJN 提示表。)

他原以为自己会因为调查俄罗斯总统的家族而被逮捕——“我当时想,他们会指控我是国家的敌人,”他说——但一名联邦安全局(FSB)特工告诉他,这次突袭与几年前发布的一篇调查有关。那篇报道是阿宁在俄罗斯报纸《新报》(Novaya Gazeta)工作时撰写的,聚焦于国有企业俄罗斯石油公司(Rosneft)负责人拥有的一艘豪华游艇。

随后,他接受了两次警方审讯,期间被问及有关游艇的报道。但阿宁坚信,对普京家族的调查引发了他的迫害。“这就是俄罗斯秘密服务的典型操作手法,”他告诉 GIJN。“当他们想把某人投入监狱或对某人提起刑事诉讼时,他们可以找任何借口。”

当假期变成永久流亡

不久之后,阿宁在度假时离开了俄罗斯。在国外期间,他向国内的多方人士询问,回国是否安全。他们全都告诉他,一旦过境,他很可能会被逮捕——从那以后他再也没有回国。

“这是一个心理上非常艰难的决定,因为我的团队还在俄罗斯,而我在外面,”他回忆道。“当我的同事们冒着失去自由和生命的风险时,我却是安全的。”

但 IStories 面临的挑战持续增加,阿宁感到在俄罗斯境内进行调查报道很快将变得不可能。“我不知道我们会面临乌克兰的入侵,”出生并成长于摩尔多瓦的阿宁说道。“但当时已经很明显,在俄罗斯你面临两个选择:要么进监狱,要么接受流亡。这正是现在的情况。”

IStories 成功深入报道了乌克兰战争,同时继续报道俄罗斯生活的其他方面。

多年来,IStories 和其他独立新闻机构一样,法律上被要求在其网站上标注“外国代理人”这一沉重的词语。然后在2022年2月24日,俄罗斯对其西部邻国发动了大规模攻击,根据最近的估计,此次攻击已导致100万名乌克兰人和俄罗斯人死亡或受伤。莫斯科在入侵后迅速对独立媒体进行了镇压。那一年的3月5日,国家将 IStories 列为“不受欢迎的组织”,这一决定使其运营在俄罗斯成为犯罪,并禁止该组织在国内工作。这是对该组织采取的最严厉措施,意味着其任何记者以及任何在社交媒体上转发或点赞其内容的人都面临长期监禁的威胁。

到2022年3月10日,根据国际特赦组织的数据,已有超过150名记者逃离了俄罗斯,其中包括所有 IStories 的记者。
一个完整的新闻室流亡

阿宁的早期流亡使他得以为团队的最终撤离做好准备,并确保员工拥有长期签证。在对乌克兰进行全面攻击的前一周,一位消息人士向他透露了克里姆林宫的计划。起初他不相信会发生,但当他看到每一步都如消息所述那样实现时,他意识到 IStories 确实需要紧急搬迁。他的同事们在入侵发生后的几天内进入拉脱维亚,现在他们在一个未公开的地点流亡工作。尽管俄罗斯打击独立新闻,并通过国家媒体加大宣传力度,他们依然在远方继续进行调查。

“我希望能只讲战争的故事,因为今天没有什么比这更重要的了……但我认为俄罗斯人对乌克兰人的苦难并不那么关心。我们必须创造性地接触这个受众。我们需要找到更贴近俄罗斯人的故事。”——罗曼·阿宁

“这个国家变得非常封闭,人们害怕说话,”阿宁说道。然而,IStories 成功深入报道了乌克兰战争,同时继续报道俄罗斯生活的其他方面。

一篇关于来自东西伯利亚布里亚特地区的俄罗斯士兵家庭的故事视频获得了超过1000万的观看量。阿宁指出,根据 YouTube 的统计数据,90%的观众生活在该地区——仅伊尔库茨克就有80万。“这意味着西伯利亚主要城市之一的30%的人观看了这个故事,”阿宁指出。

另一篇关于退伍俄罗斯士兵严重创伤后应激障碍(PTSD)的报道也有超过1000万人观看,其中有50万人来自南部的重要城市克拉斯诺达尔。“一半的城市看了这部视频,讲述战争是一种可怕的罪行,参与其中的人回来时要么受伤,要么患有严重的 PTSD,”他解释道。

该新闻媒体的 YouTube 频道拥有超过70万订阅者。超过10万人在 Telegram 上关注他们,还有大约7.5万人在 Instagram 上关注。尽管在俄罗斯被屏蔽,IStories 的网站仍可以通过 VPN 或镜像网站被俄罗斯人访问。
平衡调查重点

但编辑决策并不总是简单的:“我希望能只讲战争的故事,因为今天没有什么比这更重要的了,”阿宁说。“但我认为俄罗斯人对乌克兰人的苦难并不那么关心。我们必须创造性地接触这个受众。我们需要找到更贴近俄罗斯人的故事。”

“作为记者,有时我们认为自己可以让世界变得更好……当这种情况没有发生时,会令人沮丧,但我们的工作也是保存历史。”——罗曼·阿宁

尽管民意调查似乎显示普京拥有压倒性的民众支持,但在一个严格审查的国内媒体环境中,许多普通俄罗斯人转向 IStories 寻求批判性报道,在某种程度上,IStories 的影响力从未如此大。阿宁回忆说,2022年2月之前,媒体的报道几乎没有引起政府的反应。但自团队流亡以来,一些报道反而促使了政府做出改变的承诺。

今年早些时候,IStories 发布了一篇关于一个没有正式供水系统的村庄的报道。调查发布后,地方当局向该地居民承诺将建造供水管道。

“我明白为什么,”阿宁说。“被称为国家敌人的记者报道普通人面临的问题,这对他们来说是种耻辱。当局想表现出他们也关心这些人,尽管这当然不是真的。”

同样,IStories 对靠近芬兰边境的卡累利阿地区的住房进行了调查。团队发现,成千上万的人住在没有供水或其他服务的旧兵营里。报道发布后,当地政府承诺将提供更好的住房。

“我不知道他们是否真的兑现了,但这是一个即时的反应,”阿宁说。“同样很有趣的是,他们不得不承认问题的存在,但同时又表示这篇报道是由北约盟友的记者发布的,是试图破坏国家稳定的举动。”
记录历史,为未来追责

即使 IStories 的调查似乎没有带来显著变化,阿宁仍然认为这些故事值得讲述。“作为记者,有时我们认为自己可以让世界变得更好,”他说。“当这种情况没有发生时,会令人沮丧,但我们的工作也是保存历史。我们的重要工作在于记录今天发生的一切,试图记录所有被犯下的罪行。”

团队收到了匿名威胁,阿宁怀疑这些威胁来自俄罗斯当局,因为这些威胁中包含了记者们的详细行踪信息,比如他们航班的座位号。

他表示,IStories 的一些报道已经被海牙国际刑事法院和乌克兰检察官用于调查。

“这在未来会非常重要,尤其是从长远来看,当新一代俄罗斯人有机会改变他们的国家时,”阿宁继续说道。尽管他对未来会有更好的日子充满乐观,但他认为只要现政权存在,就几乎没有重大变革的希望。“在普京下台之前,一切都不会改变,”他说。

即使身在国外,也有一种不安的危机感。团队收到了匿名威胁,阿宁怀疑这些威胁来自俄罗斯当局,因为这些威胁中包含了记者们的详细行踪信息,比如他们航班的座位号。而在6月,俄罗斯对阿宁和 IStories 的前同事叶卡捷琳娜·福米娜(Ekaterina Fomina)发出了逮捕令。他警告说,任何去俄罗斯的外国记者都有被“逮捕并作为有价值的交换筹码”的风险。

但像其他人一样,他也担心总统的愤怒可能在法庭之外显现。“我认为,对我和其他独立记者来说,主要的威胁不是法律上的。威胁是身体上的。我们都知道普京会除掉他的敌人。他不在乎地点和时间。”

Linux路由补完计划06 广告屏蔽就是这么简单——Pi-hole篇

前言


在上上期中我介绍了使用AdGuard Home来过滤广告的方法,今天我再推荐一款同样好用的本地DNS及广告过滤工具——Pi-hole,相比于AdGuard Home来说,Pi-hole诞生更早,一开始它是为树莓派开发的一款广告过滤工具,在许多开发者的努力下,它被发扬光大了,也正因为这款工具的诞生,让我在过去那段时间里能让自己的移动设备免受广告的侵扰,以至于至今我还把它当成主力的广告过滤工具在我的软路由上默默的为全家手机服务

视频说明


Pi-hole是什么


Pi-hole的核心组件pihole-FTL实际上就是一个dnsmasq的分支,它相比于原版的dnsmasq在功能上有专门针对广告过滤的优化,它只是将过去需要手动进行的广告过滤规则进行了自动化配置;原版的dnsmasq可以通过address=这样的配置进行广告屏蔽,如果广告域名较多的话,那配置起来简直让人抓狂,而Pi-hole作为一款好用的工具简化了广告过滤规则的配置过程,真乃懒人之福音

搭建过程


由于Pi-hole的本质就是dnsmasq,为了不影响其正常的安装,在安装之前需要卸载掉本机已经安装的dnsmasq,这也是为什么我在上期视频中没有附加广告过滤部分的原因

前期准备

  • 备份dnsmasq配置并将其卸载:

执行命令systemctl stop dnsmasq将dnsmasq服务停止,之后就是将上次编写的配置文件给备份(实际上并不需要备份,基本上会自动生成),此处我使用mv命令,直接将整个目录重命名了,这样有两点好处:

1.备份

2.防止安装Pi-hole之后因为配置冲突造成启动失败

此处实际上应该还要卸载,只是我忘记了,大家记得要执行下述命令来进行dnsmasq的卸载apt-get autoremove dnsmasq -y

  • 安装必要的下载工具curl

安装Pi-hole的一键脚本需要用到,那就装呗,apt-get install curl -y

  • 配置代理

感谢伟大的GFW,装个国外的软件真心好痛苦,还好咱有代理可以用,export命令走起

一键安装

想要安装Pi-hole还是很简单的(这是现在,过去可是很坑的,动不动依赖就会出问题,当然大部分原因都是有伟大的GFW),官方直接提供了一键脚本

根据官方给出的命令,执行就是了curl -sSL https://install.pi-hole.net | bash

如果不出意外的话,基本上都能顺利的进入配置界面

安装配置

  • 在安装部分依赖之后,系统会自动进入配置的界面,如下图所示:

Pi-hole的一些说明之后就是正式的安装配置了

  • 选择提供服务的网卡,此处是LAN口的ens224
  • 选择上游服务器,现在图省事我直接使用了Google的,然后直接确定进入下一步
  • 广告过滤的策略,先保持默认吧
  • 选择IP类型,IPv4 OR IPv6,现在IPv6还有很多问题,暂时就只用IPv4
  • 确认一下网络设置情况,保证能够正常上网
  • 之后系统会询问是否需要安装web界面,小白必备,自然是需要的
  • 开启查询记录,此处我选择了记录全部内容

之后Pi-hole就会基于刚刚的配置开始自动安装,这期间需要下载一些组件,如果网络不好的话就有可能会失败,所以代理还是很有必要的

接下来就进入最后的一部分配置,包括防火墙,登陆密码等

  • 配置防火墙(如果没有启用防火墙,这边可以随意),建议安装Pi-hole需要用到的防火墙规则,默认会打开其所需要用到的端口:53674711~472080
  • 完成安装及显示登录密码,之后可以通过显示的登陆地址和登陆密码进行后台管理

后台管理


登陆

登陆地址在安装完之后会自动显示,其实就是两个网卡所对应的地址,默认直接输入http://ip/admin即可进入界面,如果没有在IP后面加上/admin,那默认会进入如下界面:

直接点击Did you mean to go to the admin panel即可进入后台界面,之后看到的就是基本的状态界面,上面可以直观的看到请求数,被拦截的查询等

这个界面只是状态展示,如果要进行管理,需要登录进去,点击左侧的Login进行登录,密码在Pi-hole安装完之后已经显示在界面上了

如果嫌自动生成的密码太难记,直接可以使用pihole -a -p命令进行修改,执行命令后输入两次新密码即可

登陆之后所有功能都会在左侧显示,状态界面显示的内容也会更丰富

功能配置

Pi-hole的大部分功能配置都是在系统设置中调整的,点击左侧的Settings选项,出现系统配置的几个选项卡

  • 上游DNS调整

选择DNS选项卡,在安装过程中我使用了谷歌的DNS服务器,此时我依然打算使用DNSCrypt-Proxy作为主要的上游服务器,取消谷歌的服务器的勾选,在**Custom 1(IPv4)**中填入DNSCrypt-Proxy的监听地址及端口,此处是127.0.0.1#5353

点击右下角的SAVE之后即可生效,同时在/etc/dnsmasq.d/目录下的配置文件也会出现相应的修改,由于pihole-FTL就是一个dnsmasq的增强版本,所以dnsmasq上使用的语法在它身上依然可以使用,vi /etc/dnsmasq.d/01-pihole.conf

此处可以看到服务器部分已经是自定义的那个服务器地址了

  • 启用DHCP功能

选择DHCP选项卡,勾选DHCP server enabled,并配置好起始和结束的IP地址,当然,也不要忘记把网关地址设置正确,同样的,保存之后就可生效,相应的在/etc/dnsmasq.d目录下也会生成对应的配置文件

此时DHCP功能的配置文件名是02-pihole-dhcp.conf

  • 添加合理的广告过滤规则

点击Blocklists查看默认的广告过滤规则,这些广告过滤规则并不符合中国用户的使用习惯,此处我建议全部取消前面的勾选

此处我推荐一个广告过滤规则的Github项目:neohosts

项目提供的几种类型的规则地址,我主要推荐如下两个,这两个任选其一即可,具体的不同可以查看项目的说明

直接复制规则的地址,填入Blocklists选项卡的规则地址位置,点击Save and Update使其生效即可

此时添加的规则已经可以满足轻量级的广告过滤需求了,当然,如果想要更加强力点的广告过滤能力,建议移植Adblock plus中的Easylistchina等规则,由于Pi-hole并不兼容Adblock plus的规则语法,所以只能移植其中收集到的广告域名,虽然功能上受限制了,但是也是对原有广告过滤功能的增强

/opt目录下新建一个脚本文件adblock.sh,输入如下内容:

1
2
3
4
5
6
7
curl -s -L https://easylist-downloads.adblockplus.org/easylistchina+easylist.txt https://easylist-downloads.adblockplus.org/malwaredomains_full.txt https://easylist-downloads.adblockplus.org/fanboy-social.txt > adblock.unsorted

sort -u adblock.unsorted | grep ^\|\|.*\^$ | grep -v \/ > adblock.sorted

sed 's/[\|^]//g' < adblock.sorted > adblock.hosts

rm adblock.unsorted adblock.sorted

保存并退出,然后执行bash ./adblock.sh,稍等片刻,之后就会生成一个包含大量域名的文件adblock.hosts

同样的在Blocklists中填写规则地址,由于adblock.hosts文件是本地文件,所以规则的地址需要变化一下,将http(s)://替换为file://,之后在后面跟上文件的完整路径即可,此处的规则地址是file:///opt/adblock.hosts

  • DNS查询分流

这个功能在上一期中已经介绍过,在/etc/dnsmasq.d目录下引入dnsmasq-china-list的配置文件即可,这里我依然使用软链接的方式进行添加,添加完成之后直接执行pihole restartdns即可重启Pi-hole服务

总结


至此Pi-hole算是搭建完成了,虽然广告过滤是使用了DNS解析过滤的方式,效果并不是特别好,但好处是不会影响网速,相比于浏览器插件而言,各有优缺点吧!

如果想要自定义一些域名的处理方式的话,在左侧的WhitelistBlacklist中可以手动进行调整,具体的就不展开了,大家有兴趣去自己尝试一下

言论自由之战:从中国审查制度的反乌托邦现实对全球之警示

via  https://here.news/story/aed0b2af?ver=0.02

在一个充满驱逐、拒绝和动荡的世界里,一个共同的主题浮现出来 - 声音的压制和审查制度的兴起。从中国到土耳其,从津巴布韦到莫桑比克,甚至在坦桑尼亚,个人权利和言论自由正受到攻击。中国国有银行的前董事长因非法活动和贿赂被开除。土耳其总统塔伊普·埃尔多安宣布他拒绝承认LGBT社区,同时土耳其军队在叙利亚对激进目标进行攻击。巴勒斯坦伊斯兰教组织哈马斯对以色列发动重大攻击,前马达加斯加总统马克·拉瓦洛马纳在支持者集会期间受伤。俄罗斯宣布其打算撤销核条约的批准。在危地马拉,支持民主的示威遭到镇压威胁。来自不同国家的代表聚集起来,要求释放委内瑞拉外交官亚历克斯·萨布,并谴责以色列对巴勒斯坦人的虐待。在津巴布韦,政治人物乔布·西卡拉被拘留超过500天,引发了对司法系统完整性的担忧。突尼斯的两名逃犯实施了一起武装抢劫,导致高级情报官员被解职。前莫桑比克第一夫人格拉萨·马歇尔指责执政党被以私利为先的人所控制。在坦桑尼亚,改革的承诺被对反对派的镇压和对新闻自由的限制所掩盖。津巴布韦布拉瓦约的手推车操作员面临着因新法律而失去生计的威胁。

在这种动荡的背景下,另一种形式的压制浮现出来 - 审查制度。前主流媒体工作者罗德尼·帕尔默讨论了审查对人民、民主和政府的影响。他认为审查是针对公民的一种强大武器,没有它,那些掌权者将一无所有。帕尔默强调了近年来媒体审查、机构审查和政府审查的普遍性。声音的压制和信息的限制进一步加剧了世界的不安和动荡。

将这些故事联系在一起的共同主题是言论自由的斗争和审查的后果。无论是通过驱逐、拒绝还是压制声音,其影响都会被个人、社会甚至整个国家感受到。争取言论自由的斗争变成了正义、透明和民主的保卫战。

在中国,言论自由之战呈现出反乌托邦的形式。由于审查,日常生活被政治化,使公共表达变得困难,并创造了许多禁忌。很难追踪国内可以和不可以说的内容。被审查的作家描述了审查和禁止某些概念是如何使作品变得难以理解。作者们在不一致和不连贯的修订中挣扎,段落被删除,整个作品被删除或锁定,个别词汇被打上星号。网民们试图使用模糊的字符组合来绕过审查,但自动审查可能很粗糙。敏感话题和政治术语被禁止,平台被迫自我审查或面临后果。国家反淫秽和非法出版物办公室甚至奖励举报违规行为的告密者。作者们自我审查,以避免作品被破坏或删除,读者们依靠相互理解的纽带在删减的行间阅读。尽管面临挑战,作者们仍决心继续写作和表达自己,抗拒审查的压迫性控制。

言论自由之战是一场全球性的斗争,跨越国界,影响着来自各行各业的个人。这是一场反对声音的压制、信息的限制和民主的侵蚀的斗争。从中国的反乌托邦审查到各国对异见的压制,共同的主题很清楚 - 需要保护和维护言论自由的基本权利。

《全球审查技术调查》

via: https://datatracker.ietf.org/doc/html/rfc9505.txt  

"《全球审查技术调查》是一份关于互联网审查方法的综合研究报告,主要关注用于阻止或损害互联网访问和通信的技术策略。报告分类讨论了互联网通信中的审查技术,包括网络层和应用层。它定义了与互联网审查相关的关键术语和概念,探讨了IP封锁、DNS篡改、数据包过滤和内容关键字过滤等方法。报告还讨论了深度包检测(DPI)和加密技术在规避审查中的作用,以及审查技术与对策之间的动态关系。此外,报告还考虑了审查的非技术方面,包括法律、政治和社会因素对审查技术实施的影响,以及这些方法对人权的影响。报告最后讨论了互联网审查的未来,强调了在这一领域继续进行研究和保持意识的必要性。"

文档中提到了中国审查技术的几个方面:

  1. DNS响应操作:在中国,对某些被审查的域名进行查询会导致伪造的DNS响应。通过一个例子来演示,在中国查询一个被审查和未被审查的域名会产生不同的结果:未被审查的域名没有响应,而被审查的域名会返回一个伪造的IP地址。

  2. 主动探测规避工具:中国已经开发出一种称为"主动探测"或"主动扫描"的有效技术来识别使用规避工具的主机。这种方法涉及审查者使用规避协议发起通信,以确定主机是否运行此类工具。

  3. 封锁维基百科:截至2019年5月,中国已经封锁了维基百科的所有语言版本。

  4. 使用深度包检测(DPI):中国的防火长城(GFW),作为世界上最大的审查系统之一,使用DPI来识别HTTP和DNS上的受限内容。DPI用于向连接中注入TCP重置包和错误的DNS响应。

  5. 网络断连:2009年,在新疆地区发生骚乱期间,中国切断了网络连接,以防止抗议活动的蔓延。

  6. 手动过滤和自我审查:在中国,互联网内容提供商(如谷歌或微博)需要获得营业执照,其中包括签署一份名为“中国互联网行业自律公约”的“自愿承诺”。不遵守可能会导致因违规内容而承担责任。这导致了一种自我审查形式,不希望发布的内容不太可能被发布。

  7. 对ESNI的HTTPS残留审查:中国采用了3元组和4元组残留审查机制的混合体,用于HTTPS与加密服务器名称指示(ESNI)的审查。

  8. DNS中毒事件:2014年1月,一个实施不当的DNS中毒尝试导致中国通过防火长城将所有请求重定向到单一域名,造成了重大的互联网服务中断。

  9. 使用“大炮”:中国使用一种名为“大炮”的系统发起分布式拒绝服务(DDoS)攻击,该系统与防火长城并列。这个系统将JavaScript代码注入到中国某搜索引擎的网页访问中,劫持这些用户代理向各种网站发送DDoS流量。

     

如何生成 GPT-4 arkose_token

via
https://linweiyuan.github.io/2023/06/24/%E5%A6%82%E4%BD%95%E7%94%9F%E6%88%90-GPT-4-arkose-token.html

 

以下逆向 JS 内容已过期,参考:https://github.com/acheong08/ChatGPT/issues/1431#issuecomment-1606145567

有另一种简单的方法生成 arkose_token:chatgpt-​arkose-​token-​api

当天,似乎上面的方法又失效了,所以还是先用回下面的方法

arkose_token 突然不检测了,但是还是先传着,保持和官网一样

又开始检测了

chatgpt-​arkose-​token-​api 复活,主要是借鉴了 xyhelper/​xyhelper-​arkose

把 html 页面放在服务器上运行,不行,会弹验证码

但是单独起个服务跑 html 页面,又可以,莫名其妙

(我自己测试,如果服务器上开启了 IPv6,会拿不到 token,原因未知)

服务健康程度监控页面:Health Status

方法已失效,不折腾了

更新视频,通过抓 har 包获取合法 token(这个方法已经存在很久了,但是最近比较忙,也基本弃坑了没用 GPT,所以鸽到现在更新)

原来本来就有更加方便的方法,之前没有注意,现在更新,无需额外再跑一个 token 服务

GPT-​4 对 arkose_token 的校验在最近几天里每天都改变很多次,有时早上提交代码,下午就失效,或者晚上提交,第二天失效




通过不断的试错,把所有缺失的参数全部补上,但是最后还是 403 了

于是,打算从源头出发,学习一下 JS 的逆向(本人 JS 相对新手,但是曾经也写过)

接口:https://tcr9i.chat.openai.com/fc/gt2/public_key/35536E1E-65B4-4D96-9D97-6ADB7EFF8147

FormData:
1
2
3
4
5
6
7
8

bda: ct + iv + s 的 base64 编码
public_key: 35536E1E-65B4-4D96-9D97-6ADB7EFF8147
site: https://chat.openai.com
userbrowser: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/114.0.0.0 Safari/537.36
capi_version: 1.5.2
capi_mode: lightbox
style_theme: default
rnd: 随机数,小数点后有时 16 位,有时 17 位




其他参数都是写死,并且之前不传也可以,最近必须要传,并且还要传对,不然 403

重点就是在 bda 参数里,里面的内容是加密的

通过 F12,一步一步跟,发现了一些蛛丝马迹,最后调用的是这个方法来生成 bda 参数:ALFCCJS.encrypt(bx, bv + bw)




于是反推,如何生成 bx、bv 和 bw

bx 依赖 b5 和 bg

b5 是一个数组,里面的东西大部分都是写死的,除了一个时间戳




bg 写死的,本次测试不传也正常(未来可能有校验)

将 b5 数组转成字符串,就得到了 bx




bv 没什么好说的,就是当前浏览器 UA 写死




bw 不复杂,当前时间戳然后计算一下




最后执行加密方法,就能生成加密 bda

如果提示 ALFCCJS is not defined,执行下面 JS 将其初始化
1
2
3
4

const script = document.createElement("script");
script.type = "text/javascript";
script.src = "https://tcr9i.chat.openai.com/cdn/fc/js/6af2c0d87b9879cbf3365be1a208293f84d37b1e/standard/funcaptcha_api.js";
document.head.appendChild(script);







再设置到参数里调用接口就能拿到 arkose_token

GPT-​4 就 200 了




一开始看错了 bv 成 by,但是字幕烧录进去了,懒得改了,其实是 bx, bv, bw