안드로이드 악성코드 분석론 및 리버싱 27th OCTOBER 2013
Pwn&Play 소속 Who am I 난 누구지? 이름 : 윤재성(남) 현 서울 K모 대학교 석사과정 멜 : yjs8888@gmail.com
Pwn&Play 소속 Who am I 난 누구지? 이름 : 윤재성(남) 현 서울 K모 대학 석사과정 멜 : yjs8888@gmail.com
안드로이드 악성코드 분석 방법?? 분석방법의 종류 동적 분석 정적 분석 혼합 분석
동적분석 통제된 환경에서 직접 악성코드를 실행하여 이후에 발생되는 변화를 분석하는 분석법 안드로이드 악성코드 분석 방법?? 동적 분석 동적분석 통제된 환경에서 직접 악성코드를 실행하여 이후에 발생되는 변화를 분석하는 분석법
동적분석 안드로이드 악성코드 분석 방법?? 동적 분석 안드로이드 악성코드 분석 방법?? 동적 분석 동적분석 - 동적 분석 툴 : AVD(Android Virtual Device), Droidbox Andrubis, ADB(Android Debug Bridge) - 커널의 동적 분석 툴 : strace, ktrace, kernel-shark 등
안드로이드 악성코드 분석 방법?? 동적 분석 동적분석 단계 Step 1 : 안드로이드 에뮬레이터 셋팅(AVD 셋팅)
동적분석 단계 안드로이드 악성코드 분석 방법?? 동적 분석 안드로이드 악성코드 분석 방법?? 동적 분석 동적분석 단계 Step 2 : 동적 분석 툴 셋팅(ex : DroidBox) 및 악성코드 실행
동적분석 단계 동적 분석 툴 결과 안드로이드 악성코드 분석 방법?? 동적 분석 안드로이드 악성코드 분석 방법?? 동적 분석 동적분석 단계 동적 분석 툴 결과 악성 APK파일의 MD5, SHA256, SHA1 파일의 읽고 쓰기 정보 암호화 API 호출 여부 네트워크 패킷 정보 시작된 서비스 SMS 서비스 이용 여부 SMS 전송 여부 강제 주입된 퍼미션 등
정적분석 악성코드를 실행시키지 않고 악성코드 바이너리를 디컴파일 혹은 디어셈블시켜 변환된 코드를 분석하는 분석법 안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 악성코드를 실행시키지 않고 악성코드 바이너리를 디컴파일 혹은 디어셈블시켜 변환된 코드를 분석하는 분석법
정적분석 안드로이드 악성코드 분석 방법?? 정적 분석 도구 이름 도구 설명 다운로드 경로 Android assistant 안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 도구 이름 도구 설명 다운로드 경로 Android assistant 백업용 android app Google Play Store apktool Apk 바인드/디코딩 툴 https://code.google.com/p/android-apktool/ Dex2jar Classes.dex 파일 jar 파일로 변환 https://code.google.com/p/dex2jar/ Jad(업데이트 멈춤) Class 파일 java 파일로 변환 http://varaneckas.com/jad/ JD-GUI Class 파일 java 파일로 변환 (자바 소스를 GUI로 보여줌) https://code.google.com/p/innlab/downloads/detail?name=jd-gui-0.3.3.windows.zip&can=2&q= 7-zip 압축 프로그램 http://www.7-zip.org/ Motizen-sign Apk 사이닝 툴 APKtoJava Apk를 자바소스까지 한번에 변환 https://github.com/broodplank/APKtoJava
안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 단계 Step 1 : 분석 대상 APK 파일을 구함(폰 혹은 웹상)
안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 단계 Step 2 : 디패키징 : apk파일을 디패키징 한다.
정적분석 단계 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 단계 Step 3 : Jad 혹은 JD-GUI를 이용하여 디컴파일링 한다.
안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 단계 Step 4 : Apktool을 이용하여 apk를 디코딩한다.
정적분석 단계 정적분석 후 알 수 있는 것 안드로이드 악성코드 분석 방법?? 정적 분석 각종 API 정보들(매개변수 포함) 안드로이드 악성코드 분석 방법?? 정적 분석 정적분석 단계 정적분석 후 알 수 있는 것 각종 API 정보들(매개변수 포함) API 정보들을 통하여 악성 행위 퍼미션정보들 인증서(Signer) 정보 등
낮은 유지비용과 프로그램 전역에 대한 분석가능 안드로이드 악성코드 분석 방법?? 정적 분석과 동적분석의 장단점 정적과 동적분석의 장단점 장 점 단 점 동적분석 실제 실행을 통한 정확한 행위 탐지 1. 시간 및 하드웨어 자원 등의 한계와 높은 유지비용 2. 테스트 케이스의 한계 정적분석 낮은 유지비용과 프로그램 전역에 대한 분석가능 1. 코드 난독화에 취약 2. API만 보고 탐지시 허위탐지 가능
난독화 툴 안드로이드 악성코드 분석 방법?? 정적 분석과 동적분석의 장단점 Proguard, DashO 메소드명, 변수명 변경 안드로이드 악성코드 분석 방법?? 정적 분석과 동적분석의 장단점 난독화 툴 Proguard, DashO 메소드명, 변수명 변경 매개변수 및 문자열 암호화 바이트 배열순서 변경 등
정적 + 동적 분석 각 분석의 단점들 때문에 동적분석과 정적분석을 같이 시행함으로써 악성행위를 정확히 파악하는 것 안드로이드 악성코드 분석 방법?? 혼합 분석 정적 + 동적 분석 각 분석의 단점들 때문에 동적분석과 정적분석을 같이 시행함으로써 악성행위를 정확히 파악하는 것
안드로이드 악성코드 분석 방법?? 혼합 분석 정적 + 동적 분석 온라인 APK 혼합 분석 서비스 sanddroid.xjtu.edu.cn, AndroTotal, AMAT(dunkelheit.com.br/amat/analysis/index_en.php)
앞에까지는 누구나 조금만 관심이 있었다면 알 수 있었을 이야기.. 안드로이드 악성코드 탐지 방법?? 탐지방법 앞에까지는 누구나 조금만 관심이 있었다면 알 수 있었을 이야기.. 자 이제 좀 어드밴스드 하게 학술적인 것도 좀 섞어 보죠~ 분석법을 알아봤으니 이제 탐지법도 알아봅시다~
안드로이드 악성코드의 3가지의 짓 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드의 3가지의 짓 1. Sending Premium-rate SMS 2. Calling Premium-rate Tel-Number 3. Collecting & Sending private/sys’ info.
안드로이드 악성코드의 탐지시 유의사항 [퍼미션, 시그니쳐, 시스템 콜 등을 이용] 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드의 탐지시 유의사항 1. 일단 컴퓨팅 파워가 PC보다 한정적이다! 2. 사용할 수 있는 자원이 한정적이다! 3. 자원 접근시 퍼미션이 있어야 한다! [퍼미션, 시그니쳐, 시스템 콜 등을 이용]
안드로이드 악성코드를 탐지하기 위한 수단들 안드로이드 악성코드 분석 방법?? 정적 분석 악의적인 퍼미션 시스템 콜 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드를 탐지하기 위한 수단들 악의적인 퍼미션 시스템 콜 API 호출정보 DEX파일의 바이트 코드 패턴(시그니처) 디컴파일된 혹은 디어셈블된 코드
시스템 콜?? 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드 분석 방법?? 정적 분석 시스템 콜?? 리눅스에서 사용자가 명령이나 프로그램 등을 실행하면 리눅스 커널에서 제공되는 시스템 콜이나 라이브러리 함수등 일종의 API 들을 통해 커널의 기능을 수행하도록 설계되어 있다. 따라서 이 시스템 콜과 라이브러리의 이용방법을 잘 숙지하면 어.떤 사용자든 리눅스 커널이 제공하는 기능을 이용할수 있다.
안드로이드 악성코드의 탐지 방법론 안드로이드 악성코드 분석 방법?? 정적 분석 Category Method Viewpoint 안드로이드 악성코드 분석 방법?? 정적 분석 안드로이드 악성코드의 탐지 방법론 Category Method Viewpoint Previous works 모바일 기기내 탐지 Permission-based approach 퍼미션 Kirin AdDroid Footprint-based approach 모든 시스템 리소스 Andromaly Xmandroid 모바일 기기밖 시스템 콜, 디스어셈블된 코드 AASandbox Permission + Footprint 퍼미션, Manifast.xml 정보, 시스템 콜, 디스어셈블된 코드, API 호출정보 DroidRanger Decompiling-based approach 디컴파일링 된 코드, Ded Money-Guard 혼합 탐지 Cloud-based approach 시스템 콜, API 함수
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 - DEX파일을 디어셈블코드로 변경하여 보기 보다는 Lib파일인 so파일을 확인 (보통 중요한 기능들은 라이브러리 파일로 따로 개발하여 사용함) - so파일은 리눅스 바이너리 파일(ELF포멧)로써 윈도우의 DLL 파일과 같은 역할 (JNI 이용) - 보통 안드로이드 폰에 사용되는 CPU가 ARM계열이기 ARM 어셈블이 지원되는 분석툴을 사용해야 함. (IDA나 gdb)
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 JNI(Java Native Interface)란? 자바가 다른 언어(C나 C++)로 만들어진 어플리케이션과 상호 작용할 수 있는 인터페이스를 제공한다. 자바가상머신(JVM)이 원시 메소드(native method)를 적재(locate)하고 수행(invoke)할 수 있도록 한다 JNI가 자바가상머신내에 포함됨으로써, 자바가상머신이 호스트 운영체제상의 입출력, 그래픽스, 네트워킹, 스레드와 같은 기능들을 작동하기 위한 로컬시스템호출(local system calls)을 수행할 수 있도록 한다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 OP Code<cond> Rd, Rn, Rm OP Code : ADD,SUB,MOV,LDR,STR 같은 어셈블리 명령어. cond : 조건부로 명령을 실행해야 할 경우 OP Code뒤에 붙여서 사용합니다. 명령문의 추가 옵션이라고 생각하시면 이해하는데 편합니다. Rd : Destination Register. 반드시 Register R0~R15만 올 수 있습니다. 연산작업의 결과값을 저장하는 레지스터. Rn : Operand1 Register. 반드시 Register R0~R15만 올 수 있습니다. Rm : Operand2. 레지스터뿐만 아니라 상수, 주소, 쉬프트 연산식 등 다양한 값을 사용할 수 있습니다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 예를 들어, MOV R0,R1,R2 명령은. OP Code = MOV, Rd = R0, Rn = R1, Rm = R2가 됩니다. ADD R0,R1,#20 명령은, OP Code = ADD, Rd = R0, Rn = R1, Rm = 20(숫자상수) 한가지 주의할점은 Rd와 Rn은 무조건 Register(R0~R15)만 올 수 있습니다. 반면 Rm은 상수(#), 주소([]), 쉬프트 연산식 등 다양한 값이 사용될 수 있습니다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 1) 산술 연산 2) 비트 연산 ADD : + 연산 명령. Rd = Rn+Rm SUB : - 연산 명령. Rd = Rn-Rm 2) 비트 연산 AND : & 비트 연산. Rd = Rn & Rm. ex 1) AND R0, R1, #0xF8 --> R1에 0xF8(1111 1000)을 AND 연산해서 그 결과값을 R0에 저장.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 2) 비트 연산 이어서.. ORR : | 비트 연산. Rd = Rn | Rm. ex) ORR R0, R1, #0x2 --> R1에 0x2(0010)을 OR 연산해서 그 결과값을 R0에 저장.. EOR : ^ (Exclusive OR) 비트 연산. Rd = Rn ^ Rm. ex) EOR R0, R1, #0xF8 --> R1에 0xF8(1111 1000)을 Exclusive OR 연산해서 그 결과값을 R0에 저장. 흔히 특정 Bit를 Toggle을 하고 싶을경우 사용합니다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 2) 비트 연산 이어서.. 자주쓰이는 명령어 2) 비트 연산 이어서.. BIC : &! (Not And) 비트 연산. Rd = Rn & !Rm. ex) BIC R0, R0, #0x3 -> R0[1:0]을 0으로 clear시켜서 R0에 저장. 만약 R0값이 0xFF(1111 1111) 였다면, 명령을 수행하고 난 뒤에는 0xFC(1111 1100)이 됩니다. 특정 BIT를 Clear하고 싶을 경우 사용합니다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 3) 대입 연산 4) 쉬프트 연산 자주쓰이는 명령어 3) 대입 연산 MOV : Rd = Rm. 레지스터에 값을 대입합니다. ex 1) MOV R0, #100 -> R0 레지스터에 숫자상수 100을 대입합니다. ex 2) MOV R0, R1 -> R0 레지스터에 R1 레지스터 값을 대입합니다. 4) 쉬프트 연산 LSL : << (Left Shift). RSL : >> (Right Shift).
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 5) 분기 명령 자주쓰이는 명령어 5) 분기 명령 B : goto 명령. Return 하지 않는 분기 명령입니다. 즉 C언어에서 goto와 같다고 보시면 됩니다. BL : Sub-Routine Call. 분기했다가 해당 명령이 끝나면 다시 복귀하는 명령입니다. C언어에서 function call과 같다고 보시면 됩니다. 서브루틴이 끝난뒤 복귀하기 위해서, ARM에서는 BL을 사용하면 복귀할 주소(BL 다음 명령의 주소)를 R14(LR) 레지스터에 저장해 줍니다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 6) 비교 연산 자주쓰이는 명령어 6) 비교 연산 CMP : if(Rn - Rm == 0). Rn과 Rm의 값이 같은지 비교하는 명령어. 값이 같은지 비교하는 방법은 Rn에서 Rm을 뺀 결과를 Status Register에 저장. 이후에 오는 명령어에서 Status 레지스터의 값을 참조하여 조건 명령을 내릴 수 있습니다. CPSR(Current Program Status Register)의 4개 필드 - N (Negative) : 연산결과가 음수인 경우 1로 SET. - Z (Zero) : 연산결과가 0인 경우 1로 SET. - C (Carry) : 덧셈 연산의 Carry일 경우 1로 SET. 뺄셈 연산의 Borrow일 경우 0으로 Clear. rotation shift 연산에서는 shift되어 밀린 1 bit를 저장. - V (Overflow) : signed 연산의 덧셈, 뺼셈에서 연산 결과로 overflow가 발생한 경우 1로 SET.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 6) 비교 연산(조건부 실행 연산) 자주쓰이는 명령어 6) 비교 연산(조건부 실행 연산) - HS (>=), LO(<), HI(>), LS(<=) - GE (>=), LT(<), GT(>), LE(<=) - EQ(==), NE(!=) - MI(음수), PL(0또는 양수) - VS(overflow), VC(No overflow) ex) CMP R0,R1 ADDEQ R0,R2,#100 MOVNE R0,#1 => R0와 R1의 값을 비교해서 만약 값이 같다면 R0=R2+100을 수행하고, 틀리면 R0에 1을 대입합니다.
안드로이드 악성코드 리버싱 안드로이드 악성코드 리버싱 자주쓰이는 명령어 7) 메모리 연산 자주쓰이는 명령어 7) 메모리 연산 STR : [Rm] = Rd. 메모리 주소에 레지스터 값을 저장합니다. LDR : Rd = [Rm]. 해당 메모리 주소의 값을 레지스터에 저장합니다. ★ [] : 레지스터에 중괄호를 붙이면 해당 레지스터값이 있는 메모리 주소 (ex) STR R1, [R0], #4 : R0번지에 R1의 값을 저장하고 R0의 주소값+4 ★ ! : Auto-update 옵션 (ex) STR R1, [R0, #4]! : R0+4번지에 R1값 넣고, R0의 주소값 +4
백신 선정 안드로이드 백신 분석 - 인지도가 높으며, 탐지율이 높은 외산 백신과 국내 대표 백신을 선정 A모사 백신과 F-Secure Mobile 백신으로 선정 백신 비교 표 A모사 백신 F-Secure Mobile 다운로드 경로 안드로이드 마켓에서 무료 다운 구매 후 F-Secure 사이트에서 다운 (안드로이드 마켓에 없음) 요구 퍼미션 SYSTEM_ALERT_WINDOW INSTALL_PACKAGES READ_PHONE_STATE .INTERNET KILL_BACKGROUND_PROCESSES RESTART_PACKAGES ACCESS_NETWORK_STATE WAKE_LOCK GOOGLE_AUTH READ_LOGS ACCESS_COARSE_LOCATION ACCESS_FINE_LOCATION ACCESS_WIFI_STATE …..(이후로 괭장히 많음) 버전 2.0 7.6.09823 난독화 유무 난독화가 전혀 안되어 있음 ProGuard와 자체 난독화 방법으로 소스코드 난독화
분석 과정 안드로이드 백신 분석 APK –> DEX -> JAR -> JAVA 변경 JAVA 소스와 Resource 폴더 내 라이브러리 so 파일 분석 안드로이드 마켓에서 V3 Mobile.apk과 F-Secure 사이트에서 30일 평가판 백신 apk 파일을 다운로드 다운로드 된 apk파일을 아래의 툴들로 최종 java파일과 so파일로 변경 사용된 툴 IDA pro 6.1 APKtoJava JD-GUI
안드로이드 백신 분석 A백신 백신 기능에 따른 소스분석 백신 패키지 예상 기능분석 후보
A백신 안드로이드 백신 분석 백신 기능(시그니처 탐지 기능과 Behavior 엔진에 따른 탐지 기능)에 따른 소스분석 A백신 패키지내 antivirus mobilecommon패키지내 AntiVirus(실제기능 패키지) <- 분석 대상 42
A백신 안드로이드 백신 분석 백신의 핵심 엔진 라이브러리 Libahnendeengine.so : 백신 엔진 호출 Libavenginemanager.so : 백신 매니져 Libahnfwmanager.so : 방화벽 매니져 Libauthmanager.so : 인증 매니져 Libavengine.so : 실제 엔진 라이브러리 Libahnfw.so : 실제 방화벽 라이브러리
A백신 안드로이드 백신 분석 Libavengine.so 파일만을 리버싱을 통한 정적 분석 실제 백신이 어떻게 악성코드를 진단하는지 확인하고, 치료하는지 확인
실시간 모드 및 악성코드 검사시 모듈을 로드하는 부분 안드로이드 백신 분석 A백신 A백신 패키지내 AntiVirus 전체 진단 기능은 BackgroundScan(시그니처 탐지)와 BehaviorEngine, 실시간 진단으로 나눌 수 있다. 시그니처 검사 Behavior Engine Detection된 악성코드 처리 실시간 모드 및 악성코드 검사시 모듈을 로드하는 부분
A백신 안드로이드 백신 분석 A백신 패키지내 AntiVirus 엔진을 구성하는 시그니쳐 파일 및 라이브러리 파일은 아래와 같다. 시그니처 탐지를 위한 시그니쳐 파일은 v3mobiled.v3d파일과 v3mobilen.v3d파일이다. 시그니처 파일들은 zip파일로써 확장자가 v3d로 바뀌어 저장되고, 업데이트 되며, 엔진에서 로드될 때, unzip 라이브러리를 이용하여 압축을 해제한 후 엔진에 로드된다. 특히 behavior 엔진의 시그니처 파일은 거의 업데이트가 잘 안되는 것으로 확인되었다
A백신 안드로이드 백신 분석 A백신 패키지내 AntiVirus Behavior Engine 기능 분석 진단 순서 : 엔진 데이터 로드(v3hengine.dat) -> scanBehavior 함수 호출 -> 패키지 매니저를 통하여 설치된 앱들의 퍼미션 정보를 추출 -> 엔진 데이터 내에 들어있는 악성 퍼미션들이 존재하는 지 여부확인 v3hengine.dat 내용 엔진 버전 진단할 퍼미션 Dat파일내 퍼미션이 나타나는 파일의 위치
A백신 안드로이드 백신 분석 시그니처 탐지 기능 분석 전체 진단 순서 : 시그니처 엔진 로드(vmobilen.v3d, vmobiled.v3d, libavengine.so) -> 시그니처 파일을 디코딩하여 메모리로 로드 -> 전체적인 파일경로 및 파일 스캔 -> 파일을 읽은 후, 특정 부분의 데이터와 시그니처 데이터 대조 후 악성코드 여부판단
A백신 안드로이드 백신 분석 시그니처 탐지 기능 분석 세부진단 순서 : 진단시 진단 대상 파일이 apk파일일 경우 apk 헤더를 확인 -> 정상적인 apk파일일 경우 dex파일이 존재하는 위치에 가서 dex 추출 -> 이 dex파일을 sha1으로 해쉬 -> 시그니처 데이터 역시 hash화 시켜 대조 -> apk파일이 아닐 경우 파일을 읽은 후 시그니처와 대조 후 악성판단
A백신 안드로이드 백신 분석 시그니처 탐지 기능 분석 실제 탐지역활을 하는 핵심 함수는 Libavengine.so 라이브러리 파일 안에 scan_file이라는 단 하나의 함수였다.
A백신 안드로이드 백신 분석 시그니처 탐지 기능 분석 전체적인 함수 호출 순서는 먼저 crawl_files라는 함수를 호출하여 디렉토리 안에 파일들을 스캔하게 된다. 스켄이 완료되면 scan_file을 호출하게 되고 init_v3rule이라는 함수가 시그니처 파일들을 로드하여 압축을 해제하고, uint32dec라는 함수로 디코딩하여 메모리로 로드
A백신 안드로이드 백신 분석 시그니처 탐지 기능 분석 시그니처 파일인 vmobilen.v3d, vmobiled.v3d은 둘 다 zip파일이며, 확장자를 zip파일로 변경 후 압축 해제시 진짜 시그니처 파일이 확인가능 Vmobilen파일과 vmobiled 파일의 내용 vmobilen vmobiled
안드로이드 백신 분석 F-Secure Mobile 백신 기능에 따른 소스분석 F-Secure 패키지 기능분석 대상
F-Secure Mobile 안드로이드 백신 분석 총 69개의 Class파일로 되어있으며, activity 기능을 하는 class들을 제외하고는 전부 proguard로 인해 class명이 변경되어 있다. fsecure 패키지내 antivirus
F-Secure Mobile 안드로이드 백신 분석 백신의 핵심 엔진 라이브러리 Libcrypto.so : 암호화 통신을 위한 암호 알고리즘 모듈 Libdaas2.so : 엔진에서 사용되는 일부 기능 구현(예 : manifast 파일 비교 등) Libfmlib.so : 파일 처리와 관련된 라이브러리(예 : 압축해제 등) Libfsclm.so : 암호화를 위한 키 관리 및 암호화 라이브러리 Libfsecr32.so : 실제 백신 엔진 Libfsms_jni.so : 프로세스 관리에 사용되는 라이브러리 Libfsysutil.so : 파일 스캔시 사용되는 라이브러리 Libhive.so : SQLite와 관련된 라이브러리 Liborspclient.so : 서버와의 통신을 위한 라이브러리 Libspglue.so : 각종 예외나 오류처리 라이브러리 Libsplib.so : 백신 엔진 관리 라이브러리
F-Secure Mobile 안드로이드 백신 분석 백신의 핵심 엔진 라이브러리 백신의 주요 탐지기능은 시그니처 탐지이며, 엔진의 주요 기능들은 lua 5.1 스크립트로 이루어져 있다. 시그니처 내용들은 InfectionRecords.db라는 sqlite파일로 저장되며, packages, files, unscanned의 3개의 테이블로 이루어져 있다. 바이러스 탐지시 시그니처 내용들을 rule로써 읽어 들이는 데, 자체 난독화를 해놓은 상태라서 deofuscate라는 함수로 해독을 하여 메모리에 로드하게 된다.
F-Secure Mobile 안드로이드 백신 분석 백신의 핵심 엔진 라이브러리 서버와의 SSL 통신 및 암호화를 위한 인증서와 서버리스트가 담겨져 있는 acl파일이 존재하였다. 진단시 Manifest 정보를 대조하기 위하여 hydra-android.mf 파일에 악성 앱의 Manifest 정보가 저장되어 있다. Fsedb.dat 파일에는 Manifest 정보와 매칭되는 악성 앱의 이름과 정보가 난독화 되어 저장되어 있다.
안드로이드 백신 분석 F-Secure Mobile hydra-android.mf 파일의 내용 앱의 제목 앱의 Sha1 정보
안드로이드 백신 분석 F-Secure Mobile Fsedb.dat 파일의 내용
F-Secure Mobile 안드로이드 백신 분석 진단 순서는 v3와 거의 비슷하며, 차이가 있다면 apk파일내 dex파일 만을 보는 것이 아니라 apk 파일 내부의 모든 파일들의 시그니처를 확인해 보았다. manifest 파일의 경우 가지고 있는 악성 manifest 정보들과 대조를 하여 repackage 여부를 확인하였다. 진단은 거의 Libfsecr32.so 라이브러리 파일내의 함수들로만 이루어 졌으며, scanfile이라는 함수가 호출되어 각각의 파일들에 대해 진단이 이루어졌다. Scanfile 함수 내부를 보면 native c 함수가 아닌 Lua 스크립트를 이용한 함수들을 주로 이용하였고, 중간중간 native c 함수를 섞어서 사용했기 때문에 호출되는 함수가 많아 분석에 어려움이 있었다.
안드로이드 백신 분석 F-Secure Mobile Scanfile 함수 호출 순서도 Scanfile 함수의 시작
안드로이드 악성코드 분석론 및 리버싱 Q & A
안드로이드 악성코드 분석론 및 리버싱 감사합니다.