들어가기 앞서안드로이드는 전 세계 스마트폰 시장의 상당 부분을 차지하고 있지만, 동시에 다양한 보안 위협에 노출되어 있다. 오늘은 그 중에서도 실습을 통해 Task Hijacking(CVE-2021-33699) 취약점에 대해서 다뤄보고자 한다. 실습에 사용할 소스코드 및 APK 파일은 아래의 Github Repository에서 다운로드 받을 수 있다. GitHub - naroSEC/CVE-2021-33699_Task_HijackingContribute to naroSEC/CVE-2021-33699_Task_Hijacking development by creating an account on GitHub.github.comWhat is Task Hijcaking(CVE-2021-33699)?개요Task H..
들어가기 앞서 Digital Forensics Challenge(이하 DFC) 대회는 한국에서 열리는 몇 없는 디지털 포렌식 대회로 2018년부터 지금까지 매년 대회가 진행되고 있다. 올해에도 2023.05.01 ~ 2023.09.30까지 대회가 진행되었으며, 예전에는 디스크, 네트워크 포렌식 등의 문제가 주를 이루었다면, 근래 들어서는 모바일 문제도 조금씩 출제되고 있는 추세이다. 이번 포스팅에서는 DFC 2023 대회에서 출제되었던 301번 모바일 포렌식 관련 문제에 대한 Write Up을 작성하고자 한다. Digital Forensics ChallengeDigital Forensics Challenge Digital Forensics Challenge hosted by Korea Institute ..
개요 치트 엔진을 이용한 정적 메모리 값을 변조하는 방법 개요 치트 엔진을 이용한 동적 메모리 값을 변조하는 방법 개요 게임 관련 애플리케이션을 대상으로 코드 분석 및 변조 시 가장 많이 활용되는 도구를 뽑으라고 한다면 치트 엔진(Cheat Engine)이 naro-security.tistory.com 이전 "치트 엔진을 이용한 정적 메모리 값을 변조하는 방법" 포스팅에 이어서 이번 포스팅에서는 "어썰트 큐브" 게임을 대상으로 내부 동작의 로직을 변조하고 코드를 삽입하는 방법에 대해서 다뤄보도록 하겠다. 실습 준비 [ 치트 엔진 다운로드 ] Cheat Engine Cheat Engine Trouble installing/running Cheat Engine? Check out the known githu..
개요 치트 엔진(Cheat Engine)은 주로 게임 내에서 값을 조작하거나 게임 내부 동작 로직을 수정하는 데 사용되는 프로그램으로 주 타겟은 PC 게임이다. 물론 모바일 디바이스에도 연결해 사용할 수 있지만, 모바일 쪽은 "Game Guardian"이 꽉 잡고 있어 치트 엔진은 잘 쓰이지 않는다. 그렇다고 치트 엔진이 Game Guardian 보다 성능이 떨어지느냐? 그건 절대 아니다. 오히려 더 정밀한 기능은 치트 엔진이 한 수 위지만, 편의성 및 접근성의 이유 등으로 모바일 분야 쪽에서는 많이 쓰이지 않는다. 이번 포스팅은 치트 엔진을 모바일 디바이스에 연결하는 방법에 대해서 기술하고자 한다. 다운로드 치트 엔진을 모바일 디바이스에 연결해 사용하기 위해서는 Frida 서버와 같이 디바이스에서 실행..
개요smali 코드는 안드로이드 애플리케이션의 Dalvik 가상 머신 코드를 표현한 언어이다. Dalvik VM은 안드로이드 앱의 실행을 위한 가상 머신이며(지금은 ART를 사용한다.), smali는 이 VM에서 동작하는 바이트 코드를 사람이 읽기 쉽고 이해하기 쉬운 형태로 변환하여 나타낸다. 즉, Smali는 Dalvik VM이나 ART(안드로이드 런타임)에서 동작하는 바이트 코드의 어셈블리어로 Java 코드(Java 실행 코드가 들어있는 Dex)를 디컴파일한 결과물이다. 따라서, 안드로이드 앱을 대상으로 내부 동작 조작을 위한 소스코드를 변조할 때 Java 코드를 디컴파일한 산출물인 smali 코드를 수정하게 되며, 이러한 일련의 과정을 "리패키징"이라고 한다. 이번 포스팅에서는 smali 코드 분석..
개요보안이 잘 된 안드로이드 앱은 Java 코드뿐만 아니라 C/C++ 언어로 작성된 네이티브 코드를 활용하여 루팅, 무결성, 디버깅과 같은 보안 위협을 탐지한다. 이러한 네이티브 코드로 작성된 파일은 라이브러리(.so) 형태로 제공되며 또한, ollvm이나 링킹과 같은 라이브러리 보호 매커니즘이 적용된 경우 분석이 어려워진다. 그 일례로 ollvm이 적용된 라이브러리는 코드 내에 존재하는 문자열이 모두 암호화되어 있어 평문 값이 노출되지 않는다. 따라서, 이는 분석 시 검사에 사용되는 문자열을 검색하는 방식으로 탐지 로직을 찾는게 어렵다는 뜻이다. 하지만, 이때 Frida 백트레이스를 활용한다면 어렵지 않게 보안 탐지 로직을 찾을 수 있다. 이번 포스팅에서는 Frida 백트레이스 사용 방법을 기술하고자 ..
개요 안드로이드에서 C/C++ 언어로 작성된 코드를 네이티브(Native) 코드라고 하며, 이러한 네이티브 코드는 ".so" 파일로 컴파일되어 라이브러리 형태로 제공된다. 특히나, 보안이 잘 된 안드로이드 앱을 진단하다 보면 Java 코드를 분석하는 상황보다 네이티브 코드로 작성된 라이브러리 파일을 분석하는 일이 더욱 빈번하다. 이번 포스팅에서는 네이티브 코드로 작성된 라이브러리(.so) 파일 분석 시 알아야 할 기초 지식에 관하여 기술하고자 한다. 라이브러리 로드 프로세스 [그림 1]의 도식도는 안드로이드 앱에서 라이브러리가 호출되어 로드되는 과정을 표현한 것으로 해당 프로세스를 통해 앱이 어떠한 함수를 사용하여 라이브러리를 불러와 Java로 작성된 코드와 C/C++ 로 작성된 네이티브 코드를 연결하여..
개요 안드로이드 앱 진단 시 루팅, 무결성, 디버깅 등과 같은 보안 위협에 탐지될 때, 별도의 우회 과정 없이 ADB를 이용하여 액티비티를 강제 실행함으로써, 탐지 프로세스가 무력화되는 경우가 종종 있다. 실제 필자가 진단 했던 A사의 앱의 경우에는 루팅 디바이스로 탐지될 경우 팝업을 사용자에게 표시하고 출력된 팝업 내에 "확인" 버튼을 클릭하면 앱 종료 프로세스가 동작하는 방식이었다. 그런데 여기서 "확인" 버튼을 누르지 않고 메인 화면에 해당하는 액티비티를 호출하면 앱이 종료되지 않고 정상 이용이 가능했다. 물론, 보안이 잘되어 있는 곳은 탐지 후 일정 시간이 지난 후에 앱이 자동으로 종료되게끔 설정한다. 하지만, 그러지 않은 곳은 간단한 조작을 통해 보안 탐지 프로세스를 무력화 시킬 수 있기 때문에..
개요 모바일 디바이스에서 Burp Suite를 사용하기 위해서는 Proxy 서버 인증서를 디바이스에 설치해야 하며, 인증서를 설치하지 않고 네트워크 통신 시 높은 확률로 SSL/TLS 관련 오류가 발생하게 된다. PC 단에서는 인증서를 설치하지 않고 Burp Suite를 사용해도 큰 문제가 없지만 모바일 앱의 경우는 다르다. 일반적으로 앱에서는 API 서버와 통신을 시도할 때 okhttp3 모듈을 사용한다. 해당 모듈의 경우 내부 코드에서 자체적으로 인증서 체인 검증을 진행하며 이때, 검증 체인 키 값을 디바이스에 설치된 Root CA에서 가지고 온다. 그리고 인증 키가 존재하지 않는다면 통신에 실패하게 된다. 따라서, Burp Suite를 이용할 때 해당 Proxy 서버의 인증서(PostSwigger)..
개요 치트 엔진을 이용한 동적 메모리 값을 변조하는 방법 개요 게임 관련 애플리케이션을 대상으로 코드 분석 및 변조 시 가장 많이 활용되는 도구를 뽑으라고 한다면 치트 엔진(Cheat Engine)이 아닐까 싶다. 치트 엔진은 보통 게임의 메모리 주소를 조작 naro-security.tistory.com 이전 "치트 엔진을 이용한 동적 메모리 값을 변조하는 방법" 포스팅에서는 "어썰트 큐브" 게임을 대상으로 동적 메모리 값을 변조하는 방법을 살펴봤다. 동적 메모리의 경우 프로그램이 실행되는 동안 데이터를 저장하고 처리하기 위해 게임 엔진에 의해 할당되는 메모리로 프로그램이 재실행 될 때 마다 주소가 변경된다. 반면, 정적 메모리는 동적 메모리와 반대로 고정적인 주소를 가지며, 이를 통해 프로그램 내부의 ..
개요 게임 관련 애플리케이션을 대상으로 코드 분석 및 변조 시 가장 많이 활용되는 도구를 뽑으라고 한다면 치트 엔진(Cheat Engine)이 아닐까 싶다. 치트 엔진은 보통 게임의 메모리 주소를 조작하여 게임 데이터를 변경하거나, 게임 내부의 변수나 값을 조작하는 등의 간단한 행위부터 동작 중인 앱을 디버깅하여 맵 포인터 분석, 스크립트 인젝터 등 다양한 행위를 가능케 해주는 애플리케이션이다. 또한, 치트 엔진은 x86 프로세서 아키텍쳐 기반의 운영 체제인 Windows 뿐만 아니라 ARM 프로세서 기반의 안드로이드 애플리케이션 분석 시에도 활용이 가능하다. 해당 포스팅부터 "Assault Cube"라는 FPS 게임을 대상으로 치트 엔진의 사용 방법을 익히고 이후 안드로이드 게임 앱 분석 방법까지 시리..
개요 네이티브 코드는 안드로이드 애플리케이션에서 C/C++ 언어로 작성된 코드를 말한다. 안드로이드 애플리케이션은 주로 Java와 Kotlin 같은 고수준 프로그래밍 언어로 개발되지만, 일부 기능이나 성능 향상, 하드웨어 접근, 호환성을 이유로 네이티브 코드를 활용한다. 특히 게임분야에서 네이티브 코드가 가장 많이 활용되며, 이는 그래픽 처리, 음성 처리 등과 같은 작업에서 Java 코드 대비 높은 효율을 보이기 때문이다. 또한, C/C++과 같이 저수준 언어로 작성된 코드는 기계어 또는 어셈블리어로 컴파일되기에 가독성이 낮아 코드 분석 및 리버스 엔지니어링에 어려움을 준다. 때문에, 앱에 적용되는 대 다수의 보안 솔루션들은 네이티브 코드를 활용하여 루팅과 같은 모바일 보안 위협을 탐지한다. 그리고 이러..