我花了三个晚上,漏洞电书把一本1987年出版的漏洞电书《计算机漏洞分析》扫描成了电子书。不是漏洞电书因为怀旧,而是漏洞电书因为这本书里记录的漏洞,今天依然能打穿半个互联网。漏洞电书
书页泛黄,漏洞电书边角被虫蛀了几个小洞。漏洞电书第47页讲的漏洞电书是缓冲区溢出——那时候作者用整整六页手绘了内存堆栈图,箭头密密麻麻,漏洞电书像一张迷宫地图。漏洞电书他警告说:“程序员必须时刻警惕输入数据的漏洞电书长度。”三十七年过去了,漏洞电书去年爆发的漏洞电书Log4j漏洞,本质上还是漏洞电书同一类问题:没检查输入长度。只不过当年的漏洞电书C语言换成了Java,手写堆栈图换成了GitHub上的自动复现脚本。
把纸质书变成电子书的过程,本身就像一次漏洞扫描。扫描仪每翻一页,OCR软件就会把“0x7fff”识别成“0x7ffI”,把“strcpy”错认成“strcpy”。我得逐行校对。这让我想起更早的事——2003年,我拿到第一本盗版电子书,是一个黑客论坛上传的《Unix编程艺术》。那本书的第五章缺了十几页,论坛版主在下载区留言:“缺页内容涉及敏感技术,请自行搜索‘smashing the stack’。”我照做了,然后一头扎进安全研究的世界。
电子书有个纸质版永远比不上的好处:漏洞描述里的代码可以直接复制、编译、运行。我试过把书里的一个经典溢出案例跑起来,系统立刻崩溃,屏幕上滚过一串十六进制地址——和书里预测的完全一致。那一刻,隔着三十年时间和一整个技术栈,我和那位穿格子衬衫、用软盘交换代码的前辈产生了奇异的共鸣。
当然,电子书也有它的坑。你永远不知道哪个下载链接里藏了后门。我朋友老周,去年从某“技术论坛”下了一本《渗透测试实战》,解压后电脑变成了挖矿肉鸡。他气得在朋友圈骂了三天,最后自己写了个脚本,把那个木马样本反编译出来,当教材用了。这事挺黑色幽默——想学攻击技术的人,先被攻击了。
现在我的硬盘里躺着两千多本安全类电子书。从最早的扫描版PDF到现在的EPUB,从几百KB的纯文本到带交互式代码块的Jupyter Notebook。技术变了,漏洞的本质没变。每一本书都在讲同一件事:人写的代码总有错,错就是漏洞,漏洞就是门。
有时候我在地铁上翻这些书,屏幕的光映在脸上,周围人以为我在看小说。他们不知道,我正盯着一个1987年的溢出点,琢磨怎么把它移植到2024年的物联网设备上——只为证明一件事:纸会烂,服务器会关停,但那些没被修补的思维漏洞,永远会在某个角落等着被重新触发。