Razer Pay はシンガポールとマレーシアで広く使用されています。この記事では、著者は APP リバース分析と Frida デバッグを使用して Razer Pay Ewallet のユーザー署名を発見しました。(署名) は脆弱性を生成し、チャット履歴を読み取ることができますこの脆弱性により、Razer は最終的に 6,000 ドル近くの公式報奨金を獲得しました。以下は著者の脆弱性発見の考え方であり、姿勢学習の参考としてのみ使用できます。
Razer Inc (RΛZΞR) は、シンガポールで設立されたゲーム周辺機器会社であり、「グリーン ライト ファクトリー」としても知られ、市場への参入を開始しています。近年ではコンシューマエレクトロニクス事業を展開。 Razer の 2 つの本社は、シンガポールと米国サンディエゴにあります。 2017 年 11 月に香港証券取引所に上場した同社の製品はゲーマーをターゲットにしており、ほとんどの製品には肉食動物の名前が付けられています。電子ウォレット Razer Pay は 2018 年に発売されました。 2020年5月よりサージカルマスクの生産を開始しました。
Razer Pay Ewallet のリクエスト改ざん防止メカニズムでは、auth_token に加えて、パラメータ署名も、さまざまなユーザーからのリクエストの署名検証を実行するために使用されます。各サービスの GET と POST の両方次の図に示すように、リクエストには、エンコードされた署名パラメータ値とユーザー ID が伴います。
したがって、リクエスト パラメータを改ざんして再送信しようとすると、結果は無効ですが、APK リバース分析により、Razer Pay Ewallet にはユーザー署名 (Signature) 生成の脆弱性があることが判明し、Frida の分析と活用を組み合わせることで、新しいユーザー署名 (Signature) を自動的に計算して生成することができ、これにより多くのユーザー署名 (Signature) が生成される可能性があります。ウルトラウイルスの問題(IDOR)。
Burp を使用して Razer Payment APP のネットワーク リクエストをキャプチャしたとき、リクエスト内のユーザー署名 (Signature) が保護されているため、パラメータの多くは改ざんできないことがわかりました。最初はテスト用に別の Razer 決済ユーザーを登録しようと考えたのですが、2 人のユーザーが同じリクエストを行ったシナリオでは、セッションのペイロードが置き換えられた後、セッションにユーザーの署名 (Signature) があったため、実行が無効になってしまいました。 . 保護を求めます。
私は、ユーザー署名 (Signature) の生成メカニズムを分析することにしました。apktool と Jadx-Gui の逆コンパイルの助けを借りて、APP の動作をコードレベルで理解し、次のことがわかりました。は名前です「MD5Encode」のメソッド関数で、名前からもわかるようにMD5暗号アルゴリズムを使用しています。いくつかのパラメータペイロードを組み合わせた後、ユーザー署名(Signature)を生成してみようと思いましたが、パラメータの順序が間違っているのか、いくら頑張っても正しいユーザー署名を生成できませんでした。型破りな MD5 暗号化。
放棄したり諦めたりしないでください。ユーザー署名の生成に関連するすべての関連コードをコピーしました。 IDE デバッグ ツール IntelliJ IDEA を使用して生成してみました。最後に、「MD5Encode」メソッドの適用で、正しいパラメーターの順序を組み合わせました。ただし、コードが混乱しているため、多少の微調整が必要でしたが、あまり難しくありませんでした。最後に、前に生成したリクエスト本文に正しいパラメーター値を挿入し、上記のコードを使用して正しいユーザー署名 (Signature) 文字列を生成します。
(編集者は、以下の複数のユーザー署名の生成プロセスで、ユーザー自身のトークンがパラメーターの 1 つとして使用され、MD5Encode メソッドを通じて複数のユーザーに対応する異なるユーザー ID が生成される可能性があると分析しました)ユーザー署名、つまり各ユーザー署名 Razer サーバーによって複数のユーザーに割り当てられる署名は正常に生成できます)
したがって、最初に考えたのは、不正アクセスの脆弱性 (IDOR) をテストすることでした。比較的機密性の高い API インターフェイス /deleteBankAccount (ユーザーにバインドされた銀行口座を削除する操作) を選択しました。次に、2 つの口座のテスト シナリオで、別の Razer Pay ユーザーのリンクされた銀行口座です。
現時点では、IDOR オーバーライドの問題がある、Signature によって保護されている他の API インターフェイスがあるはずだと思います。上記の方法を使用して一連のテストを実行しようとしましたが、何も見つかりませんでした。さらに、他の API インターフェイスではさまざまなコード難読化手法が使用されていたため、それらの調査と分析に多くの時間を費やすことになりました。何も分からない場合は、Frida を使用してみてください。Frida は非常に使いやすいデバッグ ツールです。これを使用して、フックできるいくつかのメソッド関数を特定できます。上記の MD5Encode メソッドと組み合わせると、正しい電子ウォレットを見つけることができます. コード パッケージでは、これらのメソッドと関数を使用して、新しい正しいユーザー署名を生成することもできます。
次の frida.js コードによって実装される機能は、現在のユーザーが他のユーザーによって作成されたチャット グループに参加するための新しいユーザー署名を生成することです:
<br>
<code><code>// frida .js - 他の人のチャットグループにユーザーを追加するための署名を再計算するためにこれを使用します
<code>##console.log("Starting...")<code>
<code>Java.perform(function () {<code>
#var MD5 = Java.use('com.mol.molwallet . view.MD5')<code><code>
##MD5.MD5Encode.implementation = function (arg)<code><code>
## {<code><code>##console.log("クラス MD5 のフック - メソッド MD5Encode")
<code><code> ##/ /追加ステップ - 新しい署名を計算します
<code><code>##var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7- 7fxxxxa6")
<code><code>##console.log("[ ]signature= " ret_value)
<code># #//メソッドを呼び出しますアプリがクラッシュしないように元の引数 ..<code>
##var ret_value = this.MD5Encode(arg) //元の値<code> <code>
#console.log("元の ARG: " arg)<code><code>return ret_value;
<code> <code>#}
<code><code>})
<code>ただし、Frida を実行するにはルートレベルのアクセスが必要です。 , 攻撃者が root 化されたモバイル デバイス上で操作を実行できるようにするサーバー側の脆弱性を発見しました。モバイル デバイスで Frida サービスを開始するコマンドは次のとおりです: <code>
<br>$ adb shell
<code><code># sudo su
# /data/local/tmp/frida-server
<code>その後、別のターミナル ウィンドウで、次のコマンドを実行します:
$ frida -l frida.js -U com.mol.molwallet次に、モバイル デバイスで Razer Payment APP を開き、フック メソッド「MD5Encode」を呼び出します。上記の操作により、上記の frida.js スクリプトが実行されます。最後に、特定のユーザー リクエストに対して有効で正しいユーザー署名を生成できます。ここでのテスト ケースは、自分用のユーザー署名を生成し、それを他のユーザーが作成したチャット グループに参加するための資格情報の確認として使用できることです。この方法の危険性は、知らずにグループに参加し、他の人のチャット内容を取得したり、クリックして他の人が送信した情報を主張して盗んだりできることです。
<code>
<code>
が原因で発生するその他のセキュリティ問題 上記の方法を使用して、Signature After の影響を受ける他のすべての API インターフェイスを削除しましたテストした結果、グループチャットでユーザーが共有した赤い封筒の量をこれらの API インターフェースから取得できるほか、他のユーザーの転送記録や個人情報を変更および閲覧できることがわかりました。以上が電子財布APPの脆弱性分析の実施方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。