巷で話題の初期化済みの体表温度計が入手できたので、この温度計の記録媒体を解析し、削除されたとみられるファイルが本当に削除されているかどうか確認を行いました。
対象となるデバイスは、ディスプレイの上にあるカメラで顔を写すと検温してくれる非接触体表温度計です。コロナ禍に店先によく置かれていたやつです。ある方の解析によると、検温した方の顔写真がデバイス内に記録されているものがあり、オークションサイトで購入した中古品に残存していたとのことです。
今回は、同様のデバイスで初期化済みのものが入手できましたので、利用者の顔写真が完全に削除されているか解析を試みました。
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)しなければならないとされています。
しかし同文書のAppendix Aに、「ボードやデバイスに組み込まれたフラッシュメモリ」の場合、除去する方法はなく、 フラッシュメモリが容易に取り外せるならそれを、そうでなければ基板全体を破壊すべしと書かれています。 つまり「基板に実装されたeMMCから機微な情報を完全に削除し再利用する方法はない」というのが、SP800-88の結論になります。
とはいえどうしても機微な情報を記憶させなければならないということもあると思います。 その時は、スマートフォンのように暗号化消去機能をもたせたり、記憶媒体を容易に取り外し可能にして廃棄(転売)前に取り外すといった方法が考えられますが、 いずれにしろ設計段階から、廃棄を考慮した設計が必要です。
結論
ということで、結論は以下のようになります。
ファイルシステム上で削除された情報が、フラッシュメモリ上に残存している可能性がある。そのため、組込みデバイスの容易に取り外し可能ではないフラッシュメモリには個人情報等の機微な情報を格納するべきではない。どうしても記録する必要があるのなら、廃棄を考慮した設計にする。
今回のように意図せず情報が漏洩する可能性があるため、使い終わった体表温度計をオークションサイトに出品するのはやめたほうがよさそうですね。
おまけ
今回はbinwalkの挙動に悩まされながらも画像の抽出に成功しましたが、弊社エンジニアからformost
コマンドを使えば一発だったと教えてもらいました。
あとで調べたら、foremost
はディスクイメージから画像や動画、Wordデータなどを抽出できるフォレンジックツールのようです。しらなかったー
このように弊社には各分野で尖ったスキルを持つエンジニアが互いに高め合うことのできる環境があり、協調して診断サービス等を提供させていただいております。