Mobile/Android
-
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 호스트 플랫폼에 맞는 패키지를 다운로드하고 적당한 위치에 압축을 풀어준다. 나는 ..
-
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로 ..
-
IDA를 이용한 Android App Library 동적 디버깅Mobile/Android 2019. 12. 20. 02:43
정적 분석에서 자주 사용했던 IDA로 App의 Native와 JVM단에서의 동적 디버깅을 할 수 있다. JVM디버깅은 JEB가 Bytecode를 Hexray해줘서 보기 더 편하긴 하지만, JEB가 없다면 유용하게 사용할 수 있다. 일단 프로세스의 메모리를 읽고 쓸수 있어야 하기 때문에 root권한이 필요하다. 그리고 App이 Android Manifest.xml 파일을 수정해줘야 하므로 리패키징 과정이 필요하다. Android Manifest.xml 수정 모든 어플들은 android:debuggable 옵션이 False로 설정되어서 릴리즈된다. 만약 해당 옵션이 설정되어 있지 않으면 기본으로 False로 설정된다. debuggable옵션이 활성화되어 있으면 플레이 스토어와 같은 마켓에 App을 업로드할 ..
-
Unity기반(mono) 게임 App 분석Mobile/Android 2019. 12. 7. 00:38
Unity기반 App은 mono, il2 두 가지 방식 중 하나로 컴파일이 가능하다. 이번 글에서는 mono방식으로 컴파일된 App을 분석하는 방법에 대해 다루도록 하겠다. mono방식으로 컴파일된 App에는 위 3개의 라이브러리 파일이 포함되어 있다. libmono.so 심볼 정보 역시 제거된 상태이지만, il2방식보다 보다 쉽게 심볼정보를 얻어 낼 수 있다. Assembly-CSharp.dll il2방식에서는 Metadata파일을 덤프하는 과정이 있었는데, mono방식은 /assets/bin/Data/Managed 에 위치한Assembly-CSharp.dll 파일을 확인하면 된다. il2에서는 Dump 과정을 거쳐야만 얻을 수 있던 dll파일들이 mono방식에서는 바로 확인이 가능하다. 위 파일 중 ..
-
Unity기반(il2) 게임 App 분석Mobile/Android 2019. 11. 24. 05:52
요즘 재밌고 인기있는 게임들은 대부분 Unity Engine으로 개발되고 있다. 대표적으로 포켓몬Go, 궁수의전설, 거지키우기 등 이 있다. Unity기반의 게임들은 JVM이 아닌 Native에서 코드가 구현되어 실행된다. JVM단에서는 Native라이브러리를 로드만 해주고, 실질적인 게임기능들은 Native단에 로드된 라이브러리에서 처리된다. 해당 라이브러리들은 '/lib'에 위치하고 있다. Unity게임 개발자들은 컴파일 방식을 'mono'와 'il2cpp' 두 가지 방식 중 선택해서 빌드가 가능한데, 예전에는 대부분 게임들이 Interpreter처리방식으로 속도가 빠른 'mono'를 선호했다. 하지만, 안정성 이슈와 보안적인 부분이 미흡하여 'il2cpp'로 많이 개발되는 추세이다. 따라서, 이번 ..
-
Android App에서 Memory Corruption Exploit이 불가능한 이유Mobile/Android 2019. 9. 21. 21:06
[ 안드로이드 시스템 아키텍처 ] 위 그림은 Android System을 나타낸다.일반적으로 사용하는 App들은 DalvikVM 내부에서 SmaliCode가 해석되어 실행된다. [1] DalvikVM은 Register-based System이라는 특징을 가지고 있다.약 64,000개의 레지스터가 있으며, 이 중 16개 또는 256개만 사용하는게 일반적이다.따라서, DalvikVM에는 Stack이라는 개념이 없고 이 때문에 Stack-based Buffer Overflow가 발생하지 않는다.다르게 해석하면, DalvikVM이 아닌 Native Code(JNI)에서는 Stack-based Buffer Overflow가 발생할 수 있다. [2] Java에는 Array Layout Check기능이 기본으로 적용..