上传文件不安全

去年冬天,上传我一个做HR的文件朋友差点把公司卖了。她收到一封简历邮件,不安附件叫“王磊_运营总监_8年经验.pdf”。上传点开之后什么都没发生,文件PDF正常打开,不安内容也正常。上传三天后,文件公司财务系统被拖库,不安客户合同、上传银行账号、文件员工身份证号全在暗网上挂着。不安事后查出来,上传那个PDF里嵌了一段恶意脚本,文件利用阅读器漏洞在她电脑上装了远控木马。不安她到现在都想不通——一个PDF而已,怎么就能把公司掏空?

问题恰恰出在这句“而已”上。我们太习惯把文件当成“内容”了,觉得打开一个文档就是读里面的字。但文件不是纸,它是一个可执行的数据结构。你看到的图标、文件名、甚至文件大小,全都可以伪造。一个.exe可执行文件,改个后缀叫“照片.jpg”,Windows默认不显示扩展名,你双击它,系统照样跑代码。这事不新鲜,但每年还是有人中招。

更隐蔽的是那些看起来完全正常的文件。Office文档支持宏,这个功能本意是让用户自动化处理表格,但宏可以调用系统命令、下载远程载荷、加密硬盘。2017年爆发的“坏兔子”勒索病毒,就是通过一个伪装成“安全更新”的Word文档传播的。你打开文档,它弹窗说“请启用宏以查看内容”,你点了启用,硬盘就开始被加密。整个过程不需要你输入任何密码,不需要你确认任何操作。

PDF也没安全到哪去。PDF标准允许嵌入JavaScript,允许启动外部程序,允许调用系统API。2008年那会儿有个著名的“PDF炸弹”,一个几十KB的PDF文件,打开后内存暴涨到几个GB,直接把机器卡死。这还只是拒绝服务,要是攻击者想拿权限,PDF照样能做到。Adobe Reader历史上爆过无数远程代码执行漏洞,每一个都能让一个“无害”的PDF变成入侵通道。

图片文件同样不干净。JPEG、PNG这些格式的解析器出过大量漏洞。你从微信群里下载一张表情包,图片本身可能没问题,但它的元数据里可以藏一段Base64编码的恶意代码。有些攻击甚至不需要你打开文件——只要系统生成了缩略图,解析过程就可能触发漏洞。Windows的缩略图缓存、macOS的Quick Look预览,都是攻击面。

那怎么办?不传文件了?不现实。工作要传合同,生活要传照片,代码要传仓库。关键不是拒绝文件,而是改变“文件=内容”这个认知。文件是程序,是数据包,是潜在的攻击载荷。你收到一个文件,本质上和收到一个陌生人递过来的U盘没区别。

具体做法可以很土,但有效。第一,关掉Office宏,默认禁用,谁让你开都不开。第二,PDF用浏览器打开,别用Adobe Reader,浏览器沙箱更严。第三,重要文件传之前先压缩加密,对方解压需要密码,密码通过另一个渠道发——微信传文件,短信发密码。第四,虚拟机或者沙箱里打开不明文件,Windows Sandbox、macOS的隔离环境都能用。第五,也是最重要的,别双击。先看扩展名,再看来源,再看大小。一个“简历.pdf”如果是2MB,正常;如果是20MB,里面可能塞了东西。

我自己的习惯更极端。所有邮件附件先下载到虚拟机,用file命令看真实类型,用strings扫一遍可打印字符,确认没有可疑URL和IP再拿出来。麻烦吗?麻烦。但比公司被拖库强。文件不会因为你信任它就变安全,它只认代码逻辑。你双击的那一刻,就是把执行权交出去了。

说到底,上传文件不安全,不是因为文件本身坏,而是因为我们太信任“打开”这个动作。你以为你在看内容,系统以为你在跑程序。这两件事之间的鸿沟,就是所有文件攻击的入口。