Reolinkデスクトップアプリケーション(バージョン8.18.12)は、設定ファイルやその他の機密データの暗号化にAES-CFBアルゴリズムを使用しています。
しかし、暗号鍵の取り扱いが安全でないため、攻撃者は保護された設定データを容易に復号化することができます。
Reolinkアプリケーションは、ユーザー設定やその他の機密情報を以下のパスに保存します:
%APPDATA%\reolink\<UUID>.json
は次の形式です:
<UUID>424e044d-aa27-4e59-873a-26b9f16be9adこの設定ファイルはAES-CFBを使用して暗号化されており、復号化に使用されるAES鍵は以下のプロセスで導出されます:
以下のパスにあるファイルを開きます:
%APPDATA%\com.reolink.app.client
このファイルにはJSON形式のデータが含まれています。例:
{
"data": "+lWlitlpr9vBiG71RCJYoPSJKVnUgGVbgu4v9W6K3N0kzgLv9HEQpqVi2fMnHdb7iWhYgb5KeRhYb6IPVWRR4kxTcwTDfQmMOvFWLuqHPRJBt9ozPSo4TYDXzjBN0YAW",
"__internal__": {
"migrations": {
"version": "8.18.12"
}
}
}
アプリケーションは MD5("com.reolink.app").upper() をプライマリAES鍵として使用し、bcswebapp1234567 をIVとして使用します。暗号化された文字列(data)はbase64デコードされ、その後復号化されます。復号化された文字列は次の形式です:59083200-3875-4f67-a067-d953286114a0
最終的な鍵は MD5("<DECRYPTED_STRING>").upper().encode() であり、IVは同じまま(bcswebapp1234567)です。これは設定ファイル <UUID>.json の復号化に使用されます。
poc.py を実行することで、MD5ハッシュ化される前の最終鍵(形式:59083200-3875-4f67-a067-d953286114a0)と設定ファイルの内容を取得できます。
com.reolink.app のようなハードコードされた静的文字列のハッシュをプライマリ鍵として使用すべきではありません。
さらに、鍵を %APPDATA% のような予測可能なローカルファイルに保存すべきではありません。Windows DPAPIやmacOS Keychainなど、オペレーティングシステムが提供する強力で検証済みのセキュアキーストアを使用して、すべての機密認証情報を保護する必要があります。