• No results found

ft pdf

N/A
N/A
Protected

Academic year: 2020

Share "ft pdf"

Copied!
81
0
0

Loading.... (view fulltext now)

Full text

(1)

SANS Institute

InfoSec Reading Room

이 보고서의 영문은 SANS 연구소 Reading Room 사이트에 있는 것이며, 한글본은 ITL TechNote 사이트에 있는 것입니다. 이 보고서는 문서로 허가되지 않고서는 다른 곳에 재게시 할 수 없습니다.

안드로이드 기반의 악성코드 역공학

스마트폰은 2004년 6월 이후부터 악성코드 공격 목표가 되어왔다. 개발자들이 개발한

애플리케이션을 서명하고 확인하는 것과 같은 보안 수단이 소개되기 전까지, 악성코드에 감염된 애플리케이션은 꾸준히 증가하였다. 안드로이드 폰은 해커들이 공격하는 주요 목표가 되고 있는 스마트폰이다. 이 프로젝트의 주요 목표는 2가지로 구분된다. 하나는 악성코드의 효과와 기능을 이해하기 위해 실제 동작을 분석하는 것이고, 또 하나는 역공학이다.

(2)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

2

안드로이드 기반의 악성코드 역공학

Name: Vibha Manjunath

Student Number: 1000689

Module: MSc Project and Dissertation

Module Number: C E902_7-SU

Course: MSc Computer Security

Supervisor: Dr. Martin Colley

Assessor: Prof. Adrian Clark

Date: August 31st, 2011

번역일: 2012년 7월 1일

(3)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

3

개요

스마트폰은 2004년 6월 이후부터 악성코드 공격 목표가 되어왔다. 개발자들이 개발한 애플리케이션을 서명하고 확인하는 것과 같은 보안 수단이 소개되기 전까지, 악성코드에 감염된 애플리케이션은 꾸준히 증가하였다. 안드로이드 폰은 해커들이 공격하는 주요 목표가 되고 있는 스마트폰이다.

이 프로젝트의 주요 목표는 2가지로 구분된다. 하나는 악성코드의 효과와 기능을 이해하기 위해 실제 동작을 분석하는 것이고, 또 하나는 역공학기술을 이용하여 파일 조작하고 합법적인 애플리케이션을 악성코드로 변경하였다.

ApkTool, Dex2Jar, Notepad++, JD-GUI 등의 역공학 도구를 사용하였다. 첫째, 악성코드를

분해하고 이것의 소스 코드를 정밀 분석하여 악성 코드를 찾는다. 둘째, 합법적 애플리케이션을 해체하여 AndroidManifest.xml 파일을 변경하여 더 많은 권한을 추가한 후 재포장되었다. 새로운 또는 변경된 애플리케이션은 자가 서명한 증명서를 사용하여 서명되고, 변경 내용이 반영되었는지를 확인하기 위해 안드로이드 에뮬레이터에 설치되었다.

(4)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

4

감사의 글

I would like to take this opportunity to thank various people for their help during the period

leading to the completion of my dissertation. Firstly I would like to acknowledge my mentor Dr.

Martin Colley for his able guidance and valuable inputs without which this dissertation would

not have seen a successful end; my personal supporters, Venkatesh P.S and Joel Varghese who

gave up their time to make wonderfully helpful comments; my parents B. S Manjunath and M. K

Manjula for so much love over the years and to my wonderful sister Varsha Manjunath for being

close even when they were far away.

(5)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

5

목차

소개...6

관련 연구 검토...11

안드로이드 아키텍처...12

안드로이드 보안 모델...15

안드로이드 악성코드와 보안 문제... ...18

역공학... 24

위협/공격의 완화...25

방법론...29

도구...29

절차...34

정적 분석...34

동적 분석...41

결과 및 결론...56

결과...56

결론...62

향후 연구...64

부록...65

(6)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

6

소개

스마트폰은 지난 몇 년 사이에 엄청난 인기를 끌고 있다. 스마트폰의 이러한 시장 성장 속에서, 구글의 오픈 소스 플랫폼인 안드로이드가 가장 인기 있는 운영 체제가 되었다. 안드로이드는 주로 스마트폰과 태블릿에서 사용된다(1).

스마트폰은 많은 사람들에게 수용되고 또 경탄의 대상인데 이는 스마트폰이 은행 업무, 소셜 네트워킹 등의 서비스들을 끊임없이 제공할 수 있기 때문이다. 스마트폰은 와이파이, 음성, 데이터, GPS 등의 여러 가지 기능을 탑재하고 있다(2).

전문가들은 안드로이드가 2012년까지 아이폰이나 블랙베리와 같은 경쟁 제품보다 더욱 인기 있을 것이라 믿는다(29).

(7)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

7

스마트폰 애플리케이션이 급격하게 증가하여 사용자 보안에 걱정거리를 안겨주고 있다. 스마트폰은 악성 애플리케이션 개발자들에게 매우 부드럽고 취약한 목표가 되었다. 안드로이드가 인기를 끄는 이유는 오픈 소스 운영 체제이면서 가상 기기, 시스템 유틸리티의 형태로 미들웨어와 같은 몇 가지 기본적인 기능과 계산기, 브라우저 등의 일부 핵심 애플리케이션을 갖고 있기 때문이다(3).

안드로이드 아키텍처는 아래의 네 가지 계층으로 구성되어 있다(3) :

멀티프로세스와 멀티스레드를 지원하는 리눅스 커널. 모든 애플리케이션은 이들만의 리눅스 아이디를 갖고 있고 별도의 프로세스에서 실행된다. 동일한 아이디의 두 개의 애플리케이션은 그들 사이에서 데이터를 교환할 수 있다.

일부 오픈 소스 라이브러리

안드로이드는 런타임 환경인데 반해, Dalvik Virtual Machine은 덱스 바이너리 형식으로 애플리케이션을 실행시킨다.

자바 인터페이스를 갖고 있는 애플리케이션 구조. 이 층은 안드로이드 NDK와 SDK로 구성되어 있다.

(8)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

8

안드로이드 보안 모델은 허가와 샌드박스 메커니즘에 기반하고 있다. 각 애플리케이션은 자신에게 할당된 고유의 아이디와 함께 자신의 Dalvik Virtual Machine에서 실행된다. 이는 다른 애플리케이션의 정보/데이터를 방해하는 것을 방지한다. 아키텍처와 보안 모델은 다음 섹션에서 더 상세히 언급된다.

비록 안드로이드가 가장 널리 쓰이고 있지만, 이 운영 체제에서 이득을 보기에는 애플리케이션의 부족한 측면이 있다. 그러므로 제 3의 애플리케이션 개발자는 새로운 애플리케이션을 만들고 안드로이드 시장에 진수시킨다. 이는 사용자에게 수천 개의 애플리케이션에 대한 접근 권한을 부여한다. 그러나 사용자는 애플리케이션을 설치하기 전에 반드시 이를 완전히 신뢰하는 것이 중요하다. 이러한 이유로 모든 애플리케이션은 설치 과정에서 요구되는 허가를 발행한다. 사용자는 모든 허가를 내주거나 모두 거절할 수 있는데, 거절할 경우 애플리케이션이 설치가 중단된다(4).

이러한 애플리케이션을 배포하기 위해 구글은 안드로이드 시장을 만들었다. 사용자들은 무료 및 유료 애플리케이션을 사용할 수 있다. 모든 안드로이드 폰에는 애플리케이션이 있으며, 사용자들은 안드로이드 시장에서 검색하여 필요한 애플리케이션을 다운로드 할 수 있다.

하지만, 안드로이드 시장에는 많은 수의 악성 애플리케이션이 출시되어 있다. 그래서 구글은 각각의 애플리케이션을 시험하고 악성코드를 제거하여 안드로이드 시장을 깨끗하게 하는 것이 필요하다. 또한 현재의 애플리케이션의 룹홀과 버그들이 해커들에 의해 악용되지 않도록 확인하는 것이 중요하다. 여러 가지 공격 중에서, 피싱, 불안전한 http 연결, 로컬 데이터 사용 등이 가장 흔하다(2).

최근 몇 년간 다른 종류의 위협이 등장했다. 이것들은 넓은 의미로 응용 기반, 네트워크

기반웹 기반 위협으로 분류할 수 있다. 악성코드와 스파이웨어는 급증하고 있고 현재

(9)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

9

이미 공개된 악성코드에 기반하여, 아래의 도표는 악성코드의 수와 영향을 보여준다(6).

위의 그래프에서 볼 때 대부분의 악성코드는 파일을 조작하고 다른 애플리케이션을 무력화시킬 수 있었다는 점이 확실하다. 안드로이드의 경우, 애플리케이션은 사용자가 애플리케이션 찾고 다운로드를 할 수 있는 안드로이드 시장에 출시되었다. 공격자는 애플리케이션을 무단으로 변경하고, 변경한 것을 출시하곤 한다. 사용자는 애플리케이션이 원본이 아니란 사실을 모른 채 다운로드하고, 그리하여 악성코드가 기기에 설치된다.

(10)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

10

이용하여 애플리케이션을 재포장하는 것이다. 공격자는 악성 코드를 포함시키기 위해 코드를 변경하고 애플리케이션을 재포장하여 이를 앱 시장에 출시한다. 사용자는 보통 악성 소프트웨어와 합법적 소프트웨어 사이를 분간하지 못하기 때문에, 악성 소프트웨어를 설치하게 된다. 아래의 그림이 이를 설명한다(14).

(11)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

11

역공학 과정을 통해 애플리케이션의 작동 과정, 구조 그리고 기능이 완벽하게 동작하는 지 발견하고 이해할 수 있다. 이 프로젝트에서 우리가 역공학을 위해 사용하는 도구는 ApkTool, Dex2Jar, JD-GUI, Notepad++ 그리고 Android SDK이다. 각각의 도구와 역공학 절차에 관한 세부 사항은 방법론에서 다룬다.

사용자가 악성 애플리케이션의 희생자가 되는 위험을 줄이려면, 사용자만큼이나 개발자에게도 어느 정도 책임이 있다. 모든 사용자는 맹목적으로 애플리케이션을 설치하기 전에 이것이 요청한 허가를 반드시 확인해야 한다. 또한 해커가 쉽게 이용할 수 있는 어떠한 허점도 남기지 않도록 하는 것이 개발자의 책임이다. 이는 다음 섹션에서 언급된 애플리케이션 서명과도 연관이 있다.

관련 연구 검토

William Enck, Machigar Ongtang 그리고 Patrick McDaniel 은 다음과 같이 밝혔다.

"다음 세대의 오픈 운영 체제는 데스크톱이나 메인 프레임이 아닌 우리가 매일 갖고 다니는 작은 이동 단말기에 있을 것이다"(30).

이러한 운영 체제는 개방성 덕에 새로운 시장과 애플리케이션을 소개하는 임무를 맡게 될 것이다. 이는 존재하는 서비스와 함께 훨씬 좋은 융합을 가능케 할 것이다(30).

안드로이드는 오픈 소스 운영체제로 휴대 전화 세계에서 엄청난 중요성과 인기를 얻고 있다. 이 운영 체제는 구글에 의해 만들어졌고, 조사 결과에 따르면 세계에서 두 번째로 가장 인기 있는 운영 체제가 됐다(30).

안드로이드의 가장 매혹적인 기능은 개발자들에게 그들 자신만의 애플리케이션을 만들 수 있도록 오픈 플랫폼을 제공한다. 안드로이드는 애플 앱 스토어에서 다운로드 받아야 하는 애플 아이폰 애플리케이션과는 달리 여러 가지의 애플리케이션을 만들 수 있도록 개발자들에게 SDK와 NDK를 제공한다(30).

(12)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

12

안드로이드 아키텍처

이제 우리는 안드로이드의 아키텍처에 대해 언급해보자. 안드로이드는 기본적으로 3개의 구성 요소를 가진 소프트웨어 스택이며, 이름은 각각 미들웨어, 운영체제 그리고 핵심 애플리케이션이다. 이들의 기능은 아래를 포함한다:

 블루투스, EDGE, WiFi, 3G

 구조화된 데이터 저장을 위한 SQLite

 애플리케이션 framework  Dalvik Virtual Machine 등

안드로이드 아키텍처는 다음으로 구성된다:

 애플리케이션 (29): 안드로이드 폰은 흔히 이메일 프로그램, 브라우저, 달력, SMS,

(13)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

13

프로그래밍 되었다.

애플리케이션 프레임워크 (29): 안드로이드 개발자는 접근 위치, 알람 설정, 기기의

하드웨어, 백그라운드 서비스 실행 등의 정보에 대한 이용을 제공받는다. 안드로이드 개발자는 또한 핵심 애플리케이션 또한 사용하는 프레임워크 APIs에도 접근 권한을 갖는다. 구성 요소의 재사용은 애플리케이션 아키텍처 디자인에 의해 실행된다.

모든 애플리케이션은 밑줄 친 다음과 같은 시스템과 서비스의 세트를 갖고 있다:

 Views: 이것은 텍스트 박스, 그리드, 버튼 그리고 임베디드 웹 브라우저와 같은

애플리케이션을 만드는데 사용된다.

 컨텐트 제공자: 이것들은 애플리케이션이 자신의 데이터를 공유하도록 해주고

다른 애플리케이션으로 정보를 접근할 수 있게 해준다.

 리소스 매니저: 이것은 그래픽, 레이아웃 파일과 로컬화된 스트링과 같은

리소스(非코드)에 접근 권한을 제공한다.

 통보 매니저: 개인 설정의 알림은 통보 매니저를 통해 상태 표시줄에

나타난다.

 액티비티 매니저: 이것은 공통의 네비게이션 백스택을 제공하고, 또한 애플리케이션의 활동주기를 관리한다.

라이브러리 (29): 안드로이드는 시스템의 몇 가지 구성 요소에 의해 사용되는

C/C++라이브러리의 세트로 구비되어 있다. 이러한 라이브러리는 안드로이드 애플리케이션 프레임워크를 통해 개발자에게 제공된다.

일부 핵심 라이브러리의 기능은 아래와 같다:-

 시스템 C 라이브러리:- 이는 임베디드 리눅스 기반 장비에 사용된다. 이는 C

시스템 라이브러리 libc의 BSD에서 파생된 실행이다.

 미디어 라이브러리:- 이 라이브러리는 기본적으로 오디오, 비디오 포맷, 플레이백

그리고 JPG, AMR, MP3, PNG, AAC, MPEG4 그리고 H.264와 같은 통계 이미지 파일의 기록을 지원한다.

 SGL: 이는 2D 그래픽 엔진으로 구성된다.

(14)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

14

엔진이다.

 표면 매니저: 이것은 다양한 종류의 애플리케이션이 사용하는 2D와 3D 그래픽 계층과 디스플레이 서브시스템에 대한 접근을 제어한다.

안드로이드 런타임 (29): 안드로이드는 자바 프로그래밍 언어의 핵심

라이브러리에도 있는 대부분의 기능성들을 제공하는 핵심 라이브러리를 갖고 있다. 모든 안드로이드 애플리케이션은 자신만의 DVM(Dalvik Virutal Machine) 예시와 함께 자신만의 프로세스에서 실행된다. Dalvik를 통해 기기가 여러 개의 가상 기계를 효율적으로 실행된다. DVM은 .dex 형식으로 파일을 실행한다. DVM은 저 수준 메모리 관리와 threading과 같은 깔려있는 기능성으로 리눅스 커널에 의존한다.

리눅스 커널 (29): 안드로이드 핵심 시스템의 프로세스 관리, 드라이버 모델, 메모리

관리, 보안과 네트워크 보안 등의 서비스는 리눅스 버전 2.6에 의존한다. 커널은 소프트웨어 스택과 하드웨어 사이에서 추상적 레이어로 작동한다.

안드로이드 애플리케이션은 주로 JAVA 프로그래밍 언어를 사용하여 개발된다. 하지만 어떤 애플리케이션은 C/C++(안드로이드 NDK 사용)으로 개발될 수 있다. 안드로이드 패키지는 컴파일된 java 코드와 애플리케이션에 의해 요구된 모든 리소스와 데이터 파일로 구성된다(31).

안드로이드 애플리케이션은 상대와 소통하기 위해 Intent 메시지를 사용하는 여러 가지의 구성 요소로 이루어져 있다. 이러한 구성 요소는 아래에 요약돼 있다 (4):-

 활동(Activity):- 행동을 처리하기 위해 상요자가 이용하는 시작 인터페이스이다.

 방송 수신기:- 이 구성 요소는 Activity를 시작하여 방송 발표/메시지를 수신하고

이에 반응한다. 이는 사용자 인터페이스를 갖고 있지 않다.

 서비스:- 이 구성 요소는 사용자 인터페이스를 갖고 있지 않지만, 부정확한 시간

동안 백그라운드에서 실행된다.

 컨텐트 제공자:- 애플리케이션이 다른 애플리케이션에 데이터를 주려면,

(15)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

15

Security Engineering Research Group에 의하면, 참조 모니터(Reference Monitor)는 구성 요소간 소통(Inter Component Communication, ICC)을 위해 안드로이드에서 가장 중요한 요소 중 하나이다. 애플리케이션 안의 모든 구성 요소는 다른 애플리케이션의 구성 요소들과 상호 작용하는데 사용되는 여러 가지 허가 꼬리표가 할당된다. ICC를 시작하려면, 애플리케이션은 허가 꼬리표를 체크한다; 만약 목표 구성 요소의 꼬리표가 허가를 수집하는 그 순간에 존재한다면, ICC 시작이 허가되고, 그렇지 않으면 거부된다(4).

위 연구 그룹은 이 ICC 메커니즘은 인텐트(Intents)에 기반한 것이라는 의견이 있다. 이것은 행동의 종류/타입이 실행되도록 하는 메시지를 보내는 메커니즘이다. 인텐트 메시지는 특정 구성 요소로 전송되거나 안드로이드 프레임워크에 브로드케스트되어 알맞은 구성 요소에 메시지를 전송한다. 수행될 임무의 종류를 명시하는 액션 스트링은 인텐트를 명시하는데 도움을 준다. 액션 스트링에 기반하여, 안드로이드 시스템은 어떤 구성 요소가 필수적인 임무를 수행하기에 가장 적합한지 결정을 내린다(4).

AndroidManifest.xml 파일은 보안 실행 정책과 관련된 모든 허가와 메타데이터를 갖고 잇다. <Permission>이란 태그는 이에 접근할 수 있는 구성 요소를 가리키고, <Intent-Filters>태그는 결정될 수 있는 인텐트를 가리킨다(4).

안드로이드 보안 모델

(16)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

16

애플리케이션 사이에 프로세스 레벨에서 보안을 시행하는 애플리케이션에 할당된다. 추가적 보안은 각각의 프로세스에 특정 작업만을 수행하도록 하는 "허가"메커니즘을 사용하여 제공되고, 그리고 특정 정보에만 즉흥적 접근 권한을 주는 "per-URI permission" 또한 제공한다(31).

샌드박스와 허가 메커니즘은 안드로이드 보안 모델의 기초라고 할 수 있다. 각 애플리케이션의 코드는 구체적인 사용자 ID가 할당된 특정 Dalvik Virtual Machine에서 실행된다. 각 애플리케이션은 다른 애플리케이션으로부터 고립되어 실행되고, 그리하여 어떠한 애플리케이션도 다른 애플리케이션의 파일에 접근할 수 없다(31).

Jesse Burns 작가는 다음과 같이 말했다.

"안드로이드는 버그와 악성 소프트웨어의 위험을 최소화하여 사용자를 보호하면서 폰 기능을 사용할 수 있는 애플리케이션 제작을 지원한다. 안드로이드의 프로세스 고립은 샌드박스를 위한 복잡한 정책 구성 파일에 대한 필요를 없앤다. 이는 애플리케이션에 안드로이드의 보안을 손상시키지 않고서 본래 코드를 사용할 수 있고, 애플리케이션에 추가적인 권한을 부여하는 유연성을 가져다 준다". (6)

(17)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

17

이에는 고유의 리눅스 ID가 할당되고, 다른 애플리케이션에 샌드박스를 만들어 영향을 주는 일을 방지한다. 이 사용자 아이디는 그 기기에서는 영구적이며 동일한 아이디를 갖는 애플리케이션은 단일 프로세스에서 실행되도 무관하다. 이것은 악성 애플리케이션이 진짜 애플리케이션의 데이터에 접근하거나 손상시키지 못하도록 보장하는 하나의 방법이다(9).

애플리케이션은 반드시 설치 과정 중 접근하게 될 모든 리소스를 목록에 나열해야 한다. 애플리케이션에 의해 요청된 허가는, 설치하는 전 과정 동안, 사용자 상호 작용에 의해 승인되거나/고, 애플리케이션의 서명을 따라 검사에 기반한다(9).

3명의 제작자는 애플리케이션의 사용 기간 동안 여러 가지의 단계에서 허가가 필요하다고 말한다. 이름으로는, (9)

 애플리케이션이 원치 않는 구체적 기능을 수행하는 것을 방지하기 위해 시스템 콜의 순간에

 애플리케이션이 다른 애플리케이션의 액티비티를 시작하는 것을 방지하기 위해 액티비티의 시작에

 당신으로부터 누가 방송 메시지를 수,송신을 관리할 수 있는 허가

 서비스의 바인딩 또는 시작

 컨텐트 제공자에서 접근, 작동하기 위해

Kamran Habib Khan & Mir Nauman Tahir는 안드로이드에 의해 제공되는 4개 수준의 보안이 있다고 지적하는데, 이름으로는, (4)

 Normal: 이 경우 사용자에 의해 아무런 허가도 필요하지 않기 때문에 normal 허가가 애플리케이션에 부여된다.

 Dangerous: 이러한 허가들은 설치 중 사용자에 의해 승인을 위해 애플리케이션에 의해 요청된다. 사용자는 허가를 모두 받아들이거나 모두 거부할 수 있다. 허가 거부는 설치를 종료시킬 것이다.

 Signature: 이러한 허가들은 만약 부여와 요청 애플리케이션이 동일한 증명서를

갖고 있다고 시스템에 의해 인정된다.

 Signature System: 이는 Signature와 유사하지만 시스템 애플리케이션에만 적용

가능하다.

(18)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

18

영향을 이해하고 있는 책임있는 사용자에 의해 다뤄지는 한 이를 안전하게 한다. 그러나 우리 앞의 과제는 사용자의 자유를 제한하지 않는 동시에 더 강력한 보안을 시행하는 것이다.

안드로이드 악성 코드와 보안 문제

휴대전화는 사이버 범죄의 취약한 목표물이 되었다. 휴대 전화는 개인 연락처부터 이메일까지 엄청난 양의 데이터를 갖고 있고, 모든 종류의 거래를 온라인으로 성사시킬 수도 있다(10).

악성 소프트웨어란 사용자의 동의없이 기능들을 실행하도록 설계된 소프트웨어 조각이나 악성 코드를 말한다. Joanna Rutkowska 또한 위의 정의에 동의하며 악성 소프트웨어를 다음과 같이 정의했다.

"악성 소프트웨어란 운영 체제나 애플리케이션의 문서화된 기능을 사용하여 변화를 감지할 수 없게끔 만드는 방법으로 사용자 동의 없이 운영 체제 커널 또는 일부 보안에 민감한 애플리케이션의 행동을 바꾸는 코드의 조각이다". (12)

Smobile Systems의 GTC 엔지니어 Troy Vennon는 악성 소프트웨어가 한 번 시스템을 감염시켰을 때 실제로 무엇을 하느냐에 따라 이를 분류한다고 말했다. 그리하여 Troy Vennon에 의해 4 종류의 악성 소프트웨어로 분류되는데, 이는 각각, (8)

 바이러스: 바이러스란 자체 번식이 불가능한 파괴적 혹은 악성 프로그램이다.

 웜:- 이것은 자동적으로 다른 시스템에 복제되도록 시스템 취약점이나 네트워크를

제어할 수 있는 악성 코드이다.

 트로이 목마: 트로이 목마는 요구된 작업을 수행하는 것처럼 보일 때 공격자가

시스템에 비인가 접근이나 원격 접근을 허용한다.

 스파이웨어: 이 파괴적인 애플리케이션은 사용자의 허가 없이 은밀하게 사용자에

관한 정보를 수집한다.

제작자 Kamran Habib Khan & Mir Nauman Tahir는 휴대 전화에 대한 공격을 아래와 같이 분류했다 (4):-

(19)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

19

 Direct Payoff: 이 카테고리는 사용자의 동의 없이 SMS를 전송하는 악성

소프트웨어를 포함한다.

 파괴적: 이 공격에 관한 하나의 예는 사용자가 모른 채로 전화 번호 목록을 삭제하는 것이다.

 정보 청소부: 이 카테고리는 사용자의 동의 없이 쿠키, 주소록 그리고 패스워드

검사를 포함한다.

 계획적인 스파이웨어: 이것은 원격 청취와 위치 추적을 대표한다.

 개념 증명: 이 카테고리는 예를 들면 기기의 배터리가 낭비되게끔 사용자의 동의 없이 블루투스를 켜 놓는 등의 악성 소프트웨어/스파이웨어로 구성된다.

제작자 Luka Jeter, Meenakshi Mani 그리고 Tia Reinschmidt 는 안드로이드 폰에서 수행될 수 있는 공격의 종류에 대해 언급했다. 그들이 말하길,

"스마트폰 악성 코드로 인한 공격의 종류는 기기 만큼이나 다양하다".(9)

일부 악성 소프트웨어는 아무런 피해도 입히지 않았고, 단지 개념의 증거 테스트 정도로만 보인다. 그러나 그 동안 비정상적 배터리 소모 혹은 로컬화된 서비스 거부 등과 같이 원치 않고 예상치 못한 문제를 일으킨 몇몇 악성 소프트웨어들이 있다. 폰에서 데이터나 서비스를 훔치려는 소프트웨어는 더욱 많다. 악성 소프트웨어의 또 다른 종류는 마이크, 카메라 그리고 내장 GPS 수신기 등에 접근하여 공격자에게 데이터를 다시 전송해 줄 수 있는 스파이웨어이다. 애드웨어는 이메일, IM, MMS, 블루투스 혹은 SMS와 같이 존재하는 소통 경로를 이용하여 원치 않는 광고를 주변의 불특정 다수 혹은 핸드폰 주소록에 있는 사람들에게 전송하는 또 다른 종류의 악성 소프트웨어이다(9).

(20)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

20

CNCC는 2009년 11월 안드로이드 시장을 침투한 악성 프로그램인 Droid09를 말한다. 이 애플리케이션은 사용자의 온라인 은행 거래를 관리해주기에 매우 유용한 것으로 보였었다. 하지만 이는 공격자들이 온라인 거래를 할 수 있는 사용자의 계정 세부 정보에 대한 접근이 가능하도록 만들었다. 현실에 있던 또 다른 애플리케이션인 스파이웨어가 2010년 말에 발견된 Android.Fakepalyer이었다. 이것은 합법적인 비디오 플레이어로 주장되었지만, 프리미엄 숫자에 SMS를 전송하기 시작했다(10).

SMobile Systems는 그들이 탐지하고 제거하려 시도했던 악성코드에 대해서 말한다. MobileSpy는 2009년 11월에 탐지된 악성코드이다. 이는 안드로이드 사용자에게 다음과 같은 내용을 제공했다, (8)

 GPS 위치

 단말기가 접근하는 웹사이트

(21)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

21

 외선과 내선의 전화 세부 정보 관리 및 보기

이 애플리케이션은 백그라운드에서 실행되는 "Retinax.Android"로서 설치되고, 사용자에게 MobileSpy 혹은 Reinax.Android를 가리키는 아이콘이 존재하지 않는다.

2010년 11월 Jon Oberheide 와 Zach Lanier 등 보안 연구원 2명은, 안드로이드의 취약점이나 보안 구멍을 이용하는 방법을 발견했다. 인증 토큰을 요구하기 위해 애플리케이션에 사용되었던 자격 증명 서비스는 그들이 다루었던 하나의 취약점이다. 그들은 안드로이드 시장에서 가짜 앵그리버드 게임 애플리케이션을 제공하여, 악성 애플리케이션을 3개 더 다운로드 받을 수 있도록 하였다. 3개의 새로운 애플리케이션은 사용자의 허가를 구하지 않고도 설치될 수 있었고, 폰에 있던 민감한 정보에도 접근할 수 있게 되었다 (31).

안드로이드에 상존하는 보안 결여 혹은 취약점을 지적하기 위해 안드로이드용 악성 소프트웨어를 개발해 온 다른 연구자들이 있다. 2010년 11월, MWR InfoSecurity 연구소 수장인 NILS가 공격자가 안드로이드 2.1 OS를 실행하는 HTC Legend에 악성 소프트웨어를 설치하게 해주는 안드로이드 브라우저 상의 버그를 보여주었다. 그는 안드로이드

브라우저가 임베디드 Flash Lite Plugin을 업데이트하는

android.permission.INSTALL_PACKAGES 허가를 갖고 있다는 사실을 깨달았다. 그리하여 브라우저 공격을 허용하여, 기기에 악성 소프트웨어를 설치할 가능성이 높다 (31).

William Enck, Damien Octeau, Patrick McDaniel 그리고 Swarat Chaudhuri 는 그들의 보고서에서 말하길, 안드로이드의 구체적 취약점을 토론했고 아래와 같이 카테고리 별로 분류했다고 했다 (13):-

 로그로 유출되는 정보 (13): 중앙화된 로깅은 "logcat" 명령을 사용하여 전시될 수 있는 Log API를 통해 안드로이드에 의해 제공된다. READ_LOGS 허가가 있는 애플리케이션은 로그 메시지를 읽을 수 있다. 이러한 로들은 안드로이드에 의해 제공된 문서와 같이, 사용자의 개인 정보를 절대로 포함해선 안되지만, 단말기에서 무슨 일이 일어나고 있는지에 관한 정보는 포함할 수 있다.

 IPC를 통한 정보 유출 (13): 허가된 방송을 보호하지 않거나 목표 구성 요소를

(22)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

22

 불안전 방송 수신기 (13): 방송 수신기는 인텐트 메시지를 얻기 위해 사용된다.

공적인 특정 이벤트 타입에 가입하기 위해서는, 방송 수신기가 "인텐트 필터"를 정의한다. 그러므로 만약 수신기가 허가에 의해 보호되지 않으면, 유해한 애플리케이션이 메시지를 위조할 수 있다.

 인텐트 주입 (13): 인텐트 메시지는 서비스 구성 요소와 활동을 시작하기 위해서도

사용된다. 인텐트 주입 공격은 인텐트 주소가 신뢰할 수 없는 미지의 입력으로부터 얻어졌을 때 발생한다.

 통제 대표단 (13): 애플리케이션이 "미결 인텐트"를 사용하여 다른 애플리케이션에 통제권을 할당할 수 있다. 이러한 미결 인텐트는 수신했을 때 값을 바꿀 수는 없지만 부족한 부분을 채울 수 있기 때문에, 만약 인텐트 주소가 없다면, 본래 애플리케이션의 허가를 사용하여 실행되면 임무를 재전송 할 수 있다.

 IPC 입력에 대한 널(Null) 검사(13): 애플리케이션은 다른 애플리케이션에서 얻은 인텐트 메시지로부터의 정보를 계속해서 처리한다. 널 디레퍼런스(Null dereferences)는 애플리케이션이 충돌하게끔 만들어 서비스 거부 공격에 사용될 수 있다.

 SD 카드의 사용: 만약 애플리케이션이 SD 카드에 읽고 쓸 권한이 있다면, 다른

애플리케이션에 저장되어 있는 정보에 접근할 수 있다.

Lookout Mobile Security는 모바일 위협을 3개의 넓은 카테고리로 분류했다 (14):- 애플리케이션 기반 위협(14):

 스파이웨어: 이것들은 사용자의 승인 없이 메시지, 전화 번호 목록 등 사용자의 데이터를 축적하거나 사용하기 위한 목적을 갖고 있다. 이것들은 목표화될 수 있는데, 이는 곧 사용자를 그저 관찰하거나 여러 명의 사용자들로부터 정보를 수집하려는 시도를 통해 목표화 해제될 수도 있음을 의미한다.

 악성 소프트웨어: 악성 소프트웨어는 사용자에게 재정적 손실을 주기 위해 사용자의 개인 정보를 훔쳐 이용하거나 공격자에게 단말기에 대한 원격 접근 권한을 부여하거나, 연락 목록 상에 모든 숫자에 달갑지 않은 메시지를 보내는 방법 등 악의적으로 행동하도록 설계되었다.

(23)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

23

요구된 것보다 명백히 많은 민감한 데이터에 접근할 때 발생한다.

 취약한 애플리케이션: 공격자에 의해 예속될 수 있는 일부 취약점들을 갖고 있는

애플리케이션은 사용자가 모른 채 악성 소프트웨어를 자동으로 다운로드하는 등 다양한 피해를 일으킬 수 있다.

웹 기반 위협(14):

 피싱 사기: 이 경우 공격자는 사용자 인터페이스나 사용자의 로그인 정보를 흘리게끔 속이도록 고안된 웹 페이지를 이용한다.

 브라우저 공격: 이 공격은 웹 브라우저를 통해 실행되어야 하는 이미지 뷰어, PDF 리더 등 웹 브라우저나 애플리케이션의 취약점을 이용한다. 웹 페이지를 방문하는 것만으로도 사용자는 악성 소프트웨어를 설치할 수 있는 브라우저 공격을 활성화시킬 수 있다.

 드라이버바이 다운로드: 애플리케이션은 사용자가 웹 페이지를 방문할 때

자동적으로 다운로드 된다. 애플리케이션은 열어야 할 것을 다운로드 하거나 사용자의 개입 없이 시작할 수도 있다.

네트워크 기반 위협(14):

 Wi-Fi 스니핑:- 이것은 많은 웹 페이지와 애플리케이션이 엄격한 보안 조치가 없기 때문에 단말기로부터 전송되는 데이터를 조작할 수 있다. 데이터를 암호화하지 않기 때문에 불안전한 무선 네트워크에서는 청취자가 가로챌 수도 있다.

 네트워크 공격: 이 공격은 운영 체제에 존재하는 소프트웨어 취약점이나 이동 는 지역 네트워크를 다루는 소프트웨어를 이용한다. 이러한 공격은 사용자로부터 아무런 개입이 필요 없기 때문에 가장 위험하다고 여겨진다.

(24)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

24

제작자들은 또한 어떻게 이러한 악성 애플리케이션들은 사용자에게 탐지되고 통보될 수 있는지 말한다. Kirin 기술은 설치 시 애플리케이션이 요구한 각각의 허가에 사용자가 충분한 주의를 하지 않은 채 허가의 잠재적으로 위험한 합동을 인식하는 한 방법이다. 또 다른 잘 알려진 방법은 안드로이드 OS를 위해 존재하는 항 바이러스 소프트웨어의 사용이다. 항 바이러스 소프트웨어의 문제는 이것이 사용자의 올바른 사용과 설정에 의존한다는 것이다. 항 바이러스 엔진이 새로운 악성 소프트웨어를 발견하는데 약 48시간 정도가 소요된다.

위의 모든 시나리오 중에서 사용자가 애플리케이션 개발자를 은연중에 신뢰하고 있음을 알 수 있다. 사용자는 애플리케이션의 제작자가 악의적이지 않고 유용한 애플리케이션만을 제공하리라 의도하고, 애플리케이션이 만족스러운 보안 기준에 부합하도록 테스트와 예방 조치가 취해졌음을 믿는다. 그러므로 우리는 사용자가 애플리케이션이 요구한 허가를 설치 과정 중에 체크하고, 올바르게 애플리케이션을 설치 또는 제거해야 할 책임이 있음을 결론 지을 수 있다 (9).

역공학

역공학은 존재하는 코드 또는 소프트웨어 조각을 어떤 취약점이나 오류가 있을 수 있는 소프트웨어를 정밀 조사하기 위해 분석하는 과정이다. 역공학은 실행 파일로부터 소스 코드를 생성하는 기능이다. 이 기술은 프로그램의 작동 상태를 검사하거나 보안 메커니즘 등을 피하기 위해 사용된다. 따라서 역공학은 프로그램을 리버스 엔지니어가 원하는 대로 작동할 수 있도록 프로그램을 수정하는 방법 또는 과정으로 설명할 수 있다.

Joany Boutet Shwartz를 인용하여 말하길,

"자동차 엔진을 다시 만드는 것이든 문장에 그림을 그려넣는 것이든, 사람들은 사물을 단순히 서로 떼어놨다가 이를 다시 같이 놓는 것만으로도 많은 것을 배울 수 있다. 짧게 말하면, 그것은 역공학 배후의 개념이다- 이것을 이해하기 위해 무언가를 여러 개로 나눠보고, 사본을 만들고 이를 개선시킨다". (31)

(25)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

25

같은 도구를 이용하여 JAVA로 변환될 수 있었다. "undx" 도구는 기본 애플리케이션과는 작동이 잘 되었지만, 복잡한 Dalvik Bytecode를 다룰 때는 많은 문제를 제기했다. Dex2Jar 도구가 이후 근원이 되었다. Dex2Jar는 undx와 유사한 작업을 수행하지만, 이 도구 또한 복잡한 Dalvik Bytecode를 다룰 때는 몇 가지 문제점이 있다 (31).

제작자 Bastiaan Wissingh과 Thorben Krrger는 다음과 같은 의견이다.

"애플리케이션의 기능에 대해서 배울 수 있는 가장 이상적인 방법은 소스 코드를 분석하는 것이다."

미리 컴파일된 바이너리 형식의 애플리케이션은 분배됐고, 소스 코드를 직접적으로 디버그하는 것도 불가능하다. 그러나 Dalvik Bytecode를 읽기 가능한 형식으로 변환하거나 뒤집어주는 해체기가 있다. Dalvik Virtual Machine의 바이너리는 .dex 형식으로 존재한다. Backsmali는 Dalvik VM에서 .dex 파일에 사용되는 해체기이다. 만약 프로그래머가 소스 코드를 변경하고 이를 재포장 하고 싶어한다면, APKtool이 사용된다 (18).

만약 취약점이 있다면 이를 연구하고 코드를 정밀 분석하기 위해 안드로이드의 다양한 애플리케이션을 뒤집었던 많은 프로그래머들이 있다.

위협/공격의 완화

(26)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

26

안드로이드에서 악성 소프트웨어의 공격을 완화하기 위해 통합될 수 있는 많은 조치들이 존재한다.

 개발자의 보안 책임 (6): 모든 개발자는 사용자 데이터의 보안을 마음 속에 새겨놔야 한다. 언급된 바와 같이, 모든 애플리케이션은 이들 고유의 UID를 할당해 놓았다. 그러나 어떤 프로그램이든 Activity Manager에게 애플리케이션의 UID로 실행하는 애플리케이션을 시작하도록 요구하는 것이 가능하다. Jesse Burns는 이러한 연유에서 모든 애플리케이션은 개발자에 의해 서명되어야 한다고 말했다. 안드로이드에서 애플리케이션 서명은 자가 서명 증명서에 의해 얻어진다. 코드 서명을 주장하는 주요한 원인은 개발자가 존재하는 애플리케이션에 업데이트를 수행할 수 있도록 하기 위함이다. 동일한 키를 사용하여 서명된 다른 애플리케이션은 그들이 동일한 개발자에게 개발되었듯이 동일한 ID로 실행하도록 요구할 수 있다. 그러나 애플리케이션이 서명은 개발자의 실제 신원을 유효화 시키지 않는다는 것을 알아두는 게 중요하다. 그러므로 개발자는 쉽게 신뢰받을 수 없고, 그러므로 안드로이드는 보안을 지키기 위해 경고와 신뢰된 서명 규칙을 받아들여야 한다.

 사용자의 보안 책임 (15): 애플리케이션을 설치할 때 사용자는 그들이 요구한

허가에 대한 접근 권한을 부여해야 한다. 그러므로 사용자가 애플리케이션이 요구한 허가를 이해하는 것이 매우 중요하다. 스카이프와 같이 전화기 상의 다양한 데이터에 접근이 필요한 여러 가지 애플리케이션이 존재한다. 하지만 Wallpapers, Calendar와 같이 아주 적은 허가가 필요한 애플리케이션은 매우 적다.

Entity-X의 분석 기획가인 Robi Sen는 만약 애플리케이션이 허가에 접근하는 것이 안전하고 애플리케이션의 정상적인 작동이 절실히 필요한지를 알기 위해 모든 사용자가 반드시 숙지해야 할 몇 가지 허가를 요약했다 (15).

허가 위험 수준 요약

1. 직접 번호로 전화하기 상중

이는 Google Voice나 Skype와 같은

애플리케이션이 사용자가 부담하게 될

1-900개의 번호에 전화를 걸도록 한다.

2. SMS 전송 상중

(27)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

27

3. SD 카드 내용 삭제/수정 상중

애플리케이션이 SD카드에 저장된 데이터를 읽고, 쓰고 또는 삭제할 것이다. 데이터는 사진, 비디오 또는 다른 애플리케이션에 의해 쓰인 데이터일 수 있다.

4. 전화기 상태와 ID 읽기 중

사용자가 전화를 받을 때 일부 임무를 멈추거나 실행하기 위해 게임과 같은 애플리케이션에 의해 요구된다. 그러나 전화기의 UID, IMEI 그리고 IMSI 번호를 얻을 수 있는 악성 소프트웨어가 있을 수 있다. 이는 또한 사용자나 그들의 통화 내역을 감시하기 위해 이용될 수 있다.

5. 연락처 데이터 읽기 중

애플리케이션은 사용자의 연락처 목록을 읽을 수 있고 스팸 메시지를 보내거나 사용자의 개인 데이터를 추적하기 위해 사용될 수 있다. 이러한 허가를 요구하는 합법적 애플리케이션에는 메시지 전송, 소셜 네트워킹 등이 있다.

6. GPS 위치 찾기 중하

이 허가는 애플리케이션이 사용자의 위치를 추적하고 사용자가 제공하고 싶지 않은 정보를 수집할 수 있도록 한다.

7. 캘린더 데이터를 읽고

쓰기 중하

이 허가는 아무런 주요한 위협도 제기하지 않지만, 애플리케이션이 사용자를 대상으로 표적 공격을 하도록 할 수는 있다.

8. 완전한 인터넷 접근 상중

이는 가장 흔하고 위험한 허가 중 하나이다. 이 허가는 광고, 비디오 게임 등을 지원하는 모든 애플리케이션에 의해 ㅛ구된다.

9. 블루투스 연결 생성 하 블루투스는 주변과 소통하기 위해 사용된다.

10. 대략의 위치 하

이 허가는 셀 타워의 도움으로 사용자의 위치를 파악하기 때문에 GPS 위치 추적보다 훨씬 부정확하다. 그러므로 이는 아무런 유해한 영향을 끼치지 않는다.

(28)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

28

전화기가 대기 모드에 들어가는 것을 방지하는 게임이나 미디어 플레이어이다.

일부 다른 허가들로는 네트워크 보기, Wi-Fi 상태, 싱크 세팅 읽기, 글로벌 시스템 세팅 수정, 부트로 자동 시작, 다른 애플리케이션 재시작, 선호 애플리케이션 설정, 실행 애플리케이션

회수, 알려진 계정 발견, 사진 찍기 그리고 진동기 제어 등이 있다(15).

 안티바이러스 설치 (16): Julie Knudson이 쓴 글에 의하면, 데스크탑에 설치하듯이 휴대 전화에 안티바이러스를 설치하는 것은 악성 소프트웨어를 식별하는데 도움을 주고 사용자가 이를 설치하는 것을 방지해 줄 것이다. 안드로이드 폰에는 악성 소프트웨어를 제거하고 이로부터 전화기를 보호해주는 여러 종류의 안티바이러스 소프트웨어들이 있다.

 네트워크 접근 통제 (16): Julie Knudson은 Andrew Hoog를 인용하여 말하길,

회사들은 공격자들이 시스템에 안드로이드 기기를 간단히 플러그인 하여 이를 네트워크 연결로 대체할 수 있는 것과 같은 네트워크에 대한 연결을 통제하는 것이 중요하다고 했다. 이러한 것을 허용하는 경우 공격자에게 회사의 방화벽, DLP 시스템 그리고 웹 라우팅(Web Routing)의 규칙을 피할 수 있는 쉬운 방법을 제공하는 것이다. John Engels는 IT 기관들은 별개의 네트워크가 접근 통제권을 인프라에 접근하는 모바일 기기에 제공해야 하고, 그들은 또한 모든 트래픽이 DLP와 웹 보안을 통해 통과해야 하도록 해야 한다고 제안했다.

Lookout Mobile Security는 사용자들이 단말기를 악성 소프트웨어로부터 안전하게 보호하기 위해 채택할 수 있는 몇 가지 완화 절차를 제시했다 (14).

 사용자는 안드로이드 폰을 위한 안드로이드 마켓과 같이 신뢰받고 이름 있는 소스 또는 앱 스토어로부터 애플리케이션을 다운로드 해야 한다. 사용자는 리뷰와 별 평점, 그리고 가장 중요하게는 애플리케이션의 개발자 이름을 체크해야 한다는 점을 명심한다.

 사용자의 로그인 인증 데이터를 입력하도록 요구 받으면, 웹 링크 주소가 실제 웹 사이트와 일치하는 지 확인해야 한다.

 절도에 대비에 비밀 번호는 기기에 설정되어야만, 기기의 데이터에 접근하는 것이

(29)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

29

 가능할 때 반드시 단말기의 펌웨어 업데이트를 다운로드 해야 한다.

 사용자는 배터리 수명이 갑작스럽게 감소하거나, 이상한 텍스트 메시지, 전화 요금 추가 지불 등의 단말기의 이상한 행위에 대하여 항상 조심해야 한다. 이러한 것들은 단말기가 손상을 입었다는 증거일 수 있다.

 사용자는 반드시 모든 다운로드 된 애플리케이션에 대해 스파이웨어와 악성

소프트웨어 검사할 보안 도구와 단말기를 위험한 웹사이트로부터 추가적으로 보호할 수 있는 다운로드 및 설치 해야 한다.

이것들은 기기에 대한 공격 가능성을 줄일 수 있는 몇 가지 방법이다.

방법론

역공학은 애플리케이션의 사용 가능한 기능성을 분석하는 과정이다. 악성 소프트웨어를 분석하기 위해서는 두 가지 방법이 있는데, 이는 각각 정적 분석과 동적 분석이 있다. 이 도구들은 아래에서 언급된 바와 같이 사용될 수 있다.

도구

안드로이드 애플리케이션의 역공학은 다양한 종류의 도구를 사용하여 수행될 수 있다. 본 프로젝트에서 우리는 악성 소프트웨어 코드를 분석하기 위해 두 가지 방법을 사용한다. 첫 번째 방법은 APKToolNotepad++와 같은 편집기의 이용을 포함한다. 두 번째 방법은

Dex2JarJD-GUI 도구를 이용하여 수행한다.

이들 도구들 각각을 개별적으로 살펴보자.

ApkTool

APKTOOL은 제3자가 개발한 도구로서 폐쇄형 안드로이드 애플리케이션 바이너리를 분석하는데 사용된다. 이것의 기능으로는 (17):-

 이 도구는 애플리케이션을 실질적인 본래의 형태로 해체하고 이를 특정 수정

작업을 거친 후 재포장 할 수 있다.

 사용자가 smali 코드를 디버그 할 수 있도록 해준다.

 이 도구는 고객 플랫폼과 지역화(로컬라이징)에 몇 가지 지원과 기능을 추가하는데

(30)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

30

 일부 계속해서 생기는 임무와 프로젝트 비슷한 파일 구조의 자동화를 제공하여

사용자가 애플리케이션과 더욱 쉽게 작업할 수 있도록 해준다. Dex2Jar

각 안드로이드 애플리케이션은 자신의 Dalvik Virtual Machine의 예와 함께 실행한다고 알려져 있다. DVM은 .dex 형식, 또는 Dalvik Executable 형식으로 파일을 실행한다. .dex 형식은 Dalvik Machine에서 기계 설명의 매우 이익이 되는 바이너리 형식으로 여겨진다 (18).

안드로이드 애플리케이션의 주요 구성 요소와 프로그램 논리는 사용자가 볼 수 없는 classes.dex 파일에 들어있다. 그러므로 Dex2Jar 도구는 .dex 파일을 .class 형식으로 변환하기 위해 개발되었다. 이 도구의 도움에 힘입어 애플리케이션의 소스 코드를 자바 코드로 보는 것이 가능해졌다 (19).

안드로이드 SDK

안드로이드 소프트웨어 개발 장비(SDK)는 애플리케이션을 만드는데 사용되는 개발 도구의 집합이다. 아래의 구성 요소/도구는 SDK에 포함되어 있다(20):-

 디버거

 안드로이드 운영 체제 설명서

 에뮬레이터

 필수 라이브러리  샘플 소스 코드

 안드로이드 API 문서

윈도우 XP, Vista, 7, 리눅스와 Mac OS X는 안드로이드 SDK와 호환 가능한 플랫폼들이다. SDK의 구성 요소는 독립적으로 다운로드 되거나 제3자 추가판 또한 다운로드 가능하다. 구글이 새로운 버전의 안드로이드 운영 체제를 출시하면서, 최신 기능을 포함한 새로운 버전의 SDK 또한 출시되었다(20).

(31)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

31

프로그램이 써지기 때문에, 사용자는 Java Development Kit(JDK) 또한 설치했어야 한다 (20).

Notepad++

(32)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

32

WinZip
(33)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

33

WinZip은 다양한 옵션을 사용자에게 제공한다 (22).

 Archive 안의 모든 파일은 압축되어 있다. WinZip은 Add라는 옵션을 갖고 있어서 파일을 압축하고 아카이브에 추가할 수 있다.

 파일의 압축을 풀려면, WinZip이 Extract 라는 옵션을 제공한다. 이 명령은 디스크에 각각의 아카이브로부터 압축 해제된 파일에 개인 파일을 생성한다.

JD-GUI

이 도구는 http://javea.decompiler.free.fr/?q=jdgui 에서 무료로 다운로드가 가능한 Java Decompiler이다. 이것은 분리된 그래픽 유틸리티로서 사용자가 .class 파일의 Java 소스 코드를 볼 수 있게 해준다. 이것의 일부 기능은 다음을 포함한다 (23).

 Drag와 Drop을 지원한다.

 JAR 파일을 지원한다.

 wxWidgets toolkit 교차 플랫폼을 사용한다.

 사용자가 class 파일의 서열을 브라우징 할 수 있게 ㅐ준다.  컬러 코드로 자바 코드를 보여준다.

(34)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

34

절차

정적 분석

"정적 분석은 구문론적인 수준(syntactic level)에서의 프로그램 이해를 다룬다". (24)

정적 분석을 실행에 옮기는 두 가지 방법이 있는데, 이는 각각,

 ApkTool을 사용하여 안드로이드 애플리케이션을 해체하고 smali 코드를 Notepad++를 사용하여 분석한다.

 .dex 파일을 자바 파일로 변환하기 위해 Dex2Jar 을 사용하고, 자바 코드를 분석하기 위해 Notepad++를 사용한다.

방법 1:-

 첫 번째 단계는 미리 포장된 ApkTool을 다운로드하고, WinZip을 이용하여 기억될 수 있는 디렉토리에 뽑아낸다.

Apltool은 h

ttp://code.google.com/p/android-apktool/

에서

다운로드

있다

.

ApkTool

윈도

플랫폼이

apktool-install-windows-r04-brut1.tar.bz2

and

apktool1.4.1.tar.bz2.

설치된다는

점을

유의해야

한다

.

 우리 경우 iCalender같은 악성 소프트웨어는 동일한 디렉토리에 ApkTool로서

다운로드 된다. 악성 소프트웨어는 http://www.mediafire.com/?v3ct2u7zt87eb8 에서 다운로드가 가능하다. 악성 소프트웨어를 다운로드하기 바로 직전 시스템 상의 안티 바이러스는 꺼야 한다.

 명령 프롬프트 창을 열고 ApkTool의 루트 디렉토리로 향해 아래의 명령이

(35)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

35

apktool if iCalender acbcad45094de7e877b656db1c28ada2.apk

이 명령의 출력은 다음과 같다.

I: Framework installed to: C:/Users/Vibha/apktool/framework/127.apk

 apk 파일을 디컴파일하기 위해서는 아래와 같은 명령을 사용해야 한다.

apktool d iCalender acbcad45094de7e877b656db1c28ada2.apk

(36)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

36

이는 apk 파일을 실제로 디컴파일하는 단계이다. 한 번 명령이 실행되면, 오류가 없을 경우 애플리케이션 이름이나, 여기의 경우, 악성 소프트웨어의 이름이 적힌 폴더가 동일한 디렉토리에 생성될 것이다. 이 폴더는 아래와 같은 파일을 포함할 것이다.

Res 폴더 - 이 폴더는 레이아웃을 정의하는 XML, drawable, 속성, 언어 등을 포함한다 (25).

(37)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

37

 그리고나서 코드는 IDE Notepad++의 도움으로 분석된다. 한 번 코드가 분석되고

악성 코드가 탐지 및 정밀 조사되면, 우리는 필요한 수정 작업을 거쳐 애플리케이션을 재포장 할 수 있다.

 애플리케이션을 재포장하기 위한 명령은,

(38)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

38

방법 2:-

먼저 WinZip을 이용하여 Dex2Jar 도구가 다운로드되어 기억할 수 있는 디렉토리에 압축을 푼다.

http://code.google.com/p/dex2jar/downloads/detail?name=dex2jar-0.0.7.11-

에서

다운로드가 가능하다. 앞에 언급한 바와 같이 이 도구는 .dex 형식을 .class 형식으로 변환하도록 도와준다.

 악성코드는 또한 동일한 디렉토리로 다운로드 됐다. 안드로이드 애플리케이션은

(39)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

39

본 폴더의 내용물은 다음과 같다 (26),

Meta INF 폴더 - 본 폴더는 사용자가 시스템의 보안과 APK 애플리케이션의 통합성을 확인할 수 있도록 해주는 정보로 구성되어 있다.

Res 폴더 - 본 폴더는 레이아웃, 사운드, 세팅, 그래픽 등의 리소스 파일로 구성되어 있다.

안드로이드 매니페스트 파일(Android Manifest File) - 이것은 애플리케이션, 패키지 이름, 버전 등에 의해 접근되는 허가와 같은 정보를 갖고 있는 XML 파일이다.

Classes.dex - 이 파일은 컴파일된 모든 자바 소스 코드를 갖고 있다. 이 파일은 Dalvik Machine에서 실행된다. 이 파일은 Dalvik Machine이 해석할 온전한 bytecode로 구성되어 있다.

Resources.arsc - 이 파일은 컴파일 한 뒤에 얻어진 바이너리 리소스 파일이다.

(40)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

40

 한 번 dex2jar가 아무런 오류없이 실행되면, classes.dex.dex2jar.jar 이란 이름의
(41)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

41

 자바 코드는 이후 정밀 분석되어 악성 코드를 탐지한다.

동적 분석

"통제된 환경에서 애플리케이션을 실행하고 이의 행동을 감시하는 일련의 기술을 역동적 분석이라 칭한다". (25)

악성 소프트웨어의 역동적 분석 첫 번째 단계는 가상 기계를 만들기 위해 안드로이드 SDK를 설치하는 것이다. 이 가상 기계는 위의 정의대로 통제된 환경에서 작동한다.
(42)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

42

SDK는 여러 기능을 제공한다 (7).

도구 - 다른 유틸리티 도구와 함께 애플리케이션을 테스트하고 디버그하기 위한 도구를 포함한다.

플랫폼 도구 - 애플리케이션을 개발하고 디버그하는데 쓰이는 플랫폼 전용 도구로 구성되어 있다.

플랫폼 - 안드로이드 기기에 배치 가능한 모든 안드로이드 플랫폼을 포함한다. 각각의 플랫폼은 묵묵히 따르는 안드로이드 라이브러리, 에뮬레이터 스킨, 샘플 코드와 시스템 이미지를 포함한다.

 SDK Manager.exe 가 시작된다. 이는 먼저 미리 설치된 패키지에서 업데이트를

(43)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

43

 New를 선택하고 아래와 같이 필요한 필드를 채워넣고 Create AVD를 선택한다.
(44)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

44

 한번 새로운 AVD가 만들어지면, 우리는 그 AVD를 선택하고 Start를 클릭하여 가상

기계/에뮬레이터를 실행한다. 한 번 에뮬레이터가 온전히 실행되면, 아래의 그림과 같이 보인다.

 악성코드를 안드로이드 SDK의 'platform-tools' 폴더에 복사한다. 에뮬레이터가 실행되면서, 명령 프롬프트 창을 열어 안드로이드 SDK의 platform-tools 폴더로 향한다. 단말기에 악성 소프트웨어를 설치하기 위해서 아래의 명령을 입력한다.

(45)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

45

한 번 악성 소프트웨어가 성공적으로 설치되면 에뮬레이터의 메뉴 스크린에서 볼 수 있게 된다.

 다음 단계는 애플리케이션이 실행되는지 체크하는 것이다. 우리는 악성

(46)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

46

 에뮬레이터에서 우리는 Dev Tools로 향해 Running Processes를 골라 iCalender 악성
(47)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

47

역공학 기술을 활용하는 또 다른 방법은 아래에 언급된다. 이 방법은 Seesmic 1.5.1 이라는 애플리케이션을 사용한다. 이 애플리케이션은 단일하지만 강력한 애플리케이션으로서 사용자로 하여금 그들의 소셜 네트워크를 다룰 수 있게 해준다. 이것의 기능은 다음과 같다 (27),

 Salesforce, Facebook, Google Buzz와 Twitter 계정을 동시에 업데이트한다.  최신 메시지를 얻어 통지 사항을 검색한다.

 TwitPic, Youtube, vFrog 등의 서비스를 이용하여 비디오, 위치 그리고 사진을

공유한다.

 Facebook, Twitter, Google Buzz 및 Salesforce와 완전하게 통합

이 애플리케이션은 이래에서 다운로드 할 수 있다.

http://www.freeware4android.net/googleandroid-2-2-device-1745/multimedia-graphics-ta

g/seesmic-get-23529.html

(Appendix 2).

(48)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

48

 앞에 언급된 바와 같이 안드로이드 SDK는 설치 가이드에 나온 것처럼 다운로드 및

설치된다.

 애플리케이션이 ApkTool과 같은 디렉토리에 다운로드 된다. 명령 프롬프트 창이 열린다. 애플리케이션과 ApkTool이 다운로드 된 디렉토리로 들어가 아래의 명령을 입력한다.

명령의 출력은 아래의 그림과 같다.

 seismic_1.5.1 이란 이름의 폴더는 같은 디렉토리에 만들어졌을 것이다. 이 폴더는

다음과 같은 파일을 갖고 있다. * Res 폴더

* Smali 폴더

* 안드로이드 매니페스트 파일 (XML) * 안드로이드 yml 파일

(49)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

49

* 4개의 허가가 추가되고, 각각의 이름은 READ_SMS, WRITE_SMS, SEND_SMS 그리고 READ_OWNER_DATA 이다.

(50)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

50

 명령 프롬프트 창에서 위는 아래의 명령을 입력해 애플리케이션을 재포장한다.

출력은 아래의 그림과 같다.

 한 번 명령이 오류없이 진행되면, seismic 1.5.1 이란 폴더 안에 dist 라는 변경 사항과

함께 재포장된 애플리케이션이 들어있는 폴더가 있을 것이다.

(51)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

51

 명령 프롬프트 창에 우리는 아래의 명령을 입력한다.

그리고는 이 경우 android인 키스토어 패스워드를 요구한다. 이후의 단계는 아래의 스냅샷에 나온 것과 같다. 끝에 seismic_1.6에 필요한 패스워드를 입력하도록 요구하면 이 것 또한 android 이다.

 애플리케이션은 이제 아래의 명령으로 jarsigner를 사용하여 애플리케이션이 서명되었다.

(52)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

52

 애플리케이션은 이제 서명이 완료됐다. seismic_1.6.apk 애플리케이션과 그 원래
(53)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

53

 다음 단계는 SDK Manager.exe를 실행시키고 플랫폼 안드로이드 2.2에서 실행되는

TEST 라는 이름의 새로운 가상 기계를 생성한다.

 한 번 새로운 AVD이 생성되면 start를 선택한다. 그 동안 새로운 명령 프롬프트

(54)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

54

 설치가 성공적으로 끝나면 menu 버튼을 클릭하고 settings에 들어가 원본

애플리케이션이 접근할 수 있는 허가가 무엇이 있는 체크한다.

(55)

안드로이드 기반의 악성코드 역공학

© 2012 SANS 코리아 www.sans.or.kr 번역 : www.boanproject.com

55

(56)

안드로이드

References

Related documents

If you know you’re no longer going to try to lie your way out of trouble, you make sure that you don’t do the things that you wouldn’t want to admit to later.. You find that

Polypropylene can also be made into disposable bottles to contain liquid, powdered, or similar consumer products, although HDPE and polyethylene terephthalate are commonly also

This report has been prepared independently of the company analysed by Close Brothers Seydler Research AG and/ or its cooperation partners and the analyst(s) mentioned on the

• All registration data entered or updated in CTMS only • Mapping code lists for protocols sites and treatment arms Mapping code lists for protocols, sites and treatment arms •

To strengthen support to patients with severe mental illness (SMI) and their caregivers, MHD started the Psychiatric Telecare Service by phases since April 2012 to support

make java documentation android app building game android development nexus 7 2013 android sdk ndk ubuntu android apps development tools how to make calculator app in android

Heterosexual risk of HIV-1 infection per sexual act: systematic review and meta-analysis of observational studies. Lancet

Product - Mobile as a Disrupter Mobile iOS App Mobile HTML Mobile Android App iPad . iOS App Tablet HTML