KR102096164B1 - 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치 - Google Patents

액티비티 삽입 검출을 위한 정적 분석 방법 및 장치 Download PDF

Info

Publication number
KR102096164B1
KR102096164B1 KR1020180050252A KR20180050252A KR102096164B1 KR 102096164 B1 KR102096164 B1 KR 102096164B1 KR 1020180050252 A KR1020180050252 A KR 1020180050252A KR 20180050252 A KR20180050252 A KR 20180050252A KR 102096164 B1 KR102096164 B1 KR 102096164B1
Authority
KR
South Korea
Prior art keywords
activity
static analysis
task
intent
information
Prior art date
Application number
KR1020180050252A
Other languages
English (en)
Other versions
KR20190125880A (ko
Inventor
류석영
이성호
황성재
Original Assignee
한국과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 한국과학기술원 filed Critical 한국과학기술원
Priority to KR1020180050252A priority Critical patent/KR102096164B1/ko
Publication of KR20190125880A publication Critical patent/KR20190125880A/ko
Application granted granted Critical
Publication of KR102096164B1 publication Critical patent/KR102096164B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • G06F21/562Static detection
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/51Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems at application loading time, e.g. accepting, rejecting, starting or inhibiting executable software based on integrity or source reliability

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Health & Medical Sciences (AREA)
  • General Health & Medical Sciences (AREA)
  • Virology (AREA)
  • Stored Programmes (AREA)

Abstract

액티비티 삽입 검출을 위한 정적 분석 방법 및 장치가 개시된다. 일 실시예에 따른 정적 분석 방법은, 어플리케이션에 관한 정보를 수신하는 단계와, 상기 정보로부터 액티비티 정보를 추출하는 단계와, 상기 정보로부터 CHA(Class Hierarchy Analysis)를 통해 콜 그래프(call graph)를 생성하는 단계와, 상기 콜 그래프로부터 인텐트 데이터(intent data)를 획득하는 단계와, 상기 액티비티 정보 및 상기 인텐트 데이터에 기초하여 액티비티 삽입(activity injection)을 검출하는 단계를 포함한다.

Description

액티비티 삽입 검출을 위한 정적 분석 방법 및 장치{STATIC ANALYSIS METHOD AND APPARATUS FOR ACTIVITY INJECTION DETECTING}
아래 실시예들은 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치에 관한 것이다.
모바일 기기가 대중화 됨과 동시에 악성 어플리케이션으로 인한 피해사례가 함께 증가하는 추세이다. 악성 어플리케이션을 검출하고 보안을 유지하기 위하여, 다양한 회사에 의해 보안 정책과 보안 시스템이 제공되고 있다.
스마트 폰은 일상 생활의 많은 부분을 크게 변화시켰다. 사람들은 스마트폰을 통해 위치나 시간의 제한 없이 음악을 듣고, 웹사이트를 탐색하고, 상품을 구매하고, 이메일을 보낸다. 스마트폰 사용자의 절반 이상이 온라인 뱅킹 앱(apps) 및 건강 상태 모니터링을 위해 스마트폰을 사용하고 있다고 보고되었다. 따라서, 스마트폰은 다양한 종류의 민감한 데이터를 유지하므로, 스마트폰의 보안이 매우 중요하다.
데스크탑 앱과 비교하여, 스마트폰 앱은 다른 앱과의 상호 작용을 통해 원활한 자용자 경험으로 다양한 기능을 제공한다. 예를 들어, 갤러리 앱은 사진을 전송하기 위해 그 자체의 이메일 기능을 가지기 보다는 이메일 앱을 이용한다. 사용자는 하나의 앱으로 사진을 관리하고 이메일을 전송하는 것으로 생각할 수 있지만, 실질적인 구현은 앱 간 통신(inter-app communication)을 사용하는 두 개의 독립적인 앱들로 이루어진다.
그러나, 강력한 앱 간 통신은 안드로이드(Android) 샌드박스(sandbox) 환경을 손상시킬 수 있는 취약성들(vulnerabilities)을 포함하고 있다. 각각의 안드로이드 앱들이 자체적인 보안 샌드박스에 상주하더라도, 다른 앱을 시작하는 기능은 피해자 앱(victim app)의 액티비티 스택(stack)에 악성 액티비티(malicious activity)를 삽입하여 사용자의 상호 작용 흐름(interaction flow)을 가로챌 수 있는 취약성을 야기한다.
삽입된 악성 액티비티는 취약한 피해자 앱의 컨텍스트(context)에서 실행될 수 있으므로 피싱(phishing)을 포함하는 다양한 공격을 시작할 수 있다.
최근, 태스크 하이재킹 공격(task hijacking attack)의 개념 증명 구현(proof-of-concept implementation)을 통해 태스크 행동들(task behaviors)에서 보안 문제들이 보고되고 있다.
이러한 공격들에 있어서 “멀웨어(malware)가 동일한 태스크에서 피해자 앱들과 나란히 놓고, 피해자 앱들의 사용자 세션들을 하이재킹하는”것이 태스크 하이재킹으로 정의된다.
태스크 하이재킹 공격은 진정한 악성 행위들을 포함하지만, 너무 많은 “정상적인(normal)”동작을 취약한 것으로 간주될 수 있다. 구글 플레이(Google Play)에서 가장 인기 있는 10,985개의 앱들 중에서 93.9%가 취약한 것으로 나타났는데, 이는 사용자가 의도적으로 특정 액티비티를 선택하는 경우에도 취약한 것으로 간주되기 때문이다.
더 중요한 것은, 그들은 액티비티 당 하나의 인스턴트화(instantiation) 및 앱 당 단 두 개의 액티비티만을 고려하는 단순화된 태스크 상태 변화 모델(simplified task state transition mode)을 사용했기 때문에, 모델이 실제 태스크 및 활성화 동작을 올바르게 캡처하지 못하게 되어 진정한 악성 공격을 놓치게 된다.
실시예들은 액티비티 삽입 공격을 검출하기 위한 정적 분석 기술을 제공할 수 있다.
일 실시예에 따른 정적 분석 방법은, 어플리케이션에 관한 정보를 수신하는 단계와, 상기 정보로부터 액티비티 정보를 추출하는 단계와, 상기 정보로부터 CHA(Class Hierarchy Analysis)를 통해 콜 그래프(call graph)를 생성하는 단계와, 상기 콜 그래프로부터 인텐트 데이터(intent data)를 획득하는 단계와, 상기 액티비티 정보 및 상기 인텐트 데이터에 기초하여 액티비티 삽입(activity injection)을 검출하는 단계를 포함한다.
상기 추출하는 단계는, 상기 정보로부터 상기 어플리케이션의 리소스 파일 및 매니페스트 파일을 분리하는 단계와, 상기 메니페스트 파일로부터 액티비티를 시작하기 위한 런치모드(launchmode) 및 상기 액티비티의 태스크 친화도(taskAffinity)를 추출하는 단계를 포함할 수 있다.
상기 런치모드는, 스탠다드, 싱글탑, 싱글태스크 및 싱글인스턴스를 포함할 수 있다.
상기 인텐트 데이터는, 복수의 인텐트 데이터 엔트리(entry)를 포함할 수 있다.
상기 획득하는 단계는, 상기 콜 그래프로부터 인텐트의 타겟 액티비티 이름 및 상기 인텐트에 부가되는 인텐트 플래그의 집합을 획득하는 단계를 포함할 수 있다.
상기 검출하는 단계는, 상기 액티비티 정보 및 상기 인텐트 데이터를 병합하여 액티비티 활성화 데이터를 생성하는 단계와, 상기 액티비티 활성화 데이터의 엔트리를 동작 시맨틱스 규칙(operational semantics rule)에 따라 매칭하는 단계와, 매칭 결과에 기초하여 상기 액티비티가 다른 앱이 태스크(task)에 삽입될 수 있는지 여부를 검출하는 단계를 포함할 수 있다.
상기 동작 시맨틱스 규칙은, 도메인, 스택 및 커맨드 간의 관계를 정의할 수 있다.
상기 스택은, 백 스택 및 태스크 스택을 포함할 수 있다.
상기 커맨드는, 홈 버튼 커맨드, 백 버튼 커맨드 및 액티비티 시작 커맨드를 포함할 수 있다.
일 실시예에 따른 정적 분석 장치는, 어플리케이션에 관한 정보를 수신하는 수신기와, 상기 정보로부터 획득한 액티비티 정보 및 인텐트 데이터에 기초하여 액티비티 삽입을 검출하는 컨트롤러를 포함하고, 상기 컨트롤러는, 상기 정보로부터 액티비티 정보를 추출하는 액티비티 정보 추출기와, 상기 정보로부터 CHA(Class Hierarchy Analysis)를 통해 콜 그래프(call graph)를 생성하는 콜 그래프 생성기와, 상기 콜 그래프로부터 인텐트 데이터(intent data)를 획득하는 인텐트 분석기와, 상기 액티비티 정보 및 상기 인텐트 데이터에 기초하여 액티비티 삽입(activity injection)을 검출하는 검출기를 포함한다.
상기 액티비티 정보 추출기는, 상기 정보로부터 상기 어플리케이션의 리소스 파일 및 매니페스트 파일을 분리하고, 상기 메니페스트 파일로부터 액티비티를 시작하기 위한 런치모드(launchmode) 및 상기 액티비티의 태스크 친화도(taskAffinity)를 추출할 수 있다.
상기 런치모드는, 스탠다드, 싱글탑, 싱글태스크 및 싱글인스턴스를 포함할 수 있다.
상기 인텐트 데이터는, 복수의 인텐트 데이터 엔트리(entry)를 포함할 수 있다.
상기 인텐트 분석기는, 상기 콜 그래프로부터 인텐트의 타겟 액티비티 이름 및 상기 인텐트에 부가되는 인텐트 플래그의 집합을 획득할 수 있다.
상기 검출기는, 상기 액티비티 정보 및 상기 인텐트 데이터를 병합하여 액티비티 활성화 데이터를 생성하고, 상기 액티비티 활성화 데이터의 엔트리를 동작 시맨틱스 규칙(operational semantics rule)에 따라 매칭하고, 매칭 결과에 기초하여 상기 액티비티가 다른 앱이 태스크(task)에 삽입될 수 있는지 여부를 검출할 수 있다.
상기 동작 시맨틱스 규칙은, 도메인, 스택 및 커맨드 간의 관계를 정의할 수 있다.
상기 스택은, 백 스택 및 태스크 스택을 포함할 수 있다.
상기 커맨드는, 홈 버튼 커맨드, 백 버튼 커맨드 및 액티비티 시작 커맨드를 포함할 수 있다.
도 1은 일 실시예에 따른 정적 분석 장치의 개략적인 블록도를 나타낸다.
도 2는 도 1에 도시된 컨트롤러의 개략적인 블록도를 나타낸다.
도 3은 도 1에 도시된 정적 분석 장치의 동작의 예를 나타낸다.
도 4a는 타겟 액티비티의 활성화를 위한 코드의 예를 나타낸다.
도 4b는 매니페스트 파일에 정의된 타겟 액티비티의 태스크친화도 및 런치모드 코드의 예를 나타낸다.
도 5은 런치모드 속성과 인텐트 플래그의 관계의 예를 나타낸다.
도 6는 동작 시맨틱스를 설명하기 위한 도메인, 스택 및 커맨드의 예를 나타낸다.
도 7은 액티비티를 시작하기 위한 동작 시맨틱스의 예를 나타낸다.
도 8은 멀웨어에 사용된 액티비티 삽입 시맨틱스의 예를 나타낸다.
도 9는 태스크에서 삽입된 악성 액티비티를 보여주는 태스크 스택의 예를 나타낸다.
도 10은 도 2에 도시된 검출기의 동작의 예를 나타낸다.
도 11a는 도 1에 도시된 정적 분석 장치의 분석 결과의 일 예를 나타낸다.
도 11b는 도 1에 도시된 정적 분석 장치의 분석 결과의 다른 예를 나타낸다.
도 12는 도 1에 도시된 정적 분석 장치가 시간에 따라 분석한 앱의 수를 나타낸다.
이하에서, 첨부된 도면을 참조하여 실시예들을 상세하게 설명한다. 그러나, 실시예들에는 다양한 변경이 가해질 수 있어서 특허출원의 권리 범위가 이러한 실시예들에 의해 제한되거나 한정되는 것은 아니다. 실시예들에 대한 모든 변경, 균등물 내지 대체물이 권리 범위에 포함되는 것으로 이해되어야 한다.
실시예에서 사용한 용어는 단지 설명을 목적으로 사용된 것으로, 한정하려는 의도로 해석되어서는 안된다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 명세서에서, "포함하다" 또는 "가지다" 등의 용어는 명세서 상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
제1 또는 제2등의 용어를 다양한 구성요소들을 설명하는데 사용될 수 있지만, 구성요소들은 용어들에 의해서 한정되어서는 안 된다. 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만, 예를 들어 실시예의 개념에 따른 권리 범위로부터 이탈되지 않은 채, 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소는 제1 구성요소로도 명명될 수 있다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 실시예가 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
또한, 첨부 도면을 참조하여 설명함에 있어, 도면 부호에 관계없이 동일한 구성 요소는 동일한 참조부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다. 실시예를 설명함에 있어서 관련된 공지 기술에 대한 구체적인 설명이 실시예의 요지를 불필요하게 흐릴 수 있다고 판단되는 경우 그 상세한 설명을 생략한다.
본 명세서에서의 모듈(module)은 본 명세서에서 설명되는 각 명칭에 따른 기능과 동작을 수행할 수 있는 하드웨어를 의미할 수도 있고, 특정 기능과 동작을 수행할 수 있는 컴퓨터 프로그램 코드를 의미할 수도 있고, 또는 특정 기능과 동작을 수행시킬 수 있는 컴퓨터 프로그램 코드가 탑재된 전자적 기록 매체, 예를 들어 프로세서 또는 마이크로 프로세서를 의미할 수 있다.
다시 말해, 모듈이란 본 발명의 기술적 사상을 수행하기 위한 하드웨어 및/또는 상기 하드웨어를 구동하기 위한 소프트웨어의 기능적 및/또는 구조적 결합을 의미할 수 있다.
도 1은 일 실시예에 따른 정적 분석 장치의 개략적인 블록도를 나타낸다.
도 1을 참조하면, 정적 분석 장치(10)는 어플리케이션(application 또는 앱(app))에서 발생하는 태스크(task) 및 액티비티(activitiy)를 분석하여 악성 액티비티 삽입 공격(activity injection attack)을 검출할 수 있다.
정적 분석 장치(10)는 정상적인 태스크(task)에 악성(malicious) 액티비티를 삽입하는 액티비티 삽입 공격을 검출할 수 있다. 정적 분석 장치(10)는 치명적인 태스크 하이재킹(hijacking) 공격을 분류하여, 액티비티 삽입 공격을 검출할 수 있다.
정적 분석 장치(10)는 액티비티 활성화의 동작 시맨틱스를 명시함으로써 공격의 근본적인 원인을 분석할 수 있다.
액티비티 주입 공격은 아무런 권한을 요구하지 않기 때문에 매우 강력함에도 불구하고, 사용자들은 정상적인 앱의 아이콘을 누르는 것만으로 실행되기 때문에 검출하는 것이 어려울 수 있다.
정적 분석 장치(10)는 액티비티 활성화 시맨틱스를 이용하여 앱에서 발생하는 액티비티 주입 공격을 효과적으로 검출할 수 있다. 예를 들어, 앱은 안드로이드 기반 앱을 포함할 수 있다.
구체적으로 정적 분석 장치(10)는 안드로이드 액티비티 활성화 매커니즘의 공식적인 시맨틱스를 제공할 수 있다. 정적 분석 장치(10)는 공식적인 시맨틱스를 통해 액티비티 삽입 공격의 가능한 모든 방법을 명시할 수 있다
정적 분석 장치(10)는 앱 간 통신(inter-app communication)에 대한 플래그(flag) 및 액티비티의 속성의 상태를 고려하여 가능한 모든 태스크 동작을 철저하게 명시할 수 있다. 정적 분석 장치(10)는 공식적인 시맨틱스에 기반하여 많은 수의 안드로이드 앱에서 일어나는 액티비티 삽입 공격을 효과적으로 검출할 수 있다.
정적 분석 장치(10)는 오픈소스 정적 분석 프레임워크를 이용하여 구현될 수 있다. 예를 들어, 정적 분석 장치(10)는 WALA(Watson Libraries for Analysis) 프레임워크 상에 구현될 수 있다.
안드로이드 앱(android app)은 안드로이드 시스템 내의 자체 보안 샌드박스(sandbox)에 상주할 수 있다. 안드로이드는 각각의 앱을 다른 사용자로 취급하여 각 앱이 다른 앱과 분리되어 실행되도록 할 수 있다.
각 응용 프로그램은 권한(permission)이 있는 구성 요소(component)에만 액세스(access)할 수 있기 때문에 안전한 환경을 제공할 수 있다. 앱은 구성 요소를 선언하는 자체 매니페스트(manifest) 파일(AndroidManifest.xml)을 가지고, 권한을 위해 장치 특징을 필요로 할 수 있다.
안드로이드 앱은 개별적으로 불러올 수 있는 앱 구성 요소로 구성될 수 있다. 앱 구성 요소는 액티비티(activity), 서비스(service), 콘텐츠 제공자(content provider) 및 방송 수신자(broadcast receiver)의 4 가지 유형(type) 중에 하나일 수 있다. 각각의 유형은 다른 역할을 하며 상이한 라이프 사이클(life cycle)을 가질 수 있다.
액티비티는 android.content.Activity의 인스턴스를 의미할 수 있다. 앱은 다수의 액티비티들로 구성될 수 있다. 사용자가 앱을 실행하면, 하나의 지정된 “메인(main)”액티비티가 시작되고, 이는 또 다른 액티비티를 시작할 수 있다.
안드로이드 시스템은 백 스택(back stack)이라는 스택에서 실행중인 액티비티들을 관리할 수 있다. 한 쌍의 이름과 백 스택은 태스크(task)으로 불릴 수 있다. 백 스택과 태스크는 상호 교환하여(interchangeably) 사용될 수 있다.
메인 액티비티는 “루트 액티비티(root activity)”로 태스크의 맨 아래에 푸시(push)될 수 있다. 새로운 액티비티가 시작될 때마다, 이전의 액티비티는 중지되고, 새로운 액태비티가 태스크로 푸시되고, 사용자의 초점은 새로운 액티비티와 관련될 수 있다.
사용자가 백 버튼(back button)을 누르면, 현재 액태비티가 태스크로부터 팝(pop)되어 이전 액티비티가 재개될 수 있다. 태스크에서 최상위 액티비티는 “탑 액티비티(top activity)”로 불리고, 장치가 디스플레이하는 화면을 의미할 수 있다.
안드로이드 시스템은 <액티비티> 매니페스트 요소(manifest element)의 속성과 startActivity() 함수에 전달되는 인텐트(intent)의 플래그(flag)를 이용하여 액티비티를 관리하는 다양한 방법을 제공할 수 있다.
예를 들어, <액티비티> 매니페스트 요소의 런치모드(launchMode) 속성은 액티비티를 시작하기 위한 네 개의 모드 중 하나를 명시할 수 있다. 네 개의 모드는 스탠다드(standar), 싱글 탑(singleTop), 싱글태스크(singleTask) 및 싱글인스턴스(singleinstance)를 포함할 수 있다.
기본 모드는 스탠다드이고, 매니페스트 파일은 액티비티의 시작 모드를 정의할 수 있다. 스탠다드 또는 싱글탑 액티비티는 여러 번 인스턴스화되어(instantiated) 태스크에서 중복된 액티비티를 유도할 수 있다.
반대로, 싱글태스크 또는 싱글인스턴스 런치 모드를 가진 액티비티는 한번만 인스턴스화될 수 있다. 또한, 싱글인스턴스 런치모드는 항상 태스크의 루트 액티비티일 수 있다.
싱글태스크 액티비티는 그 태스크에 스탠다드 또는 싱글탑 액티비티를 포함할 수 있지만, 싱글 인스턴스 액티비티는 그 태스크에 다른 액티비티를 포함하지 못할 수 있다. 싱글 인스턴스 액티비티는 유일한 액티비티일 수 있고, 만약 다른 액티비티가 시작될 경우, 해당 액티비티는 상이한 태스크에 할당될 수 있다.
싱글태스크 및 싱글인스턴스 런치모드는 대부분의 다른 앱들과 상이한 상호작용(interaction) 모델을 제공하기 때문에, 대부분의 앱들에 적합하지 않을 수 있다.
안드로이드 멀티태스킹 특징은 태스크 하이재킹(hijacking) 공격을 허용할 수 있다. 즉, 멀웨어가 피해자 앱(victim app)과 같은 태스크에 존재함으로써 피해자 앱의 사용자 세션(user session)을 가로챌 수 있다.
태스크 하이재킹 공격은 너무 광범위하고 정삭적인 행동을 취약한 것이라고 보수적으로 식별할 수 있다. 예를 들어, 구글 플레이(Google Play)에서 가장 인기있는 10,985개의 앱 중 93.9%가 안드로이드에서 정상적인 앱 간 통신에 해당하는 다른 앱의 액티비티를 자신의 태스크로 가져오기 때문에 취약하다고 식별될 수 있다.
정적 분석 장치(10)는 한 앱의 액티비티를 다른 앱의 액티비티에 삽입(inject)하는 액티비티 삽입 공격을 검출할 수 있다. 상이한 앱의 태스크들에서 액티비티들을 고려하는 태스크 하이재킹 공격과는 달리 액티비티 삽입 공격은 피싱의 삽입 케이스에 초점을 둘 수 있다.
액티비티 삽입 공격을 만드는 방법은 200가지일 수 있다. 이 중 하나의 방법은 피해자 앱의 패키지 이름과 스탠다드를 가지는 <액티비티> 매니페스트 요소에서 악성 액티비티의 특별한 속성(attribute)의 런치모드(launchmode) 및 태스크친화도(taskAffinity)를 지정하는 것일 수 있다.
그 후, FLAG_ACTIVITY_NEW_TASK 인텐트 플래그로 악성 액티비티에 대한 startActivity() 함수가 호출될 수 있다. 안드로이드 시스템은 액티비티를 어느 태스크에 삽입할 것인지 결정하기 위해 태스크친화도를 참조할 수 있고, 공격자(adversary)들은 악성 액티비티의 태스크친화도에 대해 적절한 앱의 패키지 이름을 사용할 수 있다.
액티비티 삽입 공격은 권한을 요구하지 않을 수 있다.
정적 분석 장치(10)는 수신기(100) 및 컨트롤러(200)를 포함한다.
수신기(100)는 어플리케이션에 관한 정보를 수신할 수 있다. 어플리케이션에 관한 정보는 apk의 형태를 포함할 수 있다. 수신기는 수신한 정보를 컨트롤러(200)로 출력할 수 있다.
컨트롤러(200)는 어플리케이션에 관한 정보로부터 획득한 액티비티 정보 및 인텐트 데이터에 기초하여 액티비티 삽입을 검출할 수 있다.
도 2는 도 1에 도시된 컨트롤러의 개략적인 블록도를 나타내고, 도 3은 도 1에 도시된 정적 분석 장치의 동작의 예를 나타낸다.
도 2및 도 3을 참조하면, 컨트롤러(200)는 액티비티 정보 추출기(210), 콜 그래프 생성기(230), 인텐트 분석기(250) 및 검출기(270)를 포함할 수 있다.
액티비티 정보 추출기(activity information extractor, 210)는 어플리케이션에 관한 정보로부터 액티비티 정보를 추출할 수 있다. 상술한 바와 같이 어플리케이션에 관한 정보는 apk형태의 정보를 포함할 수 있다. 액티비티 정보 추출기(210)는 apk 아카이브 로부터 액티비티 정보를 추출할 수 있다.
액티비티 정보 추출기(210)는 어플리케이션에 관한 정보로부터 어플리케이션의 리소스 파일 및 매니페스트(manifest) 파일을 분리하고, 메니페스트 파일로부터 액티비티를 시작하기 위한 런치모드(launchmode) 및 액티비티의 태스크 친화도(taskAffinity)를 추출할 수 있다.
예를 들어, 매니페스트 파일은 androidManifest.xml의 형태를 가질 수 있다. 또한, 액티비티 정보 추출기(210)는 apktool을 이용하여 리소스 파일을 분리할 수 있다.
런치모드는 스탠다드(standard), 싱글탑(singleTop), 싱글태스크(singleTask) 및 싱글인스턴스(singleInstance)를 포함할 수 있다. 액티비티 정보 추출기(210)는 추출한 액티비티 정보를 검출기(270)로 출력할 수 있다.
콜 그래프 생성기(call graph generator, 230)는 CHA(Class Hierarchy Analysis)를 통해 콜 그래프(call graph)를 생성할 수 있다. 콜 그래프 생성기(230)는 생성한 콜 그래프를 인텐트 분석기(250)로 출력할 수 있다.
CHA는 값이 아닌 유형을 분석하기 때문에 빠르게 어플리케이션에 관한 정보를 분석할 수 있다.
인텐트 분석기(250)는 콜 그래프로부터 인텐트 데이터(intent data)를 획득할 수 있다. 인텐트 데이터는 복수의 인텐트 데이터 엔트리(entry)를 포함할 수 있다.
인텐트 분석기(250)는 콜 그래프로부터 인텐트의 타겟(taget) 액티비티 이름(name) 및 인텐트에 부가되는 인텐트 플래그(intent flag)의 집합을 획득할 수 있다. 인텐트 분석기(250)는 획득한 인텐트 데이터를 검출기(270)로 출력할 수 있다.
인텐트 분석기(250)는 인텐트 객체 생성 사이트로부터 액티비티 시작 구문에 이르는 포워드 분석을 통해 인텐트 데이터의 흐름을 추적하고 객체 필드에 설정된 인텐트 데이터의 위치로부터 백워드 분석을 통해 객체 앨리어스(alias)를 검출할 수 있다.
검출기(270)는 액티비티 정보 및 인텐트 데이터에 기초하여 액티비티 삽입(activity injection)을 검출할 수 있다. 검출기(270)는 액티비티 정보 및 인텐트 데이터를 병합(merge)하여 액티비티 활성화(activation) 데이터를 생성할 수 있다.
검출기(270)는 액티비티 활성화 데이터의 엔트리를 동작 시맨틱스 규칙(operational semantics rule)에 따라 매칭하고, 매칭 결과에 기초하여 다른 태스크로의 액티비티 삽입 여부를 검출할 수 있다.
동작 시맨틱스 규칙은 도메인(domain), 스택(stack) 및 커맨드(command) 간의 관계를 정의할 수 있다. 스택은 백 스택(back stack) 및 태스크 스택(task stack)을 포함할 수 있다.
커맨드는 홈 버튼(home button) 커맨드, 백 버튼(back button) 커맨드 및 액티비티 시작 커맨드를 포함할 수 있다. 검출기(270)의 동작은 도 10을 참조하여 자세하게 설명할 것이다.
이하에서 도 4a 내지 도 5를 참조하여 태스크, 태스크 스택 및 액티비티 활성화 속성에 대해 설명할 것이다.
도 4a는 타겟 액티비티의 활성화를 위한 코드의 예를 나타내고, 도 4b는 매니페스트 파일에 정의된 타겟 액티비티의 태스크친화도 및 런치모드 코드의 예를 나타낸다.
도 4a 및 도 4b를 참조하면, 안드로이드 시스템은 다수의 태스크와 하나의 태스크 스택(task stack)을 가질 수 있다. 태스크는은 사용자에게 잡(job)을 보여주는 논리적인 구성 요소를 의미할 수 있고, 태스크 스택은 현재의 포어그라운드(foreground) 태스크 및 이전의 백그라운드(background) 태스크들을 관리하기 위한 스택을 의미할 수 있다. 또한, 태스크는은 액티비티를 관리하기 위한 그 자신의 백 스택을 가질 수 있다.
태스크가 포어그라운드로 오면, 백 스택에서 상위(top) 액티비티가 장치의 화면에 디스플레이될 수 있다. 액티비티가 종료되면, 안드로이드 시스템은 태스크의 백 스택으로부터 해당 액티비티를 팝(pop)할 수 있다. 백 스택이 비어 있지 않으면, 새로운 상위 액티비티가 화면에 디스플레이될 수 있다. 백 스택이 비어 있는 경우, 태스크는 종료될 수 있다.
태스크 스택은 백 스택과 유사하게 동작할 수 있지만 태스크를 관리할 수 있다. 태스크 스택의 상위 태스크(top task)은 포어그라운드 태스크이고, 사용자와 상호작용할 수 있다. 태스크가 종료되면, 안드로이드 시스템은 태스크를 태스크 스택에서 팝하고, 새로운 상위 태스크를 화면에 디스플레이할 수 있다. 태스크 스택이 비어 있으면, 홈 화면(home screen)이 포어그라운드로 나타날 수 있다.
홈 화면이 포어그라운로 오면 태스크 스택은 항상 비어있을 수 있다. 태스크는 태스크 스택으로부터 팝된 후에도 살아있을 수 있다. 태스크 스택은 포어그라운드 태스크가 종료된 후에 디스플레이할 태스크들을 관리할 수 있다.
사용자가 홈버튼을 누르면, 태스크 스택은 비게되고, 홈 화면이 포어그라운드로 나타날 수 있다. 이 때, 태스크 스택으로부터 팝된 모든 살아있는 태스크들은 태스크가 보류(pending)되고, 사용자가 오버뷰 화면(overview screen)에서 그들을 선택하면 태스크 스택으로 돌아올 수 있다.
개발자는 다양한 안드로이드 속성을 이용하여 타겟 액티비티를 활성화하는 방법을 지정할 수 있다. 액티비티 활성화 매커니즘을 다루기 위해 두 가지 속성이 주로 이용될 수 있다. 두 가지 속성은 <액티비티> 매니페스트 요소의 런치모드 속성 및 액티비티를 시작하기 위해 사용되는 인텐트 플래그들을 포함할 수 있다.
런치모드가 액티비티 클래스에 대한 매니페스트 파일에 명시되는 반면, 인텐트 플래그는 타겟 액티비티를 활성화 하는 방법을 선언하기 위해 호출자(caller) 액티비티에 의해 인텐트 플래그를 변수로 하여 startActivity()를 호출함으로써 설정될 수 있다.
네 개의 런치모드는 표 1과 같이 나타낼 수 있다.
런치모드(launchMode) 설명
스탠다드(standard) 이러한 액티비티가 활성화될 때마다 새로운 인스턴스를 만듦.
싱글탑(singleTop) 타겟 태스크의 상위 액티비티가 이러한 액티비티의 인스턴스가 아닐 때에만 새로운 인스턴스를 만듦.
싱글태스크(singleTask) 임의의 태스크에 이러한 액티비티의 어떤 인스턴스도 존재하지 않을 때 새로운 인스턴스를 만듦.
싱글인스턴스(singleInstance) 임의의 태스크에 이러한 액티비티의 어떤 인스턴스도 존재하지 않을 때 새로운 인스턴스를 만듦. 태스크에 있는 것은 항상 단일 액티비티임.
각각의 액티비티들에 대하여 하나의 런치모드 속성만이 설정될 수 있고, 디폴트(default) 런치모드는 스탠다드일 수 있다. 대부분의 경우, 시작된 타겟 액티비티는 호출자 액티비티의 태스크에 들어가지만, 개발자는 액티비티가 상이한 태스크에 들어가도록 타겟 태스크를 지정할 수 있다.
도 4a의 예시는 호출자 액티비티(CallerActivity)로부터 타겟 액티비티(TargetActivity)를 활성화하는 자바 코드(Java Code)를 나타낼 수 있고, 도 4b의 예시는 매니페스트파일(예를 들어, AndroidManifest.xml)에 정의된 타겟 액티비티의 런치모드 및 태스크 친화도를 나타낼 수 있다.
자바 코드에서, 인텐트 객체는 호출자 액티비티 및 호출 수신자 액티비티를 가지고 생성되고, FLAS_ACTIVITY_NEW_TASK 인텐트 플래그가 인텐트 객체에 설정될 수 있다.
타겟 액티비티의 태스크친화도가 com.facebook.katana이고, 런치모드가 스탠다드, 설정된 인텐트 플래그가 FLAS_ACTIVITY_NEW_TASK이기 때문에, 인텐트 객체에 의해 호출된 타겟 액티비티는 com.facebook.katana에 삽입될 수 있다.
태스크 친화도의 디폴트 값은 앱의 패키지 이름이기 때문에, 액티비티는 액티비티의 태스크 친화도가 명시되지 않았을 때 다른 태스크에 삽입되지 않을 수 있다.
도 5은 런치모드 속성과 인텐트 플래그의 관계의 예를 나타낸다.
도 5를 참조하면, 31 개의 인텐트 플래그들 중에서, 19 개의 플래그들이 이름에 액티비티를 포함하고 있지만, 도 5에 나타난 7 개의 플래그만이 액티비티 활성화 매커니즘을 실질적으로 관리할 수 있다.
예를 들어, 만약 FLAG_ACTIVITY_NO_HISTORY 플래그가 설정되면, 안드로이드 시스템은 오버뷰 화면 상에 아무런 액티비티를 보여주지 않을 수 있다. 이 때, 사용자가 다른 곳으로 나갈 경우에, 액티비티는 종료될 수 있다. 따라서, 플래그는 액티비티 활성화 매커니즘에 아무런 영향을 미치지 않을 수 있다.
호출자 액티비티의 런치모드는 액티비티 활성화에 영향을 미칠수 있기 때문에, 액티비티들을 활성화하기 위한 방법의 종류는 수학식 1과 같이 나타낼 수 있다.
Figure 112018043025388-pat00001
액티비티 활성화 매커니즘은 타겟 액티비티에 대한 4 종류의 런치모드에 대하여 상이하게 동작할 수 있지만, 호출자 액티비티에 대해서는 단 2 경우의 상이한 동작만을 나타낼 수 있다.
즉, 호출자 액티비티의 런치모드는 싱글인스턴스이거나 아니거나 둘 중에 하나일 수 있다. 만약 호출자 액티비티의 런치모드가 싱글인스턴스일 경우, 액티비티 활성화 매커니즘은 마치 타겟 액티비티를 호출하기 위한 인텐트 객체에 FLAG_ACTIVITY_NEWE_TASK 플래그가 설정된 것처럼 동작할 수 있다.
만약 호출자 액티비티의 런치모드가 싱글인스턴스가 아닐 경우, FLAG_ACTIVITY_NEW_TASK 또는 FLAG_ACTIVITY_NEW_DOCUMENT중 하나가 설정되지 않으면 FLAG_ACTIVITY_MULTIPLE_TASK 인텐트 플래그는 무시될 수 있다.
하지만, 호출자 액티비티의 런치모드가 싱글인스턴스라면, FLAG_ACTIVITY_NEW_TASK가 설정되지 않아도 FLAG_ACTIVITY_MULTIPLE_TASK는 무시되지 않을 수 있다. 즉, 싱글인스턴스 플래그는 액티비티가 동일한 작업에 다른 액티비티의 삽입을 허용하지 않는다는 것을 의미할 수 있다.
정적 분석 장치(10)는 액티비티를 활성화 하기 위한 1024 가지 방법 중에서, 런치 모드와 인텐트 플래그 간의 종속성을 고려하여 불가능하거나 중복되는 것을 제거할 수 있다.
일부 플래그들은 반드시 함께 사용되어야 하고, 일부 플래그들은 내재적으로 다른 플래그들을 암시할 수 있고, 일부 플래그들은 일부 런치모드 또는 다른 플래그들과 함께 사용되는 경우 무시될 수 있다.
충돌하는 플래그들이 함께 사용되면, 안드로이드 시스템은 그 중 하나를 선택하고 다른 플래그는 무시할 수 있다. 도 5는 타겟 액티비티의 4 개의 런치모드 속성과 7 개의 인텐트 플래그들 사이의 종속성을 나타낼 수 있다.
원 노드(circle node)는 런치모드를 나타내고, 박스 노드(box node)는 인텐트 플래그를 나타낼 수 있다. 세 가지 유형의 선은 노드 간의 종속성을 나타낼 수 있다.
첫 번째로 실선(solid line)은 출발 노드의 속성이 반드시 도착 노드의 속성과 함께 사용되어야 함을 나타낼 수 있다. 두 번째로 파선(dashed line)은 출발 노드가 도착 노드를 암시함을 나타낼 수 있고, 세 번째로, 점선(dotted line)은 출발 노드와 함께 사용될 때 도착 노드가 무시됨을 나타낼 수 있다.
각각의 액티비티는 하나의 런치모드만을 가지기 때문에, 런치 모드 속성 간에는 종속성이 존재하지 않을 수 있다. 종속성 그래프는 안드로이드 문서에 기초하여 생성될 수 있다.
정적 분석 장치(10)는 종속성 그래프를 이용하여 1024 개의 액티비티 활성화 방법 조합 중 791개를 제거할 수 있고, 정적 분석 장치(10)는 나머지 233개의 활성화 방법만을 고려하여 전체 1024개의 액티비티 활성화 방법에 대한 정적 분석을 수행할 수 있다.
도 6은 동작 시맨틱스를 설명하기 위한 도메인, 스택 및 커맨드의 예를 나타내고, 도 7은 액티비티를 시작하기 위한 동작 시맨틱스의 예를 나타낸다.
도 6 및 도 7을 참조하면, 검출기(270)는 액티비티 활성화를 위한 동작 시맨틱스를 명시할 수 있다. 검출기(270)는 동작 시맨틱스를 설명하기 위한 도메인(domain), 스택(stack) 및 명령어를 정의할 수 있다.
도 6의 예시에서, A는 액티비티 클래스를 나타내고, a는 액티비티 인스턴스를 나타낼 수 있다. 태스크 t는 그 이름과 백 스택의 쌍인 (s, α)로 나타낼 수 있다. 백 스택은 액티비티의 시퀀스(sequence)일 수 있고, 액티비티는 액티비티 인스턴스와 그 런치모드의 쌍인 (a, l)로 나타낼 수 있다. 또한, 태스크 스택과 태스크 풀(task pool)은 태스크들의 시퀀스일 수 있다.
커맨드는 홈 버튼 누르기, 백 버튼 누르기 및 액티비티 시작을 포함할 수 있다.
Figure 112018043025388-pat00002
커맨드는 호출자 액티비티와 그 런치모드 속성의 쌍이 (a,l)이고, 타겟 액티비티 A는 태스크친화도가 s이고, 런치모드 속성이 l'이고, 호출자 액티비티가 타겟 액티비티를 활성화하기 위해 사용한 인텐트에 설정된 플래그가 F임을 나타낼 수 있다.
동작은
Figure 112018043025388-pat00003
의 형태로, 현재 태스크 풀이 γ이고, 현재 태스크 스택이 β이고, 커맨드 C의 동작으로 인해 기존의 태스크 풀과 태스크 스택이 새로운 태스크 풀 γ'와 새로운 태스크 스택 β'로 변경될 수 있음을 의미한다.
예를 들어,
Figure 112018043025388-pat00004
은 사용자가 홈 버튼을 누를 때마다, 태스크 풀은 동일하고 태스크 스택이 비게 된다는 것을 의미할 수 있다.
백 버튼을 눌렀을 때의 모든 동작은 아래와 같이 나타낼 수 있다.
Figure 112018043025388-pat00005
첫 번째 동작에 있어서, 태스크 스택이 비어 있을 때, 사용자가 백 버튼을 누르는 경우, 태스크 풀 및 태스크 스택에서 아무런 변화 없이 디스플레이가 동일하게 남아있을 수 있다.
두 번째 동작에 있어서, 태스크 스택 상에 상위 태스크가 하나의 액티비티만을 가지고 있을 경우, 백 버튼은 태스크 풀 및 태스크 스택 모두에서 태스크를 제거할 수 있다.
세 번째 동작에 있어서, 태스크 스택 상에 상위 태스크가 하나 이상의 액티비티들을 가지고 있을 때, 백 버튼은 태스크 풀 및 태스크 스택 모두에서 태스크로부터 상위 액티비티를 제거할 수 있다.
마지막 커맨드에 대해서, 시맨틱스는 239 개의 규칙을 가질 수 있다. 시맨틱스는 타겟 액티비티의 런치모드에 따라 4 가지 케이스로 구분될 수 있다.
타겟 액티비티의 런치모드가 싱글태스크일 때의 동작 시맨틱스의 예는 도 6과 같이 나타낼 수 있다. 도 7에 사용된 헬퍼 함수(helper function)는 표 2와 같이 나타낼 수 있다.
헬퍼 함수 유형(type) 설명
new ActivityClass →ActivityInstance 주어진 액티비티 클래스의 인스턴스를 리턴함
newTask String × (ActivityInstance × LaunchMode) →Task 주어진 태스크 이름, 액티비티 인스턴스 및 런치모드로 새로운 태스크를 만듦
removeTaskTP TaskPool × Task →TaskPool 주어진 태스크 풀로부터 주어진 태스크를을 제거함
removeTaskTS TaskStack × Task →TaskStack 주어진 태스크 스택으로부터 주어진 태스크를 제거함
removeActsUntil BackStack × (ActivityInstance × LaunchMode) → BackStack 주어진 백 스택으로부터 주어진 액티비티를 포함하고, 주어진 액티비티의 상위에 있는 액티비티 인스턴스를 제거함
getTast TaskPool × String →Task ∪ {★} 주어진 태스크 풀로부터 주어진 이름을 가진 태스크 또는 부재(absence)에 대한 ★을 리턴함
getActivity BackStack × ActivityClass →ActivityInstance ∪ {★} 주어진 백 스택으로부터 주어진 액티비티 클래스의 인스턴스 또는 부재에 대한 ★을 리턴함
getTaskWAct TaskPool × ActivityClass →Task ∪ {★} 주어진 태스크풀로부터 주어진 액티비티 클래스의 인스턴스를 포함하는 태스크 또는 부재에 대한 ★을 리턴함
도 8은 멀웨어에 사용된 액티비티 삽입 시맨틱스의 예를 나타내고, 도 9는 태스크에서 삽입된 악성 액티비티를 보여주는 태스크 스택의 예를 나타낸다.
도 8및 도 9를 참조하면, 액티비티 삽입 공격은 피싱(phishing) 공격과 같이 사용자의 사적인 데이터를 훔칠 수 있다. 액티비티 삽입 공격으로 인해 악성 행동이 없는 것으로 판단되는 양성 앱(benign app)을 시작하는 것이 악성 액티비티를 실행할 수 있기 때문에, 사용자가 악성 액티비티의 실행을 알아차리는 것이 어려울 수 있다.
멀웨어가 액티비티를 양성 앱의 로그인 페이지와 같이 가장하면, 사용자의 id와 패스워드를 훔칠 수 있다. 예를 들어, 도 9의 예시와 같이 페이스북 앱을 타겟으로 하는 멀웨어가 만들어질 수 있다.
동작 시맨틱스의 startActivity 함수 호출을 위한 239 개의 규칙 중에서 180 개의 규칙이 가능한 액티비티 삽입 공격을 명시할 수 있다. 이러한 규칙을 사용하여 악성 앱이 만들어질 수 있고, 도 8의 예시는 그 중 멀웨어를 만들기 위한 한가지 경우를 나타낸다.
도 9는 정상적인 페이스북 앱을 실행할 때의 태스크 스택의 스냅샷을 나타낼 수 있다. 멀웨어를 실행하면 멀웨어는 악성 액티비티를 페이스북 태스크에 삽입할 수 있다.
태스크 스택 #70은 두 개의 태스크들을 포함할 수 있다. 하나는 페이스북(com.facebook.katana)에 대한 #329 이고, 다른 하나는 멀웨어(com.example.malicious)에 대한 #330일 수 있다.
페이스북의 태스크는 두 개의 액티비티를 포함할 수 있다. #0은 페이스북 앱의 로그인 액티비티(com.facebook.katana/.FacebookLoginActivity)를 시작하기 위한 것이고, #1은 멀웨어가 악성 액티비티를 주입하기 위한 것(com.example.malicious/.MaliciousActivity)이다.
멀웨어는 화면이 꺼져 있을 때 악성 액티비티를 주입할 수 있다. 이것은 삽입이 일어날 때 화면에 디스플레이 되기 때문일 수 있다. 악성 액티비티가 페이스북 태스크에 삽입되면, 악성 액티비티는 바로 홈 액티비티를 호출하여 화면이 다시 켜질 때 홈 화면을 보여줄 수 있다.
악성 액티비티가 페이스북 태스크의 상위 액티비티이기 때문에, 사용자가 페이스북 아이콘을 터치할 때 디스플레이 될 수 있다. 액티비티 삽입 공격을 시작하기 위해서, 피해자의 모바일 장치에 멀웨어가 설치되어 있다고 가정될 수 있다.
악성 액티비티를 삽입하는 것은 아무런 권한을 요구하지 않을 수 있다. 멀웨어는 공격자의 서버에 사용자의 사적인 데이터를 전송하기 위해서 단순히 INTERNET 권한 만을 필요로 할 수 있다.
이러한 위협의 근본적인 원인은 안드로이드 시스템이 악성 앱들에 대한 보호 정책이 없이 액티비티 삽입 특성을 지원하기 때문일 수 있다. 이를 완화하기 위해서는 앱이 다른 타겟 앱의 태스크에 액티비티를 삽입하는 것을 시스템 레벨에서 막는 방법이 고려될 수 있다.
도 10은 도 2에 도시된 검출기의 동작의 예를 나타낸다.
도 10을 참조하면, 검출기(270)는 액티비티 활성화의 공식적인 시맨틱스에 기초하여 안드로이드 앱의 가능한 액티비티 삽입 공격을 검출할 수 있다.
검출기는 액티비티 정보, 인텐트 데이터 및 액티비티 활성화 시맨틱스를 이용하여 액티비티 삽입 케이스를 분석하고, 분석 결과를 보고서의 형태로 출력할 수 있다.
안드로이드는 명시적(explicit) 및 암시적(implicit) 인텐트를 모두 지원한다. 전자는 구체적인 타겟 액티비티를 직접 지정하고, 후자는 문자열 값(string value)를 이용하여 타겟 액티비티를 나타낼 수 있다.
검출기(270)는 명시적 인텐트 및 암시적 인텐트를 분석할 수 있다. 예를 들어, 정적 분석 장치(10)는 명시적 인텐트를 분석할 수 있다. 암시적 인텐트의 타겟을 분석하기 위해서는 정확한 문자열 분석이 필요할 수 있다. 검출기(270)는 동작 시맨틱스의 액티비티 삽입 규칙을 이용하여 액티비티 주입 공격을 검출할 수 있다.
만약 호출자 액티비티의 런치모드가 싱글인스턴스라면, 호출자 액티비티가 FLAG_ACTIVITY_NEW_TASK 플래그 없이 주입될 수 있다. 싱글인스턴스는 대부분의 어플리케이션에 적용될 수 없기 때문에, 검출기(270)는 호출자 액티비티의 런치모드를 고려하지 않을 수 있다.
검출기(270)는 두 가지 입력을 사용할 수 있다. 하나는 액티비티 정보이고, 다른 하나는 인텐트 데이터일 수 있다. 액티비티 정보는 각각의 액티비티에 대한 런치모드 및 태스크친화도를 포함할 수 있다.
인텐트 데이터는 각각의 액티비티 활성화에 대한 인텐트 플래그를 포함할 수 있다. 액티비티가 여러번 수행될 수 있기 때문에, 인텐트 데이터는 com.example.AActivity를 위한 다수의 엔트리를 포함할 수 있다.
검출기(270)는 두 가지 입력을 액티비티 활성화 데이터로 병합하고 동작 시맨틱스 규칙을 가진 각각의 엔트리에 매칭시킬 수 있다.
예를 들어, 도 10의 예시에서, 첫 번째 엔트리는 타겟 액티비티의 런치모드가 스탠다드이고 인텐트 플래그가 FLAG_ACTIVITY_NEW_TASK 및 FLAG_ACTIVITY_SINGLE_TOP을 나타낼 수 있다. 이 경우, 검출기(270)는 오른쪽의 세 가지 동작 시맨틱스 규칙 중 하나를 적용할 수 있다.
3개의 규칙 중 어떠한 규칙이 적용되더라도, 타겟 액티비티 a'는 액티비티는 활성화되어 태스크 친화도가 가리키는 태스크에 삽입될 수 있다. 도 10의 예시의 경우, 검출기(270)는 com.example.AActivity를 다른 태스크에 삽입되는 액티비티로 판별하여 검출할 수 있다.
이하에서 도 11a 내지 12를 참조하여, 정적 분석 장치(10)의 성능에 대하여 설명할 것이다.
도 11a는 도 1에 도시된 정적 분석 장치의 분석 결과의 일 예를 나타내고, 도 11b는 도 1에 도시된 정적 분석 장치의 분석 결과의 다른 예를 나타낸다.
도 11a 및 도 11b를 참조하면, 정적 분석 장치(10)는 많은 수의 안드로이드 앱에 대하여 액티비티 주입 여부를 검출할 수 있다.
도 11a 및 도 11b는 129,756 개의 안드로이드 앱을 이용하여 5분의 시간을 타임아웃(timeout)으로 하여 분석한 결과를 나타낼 수 있다. 분석 결과는 Linux x64 머신, 4.0 GHz Intel core i7 CPU 및 8GB 메모리를 이용하여 수행된 것일 수 있다.
검출기(270)는 액티비티 주입을 수행하는 앱들을 식별할 수 있다. 구체적으로, 검출기(270)는 앱이 앱의 패키지 이름과 상이한 태스크 친화도를 포함하는 액티비티를 가지고있을 때, 액티비티 삽입을 수행할 수 있다고 식별할 수 있다. 이 경우가 아닌 앱은 액티비티를 다른 앱의 태스크에 삽입하지 못할 수 있다.
129,756 개의 안드로이드 앱들 중에서, 4,736 개의 앱, 즉, 전체 앱의 3.7%만이 액티비티 삽입을 수행할 수 있다. 4,763 개의 앱들 중에서, 검출기(270)는 97.3%의 앱에 대하여 분석을 수행할 수 있다.
마지막으로, 검출기(270)는 1,761 개의 앱들로부터 액티비티 주입 케이스를 검출하였고, 이는 전체 앱의 1.4%에 해당할 수 있다.
도 11b의 예시와 같이 검출기(270)는 1,761 개의 앱들 중에서, 4,133 개의 액티비티 삽입 케이스를 검출할 수 있다. 4,133 회의 삽입 케이스들 중에서 531 개의 케이스만이 유일한 것이고, 나머지 3,602건은 중복된 것일 수 있다.
검출기(270)는 액티비티 이름을 이용하여 삽입 케이스를 식별할 수 있다. 예를 들어, com.example.AActivity가 단일 앱 또는 다수의 앱에 복수 회 삽입되었을 경우에, 검출기(270)는 이를 1회의 삽입 케이스로 계산할 수 있다.
검출기(270)의 정밀도를 평가하기 위해 531 개의 유일한 삽입 케이스들이 상대적으로 복잡한 데이터 흐름과 다른 것들로 분리될 수 있다. 구체적으로, 53 개의 삽입 케이스에 해당하는 함수간(inter-procedural) 데이터 흐름을 통해 액티비티 삽입을 수행하는 케이스들이 식별될 수 있다.
이중 2 가지 경우만 거짓 양성(false positive)이고, 나머지 51개의 경우는 참 양성(true positive)일 수 있다. 따라서, 거짓 양성 비율(false positive rate)은 3.8%일 수 있다.
검출기(270)는 CHA 기반 콜 그래프의 구성이 일반적으로 부정확한 콜 그래프를 생성하더라도 매우 낮은 거짓 양성 비율을 나타낼 수 있다. 일반적으로, 인텐트 객체는 단순한 데이터 흐름만을 이용할 수 있다.
함수간(inter-procedural) 인텐트 플로우는 그래프 생성의 부정확성에 영향을 미치지 않는 정적 방법을 통하면 더욱 정확하게 분석이 이루어질 수 있다. CHA 기반 분석은 일반적으로 복잡한 클래스 상속 관계가 있는 코드 패턴에서 부정확하지만 대부분의 앱은 액티비티 활성화를 위해 복잡한 계층 클래스를 사용하지 않을 수 있다. 따라서, 단순한 콜 그래프의 생성이 정밀도를 크게 손상시키지 않을 수 있다.
도 12는 도 1에 도시된 정적 분석 장치가 시간에 따라 분석한 앱의 수를 나타낸다.
도 12를 참조하면, 4,763 개의 앱 분석 시간이 요약될 수 있다. 검출기(270)는 액티비티 삽입을 수행하지 않는다고 판단되는 않는 앱을 1, 2초 내로 식별할 수 있다. 도 12에서 X축은 분석 시간을 나타내고, Y축은 앱의 수를 나타낼 수 있다.
검출기(270)는 총 4,586 개의 앱을 분석하였고, 4,763 개의 앱 중에서 약 96.3 %가 30초 만에 분석되었고, 평균 분석 시간은 분석 시간이 5분을 초과하는 앱을 제외하면 6초일 수 있다.
전반적인 분석 시간은 검출기(270)가 실제의 많은 안드로이드 앱들에 있어서 가능한 액티비티 삽입 공격을 탐지할 수 있다는 것을 보여줄 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
이상과 같이 실시예들이 비록 한정된 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기를 기초로 다양한 기술적 수정 및 변형을 적용할 수 있다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 청구범위의 범위에 속한다.

Claims (18)

  1. 정적 분석 장치가 어플리케이션에 관한 정보를 수신하는 단계;
    상기 정적 분석 장치가 상기 어플리케이션에 관한 정보로부터 상기 어플리케이션을 구성하는 액티비티에 관한 정보를 추출하는 단계;
    상기 정적 분석 장치가 상기 어플리케이션에 관한 정보로부터 CHA(Class Hierarchy Analysis)를 통해 상기 어플리케이션 내의 함수 간의 호출 관계를 나타내는 콜 그래프(call graph)를 생성하는 단계;
    상기 정적 분석 장치가 상기 콜 그래프를 이용하여 데이터의 흐름을 분석함으로써 상기 함수 간의 호출에 사용된 인텐트 데이터(intent data)를 획득하는 단계; 및
    상기 정적 분석 장치가 상기 액티비티에 관한 정보 및 상기 인텐트 데이터에 기초하여 액티비티 삽입(activity injection)을 검출하는 단계
    를 포함하고,
    상기 어플리케이션에 관한 정보는 상기 어플리케이션의 APK를 포함하고, 상기 액티비티에 관한 정보는 상기 어플리케이션을 구성하는 액티비티의 이름 및 상기 액티비티의 특성(property)를 포함하는
    정적 분석 방법.
  2. 제1항에 있어서,
    상기 추출하는 단계는,
    상기 어플리케이션에 관한 정보로부터 상기 어플리케이션의 리소스 파일 및 매니페스트 파일을 분리하는 단계; 및
    상기 매니페스트 파일로부터 상기 액티비티의 특성을 추출하는 단계
    를 포함하고,
    상기 액티비티의 특성은 상기 액티비티를 시작하기 위한 런치모드(launchmode) 및 상기 액티비티의 태스크 친화도(taskAffinity)를 포함하는
    정적 분석 방법.
  3. 제2항에 있어서,
    상기 런치모드는,
    스탠다드, 싱글탑, 싱글태스크 및 싱글인스턴스
    를 포함하는 정적 분석 방법.
  4. 제1항에 있어서,
    상기 인텐트 데이터는,
    복수의 인텐트 데이터 엔트리(entry)를 포함하는
    정적 분석 방법.
  5. 제4항에 있어서,
    상기 획득하는 단계는,
    상기 콜 그래프로부터 인텐트의 타겟 액티비티 이름 및 상기 인텐트에 부가되는 인텐트 플래그의 집합을 획득하는 단계
    를 포함하는 정적 분석 방법.
  6. 제1항에 있어서,
    상기 검출하는 단계는,
    상기 액티비티에 관한 정보와 상기 인텐트 데이터를 병합하여 액티비티 활성화 데이터를 생성하는 단계;
    상기 액티비티 활성화 데이터에 포함된 런치모드 및 인텐트 플래그가 미리 정의된 동작 시맨틱스 규칙(operational semantics rule)에 매칭되는지를 판단하는 단계;
    판단 결과에 기초하여 상기 액티비티가 다른 앱이 태스크에 삽입될 수 있는지 여부를 검출하는 단계
    를 포함하는 정적 분석 방법.
  7. 제6항에 있어서,
    상기 동작 시맨틱스 규칙은,
    도메인, 스택 및 커맨드 간의 관계를 정의하는
    정적 분석 방법.
  8. 제7항에 있어서,
    상기 스택은,
    백 스택 및 태스크 스택을 포함하는
    정적 분석 방법.
  9. 제7항에 있어서,
    상기 커맨드는,
    홈 버튼 커맨드, 백 버튼 커맨드 및 액티비티 시작 커맨드를 포함하는 정적 분석 방법.
  10. 어플리케이션에 관한 정보를 수신하는 수신기; 및
    상기 어플리케이션에 관한 정보로부터 획득한 액티비티에 관한 정보 및 인텐트 데이터에 기초하여 액티비티 삽입을 검출하는 컨트롤러
    를 포함하고,
    상기 컨트롤러는,
    상기 어플리케이션에 관한 정보로부터 상기 어플리케이션을 구성하는 액티비티에 관한 정보를 추출하는 액티비티 정보 추출기;
    상기 어플리케이션에 관한 정보로부터 CHA(Class Hierarchy Analysis)를 통해 상기 어플리케이션 내의 함수 간의 호출 관계를 나타내는 콜 그래프(call graph)를 생성하는 콜 그래프 생성기;
    상기 콜 그래프를 이용하여 데이터의 흐름을 분석함으로써 상기 함수 간의 호출에 사용된 인텐트 데이터(intent data)를 획득하는 인텐트 분석기; 및
    상기 액티비티에 관한 정보 및 상기 인텐트 데이터에 기초하여 액티비티 삽입(activity injection)을 검출하는 검출기
    를 포함하고,
    상기 어플리케이션에 관한 정보는 상기 어플리케이션의 APK를 포함하고, 상기 액티비티에 관한 정보는 상기 어플리케이션을 구성하는 액티비티의 이름 및 액티비티의 특성(property)를 포함하는
    정적 분석 장치.
  11. 제10항에 있어서,
    상기 액티비티 정보 추출기는,
    상기 어플리케이션에 관한 정보로부터 상기 어플리케이션의 리소스 파일 및 매니페스트 파일을 분리하고, 상기 매니페스트 파일로부터 상기 액티비티의 특성을 추출하고,
    상기 액티비티의 특성은 상기 액티비티를 시작하기 위한 런치모드(launchmode) 및 상기 액티비티의 태스크 친화도(taskAffinity)를 포함하는
    정적 분석 장치.
  12. 제11항에 있어서,
    상기 런치모드는,
    스탠다드, 싱글탑, 싱글태스크 및 싱글인스턴스
    를 포함하는 정적 분석 장치.
  13. 제10항에 있어서,
    상기 인텐트 데이터는,
    복수의 인텐트 데이터 엔트리(entry)를 포함하는
    정적 분석 장치.
  14. 제13항에 있어서,
    상기 인텐트 분석기는,
    상기 콜 그래프로부터 인텐트의 타겟 액티비티 이름 및 상기 인텐트에 부가되는 인텐트 플래그의 집합을 획득하는
    정적 분석 장치.
  15. 제10항에 있어서,
    상기 검출기는,
    상기 액티비티에 관한 정보와 상기 인텐트 데이터를 병합하여 액티비티 활성화 데이터를 생성하고, 상기 액티비티 활성화 데이터에 포함된 런치모드 및 인텐트 플래그가 미리 정의된 동작 시맨틱스 규칙(operational semantics rule)에 매칭되는지를 판단하고, 판단 결과에 기초하여 상기 액티비티가 다른 앱이 작업에 삽입될 수 있는 지 여부를 검출하는
    정적 분석 장치.
  16. 제15항에 있어서,
    상기 동작 시맨틱스 규칙은,
    도메인, 스택 및 커맨드 간의 관계를 정의하는
    정적 분석 장치.
  17. 제16항에 있어서,
    상기 스택은,
    백 스택 및 태스크 스택을 포함하는
    정적 분석 장치.
  18. 제16항에 있어서,
    상기 커맨드는,
    홈 버튼 커맨드, 백 버튼 커맨드 및 액티비티 시작 커맨드를 포함하는 정적 분석 장치.
KR1020180050252A 2018-04-30 2018-04-30 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치 KR102096164B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180050252A KR102096164B1 (ko) 2018-04-30 2018-04-30 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180050252A KR102096164B1 (ko) 2018-04-30 2018-04-30 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치

Publications (2)

Publication Number Publication Date
KR20190125880A KR20190125880A (ko) 2019-11-07
KR102096164B1 true KR102096164B1 (ko) 2020-04-01

Family

ID=68579193

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180050252A KR102096164B1 (ko) 2018-04-30 2018-04-30 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치

Country Status (1)

Country Link
KR (1) KR102096164B1 (ko)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110941828B (zh) * 2019-11-13 2023-12-15 深圳市凌晨知识产权运营有限公司 基于AndroGRU的安卓恶意软件静态检测方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101768428B1 (ko) 2017-06-28 2017-08-16 경북대학교 산학협력단 어플리케이션간 상호작용 테스팅을 위한 인텐트 기반의 테스트 시나리오 생성 방법

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101541970B1 (ko) * 2013-12-13 2015-08-05 경북대학교 산학협력단 테스트 시나리오 생성 장치, 그를 포함하는 애플리케이션 테스트 시스템, 테스트 시나리오 생성 방법, 및 그 기록매체

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101768428B1 (ko) 2017-06-28 2017-08-16 경북대학교 산학협력단 어플리케이션간 상호작용 테스팅을 위한 인텐트 기반의 테스트 시나리오 생성 방법

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
이성호외 2인, 'HybriDroid: Analysis Framework for Android Hybrid Applications', 2015.06.13
이성호외 2인, 'HybriDroid: Static Analysis Framework for Android Hybrid Applications', 2016

Also Published As

Publication number Publication date
KR20190125880A (ko) 2019-11-07

Similar Documents

Publication Publication Date Title
US11741222B2 (en) Sandbox environment for document preview and analysis
Jiang et al. Detecting passive content leaks and pollution in android applications
US20190026464A1 (en) Mobile application management
JP6829718B2 (ja) 複数のソフトウェアエンティティにわたって悪意あるビヘイビアを追跡するためのシステムおよび方法
Ren et al. Towards discovering and understanding task hijacking in android
EP3471008B1 (en) De-obfuscating scripted language for network intrusion detection using a regular expression signature
Yang et al. IntentFuzzer: detecting capability leaks of android applications
US11431751B2 (en) Live forensic browsing of URLs
Kanwal et al. An app based on static analysis for android ransomware
US11416613B2 (en) Attack detection through exposure of command abuse
Shi et al. Vahunt: Warding off new repackaged android malware in app-virtualization's clothing
Raval et al. Permissions plugins as android apps
Stirparo et al. In-memory credentials robbery on android phones
US8732830B2 (en) Scripting engine externalized function execution control
Chan et al. A privilege escalation vulnerability checking system for android applications
US10686836B1 (en) Host-based deception security technology
KR101674895B1 (ko) 자바 메소드 콜 그래프 기반의 자바 보안 취약점 분석 시스템
Yang et al. Eavesdropping user credentials via GPU side channels on smartphones
KR102096164B1 (ko) 액티비티 삽입 검출을 위한 정적 분석 방법 및 장치
CN115270126B (zh) 一种检测Java内存马的方法、装置、电子设备及存储介质
Lee et al. All about activity injection: threats, semantics, and detection
CN112100620A (zh) 代码安全检测方法、装置、设备和可读存储介质
Tanaka et al. n-ropdetector: Proposal of a method to detect the rop attack code on the network
Hwang et al. All about activity injection: Threats, semantics, detection, and defense
Fan et al. Privacy theft malware multi‐process collaboration analysis

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant