머신러닝을 활용한 악성코드 분석 - 악성코드 분석(정적 방법 - 구조 분석)
실습 환경
구조 분석
안드로이드 애플리케이션은 APK(Android Package Kit)파일 패키지로 제공됩니다.
APK 파일은 안드로이드 운영체제에서 사용하기 위한 파일 포맷입니다.
또한 애플리케이션 실행에 필요한 모든 리소스와 메타데이터를 포함하는 ZIP 아카이브 입니다.
[그림 2]과 같이 unzip을 사용하여 apk를 압축 해제할 수 있습니다.
AndroidManifest.xml *매니페스트 파일은 해당 애플리케이션의 개요를 제공할 수 있습니다.
이러한 매니페스트 파일은 모든 안드로이드 앱에 필요합니다.
*매니페스트 파일(manifest file)
컴퓨팅에서 집합의 일부 또는 논리정연한 단위인 파일들의 그룹을 위한 메타데이터를 포함하는 파일입니다.
컴퓨터 프로그램의 파일들은 이름, 버전 번호, 라이선스, 프로그램의 구성 파일들을 가질 수 있습니다.(위키백과)
ex) 구성파일: 필수 사용 권한, 외부 라이브러리 종속성, 구셩 요소 등
애플리케이션은 특수 권한이 필요한 함수가 호출되기 바로 전에 *런타임에 사용 권한을 요청할 수도 있습니다.
*런타임: 컴퓨터가 실행되는 동안 프로세스나 프로그램을 위한 소프트웨어 서비스를 제공하는 가상머신의 상태(위키백과)
예를 들어 사진 촬영 기능이 사용되기 직전에 대화상자가 열리면서 사용자에게 애플리케이션 카메라 액세스 권한을 부여하라는 메시지가 표시됩니다.
또한 매니페스트 파일은 다음을 선언합니다.
활동: 사용자가 상호작용하는 화면
서비스: 백그라운드에서 실행되는 클래스
수신기: SMS 또는 네트워크 연결 변경과 같은 시스템 수준 이벤트와 상호작용하는 클래스
압축을 해제한 파일들은 대부분 바이너리 형식으로 인코딩 되기 때문에 서드파티 도구가 필요합니다.
Apktool은 APK 파일에 있는 리소스 거의 원래 형태로 디코딩하고 일부 수정 후 다시 빌드할 수 있는 안드로이드 패키지 리버스 엔지니어링 도구입니다.
Apktool decode의 결과로 apk 파일의 이름인 infected 디렉토리가 생성되고 사람이 읽을 수 있는 형태로 바뀝니다.
매니페스트에는 해당 애플리케이션을 실행하기 위해 필요한 권한 목록을 가지고 있습니다.
패키지 이름이 "cn.dump.pencil"이라는 프로그램은 [그림 7]과 같은 권한 목록을 가지고 있습니다.
해당 애플리케이션이 카메라 사진에 연필 사진 스케치 이미지 스타일을 적용하는 프로그램이라고 가정했을 때 인터넷(anroid.permission.INTERNET)에 대한 전체 액세스와 시스템 알림 창(android.permission.SYSTEM_ALERT_WINDOW)을 표시하는 기능을 요청하는 것은 상당히 의심스러운 일입니다.
실제로 *공식 문서에는 "이 권한을 사용하는 앱은 거의 없다. 이 창은 사용자와의 시스템 레벨 상호작용을 위한 창이다." 라고 명시되어 있습니다.
("Very few apps should use this permission; these windows are intended for system-level interaction with the user.")
또한 WRITE_SECURE_SETTINGS, ACCESS_MTK_MMHW, READ_LOGS와 같은 권한이 요청되는 것도 굉장히 위험합니다.
모든 안드로이드 애플리케이션은 기기에서 실행되기 위해 인증서로 서명이 되어 있어야 합니다.
APK의 META-INF 폴더에는 앱 서명에 사용된 인증서를 포함해 코드의 무결성과 소유권을 확인하는 데 필요한 리소스가 포함되어 있습니다.
Apktool은 패키지의 루트 폴더 아래의 META-INF 폴더에 존재합니다.
openssl 유틸리티를 사용하기 위해 해당 폴더의 *.RSA 파일인 DER로 인코드된 인증서에 대한 정보를 확인할 수 있습니다.
위 명령어를 이용하여 인증서에 대한 자세한 정보를 확인할 수 있습니다.
인증서의 발행자 및 소유자가 "sui yun" 인 것을 확인할 수 있고 유효 기간에서 인증서 서명 시점을 알 수 있습니다.
하지만 애플리케이션에 대한 자세한 정보를 수집하기 위해선 내부 구조를 살펴보고 내용을 분석해야할 필요가 있습니다.
참고
"머신 러닝을 활용한 컴퓨터 보안, 클라렌스 치오, 데이비드 프리먼, 에이콘"
"Machine Learning and Security by Clarence Chio and David Freeman(O'Reilly). Copyright 2018 Clarence Chio and Davide Freeman, 978-1491-97990-7"
매니페스트 파일
https://ko.wikipedia.org/wiki/%EB%A7%A4%EB%8B%88%ED%8E%98%EC%8A%A4%ED%8A%B8_%ED%8C%8C%EC%9D%BC
매니페스트 파일 - 위키백과, 우리 모두의 백과사전
매니페스트 파일(manifest file)은 컴퓨팅에서 집합의 일부 또는 논리정연한 단위인 파일들의 그룹을 위한 메타데이터를 포함하는 파일이다. 예를 들어, 컴퓨터 프로그램의 파일들은 이름, 버전 번
ko.wikipedia.org
*공식 문서
https://developer.android.com/reference/android/Manifest.permission.html#SYSTEM_ALERT_WINDOW
Manifest.permission | Android Developers
android.widget
developer.android.com
*Apktool
https://ibotpeaches.github.io/Apktool/
Apktool - A tool for reverse engineering 3rd party, closed, binary Android apps.
A tool for reverse engineering 3rd party, closed, binary Android apps. It can decode resources to nearly original form and rebuild them after making some modifications. It also makes working with an app easier because of the project like file structure and
ibotpeaches.github.io
인증서의 구조
https://ko.wikipedia.org/wiki/X.509
X.509 - 위키백과, 우리 모두의 백과사전
X.509는 암호학에서 공개키 인증서와 인증알고리즘의 표준 가운데에서 공개 키 기반(PKI)의 ITU-T 표준이다. 역사와 활용[편집] X.509는 1988년 7월 3일 X.500 표준안의 일환으로 시작되었다. 1993년 인증
ko.wikipedia.org