본문 바로가기

모바일 앱 해킹

(15)
[Frida] Uncrackable Level 1 풀이 앱을 실행하면 다음과 같이 루트가 탐지됐다는 문구가 뜬다 어디에서 발생하는 것인지 소스코드를 확인해보자.  MainActivity 클래스에서 a 메소드를 통해 루트 탐지 문구가 발생하는 것을 알아냈다그렇다면 a 메소드를 확인해보자  setButton 함수로 ok 버튼 만들고, 해당 버튼을 클릭하면 onClick 메소드가 실행되어 system.exit에 의해 앱이 종료된다는 것을 파악했다 그러니까 ok를 눌러도 앱이 종료되지 않게 후킹을 하면 루트 탐지 우회를 할 수 있지 않을까? 여기서 잠깐 OnClick 메서드는 OnClickListener 인터페이스에 정의되어 있는 메서드이다.프리다에는 인터페이스를 가져오는 API가 없기 때문에 onClick 메서드 대신 안에 있는 system.exit를 재작성할 것..
FridaLab 5 ~ 8 풀이 FridaLab 05>> chall05() 메소드에 frida 문자열을 항상 전송하기 함수를 재작성하기 위해 Java.use 사용함check 버튼을 누를 때마다 chall05()가 실행됨setImmediate(function() { Java.perform(function(){ var chall_05 = Java.use("uk.rossmarks.fridalab.MainActivity"); chall_05.chall05.implementation = function(arg1){ // 기존 함수와 동일한 로직 this.chall05("frida"); console.log("\nSolved Chall05"); } })})    FridaLab 06>> 올바른 값으로 10초 후 chall06() ..
FridaLab 1 ~ 4 풀이 FridaLab 01변수와 메서드 모두 static이므로 Java.use를 사용해서 후킹setImmediate(function() { Java.perform(function(){ // Challenge 01 var chall_01 = Java.use("uk.rossmarks.fridalab.challenge_01"); chall_01.chall01.value = 1; console.log("Sloved Chall01"); })})    FridaLab 02static 메소드가 아니므로 인스턴스를 생성한 후에 호출 Java.choose를 사용해서 후킹setImmediate(function() { Java.perform(function(){ // Challenge 02 Java.choose("u..
Frida 기본 정리 | Frida란?, 기본 문법, CLI 활용 Frida란? 안드로이드 앱을 비롯해 다양한 플랫폼에서 실행되는 애플리케이션의 동작을 조작하는데 사용되는 동적 코드 분석 툴 대표적으로 프로세스를 후킹하는 기능을 제공한다.(후킹은 정보를 가로채고, 실행흐름을 변경하는 등 원래와 다른 기능을 제공하게 하는 기술이다.) Frida 기본 문법Java.use()변수와 메소드에 액세스 할 수 있는 클래스 객체를 반환클래스가 어떤 메소드와 변수를 가지고 있는지 등 클래스의 구조와 동작에 대한 정보와 조작 기능을 제공함 static 변수 및 메소드는 프로그램 실행 시 메모리에 자동으로 올라오므로 인스턴스를 생성해서 호출할 필요가 없음. 이때 Java.use 를 사용해서 후킹함 예시var Class = Java.use("uk.rossmarks.fridalab.chal..
[DIVA] Input Validation Issues - Part 1 (입력값 검증 부재) | 안드로이드 앱 취약점 실습 입력값 검증 부재 취약점은 사용자로부터 입력받은 데이터를 제대로 검증하지 않아 발생하는 보안 취약점이다. 악의적인 사용자가 의도적으로 조작된 데이터를 입력하여 시스템 오류, 데이터 유출 등 다양한 문제를 일으킬 수 있다.입력값 검증 부재의 대표적인 취약점으로 웹 해킹때 배웠던 SQL Injection과 XSS가 있다. 취약점을 찾아보자목표 : 유저 이름을 모르는 상태로 모든 유저의 정보를 access 해야 한다. 유저는 총 3명이고, 단 한 번의 검색으로 모두 확인해야 한다.의미 없이 123을 입력했떠니 not found라고 뜬다. 이 상태에서는 유저 정보도 모르고 아무것도 확인할 수 없으니  로그캣 정보를 이용해보기로 한다.싱글쿼터를 넣고 검색했더니 로그캣에 SQL 쿼리문이 그대로 뜬다. 조건절을 참으..
[DIVA] Insecure Data Storage - Part4 (안전하지 않은 데이터 저장) | 안드로이드 앱 취약점 실습 안전하지 않은 데이터 저장 Part 4는 Part 1 ~ 3과 다르게 외부 저장소에 중요 정보가 저장되는 취약점이 있다.외부 저장소는 모든 앱에서 접근할 수 있기 때문에 중요한 정보가 저장되면 안된다. 앱을 실행하고 취약점을 찾아보자 임의로 아이디와 패스워드를 입력하고 SAVE 버튼을 누르니 저장에 성공했다는 알림 메시지가 뜬다. 그럼 이제 내 계정 정보가 외부 저장소에 저장됐는지 확인해보자 adb shell로 안드로이드 쉘에로 이동 후 외부 저장소 경로인 /sdcard로 이동한다.ls -al 해보니 최근 수정 날짜가 오늘인 .uinfo.txt 파일이 보인다.  cat 명령어로 파일 내용을 확인해 보니 방금전 입력한 아이디와 패스워드가 저장되어있다.   대응방안중요 정보는 내부 저장소(/data/data..
[DIVA] Insecure Data Storage - Part2 (안전하지 않은 데이터 저장) | 안드로이드 앱 취약점 실습 안전하지 않은 데이터 저장 취약점은 중요정보(패스워드, 거래정보, 계좌정보 등)가 내부 저장소에 평문으로 저장될 때 발생한다. 데이터가 암호화되지 않고 평문으로 저장된다면 단말기가 악성코드에 감염되거나, 공격자가 앱에 접근할 수 있는 권한을 획득했을 때 중요 정보들을 탈취할 수 있다. 아무 아이디와 패스워드를 입력하고 SAVE 버튼을 누르니 자격증명이 저장되었다는 메시지가 뜬다.   우선 adb shell로 안드로이드 쉘에 접근한 후 DIVA 앱 패키지 디렉터리로 이동한다. 안전하지 않은 정보 저장 취약점에서 주로 확인해봐야할 디렉터리는 shared_prefsdatabases 이 두개다. part1 에서는 shared_prefs 디렉터리에서 취약점을 발견했으니 이번에는 databases를 확인해보자 저장..
[DIVA] Insecure Data Storage - Part1 (안전하지 않은 데이터 저장) | 안드로이드 앱 취약점 실습 안전하지 않은 데이터 저장 취약점은 중요정보(패스워드, 거래정보, 계좌정보 등)가 내부 저장소에 평문으로 저장될 때 발생한다. 데이터가 암호화되지 않고 평문으로 저장된다면 단말기가 악성코드에 감염되거나, 공격자가 앱에 접근할 수 있는 권한을 획득했을 때 중요 정보들을 탈취할 수 있다.  아이디와 패스워드를 입력하고 SAVE 버튼을 누르니 자격증명이 저장되었다는 메시지가 뜬다.  설치된 앱 패키지들 저장된 /data/data로 이동하여 DIVA 패키지 이름(jakhar.aseem.diva)을 확인 후 해당 디렉터리로 이동한다. ls -al 명령으로 저장된 파일 목록을 확인할 수 있다.  그 중 설정 파일이 저장되는 shared_prefs 디렉터리로 이동해본다. shared_prefs 파일은 앱 실행동안 필..