KR102271273B1 - 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치 - Google Patents

네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치 Download PDF

Info

Publication number
KR102271273B1
KR102271273B1 KR1020200161386A KR20200161386A KR102271273B1 KR 102271273 B1 KR102271273 B1 KR 102271273B1 KR 1020200161386 A KR1020200161386 A KR 1020200161386A KR 20200161386 A KR20200161386 A KR 20200161386A KR 102271273 B1 KR102271273 B1 KR 102271273B1
Authority
KR
South Korea
Prior art keywords
analysis
execution
application
metadata
native code
Prior art date
Application number
KR1020200161386A
Other languages
English (en)
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 KR1020200161386A priority Critical patent/KR102271273B1/ko
Priority to PCT/KR2021/001131 priority patent/WO2022114391A1/ko
Priority to US17/287,056 priority patent/US11886589B2/en
Application granted granted Critical
Publication of KR102271273B1 publication Critical patent/KR102271273B1/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
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/74Reverse engineering; Extracting design information from source code

Landscapes

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

Abstract

네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은, 애플리케이션이 시작될 때 애플리케이션에서 실행하고자 하는 실행 명령어를 안드로이드 프레임워크로부터 전달받는 단계; 안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 컴파일된 OAT 파일로부터 문자열과 메서드에 대한 메타 데이터를 추출하는 단계; 전달된 실행 명령어 및 추출된 메타 데이터를 기초로 DB의 정보와 비교하여 분석 방지 기술이 적용되어 있는지 판별하는 단계; 분석 방지 기술이 적용되어 있는 경우 판별된 정보를 기초로 실행 명령어를 수정하는 단계; 및 수정된 실행 명령어를 다시 안드로이드 프레임워크로 전달하는 단계;를 포함한다. 이에 따라, 분석 방지 기술들이 적용된 악성 애플리케이션들을 손쉽게 분석 할 수 있는 환경을 제공할 수 있다.

Description

네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치{PROCESS WRAPPING METHOD FOR EVADING ANTI-ANALYSIS OF NATIVE CODES, RECORDING MEDIUM AND DEVICE FOR PERFORMING THE METHOD}
본 발명은 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치에 관한 것으로서, 더욱 상세하게는 프로세스 래핑을 통하여 ART에서 사용하는 OAT 파일의 네이티브 코드를 명령어 수준으로 계측하여 분석 방지 기술들을 무효화 할 수 있는 기술에 관한 것이다.
최근 IoT 시장이 계속 성장함에 따라 전세계적으로 IoT 장치들이 계속 증가하여 2021년까지 250억 개에 달할 것이라고 전망된다. 이러한 환경에서 모바일 기기 역시 급격하게 성장하고 있으며 스마트폰의 생산량은 2020년에 약 17억 대에 이를 것으로 예측되고 있으며 2021년에는 약 전 세계의 인구 중 약 40 %가 스마트폰을 소유할 것으로 전망되고 있다.
이러한 스마트폰 시장에서 2020년 7월 기준, 안드로이드는 74.6 %의 시장 점유율을 나타내며 가장 널리 사용되는 모바일 운영체제로 자리매김하였다. 이러한 안드로이드의 성장과 더불어 안드로이드의 악성코드 역시 빠르게 증가하고 있는데, 평균적으로 1초당 약 8 개꼴로 안드로이드 악성 애플리케이션이 배포되고 있다고 한다.
악성 애플리케이션의 개수가 빠르게 늘어나는 것뿐 아니라 동시에 애플리케이션을 보호하기 위한 기술 또한 발전하여 악성 애플리케이션을 분석하는 것이 점점 더 어려워지고 있다. 애플리케이션을 보호하기 위해 개발된 기술인 난독화, 자바 리플렉션과 같은 코드 보호 기술뿐 아니라 안티-에뮬레이팅, 안티-디버깅과 같은 분석 방지 기술까지 악성코드를 보호하기 위해 사용되고 있다.
난독화, 자바 리플렉션과 같은 코드 보호 기술의 경우 정적 분석으로부터 애플리케이션을 보호하기 위해 개발되었다. 이러한 기술은 동적 분석 도구를 통해 분석이 가능하며 안티-에뮬레이팅, 안티-디버깅과 같은 분석 방지 기술은 이러한 동적 분석을 막기 위해 개발되었다.
분석 방지 기술은 현재 실행 환경을 검사하여 특정한 환경이 탐지되면 정상적으로 실행하지 않거나 종료하는 등의 동작을 한다. 즉, 분석 방지 기술은 동적 분석 기술 자체의 한계가 아닌 동적 분석 기술을 시스템에 이식하는 과정에서 보이는 환경적 특징을 활용하였다고 볼 수 있다.
이러한 악성코드를 분석하기 위해서는 분석가의 많은 시간과 경험을 필요로 하게 되며 이는 악성코드에 신속하게 대응할 수 없다는 것을 의미한다. 따라서, 이러한 애플리케이션 보호 기술들을 빠르게 우회하여 악성 애플리케이션의 행동을 분석할 수 있는 방법이 필요하다.
보호 기술들의 발전뿐 아니라 안드로이드의 런타임이 ART 런타임으로 변경되면서 바이트 코드에서 네이티브 코드로 애플리케이션의 주 실행 코드가 바뀌었으며 달빅 가상 머신 대신 ART 런타임을 사용하게 되었다. 이러한 방식의 변경으로 인하여 기존의 달빅 기반 분석 도구들의 사용이 어려워졌고 새로운 분석도구를 필요로 하게 되었다.
다시 말해, 난독화, 무결성 검사, 에뮬레이터 탐지 등 분석 방지 기술의 발전으로 에뮬레이터를 사용하거나 애플리케이션의 무결성을 훼손하는 방법으로 동작하는 분석 도구들로 애플리케이션을 분석하는 것은 매우 어렵다. 또한, 분석 방지 기술들에 탐지되지 않는 방법으로 동작하는 도구는 분석 대상 범위가 비교적 제한적이라는 한계점을 가지는 경우가 많다.
KR 10-1976992 B1 KR 10-1602881 B1
SciMark2, https://math.nist.gov/scimark2/about.html, Access On : Oct, 2020. H. Cho, J. H. Yi, and G. J. Ahn, "DexMonitor: Dynamically Analyzing and Monitoring Obfuscated Android Applications," IEEE Access, vol. 6, pp. 71229-71240, 2018.
이에, 본 발명의 기술적 과제는 이러한 점에서 착안된 것으로 본 발명의 목적은 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법을 제공하는 것이다.
본 발명의 다른 목적은 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법을 수행하기 위한 컴퓨터 프로그램이 기록된 기록 매체를 제공하는 것이다.
본 발명의 또 다른 목적은 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법을 수행하기 위한 장치를 제공하는 것이다.
상기한 본 발명의 목적을 실현하기 위한 일 실시예에 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은, 애플리케이션이 시작될 때 애플리케이션에서 실행하고자 하는 실행 명령어를 안드로이드 프레임워크로부터 전달받는 단계; 안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 컴파일된 OAT 파일로부터 문자열과 메서드에 대한 메타 데이터를 추출하는 단계; 전달된 실행 명령어 및 추출된 메타 데이터를 기초로 DB의 정보와 비교하여 분석 방지 기술이 적용되어 있는지 판별하는 단계; 분석 방지 기술이 적용되어 있는 경우 판별된 정보를 기초로 실행 명령어를 수정하는 단계; 및 수정된 실행 명령어를 다시 안드로이드 프레임워크로 전달하는 단계;를 포함한다.
본 발명의 실시예에서, 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은, 분석하고자 하는 애플리케이션의 설치된 정보를 기초로 필요한 메타 데이터를 추출하는 전처리 단계;를 더 포함할 수 있다.
본 발명의 실시예에서, 상기 메타 데이터를 추출하는 전처리 단계는, 실행되는 메서드를 식별하기 위해 필요한 메타 데이터를 오프셋(offset) 기반으로 매핑 정보를 생성하는 단계; 각각의 고유한 ID에 매핑 되는 문자열을 메타 데이터로 추출하는 단계; 및 사전에 정의된 래핑(Wrapper) 프로세스를 먼저 실행시키고 애플리케이션 실행에 필요한 클래스들과 리소스들을 로딩하는 단계;를 포함할 수 있다.
본 발명의 실시예에서, 상기 실행 명령어를 안드로이드 프레임워크로부터 전달받는 단계는, 실행하고자 컴파일된 네이티브 코드를 IR로 번역하는 과정을 수행하며 IR들은 BB(Basic Block) 단위로 관리할 수 있다.
본 발명의 실시예에서, 상기 분석 방지 기술이 적용되어 있는지 판별하는 단계는, 명령어가 사용하는 문자열, 현재 BB 또는 다음 BB의 메서드 명 및 사용되는 라이브러리나 특정한 순서의 명령어 집합을 포함하는 시그니처를 데이터베이스에 저장된 악성 애플리케이션이 사용하는 문자열 및 메서드 명을 포함하는 시그니처와 비교하여 분석 방지 기술을 탐지할 수 있다.
본 발명의 실시예에서, 상기 판별된 정보를 기초로 실행 명령어를 수정하는 단계는, 명령어 사이에 추가적인 명령어를 IR로 만들어 삽입하거나 명령어에 저장된 상수 값을 변경하여 명령어의 실행 흐름을 변경하는 단계;를 포함할 수 있다.
본 발명의 실시예에서, 상기 판별된 정보를 기초로 실행 명령어를 수정하는 단계는, 메서드의 리턴 값이 저장된 후 특정 레지스터의 값을 변경하거나 실행 이후에 레지스터 값을 변경하는 IR을 삽입하여 명령어의 실행 흐름을 변경하는 단계;를 포함할 수 있다.
상기한 본 발명의 다른 목적을 실현하기 위한 일 실시예에 따른 컴퓨터로 판독 가능한 저장 매체에는, 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법을 수행하기 위한 컴퓨터 프로그램이 기록되어 있다.
상기한 본 발명의 또 다른 목적을 실현하기 위한 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치는, 애플리케이션이 시작될 때 애플리케이션에서 실행하고자 하는 실행 명령어를 안드로이드 프레임워크로부터 전달받고, 수정된 실행 명령어를 다시 안드로이드 프레임워크로 전달하는 실행 코드 관찰기; 안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 컴파일된 OAT 파일로부터 문자열과 메서드에 대한 메타 데이터를 추출하는 심볼 추출기; 상기 실행 코드 관찰기에서 전달된 실행 명령어 및 상기 심볼 추출기에서 추출된 메타 데이터를 기초로 DB의 정보와 비교하여 분석 방지 기술이 적용되어 있는지 판별하는 분석 방지 기술 인식기; 및 상기 분석 방지 기술 인식기에서 판별된 정보를 기초로 분석 방지 기술이 적용되어 있는 실행 명령어를 수정하여 상기 실행 코드 관찰기에 전달하는 실행 코드 수정기;를 포함한다.
본 발명의 실시예에서, 상기 심볼 추출기는, 실행되는 메서드를 식별하기 위해 필요한 메타 데이터를 오프셋(offset) 기반으로 매핑 정보를 생성하는 메서드 메타 데이터 추출기; 각각의 고유한 ID에 매핑 되는 문자열을 전처리 과정에서 메타 데이터로 추출하는 문자열 메타 데이터 추출기; 및 사전에 정의된 래핑(Wrapper) 프로세스를 먼저 실행시키고 애플리케이션 실행에 필요한 클래스들과 리소스들을 로딩하는 환경 설정기;를 포함할 수 있다.
본 발명의 실시예에서, 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치는, 메모리 관리 및 로딩과 링킹 과정을 담당하며 계측 결과에 따라 CPU에게 명령어를 전달하는 역할을 수행하는 공간 관리(Space Manager) 모듈 및 에뮬레이션(Emulation) 모듈을 더 포함할 수 있다.
본 발명의 실시예에서, 상기 공간 관리 모듈은, 프로그램의 실행에 필요한 라이브러리 로딩과 링킹에 대한 작업을 수행하는 로더 및 링커(Loader & Linker) 모듈; 및 app_process 및 애플리케이션에서 사용하는 공간들에 대한 관리를 수행하는 스택 관리(Stack Manager) 모듈과 힙 관리(Heap Manager) 모듈;을 포함할 수 있다.
본 발명의 실시예에서, 상기 실행 코드 관찰기는, 실행하고자 컴파일된 네이티브 코드를 IR로 번역하는 과정을 수행하며 IR들은 BB(Basic Block) 단위로 관리할 수 있다.
본 발명의 실시예에서, 상기 분석 방지 기술 인식기는, 명령어가 사용하는 문자열, 현재 BB 또는 다음 BB의 메서드 명 및 사용되는 라이브러리나 특정한 순서의 명령어 집합을 포함하는 시그니처를 데이터베이스에 저장된 악성 애플리케이션이 사용하는 문자열 및 메서드 명을 포함하는 시그니처와 비교하여 분석 방지 기술을 탐지할 수 있다.
본 발명의 실시예에서, 상기 실행 코드 수정기는, 명령어 사이에 추가적인 명령어를 IR로 만들어 삽입하거나 명령어에 저장된 상수 값을 변경하여 명령어의 실행 흐름을 변경하는 명령어 대체부;를 포함할 수 있다.
본 발명의 실시예에서, 상기 실행 코드 수정기는, 메서드의 리턴 값이 저장된 후 특정 레지스터의 값을 변경하거나 실행 이후에 레지스터 값을 변경하는 IR을 삽입하여 명령어의 실행 흐름을 변경하는 레지스터 대체부;를 포함할 수 있다.
이와 같은 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법에 따르면, 기존 분석 시스템을 사용하기 어렵게 만드는 분석 방지 기술들을 우회하여 프로그램을 실행시킬 수 있는 환경을 만들어줌으로써 기존 분석 시스템으로도 분석 방지 기술들이 적용된 악성 애플리케이션들을 손쉽게 분석할 수 있도록 한다. 또한, 기존의 악성 애플리케이션뿐 아니라 새로운 악성 애플리케이션에 대한 대응 시간을 단축시킬 수 있다.
도 1은 본 발명의 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치의 블록도이다.
도 2는 도 1의 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치의 동작을 설명하기 위한 도면이다.
도 3은 본 발명의 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치의 세부 구조도이다.
도 4는 심볼 추출기의 결과물의 일부인 OAT 파일로부터 추출한 메서드 정보에 대한 예시 도면이다.
도 5는 일반적인 애플리케이션 실행과 독자적인 실행 모듈을 가지고 있는 래핑을 통해 실행하였을 때의 모습을 나타낸 도면이다.
도 6은 Mov ebp, [esp + 16] 명령어를 IR로 변환한 것을 나타낸 도면이다.
도 7은 VEX에서 사용하는 베이직 블록(Basic Block)의 구조를 보여주는 도면이다.
도 8은 OAT에서 사용하는 컴파일된 문자열의 구조를 보여주는 도면이다.
도 9는 상수 값 변경을 통한 IR 수정의 한 예시로 [cbz] 명령어를 IR로 번역한 내용을 보여주는 도면이다.
도 10은 루팅을 탐지하는 기법 중 하나인 "su" 바이너리가 있는지 검사하는 방식을 구현한 메서드의 일부분을 보여주는 도면이다.
도 11은 본 발명의 제안 기법을 사용하여 탐지된 우회된 악성 애플리케이션의 분석 방지 기술의 시그니처 중 일부분을 나타낸 표이다.
도 12는 악성 애플리케이션에 적용되어 있는 안티-에뮬레이팅 코드의 일부분을 보여주는 도면이다.
도 13은 안티-에뮬레이팅으로 판단된 메서드가 사용하는 문자열들은 시그니처로 인식하여 해당 문자열을 ART를 통해 리졸빙(Resolving)되는 시점에 다른 문자열로 치환된 결과를 나타내는 로그의 일부분을 보여주는 도면이다.
도 14는 악성 애플리케이션이 정보를 탈취하기 위해 동작하는 코드의 일부분을 보여주는 도면이다.
도 15는 우회 기능으로 인해 해당 메서드가 동작하여 로그에 차이가 발생하는 것을 나타낸 도면이다.
도 16은 본 발명의 성능 오버헤드의 측정 결과를 나타낸 도면이다.
도 17은 본 발명의 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법의 흐름도이다.
후술하는 본 발명에 대한 상세한 설명은, 본 발명이 실시될 수 있는 특정 실시예를 예시로서 도시하는 첨부 도면을 참조한다. 이들 실시예는 당업자가 본 발명을 실시할 수 있기에 충분하도록 상세히 설명된다. 본 발명의 다양한 실시예는 서로 다르지만 상호 배타적일 필요는 없음이 이해되어야 한다. 예를 들어, 여기에 기재되어 있는 특정 형상, 구조 및 특성은 일 실시예에 관련하여 본 발명의 정신 및 범위를 벗어나지 않으면서 다른 실시예로 구현될 수 있다. 또한, 각각의 개시된 실시예 내의 개별 구성요소의 위치 또는 배치는 본 발명의 정신 및 범위를 벗어나지 않으면서 변경될 수 있음이 이해되어야 한다. 따라서, 후술하는 상세한 설명은 한정적인 의미로서 취하려는 것이 아니며, 본 발명의 범위는, 적절하게 설명된다면, 그 청구항들이 주장하는 것과 균등한 모든 범위와 더불어 첨부된 청구항에 의해서만 한정된다. 도면에서 유사한 참조부호는 여러 측면에 걸쳐서 동일하거나 유사한 기능을 지칭한다.
이하, 도면들을 참조하여 본 발명의 바람직한 실시예들을 보다 상세하게 설명하기로 한다.
도 1은 본 발명의 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치의 블록도이다. 도 2는 도 1의 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치의 동작을 설명하기 위한 도면이다.
본 발명에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치(10, 이하 장치)는 애플리케이션을 네이티브 수준으로 계측하여 루팅 탐지, 가상화 탐지, 디버거 탐지를 자동으로 우회할 수 있는 도구를 제안한다.
본 발명은 시스템 내부에 있는 계측모듈을 사용하지 않고 애플리케이션을 외부의 계측 프로그램으로 래핑하여 애플리케이션의 모든 명령어를 계측하는 방식을 사용한다. 이때 계측된 정보를 바탕으로 분석 방지 기술들을 인식하고 인식하는 루틴을 무력화한다.
분석 방지 기술들을 우회하기 위해서는 루팅 환경, 에뮬레이터 환경, 디버거 환경을 탐지하는 루틴들을 무력화해야한다. 이때, 탐지루틴들이 발견되는 경우, 정상적인 프로그램 실행흐름으로 강제로 바꾸어주는 작업이 필요하며 이러한 작업은 결과를 저장하는 변수에 조작을 가하거나 루틴 자체를 무시하는 방법으로 수행될 수 있다. 본 발명에서는 분석 방지 기술을 자동으로 우회하기 위해 도 1과 같은 구조의 장치를 제안한다.
도 1을 참조하면, 본 발명에 따른 장치(10)는 실행 코드 관찰기(110), 심볼 추출기(130), 분석 방지 기술 인식기(150) 및 실행 코드 수정기(170)를 포함한다. 상기 장치(10)는 데이터베이스(190)를 외부 또는 내부에 더 포함할 수 있다.
본 발명의 상기 장치(10)는 네이티브 코드 분석방지 우회를 위한 프로세스 래핑을 수행하기 위한 소프트웨어(애플리케이션)가 설치되어 실행될 수 있으며, 상기 실행 코드 관찰기(110), 상기 심볼 추출기(130), 상기 분석 방지 기술 인식기(150), 상기 실행 코드 수정기(170) 및 상기 데이터베이스(190)의 구성은 상기 장치(10)에서 실행되는 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑을 수행하기 위한 소프트웨어에 의해 제어될 수 있다.
상기 장치(10)는 별도의 단말이거나 또는 단말의 일부 모듈일 수 있다. 또한, 상기 실행 코드 관찰기(110), 상기 심볼 추출기(130), 상기 분석 방지 기술 인식기(150), 상기 실행 코드 수정기(170) 및 상기 데이터베이스(190)의 구성은 통합 모듈로 형성되거나, 하나 이상의 모듈로 이루어 질 수 있다. 그러나, 이와 반대로 각 구성은 별도의 모듈로 이루어질 수도 있다.
상기 장치(10)는 이동성을 갖거나 고정될 수 있다. 상기 장치(10)는, 서버(server) 또는 엔진(engine) 형태일 수 있으며, 디바이스(device), 기구(apparatus), 단말(terminal), UE(user equipment), MS(mobile station), 무선기기(wireless device), 휴대기기(handheld device) 등 다른 용어로 불릴 수 있다.
상기 장치(10)는 운영체제(Operation System; OS), 즉 시스템을 기반으로 다양한 소프트웨어를 실행하거나 제작할 수 있다. 상기 운영체제는 소프트웨어가 장치의 하드웨어를 사용할 수 있도록 하기 위한 시스템 프로그램으로서, 안드로이드 OS, iOS, 윈도우 모바일 OS, 바다 OS, 심비안 OS, 블랙베리 OS 등 모바일 컴퓨터 운영체제 및 윈도우 계열, 리눅스 계열, 유닉스 계열, MAC, AIX, HP-UX 등 컴퓨터 운영체제를 모두 포함할 수 있다.
상기 실행 코드 관찰기(110)는 컴파일된 OAT파일에 저장되어 있는 CPU에서 바로 사용이 가능한 명령어들을 안드로이드 프레임워크로부터 가져온다. 또한, 계측 결과를 다시 프레임워크로 전달하는 기능을 수행한다. 안드로이드 4.4 이후부터는 런타임으로 ART를 사용하며 ART는 Dex를 컴파일한 결과물인 OAT 파일을 생성한다.
상기 심볼 추출기(130)는 DEX 파일의 바이트 코드를 주 실행코드로 동작하는 경우 Dalvik 가상 머신 위에서 동작하는데 이때 클래스명, 메서드명 등에 대한 정보를 Dalvik 가상 머신을 통해 획득할 수 있다. 하지만 컴파일된 명령어만으로는 실행 중에 정보를 취득하기 어려워 애플리케이션이 사용하는 문자열, 메서드에 대한 정보들을 추출한다.
상기 분석 방지 기술 인식기(150)는 실행 코드 관찰기에서 정제한 정보를 바탕으로 분석 방지 기술이 적용되어 있는지를 DB를 토대로 판별한다.
상기 실행 코드 수정기(170)는 분석 방지 기술 인식기에서 인식된 정보를 바탕으로 명령어를 변경하거나 삽입하여 분석 방지 기술을 무효화한다.
도 2는 본 발명에서 제안하는 분석방지 기술 자동 우회 도구의 동작순서를 나타낸 그림이다.
ART를 사용하는 안드로이드에서는 설치 시에 DEX 파일들을 컴파일하여 OAT 파일을 생성한다. 본 발명에서는 이러한 컴파일된 OAT 파일을 대상으로 하며 JNI로 컴파일 된 코드뿐 아니라 동적 라이브러리들을 포함하여 CPU를 통해 직접 실행되는 모든 기계어 명령어들을 분석 대상으로 한다.
상기 심볼 추출기(130)에서는 안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 설치된 분석 대상 애플리케이션의 OAT 파일을 추출한다. 추출된 정보에는 컴파일된 모든 Dex파일에 대한 정보가 있다. oatdump는 각각의 Dex 파일 내에 있는 클래스, 클래스 내부의 메서드 등의 정보를 덤프해주고 심볼 추출기에서는 덤프된 정보를 바탕으로 문자열과 메서드에 관한 정보만을 추출한다.
분석하고자 하는 애플리케이션을 본 발명에서 제안하는 분석 방지 기술 자동 우회 도구로 래핑하여 실행하면 애플리케이션이 시작될 때 상기 실행 코드 관찰기(110)로 애플리케이션에서 실행하고자 하는 코드가 넘어온다. 상기 실행 코드 관찰기(110)는 넘어온 실행 코드를 해석하여 사람이 읽을 수 있는 수준으로 만든 후 상기 분석 방지 기술 인식기(150)에 넘겨준다. 이때 추출된 심볼정보를 바탕으로 실행하려는 코드에 대한 메타 데이터를 추가적으로 같이 제공한다.
상기 분석 방지 기술 인식기(150)는 앞서 상기 실행 코드 관찰기(110)에서 해석해준 정보를 참조하여 어떠한 함수가 실행되고, 어떠한 문자열이 사용되는지를 알 수 있으며 이를 분석 방지 기술 상기 데이터베이스(190)와 비교하여 분석 방지 기술의 적용 유무를 판단할 수 있다. 만약, 분석 방지 기술이 인식되었다면 인식된 정보와 우회할 방법에 대한 정보를 상기 실행 코드 수정기(170)에 전달한다.
상기 실행 코드 수정기(170)에서는 상기 분석 방지 기술 인식기(150)에서 넘어온 인식된 분석 방지 기술에 대한 정보와 우회방법에 대한 정보를 토대로 실행 명령어를 수정한다. 이렇게 수정된 명령어를 다시 상기 실행 코드 관찰기(110)를 통하여 변경사항을 적용한 후 안드로이드 프레임워크에 전달하여 수정된 명령어를 실행하도록 한다.
도 4는 심볼 추출기의 결과물의 일부인 OAT 파일로부터 추출한 메서드 정보에 대한 예시이다.
도 4를 참조하면, OAT 파일의 기준주소를 시작주소로 하여 메서드의 시작주소와 끝 주소, 메서드의 이름에 대한 정보를 가지고 있다. 메서드 이름의 제일 앞에는 해당 함수의 리턴 값에 대한 자료형이 명시되어 있기 때문에 손쉽게 해당 메서드의 결과를 유추할 수 있다.
이때 사용되는 메서드 이름과 리턴값의 자료형은 분석방지 기술을 인식하는데 중요한 정보로 사용된다. 대표적으로 난독화된 경우 심볼 추출기에서 추출한 문자열이 사람이 읽을 수 없는 문자열일 수 있는데 문자열을 리턴값으로 가지는 어떠한 난독화 함수의 결과값은 읽을 수 있는 문자열이 나오기 때문에 심볼정보와 동적 실행결과를 복합적으로 사용하여 분석 방지 기술을 인식하고 우회하여야 한다.
본 발명은 전처리 과정을 통해 애플리케이션을 설치하고, 필요한 정보들을 파싱한다. 그 후 설치된 애플리케이션을 프로세스 래핑 방식으로 계측 도구를 동작시켜 분석 방지 기술을 우회하며 애플리케이션을 실행한다. 계측 도구 구현은 동적 바이너리 계측 프레임워크를 활용할 수 있다. 대부분의 동적 바이너리 계측 프레임워크는 동적 바이너리 분석 도구를 손쉽게 구축할 수 있도록 지원하며 컴파일된 바이너리를 대상으로 계측 기능을 구현할 수 있도록 지원한다.
본 발명은 다양한 안드로이드에서 사용이 가능한 동적 바이너리 계측 프레임워크 중 Valgrind를 사용하여 구현하였다. 계측 도구는 전처리 과정에서 생성된 데이터베이스를 기반으로 분석 방지 기술을 자동으로 무효화하며 이렇게 무효화된 결과로 애플리케이션을 실행한다. 분석 도구가 모든 애플리케이션 실행 과정을 래핑하는 방식으로 동작하기 때문에 별도의 추가적인 디버깅 모듈 탑재 및 루팅, 에뮬레이터 수정 등의 추가적인 작업을 필요로 하지 않는다.
또한 분석 방지 기술들에 의해 탐지되는 환경일지라도 분석 환경 탐지 기능을 무효화하여 실제 사용자의 디바이스에서 실행한 결과와 같은 결과를 제공한다. 이때 실행된 애플리케이션의 명령어와 탐지된 분석 방지 기술들에 대한 정보는 로그 형태로 기록한다.
분석 방지 기술들은 애플리케이션의 환경을 검사하여 특정한 환경에서 동작하지 못하도록 하는 기술이다. 하지만 이러한 환경을 탐지하는 동작들 역시 코드의 형태로 되어 있으며 일반적으로 애플리케이션이 실행되기 전에 검사하는 방식으로 동작한다. 따라서, 애플리케이션이 실행되기까지의 전체 실행과정을 계측하면 분석 방지 기술들의 적용 여부를 알 수 있다.
이렇게 애플리케이션이 실행되기 이전에 어떠한 사전 동작을 하는지 탐지하여 분석 방지 기술의 적용 여부를 알 수 있기에 해당 루틴을 무효화하는 것으로 분석 방지 기술이 동작하지 못하도록 할 수 있다. 해당 루틴을 무효화 하기 위해서는 사용하는 문자열이나 메서드를 변경하여 탐지하고자 하는 환경을 정확하게 인식할 수 없도록 한다.
도 2를 참조하면, APK를 입력으로 받아 애플리케이션이 설치되면 APK의 DEX가 컴파일된 OAT 파일과 OAT 파일이 사용하는 동적 공유 라이브러리들이 존재하게 된다. OAT 파일에는 컴파일된 네이티브 실행 코드와 해당 코드가 사용하는 모든 심볼의 정보가 함께 매핑 되어있어 본 발명에 따라 OAT 파일을 사용하여 메서드와 문자열에 대한 메타 데이터를 추출한다.
일 실시예에서, Zygote를 통하여 실행하지 않고 제안 기법으로 래핑된 애플리케이션이 실행되면 제안 기법이 명령어를 가져와 앞서 추출한 정보를 바탕으로 명령어들에 정보를 입힌다. 그 후 명령어들을 검사하여 해당 명령어가 분석 방지 기술과 관련이 있는지를 시그니처 데이터베이스를 기반으로 검사한 후 만약 관련이 있는 경우에는 우회 작업을 거치게 된다. 이렇게 우회 작업이 완료한 코드는 다시 실행 가능한 네이티브 코드로 변환되어 실행되게 된다.
도 3은 본 발명의 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치의 세부 구조도이다.
도 3을 참조하면, 본 발명이 제안 기법은 크게 두 단계로 동작한다. 첫번째는 전처리 단계이며 두번째는 계측 단계이다.
먼저, 전처리 단계에서는 분석하고자 하는 애플리케이션의 설치된 정보를 바탕으로 필요한 메타 데이터를 추출하는 과정을 수행한다. 그 후 프로세스의 래핑을 수행하고 애플리케이션이 분석 도구 위에서 동작하도록 환경변수를 설정한다.
애플리케이션이 설치되는 시점에 ART는 dex2oat를 사용하여 OAT 파일을 생성하게 된다. OAT 파일의 네이티브 코드는 사전에 컴파일된 바이너리 형태로 CPU를 통해 직접 실행된다. DEX의 코드를 컴파일하였기에 OAT의 코드는 DEX의 코드의 동작과 유사하게 동작하며 컴파일된 코드이지만 심볼을 관리하는 DEX 파일의 정보에 접근하여 참조하는 방식을 사용한다.
따라서, OAT 파일의 실행 코드만으로는 메서드 이름과 사용하는 문자열과 같은 심볼 정보를 알 수 없다. 이러한 문제를 해결하기 위해 OAT 파일 내부에 있는 DEX 파일에 있는 정보를 전처리 과정에서 추출하여 분석 도구가 심볼들에 대한 정보를 손쉽게 참조할 수 있도록 한다.
안드로이드 내부에 있는 oatdump 도구를 사용하면 OAT 파일에서 모든 메서드와 문자열 정보 및 각각의 메서드에 매칭되는 바이트 코드와 컴파일된 네이티브 코드를 결과로 준다. 이 정보를 파싱하여 애플리케이션에서 사용되는 모든 메서드와 문자열 정보를 얻을 수 있으며 이것으로 메타 데이터를 생성한다.
oatdump의 결과로 출력된 모든 메서드 및 코드의 주소는 OAT 파일에 명시된 시작 주소를 기준으로 되어 있다. 이는 실제 프로세스에서 코드가 올라가는 주소와 같지 않기 때문에 해당 주소를 직접 사용하는 것이 아닌 오프셋(offset)을 사용한다. 오프셋을 기준으로 매핑 정보를 구축하면 애플리케이션이 실행될 때 프로그램 이미지가 메모리에 로드된 주소를 사용하여 실제 메서드의 시작 주소를 알 수 있다.
따라서, 메서드 메타 데이터 추출기(210)는 실행되는 메서드를 식별하기 위해 필요한 메타 데이터를 오프셋 기반으로 매핑 정보를 생성한다. 생성되는 매핑 정보는 도 4와 같다.
일반적으로 네이티브 코드는 일반적으로 라이브러리 루틴을 제외하고 컴파일시에 대부분의 정보가 결정되어 디스크립터와 같은 메타 데이터를 필요로 하지 않으며 목적 코드에 포함되어 있는 정보량이 적다는 특징이 있다. 하지만, 실제로 DEX 파일이 컴파일된 결과물인 OAT 파일 안에는 달빅 가상 머신에서 실행하는 것과 논리적으로 동일한 결과물을 제공하기 위해서 가상 머신에서 동작하는 것과 유사한 코드들이 포함되어 있다. 이러한 특징은 문자열의 경우 두드러지게 나타난다.
예를 들어, 리눅스에서 동작하는 일반적인 ELF 파일의 경우 문자열은 .rodata 영역에 매핑되어 있고 실행 시에 해당 영역의 주소의 정보를 직접 참조하는 것으로 문자열을 읽는다. 하지만 OAT 파일의 경우 문자열을 ID를 기반으로 접근한다. 각각의 문자열에는 고유한 ID가 할당되어 있고 DEX 파일은 이 고유한 ID를 사용하여 문자열을 구분한다.
OAT 파일의 네이티브 코드는 DEX 파일의 동작을 컴파일한 결과물이기 때문에 DEX 파일이 문자열을 참조하는 것과 동일한 방식으로 문자열을 고유한 ID를 사용하는 방식으로 관리한다. 따라서, 주소에 직접 접근하는 방식이 아닌 문자열 ID 를 사용하여 참조하는 방식을 사용한다는 차이점을 가진다. 이러한 차이점으로 인하여 실행 이전에 문자열 정보를 알기 위해서는 DEX 파일에 접근하여 ID를 검색하거나 사전에 각각의 ID에 매핑되는 문자열 정보를 알고 있어야 한다.
문자열 메타 데이터 추출기(230)는 동적으로 문자열 참조 과정을 모니터링하여 실제로 사용하는 문자열을 추출하기도 하지만 정적 분석 정보와 혼합하여 사용하기 위해 각각의 고유한 ID에 매핑 되는 문자열을 전처리 과정에서 메타 데이터로 추출한다.
단순히 분석 도구에서 애플리케이션의 MainActivity를 바로 호출하는 방법으로는 정상적으로 애플리케이션을 실행할 수 없다. 그 이유는 애플리케이션이 정상적으로 실행되기 위해 필요한 수많은 라이브러리와 프레임워크 코드들은 보통 Zygote를 통하여 로딩이 되기 때문이다. 하지만 Zygote를 사용하여 애플리케이션을 실행하게 되면 분석 도구가 프로세스에 대한 모든 제어권을 가져오기 힘들며 디버깅을 해야하는 경우에는 프레임워크나 애플리케이션에서 제공하는 별도의 디버깅 모듈을 필요로 한다.
이러한 추가적인 모듈을 사용하지 않으며 프로세스에 대한 제어권을 가져오기 위하여 안드로이드에서 애플리케이션 실행 이전에 별도의 프로그램을 동작할 수 있도록 제공하는 WrapperInit 모드를 사용한다. 환경 설정기(250)는 app_process의 WrapperInit 모드를 사용하면 사전에 정의된 Wrapper 프로세스를 먼저 실행시키고 애플리케이션 실행에 필요한 클래스들과 리소스들을 로딩한다. 이때 분석 도구가 별도의 실행 모듈을 가지고 있다면 스크립트를 통해 분석 도구에 필요한 명령어를 바로 전달함으로써 애플리케이션의 실행 과정에 대한 모든 제어권을 가지고 올 수 있게 된다.
도 5는 일반적인 애플리케이션 실행과 독자적인 실행 모듈을 가지고 있는 Wrapper를 통해 실행하였을 때의 모습을 나타낸 도면이다.
일반적인 WapperInit 모드를 사용하였을 경우에는 Preload Classes 로딩 이전에 래핑된 프로그램을 실행시키는 기능을 하게 되지만 별도의 실행 기능을 가지고 있는 프로그램을 래핑하면 도 5와 같이 app_process의 모든 동작에 대한 제어권을 가질 수 있다.
따라서, Wrapper가 동작하는데 필요한 분석에 필요한 코드들이 들어있는 Analyzer 모듈들을 먼저 로딩한 후 일반적인 Zygote의 실행 절차에 따라 app_process를 실행하고 그 후에 애플리케이션을 실행하는 방식을 사용하는 것으로 Zygote를 통하여 실행한 것과 논리적으로 동일한 결과를 얻을 수 있다.
래핑 과정을 통하여 app_process와 로딩되는 모든 라이브러리에 대한 제어권 역시 분석 도구가 가질 수 있다는 장점이 있으며 기존의 바이트 코드 수준의 계측에서는 할 수 없는 JNI 코드에 대한 계측 역시 가능하다. DexMonitor와 같이 바이트 코드 수준의 계측을 하는 경우, 달빅 가상 머신을 통해서 실행되는 명령어만을 계측할 수 있는데 JNI 코드의 경우 컴파일된 결과물인 네이티브 코드를 직접 실행하는 것으로 동작한다.
즉, 바이트 코드 수준의 계측은 JNI 코드를 포함한 애플리케이션이 사용하는 네이티브 코드를 계측할 수 없다는 단점이 있다. 바이트 코드 수준의 계측을 사용하는 경우 JNI 메서드의 호출 시점과 종료되어 리턴되는 결과만을 알 수 있다. 이렇게 호출 시점과 리턴되는 시점만을 알 경우 JNI 메서드가 호출된 후 어떠한 동작을 통하여 이러한 결과가 나오게 되는지에 대한 모든 과정이 Black-Box로 남게 된다.
하지만 애플리케이션이 실행되는데 필요한 과정 전체를 래핑하여 네이티브 수준의 계측을 진행 하는 것으로 JNI 코드를 비롯한 모든 네이티브 코드에 대한 계측을 가능하게 한다. 즉, 기존의 바이트 코드 수준의 계측에서 Black-Box로 남게 되는 부분을 모두 계측할 수 있으며 애플리케이션이 사용하는 모든 라이브러리 코드의 실행 흐름을 확인 할 수 있다는 장점을 가진다.
이뿐만 아니라 제안 기법을 래핑 방식을 통해 실행시키기 때문에 애플리케이션을 실행할 때 다른 분석 도구를 실행시키면 다른 분석 도구가 애플리케이션을 분석하면서 발생하는 환경적 특징을 제안 기법이 원천적으로 차단하여 분석 도구가 탐지되지 않도록 할 수 있다.
앞서 전처리 과정이 완료되면 애플리케이션은 Valgrind 기반의 계측 도구를 사용하여 실행한다. 본 발명의 계측 도구는 달빅 가상 머신이나 안드로이드 런타임의 도움 없이 리눅스 커널을 통해 직접 실행될 수 있다.
프로그램 실행에 관여하는 공간 관리(Space Manager) 모듈(300)과 에뮬레이션(Emulation) 모듈(700)은 스택, 힙 등 메모리 관리를 하면서 동시에 로딩과 링킹 과정을 담당하며 계측 결과에 따라 CPU에게 명령어를 전달하는 역할을 수행하게 된다. 즉, 입력 값으로 들어온 애플리케이션의 실제적인 실행을 담당하는 부분이다.
계측(Instrumentator) 모듈(500)은 실제 코드를 계측하고 필요에 따라 수정, 삭제하는 것으로 프로그램의 흐름을 관찰하고 제어하는 역할을 수행하는 부분이다. 이때 전처리 과정에서 생성된 메타 데이터를 활용하며 계측된 결과를 로그로 추출한다.
상기 공간 관리 모듈(300)과 상기 에뮬레이션 모듈(700)은 래핑된 애플리케이션이 실행되었을 때 계측에 필요한 라이브러리들을 로딩하고 app_process를 실행하는 것으로 애플리케이션 실행의 정상적인 흐름처럼 실행 과정을 제어하면서 실행하는 기능을 한다. app_process는 애플리케이션이 실행되기 전에 반드시 필요한 정상적인 과정으로 app_process를 통하여 애플리케이션을 실행하는 방식을 통하여 안드로이드 프레임워크 수정을 피하면서 동시에 애플리케이션에 대한 제어권을 가질 수 있게 된다.
상기 공간 관리 모듈(300)은 크게 로더 및 링커(Loader & Linker) 모듈(310)과 스택 관리(Stack Manager) 모듈(330) 및 힙 관리(Heap Manager) 모듈(350)로 구성되어 있다.
상기 로더 및 링커 모듈(310)은 프로그램의 실행에 필요한 라이브러리 로딩과 링킹에 대한 작업을 수행하며, 상기 스택 관리 모듈(330) 및 상기 힙 관리(Heap Manager) 모듈(350)은 app_process 및 애플리케이션에서 사용하는 공간들에 대한 관리를 수행한다. 해당 모듈을 통하여 계측과 분석에 필요한 모든 라이브러리들이 올라가게 되며 app_process의 실행부터 계측이 시작된다.
상기 에뮬레이션 모듈(700)은 아래에서 설명할 상기 에뮬레이션 모듈(700)의 결과를 토대로 프로그램을 실제로 실행하는 역할을 수행한다. 래핑을 통하여 애플리케이션을 실행하게 될 때 하나의 프로세스 내에서 분석 도구와 애플리케이션이 동시에 동작하기 때문에 서로의 결과가 영향을 미치지 못하도록 관리를 해야한다.
따라서, 상기 공간 관리 모듈(300)을 사용하여 가상의 스택과 힙을 만들어 애플리케이션의 동작을 저장하고, 시스템에서 할당해준 스택과 힙은 분석도구가 사용하게 된다. 이때 실제 연산은 CPU의 레지스터를 통하여 수행하게 되는데 서로 영향을 주지 않도록 주기적으로 CPU 레지스터들을 업데이트하는 역할을 수행한다.
이렇게 프로그램의 실행을 관리하는 상기 공간 관리 모듈(300)과 상기 에뮬레이션 모듈(700)은 동적 바이너리 계측 프레임워크를 활용하여 구현할 수 있다. 동적 바이너리 계측 프레임워크에는 상기 공간 관리 모듈(300)과 상기 에뮬레이션 모듈(700)에 해당하는 기능을 제공하기 때문에 이를 활용한다.
동적 계측 프레임 워크로 Valgrind를 사용하는 경우 스탠다드 라이브러리들을 사용하지 않고, Valgrind 자체적으로 모든 라이브러리 메서드들까지 구현하여 사용하기 때문에 커널 버전에 크게 영향을 받지 않으며 애플리케이션이 사용하는 모든 라이브러리들에 대한 공간까지 손쉽게 관리할 수 있다.
상기 계측 모듈(500)은 app_process 및 애플리케이션의 실제 코드를 계측하고 프로그램의 실행 흐름을 관리하는 모듈이다. 상기 계측 모듈(500)은 동작을 기준으로 모니터(Monitor) 모듈(510), 수정(Modifier) 모듈(530) 및 로그(Logger) 모듈(550)의 3가지 모듈로 나누어진다.
상기 모니터 모듈(510)은 코드 모니터 모듈(511)과 분석 방지 인식(Anti-analysis Recognizer) 모듈(513)로 이루어져 있는데 상기 코드 모니터 모듈(511)은 Valgrind의 VEX 모듈을 활용하여 구현하였다. 상기 코드 모니터 모듈(511)은 실행하고자 컴파일된 네이티브 코드를 IR로 번역하는 과정을 수행하며 IR들은 BB(Basic Block) 단위로 관리된다.
도 6은 Mov ebp, [esp + 16] 명령어를 IR로 변환한 것을 나타낸 도면이다. IR은 자체적으로 내부 임시 변수를 만들어서 사용하며 하나의 연산에 하나의 IR이 매핑된다. 따라서, 하나의 명령어는 명령어에 따라 다수의 명령어로 변환될 수 있다. IR에서 이용하는 GET/PUT IR의 괄호 안의 숫자는 CPU 아키텍처에 따라 차이가 있다. IMark 문장은 이 명령어의 주소와 길이를 저장하고 있으며 아래의 IR들은 각각 다음과 같다.
1. ESP 레지스터의 값을 t9에 저장한다.
2. t9에 16을 더한 후 t8에 저장한다
3. t8에 저장된 주소가 가리키는 값을 t10에 저장한다.
4. t10의 값을 EBP에 저장한다.
5. EIP에 다음 실행할 명령어의 주소를 넣는다.
BB(Basic Block)는 분기를 기준으로 하며 하나 이상의 BB가 모여 하나의 메서드를 이룬다. 반복문과 같은 조건문에서는 특정한 BB가 여러 번 실행될 수도 있으며 VEX에서는 하나의 BB를 생성한 후 이를 실행시키고 이전 BB의 결과 값에 따라 다음 BB를 생성한다.
도 7은 VEX에서 사용하는 베이직 블록(Basic Block)의 구조이다. 하나의 BB안에는 분기발생까지의 다수의 명령어들에 대응되는 IR 문장들이 들어있고 각각의 IR은 Tag로 구분된다. BB가 다음 BB를 찾기 위해서는 두 가지 방법이 존재한다. 분기하고자 하는 주소가 상수 값인 경우 해당 값을 다음 BB 시작 주소로 하며, 상수 값이 아닌 경우에는 해당 BB의 실행 결과를 임시 변수에 저장하고 해당 임시 변수의 결과값을 다음 BB의 시작 주소로 한다.
상기 분석 방지 기술 인식기(150)는 분석 방지 기술을 검사하는 기능을 수행한다. 시그니처를 기반으로 검사를 수행하는데 사용하는 시그니처에는 명령어가 사용하는 문자열, 현재 BB 또는 다음 BB의 메서드 명, 사용되는 라이브러리나 특정한 순서의 명령어 집합이 될 수 있다. 애플리케이션이 사용하려는 문자열과 호출하려는 메서드 명에 대한 정보는 앞서 만들어진 메타 데이터를 통하여 어떠한 메서드가 실행되는지, 어떠한 문자열을 사용하는지를 알 수 있다.
이를 사용하여 악성 애플리케이션이 사용하는 문자열, 메서드 명 등의 시그니처와 비교하여 분석 방지 기술을 탐지한다. 만약 분석 방지 기술이 탐지된다면 해당 분석 방지 기술의 우회 방법을 선택하고 해당 정보를 상기 실행 코드 수정기(170)에 전달한다. 이때 동적으로 문자열을 찾아오거나 문자열을 반환하는 메서드의 경우는 실행결과에 영향을 받기 때문에 정적으로 추출한 기존 메타 데이터만을 가지고는 알 수가 없다. 따라서, 문자열에 관한 동적 분석 기능이 추가로 필요하게 된다.
도 8은 OAT에서 사용하는 컴파일된 문자열의 구조이다. 이 엔트리는 문자열을 찾는 ART의 메서드를 실행한 결과 값 또는 Java/lang/String을 반환한 경우 EAX 레지스터가 가리키는 엔트리를 나타낸다. 한 엔트리는 24 바이트로 이루어져 있으며 8~11 바이트는 문자열의 기준 주소를 가리키고 있다.
boot.art 파일의 특정 부분 또는 ART가 사용하는 동적 공간을 가리키고 있으며 동적 공간을 가리키는 경우 문자열을 직접 가리키고 있고 boot.art 파일의 특정 부분을 가리키는 경우 오프셋을 통해 문자열의 위치를 찾아야 한다. 안드로이드에서 문자열은 아스키가 아닌 유니코드로 관리되기에 한 글자당 2바이트를 차지하고 있어 주소를 찾을 때에는 오프셋에 2를 곱하여 기준 주소에 더해 주어야한다.
이렇게 찾아낸 결과는 실제 문자열을 가리키고 있고 문자열 엔트리의 12~15 바이트에 저장되어있는 문자열 길이만큼 읽어서 문자열을 식별할 수 있다. 상기 수정 모듈(530)은 상기 모니터 모듈(510)에서 탐지된 분석 방지 기술을 우회하는 IR을 삽입하는 모듈이다.
IR을 변경하는 것으로 실제 명령어가 변경되기 때문에 프로그램은 이전과 다른 결과가 나오게 된다. 이렇게 IR을 통해 실행 흐름을 변경하는 방법은 크게 두 가지로 나눌 수 있다. 첫 번째는 명령어 대체부(533)을 통해 명령어에 조작을 가하는 방식이다. 명령어 사이에 추가적인 명령어를 IR로 만들어 삽입하거나 명령어에 저장된 상수 값을 바꾸는 방식을 통하여 명령어에 변경을 가할 수 있고 이를 통해 실행 흐름을 변경할 수 있다.
도 9는 상수 값 변경을 통한 IR 수정의 한 예시로 [cbz] 명령어를 IR로 번역한 내용이다. [cbz] 명령어는 0과 비교하여 분기를 결정하는 명령어인데 이때 0이라는 값을 1로 변경하는 것으로 동작이 변경된다. 두 번째는 레지스터 대체부(531)을 통해 레지스터에 변경을 가하는 방식이다. 일반적으로, 메서드의 리턴 값은 Intel CPU의 경우 EAX 또는 RAX 레지스터에 리턴 값이 저장되고 ARM CPU의 경우 R0~R3 레지스터에 리턴 값이 저장된다.
이때 리턴 값이 저장된 후 특정 레지스터의 값을 바꾸는 것으로 손쉽게 메서드의 리턴 값을 변경할 수 있다. 같은 방법으로 실행 이후에 레지스터 값을 변경하는 IR을 삽입하는 것으로 명령어의 실행 결과를 덮어쓸 수 있다.
도 10은 루팅을 탐지하는 기법 중 하나인 "su" 바이너리가 있는지 검사하는 방식을 구현한 메서드의 일부분이다. 해당 메서드가 실행될 때 기존에 있던 IR을 제거하고 EAX에 0을 삽입한 후 종료 명령어로 뛰도록 IR을 수정하는 것으로 해당 메서드를 후킹한 것과 동일한 기능을 할 수 있다.
종료 명령어는 현재 바이너리 파일에서 리턴 명령어를 찾는 방식으로 동작하는데 그 이유는 해당 명령어를 메모리에 쓴 뒤 실행하려면 메모리에 실행 권한이 필요한데 이때 발생할 수 있는 문제들일 피하기 위해서 기존 바이너리에 있는 명령어를 사용한다. ARM CPU의 경우 bx lr, Intel CPU의 경우 ret 명령어 등을 찾아 해당 주소로 분기한다.
이런 방식으로 시그니처를 통해 우회하고자 하는 대상이 정해지면 번역된 IR을 변경하는 방식을 통해 실행 흐름을 변경할 수 있다. 별도의 디버거나 가상 머신을 필요로 하지 않으며 프레임 워크 수정 없이 기존의 분석 방지 기술들을 우회할 수 있다. 또한, 분석 방지 기술의 코드 역시 계측 범위에 들어가기 때문에 계측이 되며 실행되는 대부분의 코드를 명령어 단위로 모니터링하여 애플리케이션의 동작을 기록하여 효과적으로 분석할 수 있다.
이하에서는 본 발명의 효과 검증을 위해 실험한 결과를 서술한다. 실험환경 구성 제안 기법은 Intel® Core?? i5-8500 3.00GHz CPU와 16GB 램을 사용하였고 운영체제로는 Ubuntu 18.04에서 진행하였다. 분석 방지 기술들의 인식 및 우회 기능 검증을 위해 에뮬레이터를 사용하여 실험하였으며 안드로이드 에뮬레이터는 Android 5.1 x86 운영체제와 Nexus5를 사용하였으며 1core 4GB 램을 사용하였다.
컴파일된 바이너리의 명령어 셋이 변경되어 결과에 영향을 줄 수 있을지도 모르는 x86 운영체제를 사용한 이유는 최신 안드로이드 스튜디오에서 성능 개선의 문제로 x86 에뮬레이터를 사용하도록 권장하기 때문에 실제 분석 환경과 최대한 유사한 환경을 맞추려고 하였기 때문이다.
실험 표본으로는 네트워크상에 유포된 적 있는 악성코드들을 대상으로 제안 기법의 성능을 평가하였다. 실험에 사용된 악성코드 데이터는 Argus group에서 제공하는 Android Malware Dataset(AMD)를 사용하였다. 이중 모든 악성코드에 대하여 실험을 진행하지 않고 사전에 분석되어 분석 방지 기술이 있을 것으로 추정되는 233개의 악성코드를 대상으로 실험을 진행하였다.
도 11은 본 발명의 제안 기법을 사용하여 탐지된 우회된 악성 애플리케이션의 분석 방지 기술의 시그니처 중 일부분을 나타낸 표이다.
각각의 APK마다 적용된 기법들이 달라 조금씩 시그니처들에 차이가 나타남을 알 수 있으며 "su", "/data/", "android.os.SystemProperties" 등의 루팅 탐지에 관련된 시그니처 뿐 아니라 "00000000000000", "Emulator" 같은 에뮬레이터 탐지 시그니처 등이 탐지됨을 알 수 있다.
도 12는 악성 애플리케이션에 적용되어 있는 안티-에뮬레이팅 코드의 일부분이다. 해당 악성 애플리케이션은 SMS, MMS, 통화기록 등의 정보를 탈취하는 악성 행위를 하며 카드번호, 유효기간, CVC 번호를 탈취한다. 해당 악성 애플리케이션의 메서드가 에뮬레이터를 탐지하는 방법은 다음과 같다.
getSystemService를 호출하여 현재 기기의 정보를 가져온 후 "00000000000000"로 되어 있는지 검사한다. 에뮬레이터의 경우 ID가 "00000000000000"으로 설정되기에 이것을 탐지하는 방법이며, 아래는 빌드 정보를 바탕으로 에뮬레이터에서 발견되는 시그니처들을 검사한다. 만약 한가지라도 탐지되면 에뮬레이터라고 인식하는 방식으로 동작하는 메서드이다.
해당 메서드는 식별자 변환이 적용되어 메서드의 이름을 식별할 수 없도록 되어 있어 메서드 이름을 기반으로 탐지를 할 수 없으며, 사용하는 문자열 시그니처를 탐지하여 이 메서드를 안티-에뮬레이팅 메서드라고 판단하였다.
도 13은 안티-에뮬레이팅으로 판단된 메서드가 사용하는 문자열들은 시그니처로 인식하여 해당 문자열을 ART를 통해 리졸빙(Resolving)되는 시점에 다른 문자열로 치환된 결과를 나타내는 로그의 일부분이다. "Emulator"라는 문자열의 일부분을 다른 문자로 치환하여 사용하고 사용한 이후에는 원래의 문자열로 되돌려 놓는다. 이렇게 정상적으로 시그니처를 인식하지 못하게 하여 안티-에뮬레이터가 에뮬레이터를 탐지하지 못하도록 한다.
도 14는 악성 애플리케이션이 정보를 탈취하기 위해 동작하는 코드의 일부분이다. 이 코드는 에뮬레이터를 탐지할 경우 동작하지 않고 종료되며 에뮬레이터를 탐지하지 못한 경우에만 동작한다. 해당 메서드는 SMS 정보 또는 카드 정보를 JSON을 사용하여 특정 URL로 보내는 동작을 수행한다.
본 발명에서 우회 기능을 제거한 경우 6145164 byte의 로그가 추출되었으며 해당 로그에 는 정보 탈취 코드가 호출되지 않은 반면 우회 기능까지 포함된 제안 기법을 통하여 로그를 추출하면 6221688 byte 크기의 로그가 추출되며 정보 탈취 코드의 메서드가 동작한 것을 확인할 수 있다.
도 15는 우회 기능으로 인해 해당 메서드가 동작하여 로그에 차이가 발생하는 것을 나타낸 도면이다.
도 15의 좌측은 우회 기능을 적용하지 않고 애플리케이션을 모니터링만 하였을 때 어떠한 악성 행위도 하지 않는다는 것을 나타낸 반면, 우측은 우회 기능을 통해 안티-에뮬레이팅 기법을 무효화 하면 실행이 종료되어야 하는 시점이지만 악성 행위를 하는 코드들이 동작하는 것을 알 수 있다.
도 15의 두번째 문단을 보면 i.run() 이라는 메서드가 동작하는 것을 알 수 있는데 이 메서드는 도 14에서 언급한 메서드와 동일한 메서드로 개인 정보를 탈취하는 행위를 하는 메서드이다. 따라서, 에뮬레이터를 탐지하는 경우 악성 행위를 하지 않지만 에뮬레이터를 탐지하지 못하는 경우 악성 행위를 수행하는 것을 알 수 있다.
이를 통해 악성 애플리케이션들 중 분석 방지 기술들을 사용하여 스스로 분석되지 않도록 하는 악성 애플리케이션이 존재한다는 것을 알 수 있으며 본 발명의 제안 기법을 사용하였을 때 이러한 악성 애플리케이션의 분석 방지 기술을 무효화하여 악성 행위를 하도록 강제할 수 있다는 것을 보였다. 이를 활용하면 악성 애플리케이션이지만 악성으로 분류되지 않는 애플리케이션들을 효율적으로 분석할 수 있다.
본 발명의 성능 오버헤드를 측정하기 위해서 SciMark2[선행기술문헌의 비특허문헌 1] 벤치마크 애플리케이션을 사용하였다. SciMark2는 과학 및 엔지니어링 애플리케이션에서 발생하는 성능을 측정하는 벤치마크로 JVM, JIT이 벤치마크로 주어지는 알고리즘들을 얼마나 잘 수행하는지 표시해준다. SciMark2는 결과를 Mflops(Millions of floating point operations per second)로 나타내 주며 이는 단위 시간 동안 얼마나 많은 실수 연산을 수행가능한지를 의미한다.
도 16은 본 발명의 성능 오버헤드의 측정 결과를 나타낸 도면이다.
수치가 높을수록 단위 시간 당 많은 연산이 가능하다는 것을 의미하기 때문에 수치가 낮을 수록 많은 실행 오버헤드가 발생했다고 해석할 수 있다. 본 발명의 경우 3~7배 정도의 오버헤드가 발생하는 것을 알 수 있다.
본 발명의 제안 기법과 유사한 방식의 분석 도구인 DexMonitor[선행기술문헌의 비특허문헌 2]의 경우 동일한 벤치마크를 사용하였을 때 약 40 배에서 많게는 70 배 가량의 오버헤드가 발생하는 것에 비하면 약 12 배 가량 빠르게 동작함을 알 수 있다.
본 발명의 실행 속도에 대한 오버헤드의 측정결과, 일반 실행은 2.018 Seconds, 본 발명에 따른 로그 없이 실행은 18.297 Seconds, 그리고 본 발명에 따라 전체 로그 실행은 29.403 Seconds 였다.
오버헤드는 애플리케이션이 시작되기까지의 시간을 측정하였으며 229 개의 악성코드를 측정한 후 결과의 평균을 사용하였다. 특수한 경우를 제외하고 조금 더 정확한 결과를 위해 상위/하위 5 %씩을 제외하고 평균을 계산하였다. 모든 명령어에 대한 정보를 로그로 추출한 경우와 별도의 로그 추출 없이 우회 및 실행을 목표로 한 경우의 오버헤드는 각각 14.5 배와 9 배에 달한다.
특히, 일반적인 애플리케이션을 실행 하였을 때에 에뮬레이터에서 실험을 수행하였기 때문에 에뮬레이터가 탐지가 되어 악성 행위를 하지 않고 바로 종료하는 모습을 볼 수 있다. 따라서, 배수로 보았을 때는 어느정도 차이가 나는 것으로 보이지만 본 발명의 제안 기법 없이 실행한 결과와 본 발명의 제안 기법을 통해 실험한 결과에는 차이가 있다.
전체 실행 명령어를 로그로 남기는 경우와 별도의 명령어를 로그로 남기지 않는 경우를 비교하였을 때 약 11 초의 추가적인 I/O 오버헤드가 발생하며, 이는 필요에 따라 기능을 선택적으로 사용할 수 있어 실제로 실행 속도 오버헤드는 약 9 배 정도 발생한다. 마찬가지로, DexMonitor의 경우 약 100 배의 오버헤드가 발생하였는데 이에 비교하면 매우 빠르다는 것을 알 수 있다.
기존의 분석 도구들은 프레임워크나 에뮬레이터 소스코드의 수정하는 방식을 사용하거나 분석 도구가 프로세스에 Attach하는 방식을 사용한다. 이러한 방식의 경우 분석 방지 기술들에 의해 탐지되고 분석 도구가 무력화 되거나 분석 범위가 제한된다는 단점을 가지게 된다. 이러한 단점은 분석 방지 기술이 적용된 악성 애플리케이션을 분석하지 못해 빠르게 진화하는 악성 애플리케이션에 신속한 대응이 어렵다는 것을 의미한다.
본 발명에서는 분석 도구를 래핑하는 방식으로 ART에서 사용하는 네이티브 코드를 명령어 단위로 계측하여 기존의 분석 방지 기술을 우회하는 기법을 제안하였다. 분석 방지 기술들에 대한 시그니처를 데이터베이스로 관리하여 한번 분석이 진행된 기법에 대해서는 추가적인 작업 없이 바로 적용이 가능하다는 특징이 있으며 안드로이드 시스템 또는 애플리케이션의 수정 없이 범용적으로 사용할 수 있다는 장점이 있다.
본 발명의 제안 기법은 기존의 분석 방지 기술들에 저항성을 가져 분석 대상 애플리케이션을 효율적으로 분석할 수 있는 환경을 제공하여 이를 통해 빠르게 생성되고 진화하는 악성 애플리케이션에 대해 신속한 대응이 가능하도록 한다.
도 17은 본 발명의 일 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법의 흐름도이다.
본 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은, 도 1 및 도 2의 장치(10)와 실질적으로 동일한 구성에서 진행될 수 있다. 따라서, 도 1 및 도 2의 장치(10)와 동일한 구성요소는 동일한 도면부호를 부여하고, 반복되는 설명은 생략한다.
또한, 본 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은 네이티브 코드 분석방지 우회를 위한 프로세스 래핑을 수행하기 위한 소프트웨어(애플리케이션)에 의해 실행될 수 있다.
도 17을 참조하면, 본 실시예에 따른 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은, 애플리케이션이 시작될 때 애플리케이션에서 실행하고자 하는 실행 명령어를 안드로이드 프레임워크로부터 전달받는다(단계 S10).
이 경우, 실행하고자 컴파일된 네이티브 코드를 IR로 번역하는 과정을 수행하며 IR들은 BB(Basic Block) 단위로 관리할 수 있다.
안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 컴파일된 OAT 파일로부터 문자열과 메서드에 대한 메타 데이터를 추출한다(단계 S20).
전달된 실행 명령어 및 추출된 메타 데이터를 기초로 DB의 정보와 비교하여 분석 방지 기술이 적용되어 있는지 판별한다(단계 S30).
이 경우, 명령어가 사용하는 문자열, 현재 BB 또는 다음 BB의 메서드 명 및 사용되는 라이브러리나 특정한 순서의 명령어 집합을 포함하는 시그니처를 데이터베이스에 저장된 악성 애플리케이션이 사용하는 문자열 및 메서드 명을 포함하는 시그니처와 비교하여 분석 방지 기술을 탐지할 수 있다.
분석 방지 기술이 적용되어 있는 경우(단계 S40), 판별된 정보를 기초로 실행 명령어를 수정한다(단계 S50).
일 실시예에서, 명령어 사이에 추가적인 명령어를 IR로 만들어 삽입하거나 명령어에 저장된 상수 값을 변경하여 명령어의 실행 흐름을 변경할 수 있다.
다른 실시예에서, 메서드의 리턴 값이 저장된 후 특정 레지스터의 값을 변경하거나 실행 이후에 레지스터 값을 변경하는 IR을 삽입하여 명령어의 실행 흐름을 변경할 수 있다.
수정된 실행 명령어를 다시 안드로이드 프레임워크로 전달한다(단계 S60).
일 실시예에서, 본 발명은 분석하고자 하는 애플리케이션의 설치된 정보를 기초로 필요한 메타 데이터를 추출하는 전처리 단계를 더 포함할 수 있다.
상기 메타 데이터를 추출하는 전처리 단계는, 실행되는 메서드를 식별하기 위해 필요한 메타 데이터를 오프셋(offset) 기반으로 매핑 정보를 생성하는 단계, 각각의 고유한 ID에 매핑 되는 문자열을 메타 데이터로 추출하는 단계 및 사전에 정의된 래핑(Wrapper) 프로세스를 먼저 실행시키고 애플리케이션 실행에 필요한 클래스들과 리소스들을 로딩하는 단계를 포함할 수 있다.
본 발명의 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법에 따르면, 기존 분석 시스템을 사용하기 어렵게 만드는 분석 방지 기술들을 우회하여 프로그램을 실행시킬 수 있는 환경을 만들어줌으로써 기존 분석 시스템으로도 분석 방지 기술들이 적용된 악성 애플리케이션들을 손쉽게 분석할 수 있도록 한다. 또한, 기존의 악성 애플리케이션뿐 아니라 새로운 악성 애플리케이션에 대한 대응 시간을 단축시킬 수 있다.
이와 같은, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법은 애플리케이션으로 구현되거나 다양한 컴퓨터 구성요소를 통하여 수행될 수 있는 프로그램 명령어의 형태로 구현되어 컴퓨터 판독 가능한 기록 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능한 기록 매체는 프로그램 명령어, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다.
상기 컴퓨터 판독 가능한 기록 매체에 기록되는 프로그램 명령어는 본 발명을 위하여 특별히 설계되고 구성된 것들이거니와 컴퓨터 소프트웨어 분야의 당업자에게 공지되어 사용 가능한 것일 수도 있다.
컴퓨터 판독 가능한 기록 매체의 예에는, 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체, CD-ROM, DVD와 같은 광기록 매체, 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 ROM, RAM, 플래시 메모리 등과 같은 프로그램 명령어를 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다.
프로그램 명령어의 예에는, 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드도 포함된다. 상기 하드웨어 장치는 본 발명에 따른 처리를 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상에서는 실시예들을 참조하여 설명하였지만, 해당 기술 분야의 숙련된 당업자는 하기의 특허 청구의 범위에 기재된 본 발명의 사상 및 영역으로부터 벗어나지 않는 범위 내에서 본 발명을 다양하게 수정 및 변경시킬 수 있음을 이해할 수 있을 것이다.
IoT 시대에 접어들면서 수백억의 IoT 디바이스들이 널리 보급되어 활용되고 있다. 이러한 IoT 디바이스들을 연결하는데 중심이 되는 스마트폰은 다수의 센서들과 통신하면서 사용자 중심 서비스를 제공하는데 핵심 역할을 하고 있다. 사용자는 스마트폰을 통하여 수많은 업무를 편리하게 처리하고 있는데 그만큼 스마트폰에는 다양한 개인 정보가 저장되고 활용되고 있다.
본 발명은 프로세스 래핑을 통하여 ART에서 사용하는 OAT 파일의 네이티브 코드를 명령어 수준으로 계측하여 분석 방지 기술들을 무효화 할 수 있는 기법을 제안한다. 본 발명은 안드로이드 프레임워크의 수정 없이 현재까지 개발된 다양한 분석 방지 기술들에 저항성을 가지며 효과적으로 애플리케이션을 분석할 수 있는 환경을 제공하므로, 스마트폰 시장에 유용하게 활용될 수 있을 것으로 예상된다.
10: 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치
110: 실행 코드 관찰기
130: 심볼 추출기
150: 분석 방지 기술 인식기
170: 실행 코드 수정기
190: 데이터베이스
210: 메서드 메타 데이터 추출기
230: 문자열 메타 데이터 추출기
250: 환경 설정기
300: 공간 관리 모듈
310: 로더 및 링커 모듈
330: 스택 관리 모듈
350: 힙 관리 모듈
500: 계측 모듈
510: 모니터 모듈
511: 코드 모니터 모듈
513: 분석 방지 인식 모듈
530: 수정 모듈
531: 레지스터 대체부
533: 명령어 대체부
550: 로그 모듈
700: 에뮬레이션 모듈

Claims (16)

  1. 애플리케이션이 시작될 때 애플리케이션에서 실행하고자 하는 실행 명령어를안드로이드 프레임워크로부터 전달받는 단계;
    안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 컴파일된 OAT 파일로부터 문자열과 메서드에 대한 메타 데이터를 추출하는 단계;
    전달된 실행 명령어 및 추출된 메타 데이터를 기초로 DB의 정보와 비교하여분석 방지 기술이 적용되어 있는지 판별하는 단계;
    분석 방지 기술이 적용되어 있는 경우 판별된 정보를 기초로 실행 명령어를수정하는 단계;
    수정된 실행 명령어를 다시 안드로이드 프레임워크로 전달하는 단계를 포함하며, 분석하고자 하는 애플리케이션의 설치된 정보를 기초로 필요한 메타 데이터를 추출하는 전처리 단계;를 더 포함하고,
    상기 메타 데이터를 추출하는 전처리 단계는,
    실행되는 메서드를 식별하기 위해 필요한 메타 데이터를 오프셋(offset) 기반으로 매핑 정보를 생성하는 단계;
    각각의 고유한 ID에 매핑 되는 문자열을 메타 데이터로 추출하는 단계; 및
    사전에 정의된 래핑(Wrapper) 프로세스를 먼저 실행시키고 애플리케이션 실행에 필요한 클래스들과 리소스들을 로딩하는 단계;를 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법.
  2. 삭제
  3. 삭제
  4. 제1항에 있어서, 상기 실행 명령어를 안드로이드 프레임워크로부터 전달받는 단계는,
    실행하고자 컴파일된 네이티브 코드를 IR로 번역하는 과정을 수행하며 IR들은 BB(Basic Block) 단위로 관리하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법.
  5. 제4항에 있어서, 상기 분석 방지 기술이 적용되어 있는지 판별하는 단계는,
    명령어가 사용하는 문자열, 현재 BB 또는 다음 BB의 메서드 명 및 사용되는 라이브러리나 특정한 순서의 명령어 집합을 포함하는 시그니처를 데이터베이스에 저장된 악성 애플리케이션이 사용하는 문자열 및 메서드 명을 포함하는 시그니처와 비교하여 분석 방지 기술을 탐지하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법.
  6. 제1항에 있어서, 상기 판별된 정보를 기초로 실행 명령어를 수정하는 단계는,
    명령어 사이에 추가적인 명령어를 IR로 만들어 삽입하거나 명령어에 저장된 상수 값을 변경하여 명령어의 실행 흐름을 변경하는 단계;를 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법.
  7. 제1항에 있어서, 상기 판별된 정보를 기초로 실행 명령어를 수정하는 단계는,
    메서드의 리턴 값이 저장된 후 특정 레지스터의 값을 변경하거나 실행 이후에 레지스터 값을 변경하는 IR을 삽입하여 명령어의 실행 흐름을 변경하는 단계;를 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법.
  8. 제1항에 따른 상기 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법을 수행하기 위한 컴퓨터 프로그램이 기록된 컴퓨터로 판독 가능한 저장 매체.
  9. 애플리케이션이 시작될 때 애플리케이션에서 실행하고자 하는 실행 명령어를안드로이드 프레임워크로부터 전달받고, 수정된 실행 명령어를 다시 안드로이드 프레임워크로 전달하는 실행 코드 관찰기;
    안드로이드 프레임워크 내부에 존재하는 oatdump 도구를 사용하여 컴파일된 OAT 파일로부터 문자열과 메서드에 대한 메타 데이터를 추출하는 심볼 추출기;
    상기 실행 코드 관찰기에서 전달된 실행 명령어 및 상기 심볼 추출기에서 추출된 메타 데이터를 기초로 DB의 정보와 비교하여 분석 방지 기술이 적용되어 있는지 판별하는 분석 방지 기술 인식기; 및
    상기 분석 방지 기술 인식기에서 판별된 정보를 기초로 분석 방지 기술이 적용되어 있는 실행 명령어를 수정하여 상기 실행 코드 관찰기에 전달하는 실행 코드수정기;를 포함하며,
    상기 심볼 추출기는,
    실행되는 메서드를 식별하기 위해 필요한 메타 데이터를 오프셋(offset) 기반으로 매핑 정보를 생성하는 메서드 메타 데이터 추출기;
    각각의 고유한 ID에 매핑 되는 문자열을 전처리 과정에서 메타 데이터로 추출하는 문자열 메타 데이터 추출기; 및
    사전에 정의된 래핑(Wrapper) 프로세스를 먼저 실행시키고 애플리케이션 실행에 필요한 클래스들과 리소스들을 로딩하는 환경 설정기;를 포함하는,네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
  10. 삭제
  11. 제9항에 있어서,
    메모리 관리 및 로딩과 링킹 과정을 담당하며 계측 결과에 따라 CPU에게 명령어를 전달하는 역할을 수행하는 공간 관리(Space Manager) 모듈 및 에뮬레이션(Emulation) 모듈을 더 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
  12. 제11항에 있어서, 상기 공간 관리 모듈은,
    프로그램의 실행에 필요한 라이브러리 로딩과 링킹에 대한 작업을 수행하는 로더 및 링커(Loader & Linker) 모듈; 및
    app_process 및 애플리케이션에서 사용하는 공간들에 대한 관리를 수행하는 스택 관리(Stack Manager) 모듈과 힙 관리(Heap Manager) 모듈;을 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
  13. 제9항에 있어서, 상기 실행 코드 관찰기는,
    실행하고자 컴파일된 네이티브 코드를 IR로 번역하는 과정을 수행하며 IR들은 BB(Basic Block) 단위로 관리하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
  14. 제13항에 있어서, 상기 분석 방지 기술 인식기는,
    명령어가 사용하는 문자열, 현재 BB 또는 다음 BB의 메서드 명 및 사용되는 라이브러리나 특정한 순서의 명령어 집합을 포함하는 시그니처를 데이터베이스에 저장된 악성 애플리케이션이 사용하는 문자열 및 메서드 명을 포함하는 시그니처와 비교하여 분석 방지 기술을 탐지하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
  15. 제9항에 있어서, 상기 실행 코드 수정기는,
    명령어 사이에 추가적인 명령어를 IR로 만들어 삽입하거나 명령어에 저장된 상수 값을 변경하여 명령어의 실행 흐름을 변경하는 명령어 대체부;를 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
  16. 제9항에 있어서, 상기 실행 코드 수정기는,
    메서드의 리턴 값이 저장된 후 특정 레지스터의 값을 변경하거나 실행 이후에 레지스터 값을 변경하는 IR을 삽입하여 명령어의 실행 흐름을 변경하는 레지스터 대체부;를 포함하는, 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 장치.
KR1020200161386A 2020-11-26 2020-11-26 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치 KR102271273B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020200161386A KR102271273B1 (ko) 2020-11-26 2020-11-26 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치
PCT/KR2021/001131 WO2022114391A1 (ko) 2020-11-26 2021-01-28 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치
US17/287,056 US11886589B2 (en) 2020-11-26 2021-01-28 Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020200161386A KR102271273B1 (ko) 2020-11-26 2020-11-26 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치

Publications (1)

Publication Number Publication Date
KR102271273B1 true KR102271273B1 (ko) 2021-06-29

Family

ID=76626287

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200161386A KR102271273B1 (ko) 2020-11-26 2020-11-26 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치

Country Status (2)

Country Link
KR (1) KR102271273B1 (ko)
WO (1) WO2022114391A1 (ko)

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101602881B1 (ko) 2015-01-19 2016-03-21 한국인터넷진흥원 분석 회피형 악성 코드 탐지 시스템 및 방법
KR101920597B1 (ko) * 2017-11-16 2018-11-21 숭실대학교산학협력단 동적 코드 추출 기반 자동 분석 방지 우회 및 코드 로직 해석 장치
KR101976992B1 (ko) 2017-11-16 2019-05-10 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법
KR20190090810A (ko) * 2016-12-05 2019-08-02 나그라비젼 에스에이 셀프 디버깅

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101803890B1 (ko) * 2017-01-18 2017-12-04 한국인터넷진흥원 분석 회피형 악성 앱 탐지 방법 및 장치

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101602881B1 (ko) 2015-01-19 2016-03-21 한국인터넷진흥원 분석 회피형 악성 코드 탐지 시스템 및 방법
KR20190090810A (ko) * 2016-12-05 2019-08-02 나그라비젼 에스에이 셀프 디버깅
KR101920597B1 (ko) * 2017-11-16 2018-11-21 숭실대학교산학협력단 동적 코드 추출 기반 자동 분석 방지 우회 및 코드 로직 해석 장치
KR101976992B1 (ko) 2017-11-16 2019-05-10 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법

Non-Patent Citations (4)

* Cited by examiner, † Cited by third party
Title
Geonbae Na et al, "Comparative Analysis of Mobile App Reverse Engineering Methods on Dalvik and ART", Journal of Internet Services and Information Security , Vol. 6, No. 3, pp. 27-39(2016.08.) *
H. Cho, J. H. Yi, and G. J. Ahn, "DexMonitor: Dynamically Analyzing and Monitoring Obfuscated Android Applications," IEEE Access, vol. 6, pp. 71229-71240, 2018.
SciMark2, https://math.nist.gov/scimark2/about.html, Access On : Oct, 2020.
이선준 외, "지능형 악성코드 분석을 위한 안티리버싱 코드 우회 프레임워크 설계 및 구현", 2018년 추계학술발표대회 논문집 제25권 제2호(2018.11.) *

Also Published As

Publication number Publication date
WO2022114391A1 (ko) 2022-06-02

Similar Documents

Publication Publication Date Title
EP3491569B1 (en) Updating virtual memory addresses of target application functionalities for an updated version of application binary code
US10698668B1 (en) Custom code transformations during compilation process
Nanda et al. BIRD: Binary interpretation using runtime disassembly
US20050108562A1 (en) Technique for detecting executable malicious code using a combination of static and dynamic analyses
US7805717B1 (en) Pre-computed dynamic instrumentation
Stüttgen et al. Robust Linux memory acquisition with minimal target impact
US10599558B1 (en) System and method for identifying inputs to trigger software bugs
CN109388946B (zh) 恶意进程检测方法、装置、电子设备及存储介质
CN109255235B (zh) 基于用户态沙箱的移动应用第三方库隔离方法
US20060277371A1 (en) System and method to instrument references to shared memory
US10983923B2 (en) Dynamic memory protection
CN115659333A (zh) 一种基于二进制插桩的沙箱、内存隔离方法及存储介质
US11868465B2 (en) Binary image stack cookie protection
KR102271273B1 (ko) 네이티브 코드 분석방지 우회를 위한 프로세스 래핑 방법, 이를 수행하기 위한 기록 매체 및 장치
Jianming et al. PVDF: An automatic patch-based vulnerability description and fuzzing method
CN109426546B (zh) 应用启动方法及装置、计算机存储介质及设备
US11886589B2 (en) Process wrapping method for evading anti-analysis of native codes, recording medium and device for performing the method
CN114443418A (zh) 一种基于硬件虚拟化的riscv内存溢出漏洞检测方法及装置
Jiang et al. CrackDex: Universal and automatic DEX extraction method
CN110096888A (zh) 一种加快验证及分析smm安全隐患的方法及系统
Li et al. Dynamic and adaptive calling context encoding
Pan et al. Lightweight and Efficient Hypervisor-Based Dynamic Binary Instrumentation and Analysis Method
Yin et al. PAST: accurate instrumentation on fully optimized program
Yu Vulnerability detection on web browsers
CN117034278A (zh) 漏洞检测方法、装置、存储介质及电子设备

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant