True Delete機能のご紹介

こんにちは。LINEでアプリケーションのセキュリティを担当しているH2spiceです。今回の記事では、スマートフォンを紛失したときにユーザーが削除したトーク履歴が流出する仕組み、そしてそれを防止するためのLINEの新機能「True Delete」についてご紹介します。

はじめに

多くの人はスマートフォンを紛失したり、時には人通りの多い公共の場所にスマートフォンを放置したりします。もし紛失したスマートフォンを他人が拾った場合、スマートフォンに保存されているデータにアクセスして流出することができるので、かなり深刻な問題が起こる可能性があります。スマートフォンには通話履歴、メッセージ、電話帳、カレンダー、インターネット検索履歴、移動履歴、写真、メモなどたくさんの個人情報が詰まっているので、プライバシーの漏洩はもちろん、会社の業務上の機密が外部に流出する問題も発生しかねません。さらに、そのような情報を狙ってスマートフォンを盗む場合もあります。スマートフォンは便利な道具ですが、管理の不注意やちょっとした油断によって個人のプライバシーの侵害につながる危険な道具にもなり得ます。

LINEでは、このようなリスクからユーザーのプライバシーを保護するために、パスコードロックやデータの暗号化のような機能を追加するなど、さまざまな努力をしています。しかし、いくつかの問題のため、一部のリスクは依然として存在しています。「削除」という一般的なプログラム手法上の限界によって、削除されたデータを復元できてしまうことも問題の一つです。では、一般的な削除方法における問題点とそれを補うためにLINEが開発した「True Delete」機能をご紹介します。

メッセージ削除の限界

人々とのコミュニケーションのためにLINEのようなメッセンジャーアプリを毎日使う人が増えています。友達との日常的な会話のやりとりがほとんどですが、たまに家族にクレジットカード情報とパスワードを送ることもありますし、友達に自宅の住所を教えることもあります。万が一スマートフォンを紛失したときに備えて、そのような機密なメッセージをいちいち削除している人もいるでしょう。そうすれば自分のスマートフォンからそのメッセージが完全に消えたと思うはずです。

スマートフォンをいつも身から離さなければ問題ありませんが、ジムの更衣室や外のトイレなどでスマートフォンを紛失、または盗まれる場合を想定すれば、それはまた別の話です。まるで映画のようなことが起こるかも知れません。機密なメッセージを確かに消したつもりだったのに、誰かがその内容を見ることができる、知らないうちにクレジットカードが使われる、自分の秘密がインターネット上に出回るということは、想像するだけでもぞっとします。

一部のアプリケーションで採用されている一般的な削除方法で消されたデータはいくらでも復元できるので、個人情報の漏洩は現実でも起こり得ます。Avast社は昨年、eBayで購入した中古スマートフォン20台から削除されたデータを復元することに成功しましたが、その復元した4万枚の写真のうち750枚以上がヌード写真だったそうです。このような研究結果を見ると、プライバシー漏洩は決して他人事ではありません。

では、削除したデータがどのように復元されるのか、メッセージ削除の限界についてもっと詳しく見ていきましょう。お使いのパソコン・スマートフォンの削除機能のほとんどは、性能上の問題や実装の利便性のため、実際にはデータを削除しません。ただ、削除されているように表示し、その領域を後で再利用可能な領域として扱うように変更するだけです。そのため、新しいデータで上書きする前までは、以前のデータがそのまま残ってしまいます。このような仕組みのため、削除されたデータの復元が可能になるわけです。

一般的な削除の仕組み

一般的な削除の仕組みは、下図のとおりです。データが格納されるファイルシステムにおいて、データの先頭にはそのデータの属性情報(メタデータ)が定義されています。データが削除されれば、属性情報(メタデータ)のステータスは「割り当て済みデータ(Allocated Data)」から「未割り当てデータ(Unallocated Data)」へと変わり、データ本体はそのまま残存します。未割り当てデータの領域が新しいデータで上書きされる前までは、復元できる状態のまま残っています。

AndroidとiPhoneのOSでは、メッセージや通話履歴など多種多様なデータをすべてSQLiteというデータベースに保存します。データベースでも上述したやり方でデータ(レコード)を削除しますが、結果的には削除されたデータ(レコード)は復元できる状態で残されます。データベースで削除されたデータ(レコード)は、データベース内にそのデータのかけらが残るので、削除されたファイルよりもっと簡単に復元できます。SQLiteデータベース自体が削除されない限り、削除されたレコードは新しいレコードで上書きする前までは未割り当て領域(Unallocated space)に残っています。

削除されていないデータのデータベース構造

削除されていないデータは、データベース内に以下のような構造で存在します。データーベースにおいてアクティブになっているデータを「Cell」といいますが、アクティブのCellは、下図のような構造を持っています。

一般的なCell

Cellは大きくCell Header、Data Header、Data Areaに分けられ、Cell Header内のレコードサイズとRowIDは可変長整数で表現されています。Data Headerには、Data Areaのデータがどんなタイプのものなのかが示されており、Data Areaにはデータ本体が格納されています。ユーザーのメッセージは、LINEアプリ内のデータベースに下図のように保存されます。

上図のデータベースのバイナリーを分析してみると、Cell HeaderやData Header、Data Areaを確認できます。削除されていないデータなので、割り当て済み(Allocated)状態のCell Headerとデータ本体を見ることができます。

削除されたデータのデータベース構造

データベース内のデータ(レコード)を一般的な方法で削除すると、下図のようにデータ本体はそのまま残り、Cell Headerの部分のみ変更されます。削除されたデータの場合、Cell Headerは未割り当て(Unallocated)状態になっています。その後新しいデータ(レコード)を保存するときには、未割り当て(Unallocated)領域をチェックし、適正なサイズの未割り当て(Unallocated)領域に新しいデータ(レコード)が上書きされます。

削除されたCell

ユーザーのメッセージである「hi」、「h e l l o(UTF-8)」、「h i(UTF-8)」を削除した後、SQLiteブラウザからデータベースを確認してみると、「hi」、「h e l l o(UTF-8)」、「h i(UTF-8)」のデータは削除されているように見えます。

しかし、データベースのバイナリーを確認してみると、Cell Headerが未割り当て(Unallocated)状態に変わっただけで、データ本体はそのまま残っていることが分かります。

このような仕組みによって削除されたデータ(レコード)を復元でき、自動化プログラムを作成して削除されたデータを抽出することができます。

データの完全消去

上述の一般的なデータ削除方法では、新しいデータで上書きする前までは既存のデータをほとんど復元することができます。このようなデータ復元を不可能にする手法を「完全消去」といいます。完全消去のやり方としては、以下のような方法があります。

データの上書き(Overwriting)

削除したいデータをゼロbyteまたはランダムbyteで上書きします。上書きされたデータは復元がとても難しくなります。

暗号化(Encryption)

安全な暗号化方式を使用してディスクまたはファイルを暗号化し、データが復元・漏洩されたとしても中身が分からないようにします。

消磁(Degaussing)

HDD(Hard Disk Drive)は磁性体を使ってデータを記録しますが、強い磁場にさらしてディスク表面の磁気の流れを完全に破壊し、データを使用できないように削除します。 磁気力顕微鏡でディスク表面の形状を測定できますが、消磁した後は下図のようにディスク表面のデータ形状が破壊されていることが分かります。

物理的破壊・穿孔・破砕(Physical Destruction)

物理的に穴を開けるか破砕することでディスクを完全に破壊します。通常、消磁した後にディスクを完全に破棄するために使います

安全なメッセージ削除「True Delete」

LINE 5.3.0からは、上述の方法でデータの復元を不可能にする「True Delete」という機能が採用されました。ユーザーのプライバシーは常に保護されるべきなので、「True Delete」機能は別途設定しなくても使用できます。

一般的な削除は、データの属性情報(メタデータ)が変更されるだけでデータ本体はそのまま残ります。このような方法ではデータの復元が可能なので、削除したいデータをゼロbyteで上書きしてから削除することで復元を不可能にします※注。LINE 5.3.0では、個別メッセージの選択削除、当該トークルームの削除など、すべてのトーク履歴削除機能については復元ができないように機能を改善しました。任意の削除ではなく、復元が不可能な「削除」の機能を正しく実装したと言えます。

※注: 「True Delete」は、SQLiteとの互換性を持って機能するように実装されました。そのため、削除直後のほんの短い間は以前のデータが残っている可能性はありますが、正常な使用シーンでは安全に削除されるので、ご心配には及びません。

おわりに

LINEは、ユーザーのプライバシーを保護するためにパスコードロック、Letter Sealingなど様々なプライバシーモードの開発に努力を傾注しています。LINE 5.3.0からは、さらに強化された暗号化方式のE2EE(end-to-end encryption)として「Letter Sealing」機能をご利用いただけます。次回の記事では、「Letter Sealing」について詳しくご紹介します。

今後もユーザーの皆様に安心してLINEを楽しんでいただけるよう、セキュリティとプライバシーの向上に一層取り組んでまいります。

Related Post