就在最近几天,来自央视的一则报道让二手手机的隐私安全成为了许多朋友关注的焦点。一方面来说,明明已经删掉了手机里所有的个人信息、甚至使用了自带的“恢复出厂设置”功能,但敏感文件却依然可以通过技术手段进行恢复的事实,已经足够令人惊讶。而另一方面,居然还有商家专做这样的生意,更是意味着“从二手手机中提取敏感信息”可能已经形成了一个黑产链条。
显然对于许多普通消费者而言,这绝对不是什么好消息。但纵观相关报道,我们并未发现其中对于“为什么恢复出厂设置的手机依然能提取出信息”,以及“如何预防自己成为受害者”给出真正科学、详细的解答。而仅仅只强调威胁、却不进行解释、也不传达预防方式的这种报道,从某种程度上来说则可能会引起不必要的误解,甚至进一步加大用户的恐慌。
有鉴于此,我们三易生活决定为大家尽可能通俗、简单地解释一下,二手手机隐私泄露背后的那些事,并告知一些预防的办法。
为何手机资料删除还能恢复?因为闪存的特性使然
首先我们要解释一下,在这整件事中最核心的知识点,也就是“恢复出厂设置的二手手机,却导致了用户数据泄露”是怎么实现的。
众所周知,手机通常都有“恢复出厂设置”这一功能,恢复出厂设置后,手机里的所有用户资料都会被删除,用户自行安装的软件也会全部消失,并被替换为出厂时预装的软件。
很显然,“恢复出厂设置”本质上包含了两个步骤的操作,即首先删除用户资料和所有设置,然后安装预先设定好的出厂自带APP。在这其中“出问题”的,自然就在删除资料这一步上。
因为当你的手机运行完“恢复出厂设置”后,实际上其内部原有的那些资料,很可能根本就没有被删除。
为什么会这样?要弄明白这一点,我们需要深入到手机内部,看看手机的闪存芯片(也就是存储数据的芯片)到底是怎样在工作的。
用通俗的例子来表示的话,手机的闪存芯片就好像一个图书馆,其中负责存储信息的“晶格”结构,就好比图书馆里的书架,而用户存储的资料本身,自然也就相当于一本本的书籍。
那么大家不妨想象这样一个场景,当你一次性向图书馆归还大量书籍(向闪存写入大量内容)时,这些书籍应该如何被放进书架里呢?
是按照归还(写入)的顺序,依次放进空余的书架(写入空白的闪存空间)吗?实际上并非如此。因为闪存有一个很重要的特性,那就是其内部结构(也就是书架)会随着使用次数的增多而逐渐“磨损”。假如数据是按照“先来后到”的顺序,依次写入闪存中未使用的空间,那么就会带来一个问题,就是位于闪存头部的区块和位于尾部的区块写入次数会产生严重的差异。就好比在图书馆里位于门口的书架如果经常使用,而位于深处的书架平时几乎没什么机会被动用的话,最后的结果当然就是门口的书架会先坏掉。而体现在闪存上,也就是常用区块会先损坏,结果造成用户资料的损失。
正因如此,在现代的闪存芯片中,厂商都会设计一个名为“磨损平衡”的机制。就好像图书馆里的管理员一样,当用户写入数据时,数据现在并不会直接写进闪存,而是会先保留在内存里,然后由磨损平衡算法将大块的数据拆开,优先写入闪存中那些不常用的区块。就好比图书管理员将归还的图书先堆在一处,等有空了再优先将其放进那些比较新的书架里一样,这样一来所有的书架(闪存晶格)“磨损”程度就会趋于一致,便减缓了坏块的出现,延长了“图书馆”(闪存)的整体寿命。
但是这样一来,一个新的问题就诞生了。因为写入的数据在闪存上其实是被拆开、打乱,填充到了许许多多分散开来的位置上了,于是为了数据读取的时候能够准确找到它们,磨损平衡算法就会将每一份数据与它们在闪存上的实际位置进行一个统计,建立一个文件与实际存储位置之间的对应表格,这个表格就叫做FTL,也就是闪存转换层(Flash Translation Layer)。
明白了以上这些,我们就可以来谈谈当手机上的“恢复出厂设置”,或者是日常删除文件时,闪存里到底进行了怎样的操作了。很简单,当接到“删除文件”指令时,磨损平衡算法首先会在FTL里找到需要删除的文件位置,然后在FTL中将这些位置的“备注信息”擦除,也就是将它们重新标注为“空白区域”。这样就完成了“删除操作”。
相信大家都发现问题出在哪了,当我们进行删除操作的时候,实际上第一时间删除的只不过是FTL里的文件位置信息,而真正的文件本身此时依然存在于闪存上,只不过找不到它了。如此一来,只要使用能直接扫描整个闪存内容的数据恢复软件,自然也就可以读出那些被“删除”的文件。这就是智能手机“恢复出厂设置”后,其中用户信息却依然可以被读出的原因。
该如何避免隐私泄露?办法其实很简单
为什么闪存在删除文件的时候,实际上只会删掉FTL里的位置信息,而非直接删掉文件本身?这其实是为了延长闪存的寿命,并提升性能而做的一种特殊设计。正如我们在前文中所讲到的那样,闪存的写入本身存在“磨损平衡”机制一样,在闪存上删除文件时,磨损平衡算法同样也会发挥作用。它首先只会删掉FTL里的文件位置记录,然后等到设备闲置的时候,磨损平衡算法才会对闪存进行名为“垃圾回收”的自动处理,也就是真正删掉那些被标注为“已删除”的文件,并腾出对应的物理空间。
所以只要我们在手机上启动“垃圾回收”功能,那些存在于闪存里被标注为“已删除”的文件,就会真正地消失。而对于Android手机来说,启动闪存的“垃圾回收”并不需要什么复杂的操作,只需给手机插上充电线并保持开机状态,然后放一晚上不去使用,就能触发闪存自动进行“垃圾回收”,进而真正地消除那些“被删除”的文件。
换句话说,在你将手机“恢复出厂设置”后,还需要重启一次手机让其进入系统界面后,然后插上充电线让它充一晚上的电。此时只要手机厂商没有太“魔改”Android系统,那些被你删掉的文件,就应该已经不再存在于闪存里了。
有的朋友可能会担心,自己的手机要是不具备这种长时间充电自动触发闪存垃圾回收的功能,怎么办呢?其实也好办,因为当垃圾回收机制“删除”一个文件的时候,虽然文件本身并没有在第一时间消失,但它所在的闪存区域此时已经被标注为了“可使用”的空白区域。于是我们只要给手机一次性拷入大量、不涉及隐私内容的文件(比如说,你可以一次性往手机里传输几百GB的葫芦娃啥的),这些新写入的文件就会直接覆盖掉“被删除”文件在闪存上的物理位置。然后我们再将手机恢复出厂设置,此时闪存里留存下的文件信息,就已经是新写入的那些无关紧要的文件了。
当然,我们甚至可以将“恢复出厂设置——拷入无关的大容量新文件”的这个操作反复数次,就可以彻底确保手机中的那些重要数据被完完全全覆盖掉。试想一下,到时候不怀好意的二手手机店拿着刚收来的手机,找数据恢复试图获得用户隐私数据,结果恢复出来的是几百个GB的无用文件,这感受是不是意外地还有点爽?