Heim > Artikel > Betrieb und Instandhaltung > So führen Sie eine Schwachstellenanalyse für elektronische Geldbörsen-Apps durch
Razer Pay wird in Singapur und Malaysia häufig verwendet. Der Autor nutzte die APP-Reverse-Analyse und das Frida-Debugging, um die Benutzersignatur im Razer Pay E-Wallet zu entdecken , das gebundene Bankkonto des Benutzers löschen und die persönlichen sensiblen Daten des Benutzers stehlen. Die Sicherheitslücke brachte Razer schließlich eine offizielle Belohnung von fast 6.000 US-Dollar ein. Das Folgende ist die Idee des Autors zur Erkennung von Sicherheitslücken, die nur als Referenz für das Haltungslernen verwendet werden kann.
Razer Inc (RΛZΞR) ist ein in Singapur gegründetes Unternehmen für Gaming-Peripheriegeräte. Es ist auch als „Green Light Factory“ bekannt und hat in den letzten Jahren begonnen, in das Geschäft mit Unterhaltungselektronik einzusteigen. Die beiden Hauptsitze von Razer befinden sich in Singapur und San Diego, USA. Die im November 2017 an der Hongkonger Börse notierten Produkte richten sich an Gamer und die meisten Produkte sind nach fleischfressenden Tieren benannt. Die elektronische Geldbörse Razer Pay wurde 2018 eingeführt. Im Mai 2020 begann die Produktion von OP-Masken.
Im Anforderungsmanipulationsmechanismus von Razer Pay Ewallet wird zusätzlich zu auth_token auch der Parameter Signature verwendet, um eine Signaturüberprüfung für Anfragen von verschiedenen Benutzern durchzuführen. Jede GET- und POST-Anfrage an den Server wird mit einem versehen verschlüsselter Signaturparameterwert und Benutzer-ID, wie in der folgenden Abbildung dargestellt:
Daher ist der Versuch, irgendwelche Anforderungsparameter zu manipulieren und sie erneut zu senden, ungültig, aber nach der APK-Rückwärtsanalyse wurde festgestellt, dass die Razer-Zahlungselektronik Wallet (Razer Payment Electronic Wallet) In Pay Ewallet besteht eine Sicherheitslücke bei der Generierung von Benutzersignaturen (Signatur). In Kombination mit der Analyse und Nutzung von Frida kann automatisch eine neue Benutzersignatur (Signatur) berechnet und generiert werden, was zu vielen unbefugten Rechten führen kann ( IDOR)-Probleme.
Als ich Burp zum Erfassen der Netzwerkanfragen der Razer Payment APP verwendet habe, stellte ich fest, dass aufgrund des Schutzes der Benutzersignatur (Signatur) in der Anfrage viele Parameter nicht manipuliert werden können. Daher habe ich sofort darüber nachgedacht Ein anderer Razer-Zahlungsbenutzer meldete sich, um mit dem Test zusammenzuarbeiten, aber in dem Szenario, in dem zwei Benutzer dieselbe Anfrage stellten, war die Ausführung ungültig, weil der Sitzungsanforderungsschutz mit der Benutzersignatur (Signatur) ungültig war ) war noch da.
Ich habe beschlossen, den Generierungsmechanismus der Benutzersignatur (Signatur) zu analysieren. Mithilfe der Dekompilierung von apktool und Jadx-Gui habe ich ein Verständnis für die Funktionsweise der APP auf Codeebene gewonnen und festgestellt, dass es einen Code namens „ „MD5Encode“ Die Methodenfunktion verwendet, wie Sie am Namen erkennen können, den MD5-Verschlüsselungsalgorithmus. Nachdem ich einige Parameter-Payloads kombiniert hatte, beschloss ich, zu versuchen, eine Benutzersignatur (Signatur) zu generieren, aber egal wie sehr ich es versuchte, ich konnte keine korrekte Benutzersignatur generieren, ich vermutete, dass die Parameter möglicherweise in der falschen Reihenfolge waren Möglicherweise handelt es sich um eine unkonventionelle MD5-Verschlüsselung.
(Der Herausgeber hat analysiert, dass im folgenden Generierungsprozess mehrerer Benutzersignaturen das eigene Token des Benutzers verwendet wird, das einer der Parameter ist. Dann können über die MD5Encode-Methode auch verschiedene Benutzersignaturen generiert werden, die mehreren Benutzer-IDs entsprechen Das heißt, es kann erfolgreich jede Benutzersignatur generieren (Signatur, die vom Razer-Server mehreren Benutzern zugewiesen wurde). Wählen Sie eine sensiblere API-Schnittstelle/deleteBankAccount, bei der das an den Benutzer gebundene Bankkonto gelöscht wird. Anschließend kann im Testszenario mit zwei Konten das gebundene Bankkonto eines anderen Razer Pay-Benutzers erfolgreich gelöscht werden!
Treten Sie Chat-Gruppen bei, die von anderen Benutzern erstellt wurden
Zu diesem Zeitpunkt dachte ich, dass es andere durch Signatur geschützte API-Schnittstellen geben muss, die Probleme mit der IDOR-Überschreibung haben, also habe ich versucht, eine Reihe von Tests mit der oben genannten Methode durchzuführen, aber Es wurde nichts gefunden. Darüber hinaus nutzten andere API-Schnittstellen unterschiedliche Code-Verschleierungsmethoden, was dazu führte, dass ich viel Zeit damit verbrachte, sie zu recherchieren und zu analysieren. Wenn Sie keine Ahnung haben, versuchen Sie es mit Frida. Damit kann ich einige Methodenfunktionen identifizieren, die mit der oben genannten MD5Encode-Methode verknüpft werden können .Code-Paket können Sie diese Methoden und Funktionen auch verwenden, um eine neue korrekte Benutzersignatur zu generieren.
Die durch den folgenden frida.js-Code implementierte Funktion besteht darin, eine neue Benutzersignatur für den aktuellen Benutzer zu generieren, um der von anderen Benutzern erstellten Chat-Gruppe beizutreten:
<br>
<code>// frida.js – Verwenden Sie dies für Neuberechnung der Signatur für das Hinzufügen eines Benutzers zur Chatgruppe anderer Personen
<code>// frida.js - Use this for recalculating signature for adding user to other people's chatgroup
<code>console.log("Starting...")
<code>Java.perform(function () {
<code>var MD5 = Java.use('com.mol.molwallet.view.MD5')
<code>MD5.MD5Encode.implementation = function (arg)
<code>{
<code>console.log("Hooking class MD5 - method MD5Encode")
<code>//Extra step - calculate new signature
<code>var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")
<code>console.log("[+] signature= " + ret_value)
<code>//Call method with original arguments so app doesn't crash ..
<code>var ret_value = this.MD5Encode(arg) //original value
<code>console.log("original ARG: " + arg)
<code>return ret_value;
<code>}
<code>})
但是要运行Frida,需要root级别的访问,好在我另外发现了一个服务端漏洞可以让攻击者在一台root过的移动设备中执行操作,以下为在移动设备中启动Frida服务的命令:
<br>
$ adb shell
# sudo su
# /data/local/tmp/frida-server
<code>console.log("Starting...")
<code>Java.perform(function () {
<code>var MD5 = Java.use('com.mol.molwallet.view.MD5')
<code>MD5.MD5Encode.implementation = function (arg)
<code>{
<code>console.log("Hooking class MD5 - method MD5Encode")
<code>//Zusätzlicher Schritt – neue Signatur berechnen
<code>var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")
🎜🎜<code>Konsole. log ("[+] Signatur= " + ret_value)
🎜🎜<code>//Methode mit Originalargumenten aufrufen, damit die App nicht abstürzt..
🎜🎜<code>var ret_value = this.MD5Encode(arg) //ursprünglicher Wert
🎜🎜<code>console.log("original ARG: " + arg)
🎜🎜<code>return ret_value;
🎜🎜<code>}
🎜🎜<code>})🎜🎜Aber um Frida auszuführen, ist Root-Zugriff erforderlich. Glücklicherweise habe ich auch eine serverseitige Sicherheitslücke entdeckt, die es einem Angreifer ermöglicht, Operationen auf einem gerooteten Mobilgerät durchzuführen Folgendes ist der Befehl zum Starten des Frida-Dienstes auf einem mobilen Gerät: 🎜$ frida -l frida.js -U com.mol.molwallet🎜
$ adb shell
🎜🎜# sudo su
🎜🎜# /data/local/ tmp/ frida-server
🎜🎜Danach führen Sie in einem anderen Terminalfenster den folgenden Befehl aus: 🎜rrreee🎜Dann öffne ich auf dem Mobilgerät die Razer Payment APP, jeder Aufruf der Hook-Methode „MD5Encode“ Alle Vorgänge führen das obige frida.js-Skript aus, und schließlich kann ich eine gültige und korrekte Benutzersignatur für eine bestimmte Benutzeranforderung generieren. Der Testfall hier ist, dass ich eine Benutzersignatur für mich selbst generieren und als verwenden kann Wenn Sie einer von anderen Benutzern erstellten Chat-Gruppe beitreten, besteht die Gefahr, dass Sie einer Gruppe unwissentlich beitreten und dann auf die Chat-Inhalte anderer Personen zugreifen oder die von anderen gesendeten roten Umschläge erhalten und stehlen können. 🎜🎜🎜🎜🎜🎜🎜🎜Andere Sicherheitsprobleme verursacht durch 🎜🎜Mit der oben genannten Methode habe ich alle anderen von Signature betroffenen API-Schnittstellen getestet und festgestellt, dass die Menge an roten Umschlägen, die in Benutzergruppen-Chats geteilt werden, von diesen API-Schnittstellen abgerufen werden kann. Darüber hinaus können Sie die Übertragungsaufzeichnungen und persönlichen Daten anderer Benutzer ändern und anzeigen. 🎜Das obige ist der detaillierte Inhalt vonSo führen Sie eine Schwachstellenanalyse für elektronische Geldbörsen-Apps durch. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!