安全观察我的个人身份信息 (PII) 在哪里?

Frank Simorjay

我们都认为 PII(个人身份信息)是需要保护的最重要的信息。但在您能够保护 PII 之前,您必须全面了解在 PC 上收集到的 PII。计算机上的所有信息都是敏感信息说起来很简单,但所有信息究竟是指哪些信息呢?

为了搞清楚这个问题,我们先稍微仔细地分析该问题,列出可能是敏感信息的数据类型,并找出这些数据最终会存储在计算机上的哪个位置。首先,信息的敏感程度因人而异。例如,某些人会为自己的名字出现在搜索结果中而感到恐惧。当然,除非您隐姓埋名,否则现在某人将您的名字以某种形式张贴在 Internet 上说不定会是很好的机会哦。为了进行调查,您会使用常用的搜索引擎在线搜索您的名字。请记住:您的名字越常见,就越难找到专门针对您的实例。这也许是件好事。

如果要在 Internet 上查找自己的信息,您可能会从一些流行的社交网站查起,例如 LinkedIn、Facebook 和 YouTube。Internet 保存和传播个人信息的能力会令您惊讶,过去这些信息通常需要费力搜索才能发现。

了解需要保护哪些信息是一门日益精深的科学。为了有所帮助,我想查看计算机上是否包含某些您没有意识到且可能希望加以保护的潜在个人信息一定会非常有趣。虽然您可能会说所有可用于窃取身份的个人信息都是敏感信息,但实际上信息确实可分为两种级别。一种是可供阅读的信息,另一种是更为隐密且一般认为与个人身份关系更密切的信息。

可供阅读的信息通常不会视作 PII。此类信息包括您的姓名,还可能包括您的电话号码、街道地址、电子邮件地址、性别、有时还包括您的工作地点以及一些教育信息。这些项目可在 Internet 上和公共目录(如电话本)中找到。泄漏此类信息(例如偶然允许垃圾邮件发送者获得您的电子邮件地址)可能会比较讨厌,但还不致于遭到身份盗用。

敏感信息包含更为隐私的数据,通过这些数据能够联系到您的身份。不希望公开的数据包括您的社会保障号(或其他由政府提供的唯一标识符)、银行帐户号码、信用卡号码(特别是有过期日期和持卡人 ID 的号码)、您的驾照号码和指纹(或其它与生物特征相关的信息)。如果这些项目落入别有用心的人之手,那可能会造成非常严重的后果。控制此类信息在 Internet 上和 PC 中记录和存储的位置及方式非常重要。为此,我现在将讨论两种简单的方法,通过它们可以找出可能存储在您系统硬盘中的所有 PII。

找出计算机中的 PII 数据

PII 信息散布在各个角落。事实上,只要检查一下垃圾,您可能非常容易就能找到一些 PII。保护这些信息需要认真和细心。我建议每个人都投资购买一台好的碎纸机,并把任何包含个人信息的材料都切碎。

但对于潜藏在您 PC 上 的 PII 该怎样做呢?找出这些数据与安全存储它们同样具有挑战性。Windows Vista®,以及其它几种桌面搜索工具可以帮助您找出系统中的此类信息。但您需要清楚要查找哪些信息。

为说明此问题,我将使用几种简单的工具来快速找出那些处于危险当中的信息。我将通过 Windows PowerShell® 使用脚本。Windows PowerShell 可以完成众多工作,字符串匹配就是其中非常出色的一项。我将集中讨论其匹配正则表达式的能力,这是我们所关注的重点。Windows PowerShell(可从 microsoft.com/powershell 下载)是一种功能强大的工具,它已迅速成长为管理任务的标准。

另外,我将使用 findstr.exe 管理误报,即能够忽略那些可能包含看起来很有意思(由于二进制文件中数据字符串的随机性)但是实际上毫无用处的字符串的文件。换句话说,本次练习中将忽略非文本文件。

我选择了两种合适的 PII 数据类型:社会保障号和信用卡信息。如果这些数据以明文形式存储在硬盘驱动器上,那很容易即可找出它们。这两种数据类型的结构和模式非常独特,足以使简单的脚本都能够找到它们。然而,这些数据也非常敏感,以至于我忍不住想问为什么需要将它存储在 PC 上。如果您确实需要存储此类信息,那您应该确保它们得到保护。随后我将介绍保护 PII 的方法。我在本文中的讨论非常有限 — 尚有其他很多重要 PII 数据类型未包含于此,如用户名和密码。

搜索社会保障号

以下是一个简单的字符串示例,它将在文件中查找包含标准美国社会保障号(结构为 XXX XX XXXX 或 XXX-XX-XXXX)的所有信息。使用 Windows PowerShell,您只需输入以下几行:

Get-ChildItem  -rec -exclude *.exe,*.dll |
select-string " [0-9]{3}[-| ][0-9]{2}[-| ]
[0-9]{4}" 

也可以使用 findstr.exe,并通过使用以下代码确保搜索时不会读取二进制文件:

Get-ChildItem  -rec | ?{ findstr.exe 
/mprc:. $_.FullName } | select-string 
" [0-9]{3}[-| ][0-9]{2}[-| ][0-9]{4}"

在此示例中,Get-ChildItem –rec 将从执行该命令的目录开始递归搜索文件。Findstr.exe 在文件中搜索字符串,而 Select-string 是 Windows PowerShell 的字符串搜索函数。(Findstr.exe 也提供此处未讨论的类似功能。)此外,请注意正则表达式中的前置空格是必需的。它可以通过消除不必要的信息(如类似 HKLM\SOFTWARE\tool\XXX-XX-XXXX 的注册表字符串)来帮助减少误报。

该示例运行过程中,搜索模式将返回我放在子目录中的测试示例文件,同时它还找出了 XML 文件中的示例,这些示例指出了信用卡和社会保障号文件模式(请参见图 1)。

Figure 1 搜索号码模式得到的结果

Figure 1** 搜索号码模式得到的结果 **(单击该图像获得较大视图)

在第一个示例中,我使用排除功能丢弃了所有 .exe 和 .dll 文件,因为它们可能会产生不必要的干扰结果。您可能还会发现其他一些导致误报的文件类型。如果那样的话,您可以使用排除对搜索过程进行精细调整。

如果仅搜索具体的社会保障号,您可以使用以下代码(用您的社会保障号替换“123 45 6789”):

Get-ChildItem  -rec | ?{ findstr.exe 
/mprc:. $_.FullName } | select-string 
"123 45 6789","123-45-6789"

此次搜索的结果如图 2 所示。

Figure 2 搜索具体号码

Figure 2** 搜索具体号码 **(单击该图像获得较大视图)

搜索信用卡信息

信用卡信息会麻烦一点,因为它的格式多变。而且我希望减少误报(即那些可能随机得到的类似信用卡号的结果)。尽管如此,此搜索可能还是会找出一些仅类似信用卡号码的随机序列。

在构建这些字符串时,我使用了 Michael Gilleland 在其论文“信用卡号码剖析”中提供的信息作为参考,(请参见merriampark.com/anatomycc.htm)。例如,我的搜索字符串指定第一个号码必须是 4、5 或 6,因为这些数字通常定义为信用卡行业的主要标识符。

在此我已构造出用于搜索 Discover、MasterCard 和 Visa 卡的简单字符串。在 Windows PowerShell 中,搜索字符串类似如下所示:

Get-CchildItem  -rec | ?{ findstr.exe 
/mprc:. $_.FullName } | select-string
 "[456][0-9]{15}","[456][0-9]{3}[-| ][0-9]{4}
[-| ][0-9]{4}[-| ][0-9]{4}"

图 3 中所示的例子中,我使用 exclude 函数来消除 .rtf、.rbl、和 .h 文件的干扰。另外,示例代码查找的是不包含空格或短划线的信用卡字符串。但这样有可能得到过多的结果。因此可以使用同一函数的以下命令,但此命令不查找无空格或无短划线的卡号:

Figure 3 使用 exclude 函数消除干扰结果

Figure 3** 使用 exclude 函数消除干扰结果 **(单击该图像获得较大视图)

Get-ChildItem  -rec | ?{ findstr.exe 
/mprc:. $_.FullName } | select-string
"[456][0-9]{3}[-| ][0-9]{4}[-| ][0-9]{4}
[-| ][0-9]{4}"

由于美国运通卡与普通信用卡有很大差异,所以我修改了对应的搜索字符串。在 Windows PowerShell 中,搜索字符串类似如下所示:

Get-ChildItem -rec | ?{ findstr.exe 
/mprc:. $_.FullName } | select-string
"3[47][0-9]{13}","3[47][0-9]{2}[-| ][0-9]{6}
[-| ][0-9]{5}"

使用这种方式也可能得到过多的结果数据。因此可以使用同一函数的以下命令,但此命令不查找无空格或无短划线的卡号:

Get-childitem -rec | ?{ findstr.exe 
/mprc:. $_.FullName } | select-string
"3[47][0-9]{2}[-| ][0-9]{6}[-| ][0-9]{5}"

当撰写本专栏时,我在自己的系统上运行了这些搜索,我吃惊地发现有几处社会保障号的实例保存在它不应保存的地方。事实证明,我曾记录过这些信息,但后来完全忘记了这件事。这使我重新考虑应该记录哪些内容,不应该记录哪些内容!

如果您确实需要以安全的方式存储这些信息,那请您尝试使用 Password Safe 这类工具(可从 passwordsafe.sourceforge.net 下载)。或使用 BitLockerTM Drive Encryption 这类工具加密硬盘。此外,面向移动 PC 的数据加密工具包提供了对移动 PC 上的数据进行保护的可靠指导。这些解决方案至少可以使那些想在您 PC 上查找个人信息的人较难得逞。

结束语

查找 PII 信息非常简单。保护此类信息是比较棘手的难题。但请时刻谨记:恶意软件或盗取您系统访问权的恶意用户如果能访问您的系统,他们也可以使用相似的发现技术非常容易地找到其中存储的个人信息。无论何时何地输入 PII 信息都需要千万小心,如果不得不存储这些信息,请确保对其加密。

非常感谢 Matt Hainje 帮助我排除 Windows PowerShell 脚本故障。

Frank Simorjay 是 Microsoft 解决方案加速器 — 安全性和法规遵从性小组的技术项目经理。他为 Microsoft 客户设计安全解决方案、在“安全世界博览会”(他是该活动的创始人)等活动中发表演讲、讲解安全课程和培训,并发表了多篇有关安全的文章和书籍。他的最新作品是“恶意软件删除初学者工具包”。

© 2008 Microsoft Corporation 与 CMP Media, LLC.保留所有权利;不得对全文或部分内容进行复制.