KR20240019514A - 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체 - Google Patents

안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체 Download PDF

Info

Publication number
KR20240019514A
KR20240019514A KR1020220097241A KR20220097241A KR20240019514A KR 20240019514 A KR20240019514 A KR 20240019514A KR 1020220097241 A KR1020220097241 A KR 1020220097241A KR 20220097241 A KR20220097241 A KR 20220097241A KR 20240019514 A KR20240019514 A KR 20240019514A
Authority
KR
South Korea
Prior art keywords
code
analysis
contamination
dependencies
android applications
Prior art date
Application number
KR1020220097241A
Other languages
English (en)
Other versions
KR102702042B1 (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 KR1020220097241A priority Critical patent/KR102702042B1/ko
Priority claimed from KR1020220097241A external-priority patent/KR102702042B1/ko
Publication of KR20240019514A publication Critical patent/KR20240019514A/ko
Application granted granted Critical
Publication of KR102702042B1 publication Critical patent/KR102702042B1/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
    • G06F21/563Static detection by source code analysis
    • 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

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

본 발명은 네이티브 코드의 종속성을 추출하는 종속성 추출기; 상기 추출된 종속성에 기반하여 소스에서 싱크까지 도달 경로를 탐색하는 네이티브 코드 오염 분석기; 및 상기 도달 경로를 기반으로 상기 네이티브 코드를 바이트 코드로 변환하는 코드 추상화기를 포함하는, 네이티브 코드 분석기; 및 상기 변환된 바이트 코드와 기존 바이트 코드에 기반하여 정적 오염 분석을 수행하는 바이트 코드 분석기를 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치에 관한 것이다. 이에 의해, 안드로이드 애플리케이션 중 이기종 언어로 만들어진 프로그램에 대해 코드 추상화를 통해 더욱 적은 연산으로 정확한 오염 분석을 할 수 있게 한다.

Description

안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체{A METHOD FOR ANALYZING TAINT OF HETEROGENEOUS LANGUAGE PROGRAMS FOR ANDROID APPLICATIONS, DEVICE AND RECORDING MEDIUM FOR PERFORMING THE METHOD}
본 발명은 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체로서, 더욱 상세하세는, 안드로이드 애플리케이션용 이기종 언어 프로그램에 대해 한 언어의 코드를 다른 언어로 추상화하여, 최종적으로 한 언어로 분석을 진행하여 더욱 적은 연산으로 정확한 오염 분석을 할 수 있는 기술에 관한 것이다.
오늘날의 스마트폰은 사적 및 기밀 데이터의 유비쿼터스 소스이다. 동시에 스마트폰 사용자는 실수로 중요한 데이터를 유출하는 부주의하게 프로그래밍된 애플리케이션과 이러한 데이터를 의도적으로 복사하기 위해 주어진 권한을 악용하는 악성 앱에 시달리고 있다.
이러한 악성 애플리케이션에 대한 분석이 필요하나, 둘 이상의 언어로 구현된 프로그램은 분석이 어렵다. 분석해야 하는 코드의 형식이 둘 이상이고, 각 코드를 실행하는 환경이 동일하다는 보장이 없기 때문이다. 예를 들어, Java VM에서 Java로 구현하여 컴파일한 바이트코드 (Bytecode)는 Java VM 상에서 동작하고, C/C++로 구현하여 컴파일한 네이티브 코드 (Native Code) (Assembly Code)는 호스트(Host) OS에서 동작한다.
그리고 Java VM의 기능으로 두 코드 간 실행의 흐름이 전환될 수 있다. 더불어, 이를 정적으로 분석하는 것 또한 실제 실행 환경을 가정해야 하는데, 두 코드가 실행되는 환경을 각각 고려해야 하기 때문에 분석의 난이도가 증가한다.
위와 같은 문제로 인해 정적 데이터 오염 분석은 다음과 같은 시도와 한계가 있다.
각 언어에서 데이터 흐름 정보를 요약하고 이를 통합하여 분석하는 방법은 두 코드를 통합하여 분석하지 않는다. 이는 아직까진 IFDS/IDE 알고리즘을 적용할 수 없어, 해당 알고리즘 대비 시간적 효율이 떨어진다는 문제가 있다.
네이티브 코드를 바이트 코드로 변환하는 기술은 여러 변수형의 가능성을 두고 조합하기에 실제 변수형과 다를 수 있고, 생성된 변수형 가능성마다 분석을 하여 시간이 오래 걸릴 수 있는 한계가 있다.
KR 10-2315750 B1 KR 10-1694783 B1
이에, 본 발명의 기술적 과제는 이러한 점에서 착안된 것으로 본 발명의 목적은 이기종 언어 프로그램에 대해 더욱 적은 연산으로 정확한 오염 분석을 할 수 있는 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체를 제공하는 데 있다.
상기한 본 발명의 목적을 실현하기 위한 일 실시예에 따른 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치는, 네이티브 코드의 종속성을 추출하는 종속성 추출기; 상기 추출된 종속성에 기반하여 소스에서 싱크까지 도달 경로를 탐색하는 네이티브 코드 오염 분석기; 및 상기 도달 경로를 기반으로 상기 네이티브 코드를 바이트 코드로 변환하는 코드 추상화기를 포함하는, 네이티브 코드 분석기; 및 상기 변환된 바이트 코드와 기존 바이트 코드에 기반하여 정적 오염 분석을 수행하는 바이트 코드 분석기를 포함한다.
본 발명의 실시예에서, 상기 정적 오염 분석의 결과는, 데이터 도달 가능 경로, 상기 도달 가능 경로의 수 및 분석 소요 시간을 포함할 수도 있다.
본 발명의 실시예에서, 상기 종속성 추출기는, 함수 호출 규약에 따른 함수 인자의 데이터 종속성 및 스택 포인터 상대적 위치에 따른 데이터 종속성을 추론하는 데이터 종속성 추론기를 포함할 수도 있다.
본 발명의 실시예에서, 상기 코드 추상화기는, 상기 도달 경로를 기반으로 필요한 데이터 경로를 선택하고, 대상 아키텍처 및 언어를 선택하고, 상기 대상 아키텍처 및 언어에 따른 컴파일러를 통해 상기 필요한 데이터 경로에 해당하는 네이티브 코드와 의미가 동일하도록 상기 네이티브 코드를 바이트 코드로 변환할 수도 있다.
상기한 본 발명의 또 다른 목적을 실현하기 위한 일 실시예에 따른 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법은, 네이티브 코드의 종속성을 추출하는 단계; 상기 추출된 종속성에 기반하여 소스에서 싱크까지 도달 경로를 탐색하는 단계; 상기 도달 경로를 기반으로 상기 네이티브 코드를 바이트 코드로 변환하는 단계; 및 상기 변환된 바이트 코드와 기존 바이트 코드에 기반하여 정적 오염분석을 수행하는 단계;를 포함한다.
본 발명의 또 다른 실시예에서, 상기 정적 오염 분석의 결과는, 데이터 도달 가능 경로, 상기 도달 가능 경로의 수 및 분석 소요 시간을 포함
본 발명의 또 다른 실시예에서, 상기 종속성을 추출하는 단계는, 함수 호출 규약에 따른 함수 인자의 데이터 종속성 및 스택 포인터 상대적 위치에 따른 데이터 종속성을 추론함으로써 종속성을 추출하는 단계
본 발명의 또 다른 실시예에서, 바이트 코드로 변환하는 단계는, 상기 도달 경로를 기반으로 필요한 데이터 경로를 선택하는 단계; 대상 아키텍처 및 언어를 선택하는 단계; 및 상기 대상 아키텍처 및 언어에 따른 컴파일러를 통해 상기 필요한 데이터 경로에 해당하는 네이티브 코드와 의미가 동일하도록 상기 네이티브 코드를 바이트 코드로 변환하는 단계를 포함할 수도 있다.
상기한 본 발명의 다른 목적을 실현하기 위한 일 실시예에 따른 컴퓨터 프로그램이 기록된 컴퓨터로 판독 가능한 저장 매체에는, 상기 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법을 수행하기 위한 컴퓨터 프로그램이 기록될 수도 있다.
본 발명은 안드로이드 애플리케이션 중 이기종 언어로 만들어진 프로그램에 대해 코드 추상화를 통해 더욱 적은 연산으로 정확한 오염 분석을 할 수 있게 한다.
또한, 기존 바이트 코드 오염 분석에서는 찾을 수 없던 흐름인 네이티브 코드의 흐름을 코드 추상화된 코드를 통해 의미적으로 (Semantic) 추적할 수 있게 되어, 확장된 분석을 할 수 있다.
또한, 추상화된 코드는 데이터 종속성과 관련된 다른 분석을 시도할 때 이미 진행한 종속성 분석을 반복하지 않아 시간적으로 높은 효율을 얻는다.
도 1은 본 발명의 일 실시예에 따른 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법의 순서도이다.
도 2는 본 발명의 일 실시예에 따른 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치의 개념도이다.
도 3은 본 발명의 일 실시예에 따른 네이티브 코드 분석기의 개념도이다.
도 4는 본 발명의 일 실시예에 따라 네이티브 코드의 종속성을 추출하는 과정을 나타낸다.
도 5는 본 발명의 일 실시예에 따라 네이티브 코드를 바이트 코드로 추상 및 변환하는 과정을 나타낸다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 도면들을 참조하여 본 발명의 바람직한 실시예들을 보다 상세하게 설명하기로 한다.
프로그램 분석 방법 중, 데이터 흐름 정적 분석이 있다. 프로그램을 실제 환경에서 실행하지 않고 분석하는 정적 분석이며 데이터의 흐름을 그래프로 나타내는 분석법이다. 데이터 흐름 분석법 중 데이터의 도달 가능성을 판별하는 오염 분석 기법에서, 기존의 결과물은 대상 데이터가 사전 정의한 목적지 중 하나 이상에 도달하는지 여부만 산출해왔다. 이는 다른 분석 기법을 시도할 때, 결과 정보만 기반으로 동일한 프로그램 코드를 다시 분석한다는 비효율성을 가진다. 그래서 본 발명을 통해 데이터 종속성 정보로 한 언어의 코드를 추상화하고, 한 언어로 분석을 진행하여 더욱 적은 연산으로 정확한 분석 결과를 얻을 수 있다.
도 1은 본 발명의 일 실시예에 따른 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법의 순서도이다. 도 1을 참조하면, 네이티브 코드의 종속성을 추출한다 (S101). 종속성은 함수 호출 규약에 따른 함수 인자의 데이터 종속성을 추론하고, 스택 포인터 상대적 위치에 따른 데이터 종속성을 추론함으로써 추출된다. 구체적으로는, 함수 호출규약에 따른 함수 인자의 데이터 종속성 추론은 ELF 파일 헤더 정보의 대상 CPU 아키텍처, 대상 OS 정보를 기반으로 함수 호출규약을 찾고 이에 해당하는 순서로 추론을 진행한다.
그 후 네이티브 코드의 종속성에 기반하여 코드를 추상화한다 (S103). 본 단계는 네이티브 코드를 바이트 코드로 변환하는 과정이다. 데이터 종속성을 기반으로 필요한 데이터 경로만 선별하고, 대상 아키텍처, 언어를 선택한다. 또한, 이렇게 선택한 아키텍처, 언어에 따른 컴파일러를 통해, 선별된 데이터 경로에 해당하는 코드와 의미가 동등한 바이트 코드로 변환된다.
그 후, 추상화에 의해 변환된 바이트 코드와 기존 바이트 코드에 기반하여 오염분석을 수행한다 (S105). 오염 분석은 두 개의 이기종 파일로 만들어진 프로그램의 오염을 분석할 수 있다. 즉 바이트 코드와 네이티브 코드로 만들어진 프로그램에서, 바이트 코드와 S103을 통해 네이티브 코드에서 변환된 바이트 코드를 함께 분석한다. 이와 같이 이기종 언어를 추상화를 통해 한 언어로 분석을 진행하여 더욱 적은 연산으로 정확한 분석 결과를 얻을 수 있다.
도 2는 본 발명의 일 실시예에 따른 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치의 개념도이다. 도 2를 참조하면, 본 발명에 의한 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치(10)는 바이트 코드 분석기(100) 및 네이티브 코드 분석기(200)를 포함한다. 바이트 코드 분석기(100)는 프로그램 로더(APK), 네이티브 라이브러리 추출기(130) 및 오염 분석기(바이트 코드)(170)를 포함한다.
또한, 네이티브 코드 분석기(200)는 프로그램 로더(ELF)(210), 종속성 추출기(230), 오염 분석기(네이티브 코드)(250), 및 코드 추상화기(270)를 포함한다.
더욱 구체적으로는, 바이트 코드 분석기(100)에 APK (11) 및 바이트 코드의 컨피규 파일(13)이 입력되고, 네이티브 코드 분석기 (200)에 네이티브 코드의 컨피규 파일(15)이 입력된다. 또한, 오염분석기 (170)을 통해 바이트 코드 분석기(100)로부터 분석 결과(17)가 출력된다.
여기서 APK(11)는 안드로이드 애플리케이션 패키지를 의미하며, DEX, 메니페스트 (Manifest), 라이브러리 및 리소스를 포함한다. 또한, 오염 분석 구성 파일인 바이트 코드의 컨피규 파일 (13) 및 네이티브 코드의 컨피규 파일(15)은 소스(Source) 규칙 및 싱크(Sink) 함수명 리스트를 포함한다. 여기서, 소스는 관측을 시도하려는 값의 시작점을 의미하고, 싱크는 함수 중에서 인자로 어떠한 값이 전달되는지 관측하고자 하는 함수를 의미한다. 또한, 정적 오염 분석 결과(17)는 데이터 도달 가능 경로 및 그 수와 분석 소요시간을 포함한다.
프로그램 로더 (APK)(110)는 APK (DEX, 메니페스트 및 리소스)를 입력받아 클래스, 메서드, 필드, SSA 코드를 출력한다. 구체적으로는, DEX 파일을 통해 클래스, 메서드, 필드, 바이트 코드 정보를 추출한다. 또한, 추출한 바이트 코드를 SSA(Static Single Assignment) 언어로 변환한다. 여기서 SSA 형태 언어는 각 변수가 정확히 한 번 할당되고 모든 변수가 사용되기 전에 정의되어야 한다는 규칙에서 작성된 언어를 의미한다.
네이티브 라이브러리 추출기(130)는 APK에서의 SSA바이트 코드 및 APK(라이브러리)를 입력받아 네이티브 라이브러리를 출력한다. 네이티브 라이브러리 추출기(130)는 네이티브 라이브러리 코드에 사용하면 적합한 라이브러리 파일을 탐색한다. 또한, 바이트 코드에서 호출한 네이티브 라이브러리 내 함수의 주소값과 인자 정보를 추출한다.
프로그램 로더(ELF)(210)는 프로그램 헤더, 어셈블리 코드를 입력받아 아크 (Arch), 심볼, 어셈블리 코드 및 SSA 코드를 출력한다. 구체적으로는 헤더에서 바이너리 형식, 대상 아키텍처, 심볼 등과 같은 메타 데이터를 추출한다. 또한, 어셈블리 코드를 SSA 언어 형식 코드로 변환한다.
종속성 추출기 (230)는 심볼, 어셈블리 코드 및 SSA 코드를 입력받아 ICFG(Inter-procedural Control Flow Graph: 함수 간의 호출 흐름 그래프) 및 DDG(Data Dependency Graph: 데이터 종속성 그래프)를 출력하며 도 3을 참조하여 더욱 상세히 설명한다. 여기서, ICFG는 한 함수 내부에 대한 정보인 CFG에서 다른 함수와의 호출 관계도 포함된 Inter-procedural CFG를 의미한다. 또한, DDG는 데이터(예를 들면 레지스터 혹은 스택에 저장되는 값 등) 간의 종속성이 있는지를 나타내는 정보인 데이터 종속성 그래프를 의미한다.
도 3은 본 발명의 일 실시예에 따른 네이티브 코드 분석기의 개념도이다. 도 3을 참조하면, 종속성 추출기 (230)는 CFG 추출기(231), DDG 추출기(233) 및 데이터 종속성 추론기(235)를 포함한다. 여기서 CFG는 제어 흐름 그래프 (control flow graph)이며, 프로그램이 실행 중에 횡단할 수 있는 모든 경로를 그래프 표기법을 사용하여 표현한 것이다. CFG는 많은 컴파일러 최적화와 정적 프로그램 분석 툴에서 핵심 요소이다. CFG 추출기(231)는 CFG 와 함수 간 호출 정보를 생성한다. 그 후, DDG 추출기(233)는 SSA 코드에서 데이터 할당 기준으로 데이터 종속성 정보를 생성한다. 또한, 그래프 시작점은 바이트 코드에서 호출된 함수의 인자 및 네이티브 코드에서 호출한 바이트 코드 함수 반환값 또는 필드이다. 그 후, 데이터 종속성 추론기(235)는 함수 호출 규약에 따른 함수 인자의 데이터 종속성을 추론한다. 또한, 스택 포인터 상대적 위치에 따른 데이터 종속성을 추론한다. 이에 대해 도 4를 참조하여 더욱 상세히 설명한다.
도 4는 본 발명의 일 실시예에 따라 네이티브 코드의 종속성을 추출하는 과정을 나타낸다. 도 4를 참조하면, 데이터 종속성 추론기(235)에서 함수호출규약에 따른 함수 인자의 데이터 종속성 추론은 ELF 파일 헤더 정보의 대상 CPU 아키텍처, 대상 OS 정보를 기반으로 함수 호출규약을 찾고 이에 해당하는 순서로 추론을 진행한다.
호출-저장 (Caller-saved) 유형은 도 4a과 같이 호출 스택에 값을 저장하고 전달하며, 피 호출 함수 내에서는 도 4b의 bd8~be4와 같이 전달받은 인자 값을 스택에서 레지스터로 복사하여 사용한다. 호출-저장 유형은 도 4c와 같이 레지스터에 값을 저장한 후, 도 4c의 c88~c98과 같이 피 호출 함수 내에서 스택에 값을 저장한다.
따라서 바이트 코드에서 함수 호출로 넘어온 인자를 소스로 지정하려면 각 함수 호출 규약에 따라 상이해야 하고, 싱크로 전달되는 인자를 찾는 방법도 각 함수 호출 규약에 맞추어야 한다. 바이트 코드에서 전달받은 인자는 그에 맞게 어떤 레지스터가 몇 번째 인자를 가리키는지 기록하여, 나중에 싱크의 인자로 전달되는 인자와의 종속성을 찾는 데에 사용한다.
호출-저장 함수 호출 규약에서는 싱크로 전달되는 인자를 찾을 때, 함수 호출 전에 ‘mov <register>, <offset>(%esp)’ 또는 ‘push <register>’ 명령어가 나열된 상태를 수집하여 정리한다.
호출-저장 함수 호출 규약에서는 호출 이전에 각 레지스터에 어떤 데이터가 저장되었는지 상태를 수집하여 정리한다. 최종적으로 각 레지스터에 저장된 데이터가 소스와 종속성이 존재하는지 탐색하여 도달가능성을 찾는다.
다시 도 2를 참조하며 설명하면, 네이티브 코드의 오염 분석기(250)는 컨피규 파일(15) 및 종속성 추출기(230)로부터 소스 규칙, 싱크 리스트, DDG, 어셈블리 코드 및 SSA 코드를 입력받아 어셈블리 코드, 도달 가능성을 출력한다. 구체적으로는 네이티브 코드의 오염 분석기(250)는 컨피규 파일(15)에서 소스 및 싱크 리스트, 변환 대상 아키텍처와 대상 언어를 로딩한다. 또한, 소스 규칙에 해당하는 데이터를 탐색하고, 싱크 리스트와 일치하는 함수를 탐색한다. 또한, 데이터 종속성을 기반으로 소스에서 싱크까지 도달하는 경로를 탐색한다.
코드 추상화기(270)는 대상 아키텍처, 대상 언어 및 도달 가능성을 입력받아 변환된 바이트 코드를 출력한다. 여기서 도달 가능성은 소스에서 싱크까지의 도달 경로를 포함한다. 구체적으로는 코드 추상화기(270)는 이러한 도달 경로로부터 필요한 데이터 경로만 선별한다. 또한, 코드 추상화기(270)는 대상 아키텍처 및 언어를 선택한다. 또한, 선택한 아키텍처 및 언어에 해당하는 컴파일러를 통해 데이터 경로에 해당하는 어셈블리 코드와 의미가 같도록 바이트 코드로 변환한다. 즉, 네이티브 코드의 의미에 대응되는 바이트 코드(290)로 변환된다. 이에 대해 도 5를 참조하며 더욱 상세히 설명한다.
도 5는 본 발명의 일 실시예에 따라 네이티브 코드를 바이트 코드로 추상 및 변환하는 과정을 나타낸다. 코드 추상화기(270)는 번역될 대상이 될 CPU 아키텍처와 OS를 선택한다. 본 발명의 예시는 네이티브 코드가 Java VM의 바이트 코드로 변환되는 것이 목적이므로 이를 기준으로 진행한다. 더 엄밀하게는, 바이트 코드에서 오염 분석을 위해 SSA 언어 형식 중 하나인 Jimple IR을 사용하기에 네이티브 코드를 Jimple IR로 변환하는 것을 예시로 한다.
전술한 네이티브 코드 대상의 오염 분석기(250)에서 얻은 소스와 싱크 간의도달 경로를 기반으로 바이트 코드에서 호출된 네이티브 코드 함수의 인자가 도 5a의 코드가 그림 도 5b와 같이 해당 함수 내에서 싱크로 전달된다는 의미로 추상화한다.
그 이후 대상 언어로 추상화된 코드를 번역한다. 또한, 오염분석을 진행할 때 네이티브 코드의 싱크로 탐지된 함수를 바이트 코드 대상의 싱크로 추가한다. 최종적으로는 도 5c와 같은 의미가 되도록 코드를 변환한다.
다시 도 2를 참조하여 설명하면, 바이트 코드의 오염 분석기(170)는 프로그램 로더 (110), 바이트 코드의 컨피규 파일(13) 및 변환된 바이트 코드(290)로부터 소스 규칙, 싱크 리스트, 클래스, 메서드, 필드 및 SSA 코드를 입력받아 도달 가능성을 분석 결과(17)로서 출력한다.
분석 결과(17)는 데이터 도달 가능 경로 및 그 수를 나타내며, 이와 함께 분석 소요 시간을 포함한다. 그 결과 데이터 종속성 정보로 한 언어의 코드를 추상화하고, 한 언어로 분석을 진행하여 더욱 적은 연산으로 정확한 분석 결과를 얻을 수 있다.
이와 같은, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법은 애플리케이션으로 구현되거나 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.
상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거니와 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다.
컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다.
프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서는 실시예들을 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
본 발명은 코드 추상화 기법을 활용하여 모바일 애플리케이션과 같이 이기종 언어로 구현된 프로그램을 코드 실행 의미적으로 유사한 단일 언어로 변환한다. 이를 통해 기존 기술이 진행하는 데에 시간이 오래 걸렸거나 불가능했던 분석 방식을 적용할 수 있게 되는 이점을 가져온다. 그리고 코드 추상화 기법을 이용하면 이기종 언어의 코드 흐름, 데이터 흐름의 추상화가 가능하여 행위 분석에 용이하다.
따라서, 이기종으로 구성된 다양한 안드로이드 애플리케이션 프로그램에 대해 적용이 가능하다.
10 : 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 장치
100 : 바이트 코드 분석기 110 : 프로그램 로더 (APK)
130 : 네이티브 라이브러리 추출기 170 : 오염 분석기(바이트 코드)
200 : 네이티브 코드 분석기 210 : 프로그램 로더 (ELF)
230 : 종속성 추출기 250 : 오염 분석기(네이티브 코드)
270 : 코드 추상화기

Claims (9)

  1. 네이티브 코드의 종속성을 추출하는 종속성 추출기;
    상기 추출된 종속성에 기반하여 소스에서 싱크까지 도달 경로를 탐색하는 네이티브 코드 오염 분석기;
    상기 도달 경로를 기반으로 상기 네이티브 코드를 바이트 코드로 변환하는 코드 추상화기를 포함하는, 네이티브 코드 분석기; 및
    상기 변환된 바이트 코드와 기존 바이트 코드에 기반하여 정적 오염 분석을 수행하는 바이트 코드 분석기를 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치
  2. 제 1항에 있어서,
    상기 정적 오염 분석의 결과는, 데이터 도달 가능 경로, 상기 도달 가능 경로의 수 및 분석 소요 시간을 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치
  3. 제 1항에 있어서,
    상기 종속성 추출기는,
    함수 호출 규약에 따른 함수 인자의 데이터 종속성 및 스택 포인터 상대적 위치에 따른 데이터 종속성을 추론하는 데이터 종속성 추론기를 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치
  4. 제 1항에 있어서,
    상기 코드 추상화기는,
    상기 도달 경로를 기반으로 필요한 데이터 경로를 선택하고,
    대상 아키텍처 및 언어를 선택하고, 상기 대상 아키텍처 및 언어에 따른 컴파일러를 통해 상기 필요한 데이터 경로에 해당하는 네이티브 코드와 의미가 동일하도록 상기 네이티브 코드를 바이트 코드로 변환하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 장치
  5. 네이티브 코드의 종속성을 추출하는 단계;
    상기 추출된 종속성에 기반하여 소스에서 싱크까지 도달 경로를 탐색하는 단계;
    상기 도달 경로를 기반으로 상기 네이티브 코드를 바이트 코드로 변환하는 단계; 및
    상기 변환된 바이트 코드와 기존 바이트 코드에 기반하여 정적 오염분석을 수행하는 단계;를 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법.
  6. 제 5항에 있어서,
    상기 정적 오염 분석의 결과는, 데이터 도달 가능 경로, 상기 도달 가능 경로의 수 및 분석 소요 시간을 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법.
  7. 제 5항에 있어서,
    상기 종속성을 추출하는 단계는,
    함수 호출 규약에 따른 함수 인자의 데이터 종속성 및 스택 포인터 상대적 위치에 따른 데이터 종속성을 추론함으로써 종속성을 추출하는 단계인, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법.
  8. 제 5항에 있어서,
    바이트 코드로 변환하는 단계는,
    상기 도달 경로를 기반으로 필요한 데이터 경로를 선택하는 단계;
    대상 아키텍처 및 언어를 선택하는 단계; 및
    상기 대상 아키텍처 및 언어에 따른 컴파일러를 통해 상기 필요한 데이터 경로에 해당하는 네이티브 코드와 의미가 동일하도록 상기 네이티크 코드를 바이트 코드로 변환하는 단계를 포함하는, 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법.
  9. 제5항 내지 제8항 중 어느 하나의 항에 따른 상기 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법을 수행하기 위한 컴퓨터 프로그램이 기록된 컴퓨터로 판독 가능한 저장 매체.
KR1020220097241A 2022-08-04 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체 KR102702042B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220097241A KR102702042B1 (ko) 2022-08-04 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220097241A KR102702042B1 (ko) 2022-08-04 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체

Publications (2)

Publication Number Publication Date
KR20240019514A true KR20240019514A (ko) 2024-02-14
KR102702042B1 KR102702042B1 (ko) 2024-09-04

Family

ID=

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101694783B1 (ko) 2014-11-28 2017-01-10 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
KR102315750B1 (ko) 2018-12-26 2021-10-21 한양대학교 에리카산학협력단 서로 다른 언어로 작성된 프로그램들 간 유사성 검사 방법 및 장치

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101694783B1 (ko) 2014-11-28 2017-01-10 주식회사 파수닷컴 소스 코드의 오류 검출에 있어서 경보 유형 분류 방법, 이를 위한 컴퓨터 프로그램, 그 기록매체
KR102315750B1 (ko) 2018-12-26 2021-10-21 한양대학교 에리카산학협력단 서로 다른 언어로 작성된 프로그램들 간 유사성 검사 방법 및 장치

Similar Documents

Publication Publication Date Title
AU2004232058B2 (en) Method and system for detecting vulnerabilities in source code
CN110287702B (zh) 一种二进制漏洞克隆检测方法及装置
US9928042B2 (en) Automatic classification of compilers
US20130290937A1 (en) Efficient extraction of software dependencies from program code
US10599852B2 (en) High performance software vulnerabilities detection system and methods
US10078497B2 (en) Bridging a module system and a non-module system
US5960197A (en) Compiler dispatch function for object-oriented C
JP2019053729A (ja) スマートコントラクトのテスト方法及びテスト装置
US9626171B2 (en) Composing a module system and a non-module system
WO2018093443A1 (en) Automated reverse engineering
US9027145B2 (en) Method and apparatus for detecting leak of information resource of device
CN115017516A (zh) 一种基于符号执行的模糊测试方法
Journault et al. An abstract domain for trees with numeric relations
US20040194068A1 (en) System and method for extending a compiler through a composer
US9116714B2 (en) Methods and systems for file processing
WO2015003452A1 (en) Methods and systems for file processing
US9672015B2 (en) Automatic determination of compiler configuration
KR102209151B1 (ko) 바이너리 취약점 패치 방법 및 장치
US9064042B2 (en) Instrumenting computer program code by merging template and target code methods
KR102702042B1 (ko) 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체
KR20240019514A (ko) 안드로이드 애플리케이션용 이기종 언어 프로그램 오염 분석 방법 및 이를 수행하기 위한 장치 및 기록 매체
CN113138797A (zh) 面向Intel SGX的程序自动化移植系统
KR102323621B1 (ko) 펌웨어 퍼징 장치 및 방법
Zou et al. PosFuzz: augmenting greybox fuzzing with effective position distribution
Li et al. DepTaint: a static taint analysis method based on program dependence

Legal Events

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