Mobile
-
CVE-2020-0041 분석 글 번역 및 정리 (+ Samsung Galaxy S10 RCE)Mobile/Android 2020. 10. 26. 02:03
AOSP 3월에 패치된 CVE-2020-0041 취약점에 대한 분석글이다. 원문은 Bluefrost Security LPE 정리글에서 확인할 수 있다. CVE-2020-0041은 Binder Transaction 과정에서 발생하는 Out of Bound취약점이다. 취약점이 발생하는 이유는 생각보다 간단한데, 인덱스 계산할 때 나눗셈 연산을 해야되는걸 곱셈 연산을 하면서 발생하게 된다. 이게 좀 웃긴게 트랜잭션을 정리하는 과정에서는 또 나눗셈으로 제대로 계산을 해준다. 밤새고 코딩했거나, 술 마시고 코딩했거나..ㅋㅋ 또한, 취약점이 발생하는 코드가 2019년 2월쯤 Qualcomm Kernel(msm)에만 추가되었기 때문에, Qualcomm기반의 Android 10.0 이상의 버전에서만 발생되는 취약점이며..
-
Android Kernel Exploit - BasicMobile/Android 2020. 4. 30. 00:18
이번 글에서는 Android Kernel Exploit의 기초를 다루려고 한다. Android Kernel을 대상으로 익스플로잇을 진행할 때, '주 타겟은 어떤 부분이고 어떤 방식으로 root권한을 획득하는지', '고려해야 하는 점은 무엇인지'와 같은 Kernel Exploit의 전반적인 부분들을 간단하게 다룰 것이다. Linux Privilege Escalation Linux Privilege Escalation(LPE)은 Android 커널 취약점으로 권한 상승, 즉 root권한을 획득하는 것을 말한다. Linux에서 root는 uid=0(root), gid=0(root) 인 SuperUser를 말하며, 모든 액세스 권한을 갖는다. AOSP에서는 LPE를 EOP(Elevation of privileg..
-
Android NDK - C Language Build ( Native )Mobile/Android 2020. 4. 24. 00:48
Android에서 독립적으로 실행할 수 있는 Native Binary를 빌드하기 위한 방법이다. 보통의 경우에는 AndroidStudio에서 Java/Kotlin+Native의 형태로 많이 사용되지만, Native Binary만 독립적으로 사용해야 하는 경우에는 이 방법으로 빌드하면 된다. 나 같은 경우에는 Android System Exploit 연구를 하면서 C언어로 Exploit Code를 작성하고 빌드해야 하기 때문에 이 방법을 사용한다. Android NDK 환경 설정 먼저 아래 링크에서 최신버전의 Android NDK를 다운로드 한다. https://developer.android.com/ndk/downloads 호스트 플랫폼에 맞는 패키지를 다운로드하고 적당한 위치에 압축을 풀어준다. 나는 ..
-
Universal SSL Pinning Bypass ( Android )Mobile/Frida 2020. 3. 8. 20:01
function SSLContext() { var X509TrustManager = Java.use('javax.net.ssl.X509TrustManager'); var SSLContext = Java.use('javax.net.ssl.SSLContext'); // build fake trust manager var TrustManager = Java.registerClass({ name: 'com.sensepost.test.TrustManager', implements: [X509TrustManager], methods: { checkClientTrusted: function (chain, authType) { }, checkServerTrusted: function (chain, authType) {..
-
FRIDA Cheat SheetMobile/Frida 2020. 3. 2. 06:32
1. 메모리 스캔 및 검색 2. Boolean 값 생성 3. Class 인스턴스 생성 및 Method 호출 4. ByteArray 출력 5. Native 함수 NOP 처리 6. Natvie 함수 인자값 및 반환값 조작 메모리 스캔 및 검색 function Memory_scan() { var ranges = Process.enumerateRangesSync({protection: 'r--', coalesce: true}); var range; function Next_Range(){ range = ranges.pop(); if(!range) { console.log("Memory Scan Done!"); return; } Memory.scan(range.base, range.size, "70 79 30 7..
-
Anti-Debugging 우회 ( ptrace 선점 )Mobile/Frida 2020. 2. 29. 03:23
안티디버깅이 적용되어 있는 어플을 IDA나 GDB로 Attach하려고 하면 앱이 바로 종료되어 버린다. 또한, ptrace를 미리 선점하는 방식으로 안티디버깅이 적용된 경우도 있다. 이런 방식의 안티디버깅을 우회할 수 있는 방법 중 dlopen( )으로 우리가 원하는 라이브러리가 로드됐을 때, 바로 sleep을 걸어서 안티디버깅이 동작하기 전에 디버거를 Attach 해주는 방법이 있다. Interceptor.attach(Module.findExportByName(null, "dlopen"), { onEnter: function(args) { this.libc_name = Memory.readUtf8String(args[0]); if (this.libc_name.indexOf("libfoo.so") !==..
-
JEB2 App 동적 디버깅Mobile/Android 2019. 12. 23. 00:07
모바일 분석계의 IDA같은 존재 'JEB2'를 이용한 동적 디버깅에 대해 기술 해보려고 한다. 우선 JEB2는 Bytecode(Smali)를 분석하기 편하게 Java로 디컴파일 해주는 기능을 제공한다. IDA의 Hexray와 같은 기능인데, 덕분에 APK를 동적으로 분석할 때 많은 도움이 된다. 이번 글에서는 Uncrackable1을 디버깅 해보면서 App내부에 저장된 Secret Code를 알아내보도록 하겠다. JEB2 먼저 분석할 App을 JEB에 로드해주면 위와 같이 App의 Bytecode를 확인할 수 있다. App의 코드를 확인하고 원하는 분석 지점으로 이동해서 Breakpoint를 설정해줘야 한다. Breakpoint설정은 Bytecode View에서 원하는 지점을 클릭한 뒤, Ctrl+B로 ..
-
FRIDA Hooking (OWASP - UnCrackable2)Mobile/Frida 2019. 12. 22. 01:30
OWASP-mstg : https://github.com/OWASP/owasp-mstg/tree/master/Crackmes OWASP Mobile Crack 트레이닝 중 Level2 문제풀이이다. 문제풀이는 FRIDA를 이용할 것이며, Level1 문제풀이는 여기에서 확인할 수 있다. UnCrackable2_exit( ) Hook adb install을 통해 App을 디바이스에 설치해주고 실행 시켜보도록 하자 루팅된 디바이스일 경우, 위와 같이 "Root Detected!" 경고창이 팝업되면서 [OK]를 누르면 App이 종료된다. 따라서, App이 종료되는 루틴을 먼저 확인하고 루팅된 디바이스에서도 App을 사용할 수 있게끔 해줘야 한다. MainActivity를 보면, b.a( ) / b.b( ) /..