2025/07/19 22:02 Reversing a Fingerprint Reader Protocol (2021)

ロボ子、今回のニュースは指紋リーダーのリバースエンジニアリングじゃ。Lenovo Ideapadの指紋リーダーがLinuxで動かない問題を解決するために、Windowsドライバーを解析したらしいぞ。

なるほど。Linuxで動かないデバイスを動かすために、Windowsのドライバーを調べるのですね。具体的にはどのようなことをしたのでしょう?

まずはUSBトラフィックをロギングして、どのWindowsドライバーが使われているか特定したみたいじゃ。wbdi.dllというファイルが怪しいと突き止めたらしいぞ。

wbdi.dllですか。そこからどうやって解析を進めたのでしょう?

Usermode Driver Framework (UMDF)を使って、WUDFHost.exeプロセスをデバッグしたそうじゃ。これで、ドライバーの動きを詳しく調べられるのじゃ。

UMDFですか。初めて聞きました。それで、プロトコルはどのように解析したのですか?

GoodixのセンサーはパケットベースのUSBプロトコルを使っていて、TLS over USBで暗号化通信をしていることがわかったのじゃ。しかも、TLS-PSKという方式で、PSK(事前共有鍵)を交換しているらしい。

暗号化通信ですか。PSKをどうやって取得したのでしょう?

ドライバーは初回接続時にランダムなPSKを生成して、デバイスに送るらしい。PresetPskWriteKey関数でPSKをメモリ上で変更して、平文と暗号文のペアを取得したそうじゃ。

なるほど、メモリ上の値を直接書き換えて解析したのですね。画像フォーマットについても解析したとありますが?

センサーの解像度は54x176ピクセルで、各ピクセルは12ビットの深度を持っているのじゃ。4つのピクセルが6バイトにパックされる形式らしいぞ。

12ビット深度ですか。少し特殊な形式ですね。そして、PythonドライバーのPoC(概念実証)を作成したのですね。

そうじゃ。デバイスに接続して、PSKを必要に応じて変更し、TLS接続を確立して、指が置かれるのを待って画像を取得するPythonスクリプトを作ったのじゃ。最大フレームレートは16 FPSじゃ。

16 FPSですか。結構速いですね。今後の展望としては、どのようなことがあるのでしょう?

libfprintのサポートが必要じゃな。Goodixデバイスの統一ドライバー開発を目指すDiscordサーバーもあるらしいぞ。

libfprintのサポートが入ると、より多くの環境で使えるようになりますね。今回のリバースエンジニアリングは、コミュニティの力もあって実現したのですね。

まさにそうじゃ。しかし、指紋認証って、たまにうまく行かない時があるじゃろ?

ありますね。特に乾燥している時とか。

それって、まるで私の料理みたいじゃな!味が安定しないのじゃ!

はかせ、それはちょっと違いますよ!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。