KR20170089859A - 애플리케이션 무결성의 검증을 제공하기 위한 방법 및 디바이스 - Google Patents

애플리케이션 무결성의 검증을 제공하기 위한 방법 및 디바이스 Download PDF

Info

Publication number
KR20170089859A
KR20170089859A KR1020177014521A KR20177014521A KR20170089859A KR 20170089859 A KR20170089859 A KR 20170089859A KR 1020177014521 A KR1020177014521 A KR 1020177014521A KR 20177014521 A KR20177014521 A KR 20177014521A KR 20170089859 A KR20170089859 A KR 20170089859A
Authority
KR
South Korea
Prior art keywords
application
checksum
modified
code
signature
Prior art date
Application number
KR1020177014521A
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 톰슨 라이센싱
Publication of KR20170089859A publication Critical patent/KR20170089859A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/07Responding to the occurrence of a fault, e.g. fault tolerance
    • G06F11/08Error detection or correction by redundancy in data representation, e.g. by using checking codes
    • G06F11/10Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's
    • G06F11/1004Adding special bits or symbols to the coded information, e.g. parity check, casting out 9's or 11's to protect a block of data words, e.g. CRC or checksum
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/60Protecting data
    • G06F21/64Protecting data integrity, e.g. using checksums, certificates or signatures
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L9/00Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols
    • H04L9/32Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials
    • H04L9/3263Cryptographic mechanisms or cryptographic arrangements for secret or secure communications; Network security protocols including means for verifying the identity or authority of a user of the system or for message authentication, e.g. authorization, entity authentication, data integrity or data verification, non-repudiation, key authentication or verification of credentials involving certificates, e.g. public key certificate [PKC] or attribute certificate [AC]; Public key infrastructure [PKI] arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Security & Cryptography (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Quality & Reliability (AREA)
  • Bioethics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Stored Programmes (AREA)
  • Storage Device Security (AREA)
  • Detection And Correction Of Errors (AREA)

Abstract

디바이스 (110) 는 애플리케이션에 대한 APK 파일을 수신하고 (S302), 그 동안 코드가 수정된다 (S306). 수정된 코드에 대한 체크섬은 디바이스 (110) 의 OS (210) 내의 신뢰된 엔티티 (214) 의 서명 키 (215) 를 사용하여 생성되고 (S308) 서명된다 (S310). 서명된 체크섬 및 서명 키에 대한 인증서 (216) 는 메모리 (112) 내의 예비 공간 (226, 228) 에 저장된다 (S312). 수정된 애플리케이션은 이후 실행될 수 있고 (S314), 그 동안 애플리케이션 (220) 의 라이브러리 (230) 내의 무결성 검증 모듈 (232) 이 수정된 애플리케이션의 무결성을 검증할 수 있다. 이 솔루션은, 설치 중에 DEX가 ODEX로 최적화되거나 서명이 없는 ELF로 컴파일되기 때문에 안드로이드 OS를 사용하는 디바이스에 특히 적합하다.

Description

애플리케이션 무결성의 검증을 제공하기 위한 방법 및 디바이스{METHOD AND DEVICE FOR PROVIDING VERIFYING APPLICATION INTEGRITY}
본 개시는 일반적으로 컴퓨터 시스템들에 관한 것이고, 보다 구체적으로, 이러한 시스템들에서의 소프트웨어 코드의 무결성에 관한 것이다.
본 섹션은 아래 설명되고 및/또는 청구된 본 개시의 여러 양태들에 관련될 수도 있는 당해 기술의 여러 양태들을 독자에게 도입하도록 의도된다. 본 설명은 본 개시의 여러 양태들의 보다 나은 이해를 용이하게 하기 위해 백그라운드 정보를 독자에게 제공하는데 있어 도움이 될 것으로 믿는다. 따라서, 이들 명세서들은 이러한 견지에서 읽혀져야 하며 종래 기술의 인정으로서 간주되지 않음을 이해하여야 한다.
여러 이유로, 프로세싱 디바이스들이 도용되지 않은 소프트웨어를 실행하는 것을 보장하는 것이 종종 바람직하다. 이를 위해, 상이한 기법들이 도용 공격들에 대항하여 소프트웨어 이미지를 보호하는데 이용될 수 있다. 대부분의 일반 기법은 서명 또는 체크섬을 코드 세그먼트들 상에서 연산한 다음, 나중 단계에서 서명 또는 체크섬을 검증하는 것이다. 암호화 서명의 생성이 개인 키 및 대응하는 공개 키에 대한 서명의 검증을 요구하는 반면, 체크섬들은 일반적으로 어떠한 시크릿 없이 연산되어 검증된다.
체크섬 기반 보호의 일 예는 윈도우즈 오퍼레이팅 시스템에 이용되는 포터블 실행가능 (Portable Executable; PE) 포맷에 대한 CRC32 이다. PE 헤더는 대응하는 코드 섹션의 체크섬을 제공하는 CRC32 필드를 포함한다. 보호를 성공적으로 우회시키기 위해, 공격자는 먼저 코드 섹션을 수정한 다음, 수정된 코드 섹션 상에서 연산된 새로운 값으로 오리지널 체크섬을 대체시킨다. 이 유형의 공격은 공격자가 수정된 코드 섹션들의 체크섬들을 업데이트하기 위해 어떠한 시크릿도 필요로 하지 않기 때문에 가능해진다.
체크섬들의 취약성을 고려하여, 암호화 서명들은 선호되는 솔루션이다. 서명의 생성은 코드 배포 전에 수행되고, 개인 (및 이에 따라 시크릿) 키를 이용한다. 연관된 공개 키는 코드에 첨부되고 이후에, 코드의 설치시 또는 런타임 시에 코드 무결성을 체크하는데 이용된다. 공격자는 여전히 코드를 수정할 수 있지만, 코드에 대한 정확한 서명이 공개 키 없이 생성될 수 없기 때문에 공격은 실패한다.
네이티브 코드에서 전달 및 실행되는 애플리케이션들의 무결성을 체크하기 위한 많은 솔루션들, 이를 테면, Arxan (GuardIT™), Metaforic (Metafortress™) 등에 의해 제공되는 솔루션들이 존재한다. 네이티브 코드는 프로세서에 의해 직접 실행가능한 어셈블러 명령들의 세트이다. 명령들의 세트는 설치 후에 변하지 않으며, 이는 프로그램 무결성 값이 설치 전과 설치 후에 동일하다는 것 (즉, 시간에 따라 일정하게 유지되는 것) 을 의미한다. 이 경우에, 서명은 사전에 생성되어 애플리케이션 패키지로 전달될 수 있다.
한편, 해석된 코드 - 이를 테면, 자바 (Java), 안드로이드 (Android) DEX 코드 등으로 기록된 코드 - 의 형태로 분배된 애플리케이션들은 애플리케이션이 실행되기 전에 인터프리터를 통과해야 하는 중간 명령들을 포함한다. 네이티브 코드와 달리, 해석된 코드는 최적화 목적을 위하여 설치 시간 후에 수정될 수 있다. 코드 변경은 일반적으로 타겟 플랫폼 상에 매우 의존적이며 따라서 반드시 예측가능한 것은 아니다. 코드가 수정되면, 해석된 코드 상에서 생성된 서명은 런타임에서 동작으로 코드 무결성 및 인증성을 체크하는데 이용될 수 없다.
이전에 언급된 안드로이드 오퍼레이팅 시스템 상에 애플리케이션 소프트웨어를 분배 및 설치하기 위해, APK - 안드로이드 애플리케이션 패키지 (Android Application PacKage) - 이라 불리는 파일 포맷이 이용된다. APK 파일을 만들기 위해, 안드로이드에 대한 프로그램은 먼저 중간 언어로 컴파일된 다음, 그 부분들이 압축된 아카이브 파일 (ZIP 포맷) 으로 패키징된다. 아카이브 파일은 단일의 DEX (Dalvik EXecutable code) 파일, 여러 리소스들 (예를 들어, 이미지 파일들), 및 APK 파일의 매니페스트에 전체 프로그램 코드를 포함한다. 아카이브 파일은 2 개의 추가 파일들: CERT.SF 및 CERT.RSA 를 포함한다. CERT.SF 는 모든 다른 아카이브 파일들의 암호 해시들을 포함하고; CERT.RSA 는 서명 검증을 위해 이용되는 공개 키를 포함한다. CERT.SF 만이 RSA 개인 키로 서명된다. CERT.SF 에 대한 RSA 서명은 설치 동안에 APK 파일의 전체 컨텐츠의 검증을 실행한다. 실제로, CERT.SF 파일에 언급된 모든 파일들은 CERT.SF 가 그들의 해시들을 포함하기 때문에 간접적으로 서명된다. 파일 다이제스트가 CERT.SF 파일에서의 해시와 매칭하지 않음을 소프트웨어가 검출하기 때문에, 설치전에 임의의 파일을 변경하는 것은 에러를 야기한다. 대안으로서, (이미 기술된 체크섬 기반 검증에 대항하는 공격에서와 같이) CERT.SF 파일 내에서 암호 해시 값을 수정하는 것은 서명 검증 동안에 에러를 초래할 것이다.
DEX 파일 헤더는 또한 DEX 파일의 컨텐츠에 대한 글로벌 체크섬을 포함한다. 애플리케이션의 첫번째 실행시, 안드로이드 시스템은 단지 실행전 시간에만 DEX 해석된 바이트 코드를 ODEX (Optimized DEX) 로 불리는 최적화된 머신 명령들 시퀀스로 수정하는 옵티마이저를 이용한다. 옵티마이저는 또한 체크섬을 업데이트한다. ODEX 파일은 그 후, 장래의 이용을 위해 안드로이드 파일 시스템 내에서의 특정 레포지토리에 저장된다. ODEX 파일은 그 후, 애플리케이션 소프트웨어에 대하여 레퍼런스로 되며, 이것이 존재할 때 오리지널 DEX 파일이 더 이상 이용되지 않는다.
런타임에서, 시스템은 ODEX 체크섬을 이용하여 애플리케이션에 대한 무결성을 검증할 수도 있다. 그러나, 체크섬 검증은 실행 성능에 대해 무시할 수 없는 영향을 주기 때문에, 이 옵션은 안드로이드 오퍼레이팅 시스템에서 디폴트로 설정되지 않고, 그리고 ODEX 를 실행하는데 이용되는 Dalvik 머신은 항상 ODEX 체크섬들을 체크하는 것은 아니다.
안드로이드 버전 5.0 이상은 Dalvik 머신을 대체하는 안드로이드 Runtime (ART) 을 도입하였다. 애플리케이션은 여전히 DEX 코드로 배치되지만, 설치시에, DEX 코드는 어헤드-오브-타임 컴파일화 (ahead-of-time compilation; (AOT) 피처를 이용하여 네이티브 코드로 컴파일된다. DEX 파일 상에서의 AOT 컴파일화는 바이너리 실행가능 링크가능 포맷 (Executable Linkable Format; ELF) 파일의 결과를 가져온다. 이 후, 애플리케이션의 DEX 코드는 한번 컴파일된 다음, ELF 코드는 애플리케이션이 실행될 때마다 나중에 론칭된다. ART 가 네이티브 코드 (ELF 코드) 를 직접 실행하기 때문에, 이는 애플리케이션들의 더 고속의 실행을 가져오고 전체적인 전력 소모를 개선시킨다.
따라서, 이는 안드로이드 시스템에서, APK 서명이 설치시에만 검증된다고 이해될 수 있다. 또한, APK 는 중앙 인증기관에 의해서만 서명되었을 때에도, 사용자가 신뢰되지 않은 소스들로부터 오는 애플리케이션의 설치를 허용하면, 안드로이드 디바이스 상에 설치될 수 있다. 그 후, 애플리케이션 개발자들은 임의의 신뢰된 인증기관에 링크되지 않는 그들 자체의 자체-서명된 인증서들을 이용한다. 그 경우, 도용된 애플리케이션들은 그 소유자가 모르는 사이에, 안드로이드 디바이스 상에 임의의 해커에 의해 재서명 및 재설치될 수 있다.
이미 언급된 바와 같이, 안드로이드 애플리케이션들은 인터프리터 포터블 포맷 (DEX) 을 이용한다. 이 포터블 포맷은 상이한 아키텍처들 및 특징들: ARM, x86, MIPS, Little/Big Endian 등으로 큰 세트의 디바이스들 상에서 실행할 수 있다. 성능을 향상시키기 위해, DEX 코드는 타겟 디바이스에 대해 최적화된 ODEX 또는 ELF 바이너리를 생성하기 위해 설치 시간에 또는 애플리케이션의 첫번째 사용시에 수정된다. 최적화 또는 OAT 컴파일화 동안에, 명령들이 다른 것들로 대체될 수 있고, 명령들의 정렬이 변경될 수도 있고, 바이트 순서가 교체될 수 있는 등의 여러 것들이 코드에서 수정될 수 있다.
최적화 및 OAT 컴파일화는 그 후 보안 문제가 발생한다. DEX 파일의 서명이 여전히 CERT.SF 및 CERT.RSA 를 이용하여 검증될 수 있지만, ODEX 및 ELF 파일들에 대해서는 그렇지 않은데, 그 이유는 이들이 수정되었고 이들의 무결성이 오리지널 DEX 서명에 대해 더 이상 링크되지 않기 때문이다. 즉, 무결성 및 인증성은 설치시에만 검증될 수 있고, 공격자는 ODEX 및 ELF 코드를 수정가능하고 그에 따라 헤더에서의 결과적인 체크섬을 업데이트가능하기 때문에 실행시에는 검증될 수 없다.
따라서, 시스템은 적어도 2 개 클래스의 공격들: 원격 공격 및 루트 공격에 취약하다. 원격 공격에서, 다운로드된 악성 애플리케이션은 자신의 특권을 상승시키고 시스템 허가들을 얻는다. 그 후, 악성 애플리케이션은 내부 저장부의 캐시 레포지토리 상에 저장된 ODEX 및 ELF 파일들을 조작할 수도 있다. 루트 공격에서, 공격자는 예를 들어, 디바이스 세션을 잠그지 않고 소유자가 부재될 때 디바이스에 액세스하는 것에 의해 또는 디바이스를 훔치는 것에 의해 안드로이드 디바이스를 획득한다. 공격자는 USB 링크를 통하여 디바이스의 내부 저장부로부터 설치된 애플리케이션을 취출하고, 애플리케이션을 수정한 다음, 내부 저장부 상에 다시 그 수정된 애플리케이션을 푸시한다. 이후의 공격이 성공적이기 위해, 디바이스는 "루트되어야" 한다 (즉, "루트 액세스"는 디바이스의 안드로이드 시스템의 제어를 취할 것을 필요로 한다).
따라서, 안드로이드 애플리케이션 무결성에서의 신뢰성은 애플리케이션의 라이프 사이클 동안에 깨질 수 있다. 안드로이드 시스템 상에 설치된 것을 신뢰할 수 있지만, 실행중인 것은 반드시 신뢰할 수 있는 것은 아니다.
해석된 코드 애플리케이션들의 무결성 및 인증성에 관련된 문제들의 적어도 일부분을 극복하는 솔루션을 갖는 것이 바람직함을 이해할 것이다. 본 개시는 이러한 솔루션을 제공한다.
제 1 양태에서, 본 개시는 애플리케이션을 프로세싱하기 위한 디바이스에 관한 것이다. 이 디바이스는 애플리케이션을 수신하도록 구성된 인터페이스, 애플리케이션 및 수정된 애플리케이션에 대한 서명된 체크섬을 저장하도록 구성된 메모리, 및 수정된 애플리케이션을 얻기 위해 애플리케이션을 수정하고, 수정된 애플리케이션에 대한 체크섬을 생성하고, 서명 키를 사용하여 수정된 애플리케이션에 대한 체크섬을 서명하고, 그리고 서명된 체크섬을 메모리에 저장하도록 구성된 프로세싱 유닛을 포함한다.
제 1 양태의 다양한 실시형태들은 다음을 포함한다:
Figure pct00001
애플리케이션은 제 1 체크섬을 포함하고 프로세싱 유닛은 또한 애플리케이션의 무결성을 검증하기 위해 제 1 체크섬을 사용하도록 구성된다는 것. 제 1 체크섬이 서명되고 프로세싱 유닛이 또한 제 1 체크섬에 대한 서명을 검증하도록 구성되는 것이 유리하다.
Figure pct00002
프로세싱 유닛은 또한, 수정된 애플리케이션의 실행 중에 수정된 애플리케이션의 무결성을 검증하기 위해 서명된 체크섬을 사용하도록 구성된다는 것.
Figure pct00003
애플리케이션은 해석된 코드로서 구현되고 수정된 애플리케이션은 최적화된 해석된 코드로서 구현되거나 수정된 애플리케이션은 네이티브 코드로 컴파일된다는 것.
Figure pct00004
디바이스는 스마트폰 또는 태블릿이라는 것.
Figure pct00005
서명 키는 소프트웨어 보호 기술을 사용하여 보호된다는 것.
Figure pct00006
프로세싱 유닛은 수정된 코드에 대한 복수의 체크섬들을 생성하는 것으로서, 각 체크섬이 수정된 코드의 상이한 부분에 대해 생성되는, 상기 복수의 체크섬들을 생성하고, 그리고 수정된 코드에 대한 복수의 체크섬들을 서명하도록 구성된다는 것.
Figure pct00007
프로세싱 유닛은 수정된 코드에 대한 복수의 체크섬에 대해 단일 서명을 생성하도록 구성된다는 것.
Figure pct00008
메모리는 또한, 수정된 애플리케이션과 서명 키에 대한 인증서를 저장하도록 구성되고, 그리고 프로세서는 또한, 서명 키에 대한 인증서를 메모리에 저장하도록 구성된다는 것.
제 2 양태에서, 본 개시는 애플리케이션을 프로세싱하기 위한 방법에 관한 것이다. 디바이스는 애플리케이션을 수신하고, 수정된 애플리케이션을 얻기 위해 애플리케이션을 수정하고, 수정된 애플리케이션에 대한 체크섬을 생성하고, 서명 키를 사용하여 수정된 애플리케이션에 대한 체크섬을 서명하고, 그리고 서명된 체크섬을 메모리에 메모리에 저장한다.
제 2 양태의 다양한 실시형태들은 다음을 포함한다:
Figure pct00009
애플리케이션은 제 1 체크섬을 포함하고, 방법은 애플리케이션의 무결성을 검증하기 위해 제 1 체크섬을 사용하는 것을 더 포함한다는 것.
Figure pct00010
제 1 체크섬이 서명되고, 방법은 제 1 체크섬에 대한 서명을 검증하는 것을 더 포함한다는 것.
Figure pct00011
방법은 수정된 애플리케이션의 실행 중에 수정된 애플리케이션의 무결성을 검증하기 위해 서명된 체크섬을 사용하는 것을 더 포함한다는 것.
Figure pct00012
방법은 수정된 애플리케이션과 서명 키에 대한 인증서를 메모리에 저장하는 것을 더 포함한다는 것.
본 개시의 선호되는 특징들은 첨부한 도면들을 참조하여 비제한적 예에 의해 이하 설명된다.
도 1 은 본 개시가 구현되는 예시적 시스템을 예시한다.
도 2 는 예시적 시스템의 기능적 양태들을 예시한다.
도 3 은 본 개시의 선호되는 실시형태에 따른 방법의 선호되는 실시형태를 예시한다.
도 1 은 본 개시가 구현되는 예시적 시스템을 예시한다. 시스템은 디바이스 (110) 및 애플리케이션 제공자 (애플리케이션 스토어)(120) 를 포함한다. 디바이스 (110) 는 안드로이드 OS 상에서 구동하는 임의의 종류의 적절한 디바이스, 이를 테면, 스마트폰 또는 테블릿일 수 있고, 이는 적어도 하나의 하드웨어 프로세싱 유닛 ("프로세서")(111), 메모리 (112), 사용자와 상호작용하기 위한 사용자 인터페이스 (113), 및 접속 (140), 이를 테면, 인터넷을 통하여 애플리케이션 제공자 (120) 와 통신하기 위한 통신 인터페이스 (114) 를 포함한다. 당해 기술 분야의 당업자는 예시된 디바이스가 명료화의 이유로 매우 간략화되어 있으며, 추가로 실제 디바이스들은 전력 공급 장치들, 및 영구 저장 장치와 같은 특징들을 포함하고 있음을 알고 있을 것이다. 애플리케이션 제공자 (120) 는 디바이스 (110) 에 의해 다운로드될 수 있는 적어도 하나의 애플리케이션 APK 파일 (122) 을 저장하며, APK 파일은 서명인 엔티티에 의해 서명된 APK 인증서를 포함한다.
도 2는 예시적인 시스템의 기능적 양태를 나타낸다. 디바이스 (110) 의 OS (210) 는 서명 모듈 (212) 및 임베드된 신뢰된 엔티티 (214) 를 포함한다. 신뢰된 엔티티 (214) 는 대응하는 서명 인증서 (216) 와 서명 키 (215) 를 저장한다. 서명 키 (215) 는 (적어도 통계적으로) 디바이스에 있어서 또는 OS의 버전에 있어서 고유할 수 있으며, 각 디바이스에 대해 고유한 디바이스 키에 의해 보호될 수 있다. 인증서는 서명자 엔티티에 의해, 직접적으로 또는 신뢰 체인을 통해 서명된다.
애플리케이션 (220) 은 서명자 엔티티에 의해 서명된 APK 인증서 (222), 애플리케이션 코드 (224)(설치 이전의 DEX 및 설치 이후의 ODEX 또는 ELF), ODEX 또는 ELF 체크섬을 저장하기 위한 예비 공간 (226), ODEX 또는 ELF 서명을 저장하기 위한 예비 공간 (228), 및 무결성 검증 모듈 (232) 을 포함하는 라이브러리 (230) 를 포함한다.
서명 모듈 (212) 은 애플리케이션의 APK 인증서 (222) 를 검증하고, 애플리케이션에 대한 ODEX 또는 ELF 체크섬을 계산하고, 그리고 애플리케이션의 설치 시간에 ODEX 또는 ELF 체크섬을 서명하도록 구성된다. 서명 모듈 (212) 은 Dalvik 가상 기계에서 또는 DEX를 최적화하거나 OAT 컴파일하는 유닛에서 구현될 수 있다. APK 인증서 (222) 는 임의의 적합한 선행 기술 검증 기술에 의해 검증된다. 서명 모듈 (212) 은 ODEX 또는 ELF 체크섬 및 서명을 애플리케이션의 캐시 저장소에 있는 예비 공간 (226, 228) 에 삽입하도록 구성된다. 서명 모듈 (212) 은 또한 서명 인증서 (216) 를 캐시 저장소에 저장한다.
예를 들어 전체 DEX 코드에 대한 하나의 체크섬 및 DEX 코드의 섹션에 대한 적어도 하나의 추가 체크섬과 같은 복수의 체크섬을 사용할 수 있음을 알 수 있다. 이 예에서, 서명 모듈 (212) 은 모든 체크섬을 검증하고, 대응하는 ODEX 또는 ELF 체크섬을 생성하고, 생성된 ODEX 또는 ELF 체크섬 모두를 (유리하게 단일 서명으로) 서명하고, 그리고 ODEX 또는 ELF 체크섬 및 서명을 캐시 저장소에 저장한다.
무결성 검증 모듈 (232) 은 APK의 네이티브 라이브러리에 포함되며 확장된 JNI 라이브러리에 대한 액세스를 가지며, 이것은 ODEX 또는 ELF 체크섬 및 해당 서명을 실행 중 언제든지 체크하는 것을 허용한다. 무결성 검증 모듈 (232) 은, 애플리케이션의 일부로서 실행될 때, 임의의 적절한 방식으로 서명 인증서를 체크하고, ODEX 또는 ELF 체크섬에 대한 서명을 체크하고, ODEX 또는 ELF에 대한 현재 체크섬을 계산하고, 계산된 체크섬을 서명된 (및 확인된) 체크섬과 비교하도록 구성된다. 체크 중 어떠한 체크가 실패하면 적절한 조치가 취해질 수 있음을 알 수 있다.
도 3은 바람직한 실시형태에 따른 방법의 흐름도를 나타낸다. 단계 S302에서, 디바이스 (110) 는 애플리케이션에 대한 APK 파일을 수신하고, 단계 S304에서 APK 인증서를 검증한다. 애플리케이션의 설치 동안, 디바이스 (110) 는 APK 파일 내의 DEX를 최적화하거나 또는 OAT 컴파일하고, 단계 S306에서 캐시 저장소에서 ODEX 또는 ELF를 얻는다. 단계 S308에서, 디바이스 (110) 는 ODEX에 대한 적어도 하나의 ODEX 또는 ELF 체크섬을 계산하고, 단계 S310에서 서명 키 (215) 를 사용하여 ODEX 또는 ELF 체크섬을 서명한다. 단계 S312에서, 디바이스 (110) 는 예비 공간 (226, 228) 내의 ODEX 또는 ELF 체크섬 및 서명 인증서를 애플리케이션에 대한 캐시 저장소에 저장한다. 디바이스 (110) 는 이후 단계 S314에서 임의의 적절한 시간에 ODEX 또는 ELF를 실행할 수 있고, 그리고 실행 동안, 무결성 검증 모듈 (232) 은 단계 S316에서 예비 공간 (226) 내의 서명된 ODEX 또는 ELF 체크섬과 비교되는 현재의 ODEX 또는 ELF 체크섬을 계산함으로써 ODEX 또는 ELF의 무결성을 체크할 수 있다. 무결성은 애플리케이션의 실행 중에 복수회 체크될 수 있다.
솔루션은 현재 배치된 안드로이드 시스템들에 대한 약간의 수정을 필요로 한다는 점에 유의한다.
본 설명에서, 용어 '체크섬' 은 생성되었던 데이터가 체크섬의 생성 후에 수정되었는지의 여부의 검증을 가능하게 하는 값을 커버하도록 의도된다. 따라서 체크섬은 예를 들어, 또한 해시 값, 주기적 리던던시 체크 (Cyclic Redundancy Check; CRC) 값 또는 다른 종류의 다이제스트일 수도 있고, 체크섬으로부터 코드를 획득하는 것이 연산적으로 실행불가능한 것이 선호된다. 추가로, 단일의 체크섬이 명료화를 위해 이용되었지만, 복수의 체크섬들이 이용될 수도 있고, 여기에서, 체크섬은 코드의 별개의 부분에 대해 생성될 수도 있고 (여기에서 상이한 부분들이 중복할 수도 있음), 코드의 상이한 부분들에 대한 복수의 체크섬들이 비교에 이용된 단일의 글로벌 체크섬을 생성하는데 이용된다. 서명은 임의의 적절한 암호화 서명, 이를 테면, 해시 기반 메시지 인증 코드 (Hash-based Message Authentication Code; HMAC) 또는 예를 들어, RSA 에 기초한 서명, 디지털 서명 알고리즘 (Digital Signature Algorithm; DSA) 또는 타원곡선 디지털 서명 알고리즘 (Elliptic Curve Digital Signature Algorithm; ECDSA) 일 수도 있다.
본 솔루션은 루트 공격들 및 원격 공격들 양쪽을 성공적으로 대처할 수 있는 것으로 이해될 것이다.
본 솔루션이 안드로이드 환경에서 설명되어 있지만, 이는 런타임시 설치된 애플리케이션의 보안 무결성 검증을 실행함이 없이 설치 동안에 코드를 수정하는 다른 오퍼레이팅 시스템들에도 채택될 수 있다.
따라서, 본 개시는 안드로이드 디바이스들 상의 애플리케이션들의 런타임 무결성을 가능하게 할 수 있는 솔루션을 제공함을 이해할 것이다.
명세서 및 (필요에 따라) 청구항들 및 도면들에 개시된 각각의 특징은 임의의 적절한 조합들로 또는 독립적으로 제공될 수도 있다. 하드웨어에서 구현되는 바와 같이 설명된 특징들은 소프트웨어에서 또한 구현될 수도 있고, 그 역도 가능하다. 청구항들에 나타내어진 참조 번호들은 예시적인 목적일 뿐, 청구항들의 범위에 대하여 어떠한 제한적인 영향도 없다.

Claims (15)

  1. 애플리케이션을 프로세싱하기 위한 디바이스 (110) 로서,
    상기 애플리케이션을 수신하도록 구성된 인터페이스 (114);
    상기 애플리케이션, 및 수정된 애플리케이션에 대한 서명된 체크섬을 저장하도록 구성된 메모리 (112); 및
    프로세싱 유닛 (111) 을 포함하고,
    상기 프로세싱 유닛 (111) 은:
    - 수정된 애플리케이션을 얻기 위해 상기 애플리케이션을 수정하고;
    - 상기 수정된 애플리케이션에 대한 체크섬을 생성하고;
    - 서명 키를 사용하여 상기 수정된 애플리케이션에 대한 상기 체크섬을 서명하며; 그리고
    - 상기 서명된 체크섬을 상기 메모리 (112) 에 저장하도록 구성된, 애플리케이션을 프로세싱하기 위한 디바이스.
  2. 제 1 항에 있어서,
    상기 애플리케이션은 제 1 체크섬을 포함하고, 그리고 상기 프로세싱 유닛은 또한 상기 애플리케이션의 무결성을 검증하기 위해 상기 제 1 체크섬을 사용하도록 구성되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  3. 제 2 항에 있어서,
    상기 제 1 체크섬은 서명되고, 그리고 상기 프로세싱 유닛은 또한 상기 제 1 체크섬에 대한 서명을 검증하도록 구성되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  4. 제 1 항에 있어서,
    상기 프로세싱 유닛은 또한, 상기 수정된 애플리케이션의 실행 중에 상기 수정된 애플리케이션의 무결성을 검증하기 위해 상기 서명된 체크섬을 사용하도록 구성되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  5. 제 1 항에 있어서,
    상기 애플리케이션은 해석된 코드로서 구현되고 상기 수정된 애플리케이션은 최적화된 해석된 코드로서 구현되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  6. 제 1 항에 있어서,
    상기 디바이스는 스마트폰 또는 태블릿인, 애플리케이션을 프로세싱하기 위한 디바이스.
  7. 제 1 항에 있어서,
    상기 서명 키는 소프트웨어 보호 기술들을 사용하여 보호되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  8. 제 1 항에 있어서,
    상기 프로세싱 유닛은,
    복수의 체크섬들을 생성하는 것으로서, 상기 복수의 체크섬들의 각각이 수정된 코드의 상이한 부분에 대해 생성되는, 상기 복수의 체크섬들을 생성하고, 그리고
    상기 수정된 코드에 대한 상기 복수의 체크섬들을 서명하도록 구성되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  9. 제 8 항에 있어서,
    상기 프로세싱 유닛은 상기 수정된 코드에 대한 상기 복수의 체크섬들에 대해 단일 서명을 생성하도록 구성되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  10. 제 1 항에 있어서,
    상기 메모리는 또한, 상기 수정된 애플리케이션과 상기 서명 키에 대한 인증서를 저장하도록 구성되고, 그리고 프로세서는 또한, 상기 서명 키에 대한 상기 인증서를 상기 메모리에 저장하도록 구성되는, 애플리케이션을 프로세싱하기 위한 디바이스.
  11. 애플리케이션을 프로세싱하는 방법으로서,
    디바이스 (110) 에서:
    - 상기 애플리케이션을 수신하는 단계 (S302);
    - 수정된 애플리케이션을 얻기 위해 상기 애플리케이션을 수정하는 단계 (S306);
    - 상기 수정된 애플리케이션에 대한 체크섬을 생성하는 단계 (S308);
    - 서명 키를 사용하여 상기 수정된 애플리케이션에 대한 상기 체크섬을 서명하는 단계 (S310); 및
    - 서명된 상기 체크섬을 메모리 (112) 에 메모리 (112) 에 저장하는 단계 (S312) 를 포함하는, 애플리케이션을 프로세싱하는 방법.
  12. 제 11 항에 있어서,
    상기 애플리케이션은 제 1 체크섬을 포함하고, 그리고 상기 방법은 상기 애플리케이션의 무결성을 검증하기 위해 상기 제 1 체크섬을 사용하는 단계를 더 포함하는, 애플리케이션을 프로세싱하는 방법.
  13. 제 12 항에 있어서,
    상기 제 1 체크섬은 서명되고, 그리고 상기 방법은 상기 제 1 체크섬에 대한 서명을 검증하는 단계를 더 포함하는, 애플리케이션을 프로세싱하는 방법.
  14. 제 11 항에 있어서,
    상기 방법은, 상기 수정된 애플리케이션의 실행 중에 상기 수정된 애플리케이션의 무결성을 검증하기 위해 상기 서명된 체크섬을 사용하는 단계를 더 포함하는, 애플리케이션을 프로세싱하는 방법.
  15. 제 11 항에 있어서,
    상기 수정된 애플리케이션과 상기 서명 키에 대한 인증서를 상기 메모리에 저장하는 단계를 더 포함하는, 애플리케이션을 프로세싱하는 방법.

KR1020177014521A 2014-11-28 2015-11-26 애플리케이션 무결성의 검증을 제공하기 위한 방법 및 디바이스 KR20170089859A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
EP14306919.3 2014-11-28
EP14306919.3A EP3026558A1 (en) 2014-11-28 2014-11-28 Method and device for providing verifying application integrity
PCT/EP2015/077835 WO2016083540A1 (en) 2014-11-28 2015-11-26 Method and device for providing verifying application integrity

Publications (1)

Publication Number Publication Date
KR20170089859A true KR20170089859A (ko) 2017-08-04

Family

ID=52023430

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020177014521A KR20170089859A (ko) 2014-11-28 2015-11-26 애플리케이션 무결성의 검증을 제공하기 위한 방법 및 디바이스

Country Status (6)

Country Link
US (1) US20170262656A1 (ko)
EP (2) EP3026558A1 (ko)
JP (1) JP2018503153A (ko)
KR (1) KR20170089859A (ko)
CN (1) CN107003917A (ko)
WO (1) WO2016083540A1 (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101883997B1 (ko) 2017-11-29 2018-08-02 주식회사 스틸리언 의존 관계형 위변조 무결성 체크를 이용한 암호화 처리장치 및 방법
KR101976992B1 (ko) * 2017-11-16 2019-05-10 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법
US10878086B2 (en) 2017-11-16 2020-12-29 Foundation Of Soongsil University-Industry Cooperation Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101832594B1 (ko) * 2016-02-18 2018-02-26 라인 가부시키가이샤 중간 언어 파일의 로딩 속도 개선을 위한 방법 및 시스템
CN106066686B (zh) * 2016-05-31 2019-02-05 Oppo广东移动通信有限公司 一种信息处理方法及终端设备
US10747883B2 (en) 2017-05-11 2020-08-18 Qualcomm Incorporated Collated multi-image check in system-on-chips
CN108683502B (zh) * 2018-03-30 2022-01-25 上海连尚网络科技有限公司 一种数字签名验证方法、介质及设备
FR3083343B1 (fr) * 2018-06-29 2023-05-26 Ingenico Group Procede de determination d'une validite d'un code applicatif, dispositif et produit programme d'ordinateur correspondants.
JP7171339B2 (ja) * 2018-09-26 2022-11-15 キヤノン株式会社 情報処理装置、情報処理装置の制御方法、及び、プログラム
KR102537788B1 (ko) * 2018-11-28 2023-05-30 삼성전자주식회사 서버 및 이를 이용한 어플리케이션의 무결성 판단 방법
RU2708353C1 (ru) * 2018-12-28 2019-12-05 Акционерное общество "Лаборатория Касперского" Система и способ стойкой к атакам проверки ЭЦП файлов
CN109981283B (zh) * 2019-02-28 2022-05-20 西安理工大学 Android平台消息驱动核心代码完整性检测系统及方法
JP7335591B2 (ja) * 2019-07-22 2023-08-30 コネクトフリー株式会社 コンピューティングシステムおよび情報処理方法
CN112052047A (zh) * 2020-08-05 2020-12-08 北京智游网安科技有限公司 一种指令处理方法、终端及存储介质
WO2023001366A1 (en) * 2021-07-20 2023-01-26 Huawei Technologies Co., Ltd. Device and method for protecting code integrity
CN114338050A (zh) * 2022-03-14 2022-04-12 麒麟软件有限公司 一种应用程序接口安全管控方法、系统及装置
US11954007B2 (en) 2022-04-20 2024-04-09 International Business Machines Corporation Tracking usage of common libraries by means of digitally signed digests thereof

Family Cites Families (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7526811B1 (en) * 2001-05-22 2009-04-28 Novell, Inc. Methods for detecting executable code which has been altered
FR2849230B1 (fr) * 2002-12-24 2005-04-22 Francois Bangui Procede et dispositif de verification de l'integrite d'une application logicielle sans cle de chiffrement/dechiffrement
EP1533695B1 (en) * 2003-11-19 2013-08-07 TELEFONAKTIEBOLAGET LM ERICSSON (publ) Updating data in a mobile terminal
JP2006025211A (ja) * 2004-07-08 2006-01-26 Nippon Telegraph & Telephone West Corp ピアツーピア端末装置並びにピアツーピア通信システム、ピアツーピア通信方法、ピアツーピア端末プログラム
US20070150966A1 (en) * 2005-12-22 2007-06-28 Kirschner Wesley A Method and apparatus for maintaining a secure software boundary
JP2009211187A (ja) * 2008-02-29 2009-09-17 Hitachi Ltd 情報処理装置
EP2362314A1 (en) * 2010-02-18 2011-08-31 Thomson Licensing Method and apparatus for verifying the integrity of software code during execution and apparatus for generating such software code
CN103460195B (zh) * 2011-02-11 2016-04-13 西门子医疗保健诊断公司 用于安全软件更新的系统和方法
CN102833296B (zh) * 2011-06-13 2018-10-23 伊姆西公司 用于构建安全的计算环境的方法和设备
KR101299099B1 (ko) * 2011-09-07 2013-09-16 주식회사 팬택 임베디드 시스템에서 최적화된 가상화 모듈을 관리하는 장치 및 방법
JP5126447B1 (ja) * 2012-08-31 2013-01-23 大日本印刷株式会社 アプリケーションプログラムの実行方法
US9715591B2 (en) * 2012-07-30 2017-07-25 Hewlett-Packard Development Company, L.P. Code validation
JP6261933B2 (ja) * 2012-10-16 2018-01-17 日本放送協会 放送通信連携受信装置及び放送通信連携システム

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101976992B1 (ko) * 2017-11-16 2019-05-10 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법
WO2020050455A1 (ko) * 2017-11-16 2020-03-12 숭실대학교산학협력단 시그니처 추출을 이용한 분석회피기법 자동 인식 장치 및 그 방법
US10878086B2 (en) 2017-11-16 2020-12-29 Foundation Of Soongsil University-Industry Cooperation Dynamic code extraction-based automatic anti analysis evasion and code logic analysis apparatus
US11934495B2 (en) 2017-11-16 2024-03-19 Foundation Of Soongsil University-Industry Cooperation Device for automatically identifying anti-analysis techniques by using signature extraction and method therefor
KR101883997B1 (ko) 2017-11-29 2018-08-02 주식회사 스틸리언 의존 관계형 위변조 무결성 체크를 이용한 암호화 처리장치 및 방법

Also Published As

Publication number Publication date
EP3026558A1 (en) 2016-06-01
CN107003917A (zh) 2017-08-01
EP3224720A1 (en) 2017-10-04
US20170262656A1 (en) 2017-09-14
WO2016083540A1 (en) 2016-06-02
JP2018503153A (ja) 2018-02-01

Similar Documents

Publication Publication Date Title
KR20170089859A (ko) 애플리케이션 무결성의 검증을 제공하기 위한 방법 및 디바이스
US20170270319A1 (en) Method and device for providing verifying application integrity
US20170262657A1 (en) Method and device for providing verifying application integrity
Buhren et al. Insecure until proven updated: analyzing AMD SEV's remote attestation
US20170262658A1 (en) Method and device for providing verifying application integrity
US7577848B2 (en) Systems and methods for validating executable file integrity using partial image hashes
KR101190479B1 (ko) 티켓 인증 보안 설치 및 부트
CN112507328B (zh) 一种文件签名方法、计算设备及存储介质
EP3343424B1 (en) Control board secure start method, and software package upgrade method and device
JP2014505318A (ja) 安全なソフトウェアの更新のためのシステム及び方法
JP2010524123A (ja) トラステッドコンポーネント更新システム及びトラステッドコンポーネント更新方法
US11496317B2 (en) Software validation for untrusted computing systems
CN112511306A (zh) 一种基于混合信任模型的安全运行环境构建方法
US20210216636A1 (en) Determining Authenticity of Binary Images
RU2812867C1 (ru) Защита двоичных файлов типовых коммерческих программ от пиратства с использованием аппаратных анклавов
WO2023136829A1 (en) Firmware authentication
CN116049781A (zh) 一种确定二进制映像真实性的方法