デバイスの初期化で個人情報は完全に削除できるのか

巷で話題の初期化済みの体表温度計が入手できたので、この温度計の記録媒体を解析し、削除されたとみられるファイルが本当に削除されているかどうか確認を行いました。

対象となるデバイスは、ディスプレイの上にあるカメラで顔を写すと検温してくれる非接触体表温度計です。コロナ禍に店先によく置かれていたやつです。ある方の解析によると、検温した方の顔写真がデバイス内に記録されているものがあり、オークションサイトで購入した中古品に残存していたとのことです。

今回は、同様のデバイスで初期化済みのものが入手できましたので、利用者の顔写真が完全に削除されているか解析を試みました。

eMMC取り外し

まず本体を分解し基板を観察したところ、8GバイトのeMMCと呼ばれるフラッシュメモリが見つかりました。これをリワークマシンを使用して取り外します。

リワークの様子

弊社にはERSA社のリワークマシンHR550があり、eMMCのような裏面に端子があるBGAチップであっても取り外し、再実装を行うことができます。またハードウェアセキュリティチームは、メンバーのほぼ全員はIPC7711/21という電子組立品とプリント回路板のリペア(修理)とリワーク(再加工・手直し)の国際認証を取得しているスペシャリスト集団です。

ファームウェアイメージの解析

取り外したeMMCをダンプし、ファームウェアイメージを取得しました。取得できたイメージのハッシュ値を以下に示します。

  • SHA256 Hash値: ac97f9d19f7ac3c606f2068d335250c1a869e9b5153a87d257ce2204bc28ceea
  • Size: 7,818,182,656 byte

binwalkコマンドで格納されているデータの種類と位置を調査します。

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
21024         0x5220          gzip compressed data, has original file name: "u-boot.bin", from Unix, last modified: 2019-11-04 06:57:11
1048576       0x100000        uImage header, header size: 64 bytes, header CRC: 0x31E975B0, created: 2019-07-22 12:17:47, image size: 3758138 bytes, Data Address: 0x80008000, Entry Point: 0x80008000, data CRC: 0x5636FD2, OS: Linux, CPU: ARM, image type: OS Kernel Image, compression type: none, image name: "Linux-4.9.37"
1048640       0x100040        Linux kernel ARM boot executable zImage (little-endian)
1075780       0x106A44        gzip compressed data, maximum compression, from Unix, last modified: 1970-01-01 00:00:00 (null date)
4791224       0x491BB8        Flattened device tree, size: 15554 bytes, version: 17
6291456       0x600000        Linux EXT filesystem, blocks count: 64000, image size: 65536000, rev 2.0, ext4 filesystem data, UUID=57f8f4bc-abf4-655f-bf67-946fc0f9c0f9
71827456      0x4480000       PNG image, 146 x 55, 8-bit/color RGBA, non-interlaced
...以下略

ARMアーキテクチャのLinuxが動いているようです。ext4のファイルシステムも見えていますが、大量の画像ファイルは検出されませんでした。 そこで弊社のバイナリアンに助けを求めたところ、あっという間に「dataパーティションにあるsqliteデータベースに検温の記録を格納している可能性があるが、データベース内のデータは削除されている」ことを突き止めてくれました。

どうやら、ファイルシステム上では削除されているようです。

エントロピー

エントロピーは、ざっくりいうとデータのばらつきを表す量です。 フラッシュメモリの場合、何も書き込まれていない領域は0xFFまたは0x00のどちらかの値で埋まっています。すなわちばらつきがないので、エントロピーは0になります。一方、画像データの場合、真っ黒や真っ白のビットマップでもない限り各バイトの値がばらついていますのでエントロピーは大きくなります。

そこでbinwalkコマンドのエントロピーを計算する機能を使ってdataパーティションのエントロピーを計算したところ、以下のような結果になりました。

DECIMAL       HEXADECIMAL     ENTROPY
--------------------------------------------------------------------------------
0             0x0             Falling entropy edge (0.011524)
137363456     0x8300000       Falling entropy edge (0.006271)
141557760     0x8700000       Falling entropy edge (0.000025)
143654912     0x8900000       Rising entropy edge (0.998613)
145752064     0x8B00000       Rising entropy edge (0.999468)
149946368     0x8F00000       Rising entropy edge (0.999776)
...中略...
185597952     0xB100000       Rising entropy edge (0.999294)
187695104     0xB300000       Rising entropy edge (0.999676)
189792256     0xB500000       Rising entropy edge (0.999610)
191889408     0xB700000       Rising entropy edge (0.999719)
193986560     0xB900000       Falling entropy edge (0.011899)
196083712     0xBB00000       Falling entropy edge (0.014639)
...以下略

0x8900000から0xB900000の間になんらかのデータがありそうです。 ひとまずこの領域をbinwalkにかけてみたところ、以下のように大量のbitmapファイルが検出されました。

DECIMAL       HEXADECIMAL     DESCRIPTION
--------------------------------------------------------------------------------
195035164     0xBA0001C       PC bitmap, Windows 3.x format,, 136 x 145 x 24
195100700     0xBA1001C       PC bitmap, Windows 3.x format,, 124 x 158 x 24
195166236     0xBA2001C       PC bitmap, Windows 3.x format,, 132 x 149 x 24
195231772     0xBA3001C       PC bitmap, Windows 3.x format,, 124 x 158 x 24
...以下略

スクリプトを書いて抽出したところ、800枚ほどの顔写真を取得することができました。その一例を以下に示します。(プライバシー保護のためぼかしを入れています)

取得できた顔写真の一例

考察

対象デバイス内に格納されていた顔写真は、デバイスの初期化によりファイルシステムレベルでは削除されたとみられますが、フラッシュメモリ内に残存していることがわかりました。

ではどうすればフラッシュメモリ内の情報を完全に削除できるのでしょうか。 答えを求めて、記憶媒体の廃棄時のガイドラインを定めた、NIST SP800-88 "Guidelines for Media Sanitization"日本語訳) にあたりました。

このガイドラインによると、下図のように組織の管理から離れる場合、除去(Purge)もしくは破壊(Destroy)しなければならないとされています。

データ抹消処理及び廃棄の決定フロー(SP800-88 IPAによる翻訳版より抜粋)

しかし同文書のAppendix Aに、「ボードやデバイスに組み込まれたフラッシュメモリ」の場合、除去する方法はなく、 フラッシュメモリが容易に取り外せるならそれを、そうでなければ基板全体を破壊すべしと書かれています。 つまり「基板に実装されたeMMCから機微な情報を完全に削除し再利用する方法はない」というのが、SP800-88の結論になります。

とはいえどうしても機微な情報を記憶させなければならないということもあると思います。 その時は、スマートフォンのように暗号化消去機能をもたせたり、記憶媒体を容易に取り外し可能にして廃棄(転売)前に取り外すといった方法が考えられますが、 いずれにしろ設計段階から、廃棄を考慮した設計が必要です。

結論

ということで、結論は以下のようになります。

ファイルシステム上で削除された情報が、フラッシュメモリ上に残存している可能性がある。そのため、組込みデバイスの容易に取り外し可能ではないフラッシュメモリには個人情報等の機微な情報を格納するべきではない。どうしても記録する必要があるのなら、廃棄を考慮した設計にする。

今回のように意図せず情報が漏洩する可能性があるため、使い終わった体表温度計をオークションサイトに出品するのはやめたほうがよさそうですね。

おまけ

今回はbinwalkの挙動に悩まされながらも画像の抽出に成功しましたが、弊社エンジニアからformostコマンドを使えば一発だったと教えてもらいました。 あとで調べたら、foremostはディスクイメージから画像や動画、Wordデータなどを抽出できるフォレンジックツールのようです。しらなかったー

このように弊社には各分野で尖ったスキルを持つエンジニアが互いに高め合うことのできる環境があり、協調して診断サービス等を提供させていただいております。

© 2016 - 2024 DARK MATTER / Built with Hugo / テーマ StackJimmy によって設計されています。