Agili 的 Hacker Podcast

Hacker News 每日播报 2025-11-15


Listen Later

Hacker News 每日播报,为您带来 AdGuard 揭露的神秘施压事件、Mozilla 的 SSL 配置神器、AMD 对抗 CUDA 的新武器、绕过 ASLR 的精妙攻击、TCP 协议的深度剖析,以及与网络爬虫斗智斗勇的趣闻等一系列精彩内容。

AdGuard 调查:针对 Archive.today 的可疑施压事件

AdGuard 团队最近揭露了一场针对知名网页存档服务 Archive.today 的可疑施压活动。这起事件如同一部科技悬疑剧,充满了匿名威胁与精心策划的虚假指控。

事件始末

一个自称“Web Abuse Association Defense (WAAD)”的法国组织,以 Archive.today 托管非法内容为由,要求 AdGuard DNS 封锁其域名。起初是请求,但很快升级为法律威胁,并援引了法国的《数字经济信任法》(LCEN)。

AdGuard 作为 DNS 服务商,对此类内容审查要求感到不寻 ઉ常,于是展开了深入调查。他们发现:

  1. 事实不符: Archive.today 确认 WAAD 提及的非法内容早已被删除,且从未收到过相关通知。
  2. 组织可疑: WAAD 是一个新近成立的组织,其网站信息极少,注册地址可疑,似乎是为隐藏幕后身份而设立的空壳。
  3. 证据伪造: WAAD 提供的所谓“法警报告”大多创建于近期,与他们声称的投诉时间线严重不符,甚至部分报告与另一起冒充律师的投诉事件有关联。
  4. AdGuard 最终得出结论,这是一场“极其可疑”的恶意施压活动,并计划向法国警方报案。整起事件发生在 FBI 正在调查 Archive.today 的敏感时期,不禁让人对两者之间的联系产生联想。

    深层思考

    这起事件引发了关于网络审查和言论自由的广泛讨论。将儿童性虐待材料(CSAM)等严重指控武器化,用以打击目标服务,是一种极其恶劣的策略。攻击者有时会自己上传非法内容到目标网站,然后再进行举报,以此胁迫基础设施服务商。这种行为无疑触及了道德底线。

    AdGuard 在面对压力时没有盲目顺从,而是选择深入调查并公开真相,其尽职尽责的态度赢得了广泛赞誉。这也暴露出现有法律框架(如 LCEN 和 DMCA)的缺陷,它们有时不仅无法解决根本问题,反而可能被滥用,成为打压异己或保护自身利益的工具。

    Mozilla SSL 配置生成器:一键生成安全配置

    对于开发者而言,手动配置服务器的 SSL/TLS 既复杂又容易出错。Mozilla 推出的 SSL 配置生成器 (SSL Configuration Generator) 正是为了解决这一痛点,它能帮助用户为各种服务器软件一键生成安全、可靠的配置。

    工具亮点
    • 广泛的软件支持: 覆盖 Apache、Nginx、HAProxy 等主流 Web 服务器,甚至还支持数据库和邮件服务器。
    • 多级安全策略: 提供“现代 (Modern)”、“中等 (Intermediate)”和“老旧 (Old)”三种配置级别,让用户可以在最高安全性与最广兼容性之间灵活选择。
    • 环境定制: 用户可以输入服务器和 OpenSSL 的具体版本,生成器会据此进行优化,确保配置的兼容性。
    • 便利与思考

      这款工具极大地降低了部署 HTTPS 的门槛,推广了安全最佳实践。对于不熟悉底层加密细节的开发者来说,它避免了因配置失误导致的安全漏洞,堪称神器。

      然而,过度依赖此类工具也可能带来一些问题。开发者可能会因此忽视对底层原理的学习,当遇到复杂问题时,排查起来会更加困难。在追求自动化的同时,如何平衡便利性与对底层技术的深刻理解,是一个值得思考的问题。

      HipKittens:为 AMD GPU 打造的“速度与激情”内核

      来自斯坦福 Hazy Research 的新项目 HipKittens,正试图打破 NVIDIA 在 AI 计算领域的“CUDA 护城河”。这是一套专为 AMD GPU 设计的高性能 C++ 编程原语,旨在充分释放 AMD 硬件的强大潜力。

      挑战 CUDA 霸权

      尽管 AMD 最新的 GPU 在硬件参数上已能与 NVIDIA 的顶级产品相媲美,但其软件生态的滞后严重限制了性能发挥。现有的 AMD 软件栈在运行 AI 核心算法时,性能远未达到理想状态,顶尖的 AI 内核往往需要专家手写汇编代码进行优化,开发难度极大。

      HipKittens 通过借鉴其在 NVIDIA GPU 上的成功经验(ThunderKittens 项目),为 AMD GPU 量身定制了一套“有主见的编程原语”。它通过抽象的“瓦片 (Tile)”概念,简化了高性能内核的开发,同时针对 AMD 硬件的特性进行了深度优化。

      实验结果令人振奋:仅用约 500 行代码,HipKittens 实现的注意力内核在性能上就超越了所有基线,包括那些手写汇编优化的版本。这预示着,开发者或许不再需要为了追求极致性能而深入汇编语言的泥潭。

      曙光与挑战

      AMD 在 AI 领域的追赶步伐正在加快。许多迹象表明,AMD 的软件生态正在好转,大部分主流应用已能在其硬件上顺利运行。随着 AI 算法(如 Transformer)的逐渐收敛,竞争者只需针对性地优化少数关键算法,就有可能撼动 NVIDIA 的市场地位。

      然而,“CUDA 护城河”依然深厚。NVIDIA 数十年积累的庞大软件库和成熟的生态系统,是其难以被轻易取代的关键。同时,也有声音指出 AMD 内部可能存在软件投入不足、薪酬体系缺乏竞争力等问题,这些都可能成为其追赶路上的障碍。无论如何,一个强大的非 NVIDIA 选项对整个行业的健康发展至关重要。

      适用于 Linux 的非官方 Microsoft Teams 客户端

      在微软对 Linux 平台官方支持不佳的背景下,一个名为 teams-for-linux 的非官方开源客户端,为 Linux 用户提供了宝贵的替代方案。

      社区的解决方案

      这个项目基于 Electron,本质上是 Teams 网页版的封装,但在此基础上增加了许多桌面应用特有的功能和改进,例如:

      • 优化了在 Wayland 环境下的屏幕共享功能。
      • 改进了缓存管理,以解决频繁掉线的问题。
      • 增加了画中画 (PiP) 和视频控制等社区贡献的功能。
      • 官方客户端的集体“怨念”

        这款非官方客户端的流行,恰恰反衬出用户对官方 Teams 客户端的普遍不满。无论是哪个平台,官方 Teams 都因其性能低下、资源消耗巨大、用户体验糟糕和层出不穷的 Bug 而备受诟病。许多人表示,切换聊天迟钝、通知延迟、屏幕共享卡顿等问题已是家常便饭。

        有趣的是,一个反复出现的观点是,Teams 的网页版(或作为 PWA 应用)在 Linux 上的体验反而远胜于其所谓的“原生”应用。它运行流畅,核心功能稳定,尤其是在 Wayland 环境下表现良好。这使得封装网页版的非官方客户端,在弥补了 PWA 的一些不足(如系统托盘通知)后,成为了许多用户的首选。

        无需信息泄露,利用 ROP 链绕过 ASLR 实现远程代码执行

        modzero 的一篇技术文章详细展示了如何在没有地址信息泄露的情况下,绕过地址空间布局随机化 (ASLR) 保护,并在一台现代物联网摄像头上实现远程代码执行 (RCE)。

        精妙的攻击链

        研究人员在一款网络摄像头中发现了一个经典的栈缓冲区溢出漏洞。尽管设备启用了 NX(数据执行保护)和 ASLR,但存在两个关键弱点:

        1. 负责处理网络请求的主程序 fcgi_server 没有编译为位置独立可执行文件 (PIE),意味着其代码段和数据段的地址是固定的。
        2. 程序缺少栈金丝雀 (stack canaries) 保护,使得覆盖返回地址变得轻而易举。
        3. 攻击的核心挑战在于,程序依赖的 libc 库受 ASLR 保护,其地址是随机的。研究人员利用了程序的全局偏移表 (GOT) 和程序链接表 (PLT),构建了一条精巧的返回导向编程 (ROP) 链,实现了“一击必中”的攻击:

          1. 通过 ROP 链读取某个已解析函数(如 isalnum)在 GOT 表中存储的真实 libc 地址。
          2. 计算出该函数与目标函数 system 在 libc 中的固定偏移量。
          3. 将两者相加,得到 system 函数的真实地址。
          4. 再次利用 ROP 链,将计算出的 system 地址写回 GOT 表,覆盖掉原来的 isalnum 地址。
          5. 最后,调用 isalnum 的 PLT 入口,执行流便会跳转到 system 函数,从而实现任意命令执行。
          6. 技术定义的探讨

            这篇报告引发了关于“绕过 ASLR”定义的讨论。一种观点认为,由于主程序本身未受 ASLR 保护,其 GOT 表地址是静态的,这更像是利用了 ASLR 保护的缺失,而非真正的“绕过”。然而,另一种观点则认为,攻击者在不知道 libc 基址的情况下,成功定位并调用了其中的函数,这确实解决了地址随机化带来的障碍,可以被视为对 ASLR 的一种有效规避。

            经典游戏《无人永生》25 周年,依旧无法合法购买

            备受赞誉的经典间谍射击游戏《无人永生》(No One Lives Forever) 迎来了其 25 周年纪念日,但一个可悲的现实是,玩家至今仍无法通过任何合法渠道购买到这款游戏。

            版权迷宫中的“弃用软件”

            问题的根源在于其复杂的版权归属。据信,该游戏的 IP 权利被分割在华纳兄弟、动视和 20 世纪福克斯(现属迪士尼)三家巨头之间。然而,这些公司自己也无法确定谁究竟拥有什么权利,甚至找不到当年的合同。

            当有公司(如 Nightdive Studios)试图重制并重新发行这款游戏时,这三家公司都采取了“宁可错杀,不可放过”的态度,声称自己“可能拥有权利并可能因此提起诉讼”,但又无法提供证据。这种法律上的不确定性足以吓退任何潜在的发行商。

            因此,这款经典之作陷入了法律的无人区,成为了事实上的“弃用软件”(abandonware)。在无法合法购买的情况下,通过非官方渠道下载成为了玩家体验这款游戏的唯一途径。

            对版权制度的反思

            《无人永生》的困境凸显了现有版权制度的荒谬之处,尤其是在数字时代。过长的版权保护期限、复杂的企业兼并以及公司内部的官僚主义,共同导致了珍贵的文化遗产被困在法律迷宫中。

            这引发了对版权改革的强烈呼吁。许多人认为,应引入“使用或失去”(use it or lose it) 的原则,如果版权所有者在一定期限内不积极利用其 IP,则应将其释放到公共领域。此外,建立更清晰的版权登记和续期制度,也能迫使权利人认真维护其 IP,避免类似僵局的发生。当版权制度从鼓励创作的工具,沦为阻碍文化传播和保存的枷锁时,它就违背了其设立的初衷。

            TCP:互联网的幕后功臣

            我们每天使用的互联网,其稳定流畅的体验在很大程度上要归功于一个默默无闻的英雄——传输控制协议 (TCP)。一篇深入浅出的文章带领我们重温了 TCP 的精妙设计,以及它如何在一个不可靠的网络之上构建起可靠的数据传输。

            可靠性的基石

            TCP 的核心任务是在网络边缘(即用户的设备上)实现可靠性,从而让中间的网络设备(如路由器)可以保持简单和高效。它通过序列号、确认号、校验和以及重传机制,解决了数据包丢失、乱序和损坏等问题。

            文章重点介绍了 TCP 的两大核心机制:

            • 流控制 (Flow Control): 通过“滑动窗口”机制,接收方可以告知发送方自己还能接收多少数据,防止被过快的数据流淹没。
            • 拥塞控制 (Congestion Control): 这是一个更宏观的机制,通过动态调整发送速率,避免整个网络陷入拥塞崩溃,维持了互联网的整体健康。
            • 优雅设计与现代挑战

              TCP 的设计被认为是网络工程的典范。如果从“在不可靠的数据报之上构建可靠数据流”这一基本问题出发,最终的解决方案很可能与 TCP 非常相似。其将拥塞控制算法置于终端设备而非网络协议本身的设计,赋予了其极大的灵活性,使其能够随着网络环境的发展而不断进化。

              然而,TCP 也并非完美。其“队头阻塞”(head-of-line blocking) 问题在处理网页等多流应用时效率低下。此外,它对移动网络中 IP 地址变化的支持不佳,也缺乏原生的安全机制。

              这些局限性催生了新的协议,如 SCTP 和 QUIC。特别是基于 UDP 的 QUIC,它在用户空间实现了多路复用、更快的连接建立和灵活的拥塞控制,被视为 TCP 在现代网络环境下的有力继承者。

              设计一门编程语言的思考

              创造一门新的编程语言,是许多开发者的梦想。这个话题背后,既有对技术极致的追求,也有对现实挑战的深刻认知。

              动机:学习、乐趣与解决问题

              设计语言的动机多种多样。对许多人来说,这是深入理解编译器、解析器和编程语言理论的最佳实践。从零开始构建一个解释器或编译器,能带来无与伦比的学习体验和成就感。

              另一些人则是为了解决特定领域的问题。例如,为了在特定环境中安全地执行动态代码,或者为某种新的计算范式设计更贴合的表达方式。当然,“纯粹为了好玩”也是一个完全正当且重要的理由,它驱动了许多伟大的开源项目。

              现实:巨大的工程与生态挑战

              将一个语言项目从玩具变为实用的工具,是一项巨大的工程。现代编程语言的竞争异常激烈,一门新语言不仅需要优秀的语法和语义,还需要一个完整的生态系统,包括强大的编译器、标准库、包管理器、IDE 支持,甚至是 AI 集成。

              为语言项目筹集资金也极为困难。成功的语言往往需要大型科技公司的支持,才能持续发展并建立起用户社区。否则,许多新语言最终会陷入“诡异谷”——有一定用户,但不足以形成强大的生态,反而增加了技术碎片化。

              Löb and Möb:Haskell 中的奇异循环

              一篇 2013 年的经典文章再次引发关注,它探讨了 Haskell 中两个强大而神秘的函数 loeb 和 moeb,它们能够优雅地实现“奇异循环”,处理自引用和相互依赖的计算。

              惰性求值的魔力

              loeb 函数的实现异常简洁,但其工作原理却十分深奥。它能计算一个结果,而这个结果的定义又依赖于它自身。这听起来像是一个悖论,但在 Haskell 的惰性求值 (laziness) 机制下,这种自引用是完全可行的。

              文章通过一个精彩的例子——构建电子表格——展示了 loeb 的威力。在电子表格中,每个单元格的值都可以依赖于其他单元格。例如,总价等于价格乘以税率,而总计又是所有总价的和。这些复杂的循环依赖关系,可以通过 loeb 一次性解决,得出所有单元格的正确值。这本质上是固定点组合子 (fixed-point combinator) 的一种推广应用。

              文章还介绍了 moeb 函数,它是对 loeb 的进一步泛化,甚至可以看作是大家熟悉的 fix 函数的泛化。

              理论与实践的交汇

              这个话题展示了函数式编程在处理复杂依赖关系时的独特优势。在实际应用中,loeb 这样的工具可以用于解决编译器中标签地址的解析等问题。然而,如何确保这种“奇异循环”能够终止,避免无限循环,是将其应用于实际工程时必须仔细考虑的关键问题。

              与网络爬虫斗智斗勇的艺术

              面对日益猖獗的网络爬虫和恶意机器人,一些网站管理员选择不再被动防御,而是主动“反击”,用创造性的方式与这些不速之客斗智斗勇。

              投喂“精神食粮”

              一位博客作者分享了他的反击策略。他发现,无论是用于训练大语言模型的 AI 爬虫,还是扫描漏洞的恶意机器人,都对他的小型网站造成了不小的负担。于是,他决定给这些贪婪的爬虫提供源源不断的“垃圾数据”。

              他的方法包括:

              1. 生成假内容: 使用马尔可夫链,根据真实 PHP 文件生成大量看似合理但毫无用处的假代码,以此消耗机器人的时间和资源。
              2. 构建链接陷阱: 创建一个高效的静态服务器,将经典小说《科学怪人》加载到内存中。每次请求时,随机返回一段文本,并附带几个指向其他假文章的链接,让爬虫陷入深度优先搜索的“死循环”中。
              3. 为了避免误伤搜索引擎等“友好”爬虫,他为所有陷阱页面都添加了 noindex, nofollow 标记。

                防御策略大观

                这篇有趣的博文引发了关于如何对付机器人的热烈讨论,各种策略层出不穷:

                • 检查请求头: 许多伪装成浏览器的机器人会缺少 Accept-Language 等常见的 HTTP 请求头,通过 Nginx 等工具屏蔽这类请求,能有效拦截大量机器人流量。
                • 焦油坑 (Tarpit): 这是一种经典的策略,服务器会故意非常缓慢地向恶意连接发送无尽的数据,以拖延其资源,使其无法攻击其他目标。
                • 直接拒绝: 对于明确的恶意请求(如扫描 .php、.env 文件),最简单有效的方法是直接返回 403 Forbidden 或 418 I'm a teapot 等状态码。Nginx 的 return 444 则更为极致,它会直接关闭连接而不发送任何响应,最大限度地节省服务器资源。
                • 这场人与机器人的攻防战,也反映出关于网络抓取伦理的持续辩论。尊重 robots.txt、不给服务器造成负担的“好公民”爬虫,与那些消耗资源、寻找漏洞甚至窃取内容用于商业目的的“恶意”爬虫之间,界限正变得越来越清晰。

                  相关链接:

                  • Our investigation into the suspicious pressure on Archive.today
                  • SSL Configuration Generator
                  • HipKittens: Fast and furious AMD kernels
                  • Unofficial Microsoft Teams client for Linux
                  • No Leak, No Problem – Bypassing ASLR with a ROP Chain to Gain RCE
                  • 'No One Lives Forever' turns 25 and you still can't buy it legitimately
                  • TCP, the workhorse of the internet
                  • Designing a Language (2017)
                  • Löb and Möb: Loops in Haskell (2013)
                  • Messing with scraper bots
                  ...more
                  View all episodesView all episodes
                  Download on the App Store

                  Agili 的 Hacker PodcastBy Agili 的 Hacker Podcast