일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Interface
- 심리여행
- HelloWorld
- opcode
- abstract
- Android
- 치유
- 일상회피
- Shared Elements
- extends
- javap
- IMPLEMENT
- static
- ㅇ
- throws
- 버킷리스트
- 보안
- 보안취약점
- 회피
- 취약점
- bytecode 분석
- 심리학
- 일상탈출
- bytecode
- Transition
- Navigation Component
- 여행
- jvm
- Recylcer
- 여행계획
- Today
- Total
패스트터틀
안드로이드 앱 정적 분석 기법(19.5.14) 본문
분석방법종류
-정적분석
- 프로그램 실행없이 검사 / 분석(코드,리소스)
- 코드전체분석가능
- 정확한 코드 위치 파악
- 실행해야만 알 수 있는 정보 파악 불가
- False발생가능성 존재
-동적분석
- What
- Where
- When / Why
- Who
- How
분석을 위한 도구설명
AAPT(Android Asset Packaging Tool)
안드로이드 앱 패키지안의 리소스를 컴파일(원시 코드에서 목적 코드로 옮기는 과정)위한 도구
기존 패키지의 리소스 및 기타 정보 조회 기능이 존재, 다양한
https://elinux.org/Android_aapt]
다양한 옵션들이 존재하는데
>aapt list package.apk 패키지 내 파일 리스트 조회
>aapt dump badging package.apk 패키지 주요 정보 조회
>aapt dump xmltree package.apk Androidmanifest.xml
- xml트리 형식으로 파일 분석(xml로 파싱해서 xml형태로 보여줌)
Key tool
Java 패키지 서명 도구
- Java 프로그램에 서명을 하거나, 수정, 조회 하는 도구
- JDK 설치 시 기본으로 설치됨
> keytool –printcert -jarfile package.apk -> 앱 서명 값 조회
시리얼넘버는뭐고 sha는 머고 머고 하는 서명 정보나옴...
dex2jar
To Convert .Dex to .Jar
• 안드로이드 실행파일인 dex를 자바 실행파일인 jar로 변환
> d2j-dex2jar.bat dexfile.dex(혹은 apkfile.apk)
dex(apk) 파일을 jar로 변환
jd-gui
무료도구로는 이게 재일 좋다고함
Java 실행파일 decompiler
• Java 실행코드를 decompile하여 소스코드로 보여주는 도구
• http://java-decompiler.github.io/
None-Code 분석
none-code는 코드가 아닌것으로
코드가 아닌 다른 파일을 분석은
인증서 로는 META-INF
권한 AndroidManifest.xml
파일 Resources, Assets
Etc.
인증서 분석
앱 서명
- 해당 앱이 해당 개발자가 만든것으로 인증을 해주는 디지털 지문역할을 해주는것으로
위장 악성앱 (Piggybacked/ Repackaged Malicious App)
- 유명 앱 내부에 악성코드를 삽입해서 재배포 하는 악성앱
- 앱서명이 기존과 다름
앱 패키지명 확인
- 앱 파일(APK) 압축 해제
- aapt를 통해 앱 패키지명 확인
원본 앱 확보
- 패키지명을 이용하여 play store(혹은 apkpure*) 등에서 원본앱 다운로드
(ApkPure는 playstore를 크롤링해서 지속적으로 앱을 수집해서 재배포 하는 웹서비스)
인증서 비교
악성 : SHA1, SHA256 달름
정상 앱 :
권한 분석
권한(Permision)
- 안드로이드에서 앱이 기기의 주요기능을 제어하거나 저장된 정보를 접근하기위해 사용됨
(윈도우상의 관리자권한?(UAC)란 비슷한것 같음)
- 이와같은 권한정보들은 AndroidManifest.xml
https://developer.android.com/guide/topics/permissions/overview?hl=ko#permission-groups
악성 의심 권한을 가지는것들은 주로 악성코드이기때문에 이런 민감한 기능의 사용 여부를 통해서 악성코드 분류가능
android.permission.RECEIVE_WEP_PUSH
- 앱이 WAP 메시지를 수신하고 처리할수 있도록 허용
android.permission.WRITE_APN_SETTINGS *
- 앱이 모든 네트워크 트래픽을 가로채고 검사하거나 네트워크 설정을 변경할 수 있도록 허용
android.permission.BROADCAST_WAP_PUSH *
- 가짜로 메시지가 도착한것처럼 보이게끔 악용하는 , WAP PUSH메시지를 받았다는 알림을 브로드캐스트하는것
android.permission.WRITE_SMS (~API 22)
- 앱이 SIM카드에 저장도니 SMS쓰거나 삭제하도록 허용
android.permission.READ_SMS
- SIM카드의 SMS읽을 수 있도록 허용
android.permission.DELETE_PACKAGES *
- 앱이 다른 앱 패키지를 삭제
android.permission.BROADCAST_PACKAGE_REMOVED *
- 앱이 앱 패키지가 삭제되었다는 알림을 브로드캐스트(가로채기) 허용
android.permission.RECEIVE_MMS
- 앱이 MMS 모니터 수신하고 몰래 알림 삭제 가능
android.permission.INSTALL_PACKAGES *
- 앱이 새로운 또는 업데이트된 앱 패키지를 설치할 수 있도록 ㅎ용
android.permission.BRICK (~API 22)
- 앱이 기기를 영구적으로 사용중지할 수 있게 함, 매우 위험한 권한
android.permission.RECEIVE_SMS
- 앱이 SMS메시지를 수신하고, 수신표시X해주고, 모니터링 가능
android.permission.SET_PROCESS_LIMIT *
- 앱이 실행할 최대 프로세스 수를 제어할 수있도록 허용,일반적인 앱에서 사용안함,백신사용못하게 막게끔가능
android.permission.DISABLE_KEYGUARD
- 앱이 잠금화면을 비활성화도록
android.permission.FACTORY_TEST
- 앱이 제조자 테스트앱으로 동작해서 root유저 앱으로 동작하도록 허용,일반적으로 사용이 불가능함
android.permission.BIND_APPWIDGET
- 위젯이 앱의 개인 정보에 접근이 가능하도록 할수 있음
android.permission.INTERNAL_SYSTEM_WINDOW (~API 22)
- 내부 시스템 사용자 인터페이스에서 사용하는 창만들수 있음
android.permission.PERSISTENT_ACTIVITY (자제권고 API 15~)
- 메모리를 지속적으로 할당해서 기기의 속도를 저하시킬 수 있음
android.permission.PROCESS_OUTGOING_CALLS (자제권고 API Q~)
- 앱이 발신 통화를 다른 번호로 리다이렉션 할 수 있도록함
android.permission.BROADCAST_SMS *
- 앱이 SMS메시지를 수신했다는 알림을 브로드캐스트,가짜 메시지 위조
android.permission.READ_FRAME_BUFFER (~API 28)
- 앱이 프레임 버퍼의 내용을 읽을 수 있도록 허용,악성앱이 화면 캡쳐, 원격 제어 등이 가능
android.permission.READ_LOGS *
- 앱이 시스템 로그파일을 읽을 수 있도록 허용(개인정보,비공개정보 접근가능)
android.permission.WRITE_CALL_LOG
- 전화 내역 수정
android.permission.READ_CALL_LOG
- 통화내역 읽을수있도록
android.permission.RECORD_AUDIO
- 마이크 녹음 할수있도록 ( 최초 동의후 아무때나 사용가능 )
android.permission.BIND_DEVICE_ADMIN (자제권고 API Q~)
- 앱이 기기관리자에게 보내는 인텐트를 수신할 수 있는 리시버 권한이 허용 됨
문자 및 통화 관련 권한 사용 제한
GOOGLE PLAY(다른 데선 가능)에서 19.3.9 일 부터 통화 기록 및 SMS 사용권한 제한 조치이후 서면을 통해 ...
여하튼 이런 권한을 많이 막음
기타 위험 권한
분석가 판단 시, 카메라 / 녹음 / 저장소 읽기 및 쓰기 등 앱의 고유 기능에 필요없지만 추가되어 있는 권한이 존재할 경우 악성 의심
이렇기 때문에 권한분석이 악성의심권한이 악성 앱이라고 단정 지을 수는 없다.
Code 분석
민감한 API
실행 코드 파일을 분석
- 바이트코드 : classese.dex
- 네이티브코드 : Native libraries
민감한 API
- 개인정보 접고느, 시스템 설정 접근등 악성행위 가능성있는 API
문자 관련 Class
• android.telephony.SmsMessage
• android.telephony.SmsManager
문자 관련 Method
• Uri.parse("content://sms/")
• android.telephony.SmsMessage.getOriginatingAddress()
• android.telephony.SmsMessage.getMessageBody()
• android.telephony.SmsManager.sendTextMessage()
연락처 관련 Method
• getContentResolver().query(ContactsContract.Contacts.CONTENT_URI,
…);
통화목록 관련 Method
• managedQuery(CallLog.Calls.CONTENT_URI, null, null, null, null);
• getContentResolver().delete(CallLog.Calls.CONTENT_URI, …);
HTTP 웹 접근 Class
• java.net.HttpURLConnection
• org.apache.http.client.HttpClient
• android.webkit.WebViewClient
• android.webkit.WebChromeClient
• android.webkit.WebView
HTTP 웹 접근 Method & Intent
• HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
• HttpClient httpclient = new DefaultHttpClient();
HttpResponse response = httpclient.execute(new HttpGet(URL));
• webview.loadUrl()
• new Intent(Intent.ACTION_VIEW, Uri.parse(url));
카메라 관련 Class
• android.hardware.Camera
• android.hardware.Camera2
카메라 관련 Intent
• android.media.action.IMAGE_CAPTURE (ACTION_IMAGE_CAPTURE)
• android.media.action.IMAGE_CAPTURE_SECURE
(ACTION_IMAGE_CAPTURE_SECURE)
• android.media.action.VIDEO_CAPTURE (ACTION_VIDEO_CAPTURE)
카메라 관련 Class
• android.hardware.Camera
• android.hardware.Camera2
카메라 관련 Intent
• android.media.action.IMAGE_CAPTURE (ACTION_IMAGE_CAPTURE)
• android.media.action.IMAGE_CAPTURE_SECURE
(ACTION_IMAGE_CAPTURE_SECURE)
• android.media.action.VIDEO_CAPTURE (ACTION_VIDEO_CAPTURE)
녹음 관련 Class
• android.media.MediaRecorder
• android.media.AudioRecord
녹음 관련 Method
• AudioRecord.StartRecording()
녹음 관련 Intent
• MediaStore.Audio.Media.RECORD_SOUND_ACTION
위치 정보 관련 Class
• com.google.android.gms.location.FusedLocationProviderClient
• android.location.LocationManager
위치 정보 관련 Method
• FusedLocationProviderClient.getLastLocation()
• LocationManager.requestLocationUpdates()
• LocationManager.getLastKnownLocation()
파일 읽기/쓰기 관련 Class
• File
• FileInputStream
• FileOutputStream
• InputStream
• OutputStream
• BufferedReader
• BufferedWriter
• …
기기정보 관련 Class
• android.telephony.TelephonyManager
기기정보 관련 Method
• android.telephony.TelephonyManager.getDeviceId()
• android.telephony.TelephonyManager.getImei()
• android.telephony.TelephonyManager.getLine1Number()
사용 여부 점검
이렇기 때문에 민감한 API분석이 악성의심 API사용 악성 앱이라고 단정 지을 수는 없다.
실행 흐름 분석
실행 흐름(제어 흐름, Control Flow) 분석
• 코드가 실행되는 순서를 분석
• 악성 행위의 상세 순서 파악
EntryPoint 파악
> aapt dump xmltree Something.apk AndroidManifest.xml > manifest.txt
: 앱의 AndroidManifest.xml 파일을 파싱하여 manifest.txt 파일로 저장
• intent-filter 를 보유하고 있는 activity, receiver EntryPoint
데이터 흐름 분석
• 데이터가 어디서 생성되어, 어떻게 처리되고, 어떻게 전이 되는지 분석
• 단순히 실행 흐름만 볼 경우, 민감한 API에서 사용되는 데이터가 무엇
인지 알지 못하는 경우가 발생
실행 흐름 분석
+ = 완벽한 악성 앱 분석
데이터 흐름 분석
안드로이드 앱 정적 분석 기법
• None-Code 분석
- 인증서 분석
- 권한 분석
• Code 분석
- 민감한 API 분석
- 실행 흐름 분석
- 데이터 흐름 분석
• 보고서 작성 방법
VirusTotal(https://www.virustotal.com/gui/home/search)
• 각종 AV분석 결과를 조회할 수 있는 서비스
• 파일 해쉬를 이용한 조회 가능
• 파일 해쉬 생성 방법(SHA1)
> certutil –hashfile 파일경로 SHA1
• SHA1으로 검색
결론 : 바이러스 토탈이 짱이다.
분석
JAVA 설치후 환경변수 설정
- java, java bin
- install
- dex2jar-2.0
https://drive.google.com/open?id=1QMBfVz0N1JzTCdaxBu_9nzN5Ieado4DO
Mal.egg 분석할 악성 apk파일(백신 걸릴수도있음)
이중에 bank부분을 한것을 작성
aapt dump xmltree (앱.apk) AndroidManifest.xml > (텍스트.txt)
이후 변환된 txt를 보면은 XML의 정보들을 분석할수있는데
여기서확인해볼시
RECEIVE_SMS
SEND_SMS
WRITE_SMS 와 같은 위험한 권한의 PERMISSION 을 요구하는것을 확인할수있다.
RECEIVE_BOOT_COMPLETED 로 부팅시마다 실행이 되도록 하는 퍼미션이 입력되어있다.
그리고
d2j-dex2jar.bat 로 fakebank.apk를 jar 파일로 변환
jd-gui-1.4.1.jar(자바 디컴파일러) 로 fakebank.jar 를 실행시 내부구조를 파악할수있음
REBOOT하거나 종료하면 아이콘을 숨기라고하는데 정말 수상함
이라고 수상한파일은 맞는것같은데........30분동안 했는데 이것밖에 분석못함
위는 전문적인분이 어느정도 분석하신것이다.
'Cyber Security(undergraduate) > mobile security' 카테고리의 다른 글
모바일보안 (19.5.16) (0) | 2019.05.16 |
---|---|
안드로이드 Malware 분석 (19.5.15) (0) | 2019.05.15 |
모바일 보안 위협 및 대응 방안(19.5.13) (0) | 2019.05.13 |