セキュリティ ウォッチPII はどこに

Frank Simorjay

保護すべき最も重要な情報として、PII (個人情報) が常に話題になっています。ただし、PII を保護するには、どのような PII が PC 上に収集されているかをすべて把握しておく必要があります。コンピュータ上のデータはすべて機密情報であると言ってしまえば簡単ですが、その "すべて" とは具体的に何を指しているのでしょうか。

これを明らかにするために、この問題についてもう少し詳しく考えてみましょう。機密情報であると思われるデータをいくつかのカテゴリに分類し、それらのデータがコンピュータ上のどこに保存されているのかを解明します。まず、多くの場合、情報の機密性は主観的に判断されます。たとえば、検索結果に自分の名前が表示されたときに脅威を感じる人もいれば、そうでない人もいます。もちろん、どこかに身を隠していない限り、これまでになんらかの形で、だれかが皆さんの名前をインターネット上に投稿した可能性は十分にあります。よく使用している検索エンジンで自分の名前を検索してみてください。一般的な名前であれば、同じ名前が見つかってもそれが自分のことを指している可能性は低くなります。安心した方もいらっしゃるでしょう。

インターネット上で自分に関する情報を探す場合、ミクシィ、GREE、YouTube などの有名なソーシャル ネットワーク サイトも確認してみるとよいでしょう。以前は、個人情報を入手するには時間をかけて調査を行う必要がありましたが、現在はインターネット上に個人情報が保存され、世界中に広まっているという驚くべき状況になっています。

現在は、以前よりも技術的な観点から、保護すべき情報を知る必要があります。そのためには、保護する必要があっても自分ではその存在に気付いていない個人情報がコンピュータに保存されているかどうかがわかれば便利ではないでしょうか。身分を特定できるすべての個人情報は機密情報であると思うかもしれませんが、実際には情報は 2 つの詳細レベルに分けることができます。情報には、容易に入手できる情報と、一般に人物を特定する上で重要であると考えられている、より個人的な情報があります。

通常、容易に入手できる情報は PII とは見なされません。この情報には、名前、電話番号、住所、電子メール アドレス、性別などがあり、多くの場合、勤務先や学歴なども含まれます。これらの情報は、インターネット上や電話帳などの公的な名簿から容易に入手できます。たとえば、スパムの送信者が皆さんの電子メール アドレスを偶然入手し、この情報を公開しても、面倒なことにはなりますが、これだけでは個人情報の盗難にはつながりません。

機密情報とは、人物を特定できる、より個人的なデータから構成されます。公開することが望ましくないデータには、社会保障番号 (または行政機関が発行するその他の類似した一意識別情報)、銀行の口座番号、クレジット カード番号 (特に、有効期限とカードのメンバ ID が記載されているもの)、運転免許証番号、指紋 (またはその他のバイオメトリクス関連の情報) などがあります。これらの情報が悪意のある人物の手に渡ると、悪用されて大きな損害を受ける可能性があります。したがって、これらの情報をインターネット上や PC 上のどこに、どのようにして記録および保存するかを管理することが重要です。今から紹介するいくつかの簡単な方法を使用し、システムのハード ドライブに保存されているすべての PII を検索することによって、この目的を達成することができます。

コンピュータ上の PII データを検索する

PII は、あらゆる場所に散らばっています。実際に、ごみ箱の中を調べてみれば、きわめて容易にいくつかの PII を見つけることができるでしょう。この情報を保護するには、努力と少しの注意が必要です。性能の高いシュレッダーを購入し、個人情報が記載されているものをすべてシュレッダーにかけることをお勧めします。

では、PC に潜んでいる PII についてはどうでしょうか。このデータを見つけることは、それを安全に保存することと同じくらい困難です。システム上の情報を検索する場合は、Windows Vista® やその他のさまざまなデスクトップ検索ツールが役立ちます。ただし、どのような情報を探すのかを認識しておく必要があります。

この問題について説明するために、いくつかの簡易ツールを使用した実践的な例を簡単に示します。ここでは、Windows PowerShell® で実行するスクリプトを使用します。Windows PowerShell では数多くの機能が提供されますが、その中でも文字列の検索機能は特に優れています。今回は、正規表現を検索する機能に重点を置いて説明します。Windows PowerShell (microsoft.com/powershell から入手できます) は、瞬く間に管理作業で標準的に使用されるようになった強力なツールです。

さらに、findstr.exe を使用して誤検知を管理します。つまり、該当する文字列が含まれている可能性があっても、(バイナリ ファイル内にデータ文字列がランダムに格納されていることにより) 実際には対象にならないファイルを無視できます。今回の作業に関して言えば、テキスト ファイル以外は無視できます。

今回は、社会保障番号とクレジット カード情報という 2 つの一般的な 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 ファイルが検出される可能性があるので、-exclude を使用してこれらのファイルをすべて除外しています。その他にも、誤検知の原因となるファイルの種類がいくつか検出される場合があります。その場合は、-exclude を使用して検索処理の内容を調整してください。

特定の社会保障番号のみを検索する場合は、次のコードを使用します ("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 が執筆した「Anatomy of Credit Card Numbers」(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}"

American Express のカードは大幅に形式が異なるので、そのパターンに一致するカードを検出するための検索文字列を作成しました。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 ドライブ暗号化などのツールを使用して、ハード ドライブを暗号化します。さらに、モバイル PC のデータ保護に関するテスト済みのガイダンスが記載されている、Data Encryption Toolkit for Mobile PC を参考にすることもできます。これらの方法を使用すれば、悪意のある人物が PC 上の個人情報を入手することは、少なくとも今までより難しくなります。

まとめ

PII を検索する作業は非常に単純です。大変なのは、検索すべき情報を認識することです。しかし、マルウェアや悪意のあるユーザーが一度システムへのアクセスに成功すれば、ここで紹介したような検索方法を使用して、システム上の情報を簡単に検索できるようになることを忘れないでください。重要なのは、いつどこに PII を入力したのかを把握し、保存する必要がある情報を暗号化することです。

Windows PowerShell スクリプトの作成時に、問題点の解決に協力してくれた Matt Hainje 氏に感謝します。

Frank Simorjay は、マイクロソフト ソリューション アクセラレータのセキュリティおよび法令順守グループで、テクニカル プログラム マネージャを務めています。マイクロソフト顧客向けのセキュリティ ソリューションを設計したり、Secure World Exposition (彼はその発起人です) などのイベントで講演を行ったりしています。また、セキュリティに関する教育やトレーニングを行ったり、セキュリティに関するさまざまな学術論文や書籍を執筆したりしています。最近手がけた仕事には、"マルウェアの削除スタート キット" があります。

© 2008 Microsoft Corporation and CMP Media, LLC. All rights reserved; 許可なしに一部または全体を複製することは禁止されています.