어플리케이션 보안 & 취약점 진단
[Android]
▶ OS 변조 탐지
- SU 명령어 확인
~> 루트 명령어(su) 실행 후 실행 여부 확인
- 파일 이름 기반 확인
~> 루팅 시 설치되는 파일 이름을 기반으로 탐지
~> /sbin/su, /system/su, /system/sbin/su, /system/xbin/su, /system/app/Superuser.apk
- 시스템 설정 파일 확인
~> 루팅 후 변경이 가능한 시스템 설정 파일 확인
~> ro.ebuggable, service.adb.root
▶ 메모리 내 중요 정보 노출
- 이용자 단말기 메모리 영역에서 중요 정보(계정, 카드번호, 계좌)가 평문으로 존재하는 경우
~> Frida-dump
▶ 단말기 내 중요정보 저장
- 어플리케이션 사용 폴더 및 외부 저장소에 중요정보 저장 여부 확인
- SharedPreferences
~> 어플리케이션 폴더 내 데이터를 파일로 저장
/data/data/[패키지명]/shard_prefs/
- SQLite
~> 어플리케이션 폴더 내 데이터베이스 파일로 저장
/data/data/[패키지명]/databases/
▶ 화면 강제 실행에 의한 인증단계 우회
- AndroidManifest.xml에 exported 값이 true일 시 가능
- android:exported="true" : 다른 앱이나 시스템에서 해당 서비스 직접 접근 가능
- android:exported="false" : 앱 내부에서만 접근 가능
adb shell am start -n com.android.insecurebankv2/.ViewStatement
▶ 로드된 덱스 확인
- /proc/[pid]/maps에 load된 dex가 보임
- 보안 솔루션 경우 해당 dex를 삭제하기도 함
- adb pull로 해당 파일을 꺼내면 odex 형태
- odex를 smali로 변환해 분석 가능
▶ Multiex
- DEX의 사이즈 제한으로 인해 DEX를 동적으로 로드
- File 호출
- Memory 호출
▶ ELF(Executable and Linkable Format)
- 안드로이드 Native 영역
- lib 디렉토리 안의 lib[name].so
- .text(Code 섹션)에서의 함수 객체 출력
- 각 함수 내에서 GOT 또는 함수로의 호출 관계 표현
~> plt(Procedure Linkage Table) : 외부 프로시저를 연결해주는 테이블, 다른 라이브러리 호출 가능
~> got(Global Offset Table) : PLT가 참조하는 테이블, 프로시저들의 주소
▶ Frida ⭐
- DBI 프레임 워크
- 다양한 플랫폼에서 프로세스에 대한 코드 인젝션이 가능
- JavaScript 통한 확장성 지님 => 컴파일 불필요!
- 주요 기능
~> AppMon과 Needle 등의 도구에서 프리다를 기반으로 사용
~> 함수 후킹
~> Application 디버깅 가능
~> Heap 메모리 내 객체 인스턴스 검색 및 사용
~> 실시간 트래픽 스니핑 또는 암호 해독
~> 탈옥 또는 루팅되지 않은 단말기에서도 사용 가능
- 주요 도구
- 프리다에 연결된 프로세스 목록을 출력하기 위한 도구
- adb에 연결되어 있으면 adb shell ps
frida-ps
- 연결된 디바이스를 출력하는 도구
frida-ls-devices
- 함수 호출을 동적으로 추적하기 위한 도구
frida-trace
- 프로세스를 종료하는 도구
frida-kill
▶ open 함수
- Linux Manual Page 참조
- 특정 파일을 열 때 해당 함수 사용
- open.js
~> 해당 어플리케이션이 실행되며 open 함수를 호출 시 아래 코드가 후킹(Hooking)되어 "open()"이라는 로그를 남기고 있음
onEnter(log, args, state){
log('open()');
},
onleave(log, retval, state){
}
▶ Java.perform(function)
- 현재 스레드가 가상머신에 연결되어 있는지 확인하고 function 호출
Java.perform(function () {
Java.enumerateLoadedClasses({
onMatch: function (className) {
console.log(className);
},
onComplete: function () {},
});
});
💡 오늘의 실습!
frida 환경 구축
adb push frida-server-16.1.7-android-x86_64 /data/local/tmp/
adb 쉘로 접속
cd /data/local/tmp/
ls -al
chmod +x frida-server-16.1.7-android-x86_64
권한을 777로 바꿔준 것이다! 똑같이 'ls -al' 명령어로 확인해보면 읽고, 쓰고, 실행이 가능하게 바뀐 것을 볼 수 있다
백그라운드에서 frida 서버 돌려주기
./frida-server-16.1.7-android-x86_64 &
서버 잘 붙어있는지 확인하기
ps -ef | grep "frida"
⚠️ device의 버전을 확인하고 frida 파일을 잘 설치하고 돌려야됨!
frida를 이용해 Nox 브라우저 dump 뜨기
python fridump.py -U -s 인터넷
Nox가 가끔 62001 포트 번호로 연결이 안 돼서
' cannot connect to 127.0.0.1:62001: 대상 컴퓨터에서 연결을 거부했으므로 연결하지 못했습니다. (10061) '
오류가 뜨는데 이럴 때는!
1. tasklist 명령어로 NoxBoxHandle의 프로세스 ID를 확인하고
tasklist | findstr "Nox"
2. netstat 명령어로 해당 NoxBoxHandled의 port 번호들을 확인한다
netstat -ano | findstr [프로세스 ID]
3. 리스닝하는 포트 찾아서 연결해주기
adb connect 127.0.0.1:[포트번호]
오늘의 후기! :
게임 파일 뜯어서 직접 조작도 해보고! 정말 신기한 경험을 많이 했다.
개발만 해왔던 개구리임이 또 한 번 실감되는 하루였다.
실습이 많아질수록 스트레스도 재미도 배가 되는 중 ㅎㅎ
화이팅!
'SeSAC > 어플리케이션 보안 & 취약점 진단' 카테고리의 다른 글
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 8일차 (0) | 2023.11.22 |
---|---|
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 7일차 (0) | 2023.11.21 |
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 5, 6일차 (2) | 2023.11.21 |
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 4일차 (0) | 2023.11.16 |
[SeSAC 성동캠퍼스 1기] 어플리케이션 보안 & 취약점 진단 3일차 (0) | 2023.11.16 |