KR101681440B1 - 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지 - Google Patents

블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지 Download PDF

Info

Publication number
KR101681440B1
KR101681440B1 KR1020157013449A KR20157013449A KR101681440B1 KR 101681440 B1 KR101681440 B1 KR 101681440B1 KR 1020157013449 A KR1020157013449 A KR 1020157013449A KR 20157013449 A KR20157013449 A KR 20157013449A KR 101681440 B1 KR101681440 B1 KR 101681440B1
Authority
KR
South Korea
Prior art keywords
machine language
code
permutated
language code
generate
Prior art date
Application number
KR1020157013449A
Other languages
English (en)
Other versions
KR20150074143A (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 엠파이어 테크놀로지 디벨롭먼트 엘엘씨
Publication of KR20150074143A publication Critical patent/KR20150074143A/ko
Application granted granted Critical
Publication of KR101681440B1 publication Critical patent/KR101681440B1/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
    • 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/52Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow
    • G06F21/54Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems during program execution, e.g. stack integrity ; Preventing unwanted data erasure; Buffer overflow by adding security routines or objects to programs

Abstract

기술들은 실행가능 코드를 생성하도록 구성되는 시스템들 및 방법들에 대하여 일반적으로 설명된다. 일부 예들에서, 디벨로퍼는 시스템 매니저에 머신 언어 코드를 전송할 수도 있다. 머신 언어 코드는 둘 이상의 머신 언어 블록들 및 링킹 정보를 포함할 수도 있다. 시스템 매니저는 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션하도록 구성되는 프로세서를 포함할 수도 있다. 프로세서는 변경된 링킹 정보를 생성하기 위해 퍼뮤테이션된 머신 언어 코드에 기초하여 링킹 정보를 변경할 수도 있다. 프로세서는 실행가능 코드를 생성하기 위해, 변경된 링킹 정보의 이용에 의해 퍼뮤테이션된 머신 언어 코드를 링크할 수도 있다.

Description

블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지{MALWARE ATTACK PREVENTION USING BLOCK CODE PERMUTATION}
본원에서 달리 나타내어지지 않는 한, 본 섹션에서 설명된 자료들은 본원에서의 청구항들에 대한 선행기술이 아니고 본 섹션에 포함됨에 따라 선행기술이 되는 것으로 인정되지 않는다.
멀웨어, 이를 테면, 바이러스들 및 트로이 목마 바이러스는 코드 취약성을 활용하여 시스템에 침투할 수도 있다. 멀웨어의 피스는 애플리케이션의 코드에 에러들을 발견하고, 이들 에러를 활용하여 다른 목적들로 애플리케이션을 이용할 수도 있다. 예를 들어, 멀웨어는 버퍼 오버플로우를 야기하는데 이용될 수도 있다. 버퍼 오버플로우에서, 애플리케이션의 설계자가 데이터를 기록하도록 의도하지 않을 수도 있는 메모리의 섹션에 데이터를 기록할 수도 있다. 해커는 메모리에 기록된 이 데이터를 이용하여, 프로세서로 하여금, 애플리케이션을 통한 일부 제어를 얻기 위하여 실행가능 코드로서 이 데이터를 프로세싱하게 하는 수단을 발견할 수도 있다.
일부 예들에서, 실행가능 코드를 생성하는 방법이 일반적으로 설명된다. 본 방법은 프로세서에 의해 머신 언어 코드를 수신하는 것을 포함할 수도 있다. 머신 언어 코드는 둘 이상의 머신 언어 블록들을 포함할 수도 있다. 본 방법은 머신 언어 코드에 관련된 링킹 정보를 수신하는 것을 포함할 수도 있다. 본 방법은 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션하는 것을 포함할 수도 있다. 본 방법은 변경된 링킹 정보를 생성하기 위해 퍼뮤테이션된 머신 언어 코드를 이용하여 링킹 정보를 변경하는 것을 포함할 수도 있다. 본 방법은 실행가능 코드를 생성하기 위해, 변경된 링킹 정보를 이용하여 퍼뮤테이션된 머신 언어 코드를 링크하는 것을 더 포함할 수도 있다.
일부 예들에서, 실행가능 코드를 생성하도록 구성되는 디바이스가 일반적으로 설명된다. 디바이스는 메모리, 및 메모리와 통신하도록 구성되는 프로세서를 포함한다. 프로세서는 메모리로부터 머신 언어 코드를 취출하도록 구성될 수도 있다. 머신 언어 코드는 둘 이상의 머신 언어 블록들을 포함할 수도 있다. 프로세서는 메모리로부터 링킹 정보를 취출하도록 구성될 수도 있다. 링킹 정보는 머신 언어 코드에 관련될 수도 있다. 프로세서는 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션하도록 구성될 수도 있다. 프로세서는 변경된 링킹 정보를 생성하기 위해 퍼뮤테이션된 머신 언어 코드를 이용하여 링킹 정보를 변경하도록 구성될 수도 있다. 프로세서는 또한, 실행가능 코드를 생성하기 위해, 변경된 링킹 정보의 이용에 의해 퍼뮤테이션된 머신 언어 코드를 링크하도록 구성될 수도 있다.
일부 예들에서, 실행가능 코드를 생성하도록 구성되는 시스템이 일반적으로 설명된다. 시스템은 제 1 프로세서 및 제 1 프로세서와 통신하도록 구성되는 제 2 프로세서를 포함할 수도 있다. 제 1 프로세서는 프로그램을 수신하도록 구성될 수도 있다. 제 1 프로세서는 둘 이상의 머신 언어 블록들을 포함하는 머신 언어 코드를 생성하기 위해 프로그램을 컴파일하도록 구성될 수도 있다. 제 1 프로세서는 머신 언어 코드에 관련된 링킹 정보를 생성하도록 구성될 수도 있다. 제 2 프로세서는 머신 언어 코드를 수신하도록 구성될 수도 있다. 제 2 프로세서는 링킹 정보를 수신하도록 구성될 수도 있다. 제 2 프로세서는 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션하도록 구성될 수도 있다. 제 2 프로세서는 변경된 링킹 정보를 생성하기 위해 퍼뮤테이션된 머신 언어 코드를 이용하여 링킹 정보를 변경하도록 구성될 수도 있다. 제 2 프로세서는 실행가능 코드를 생성하기 위해, 변경된 링킹 정보의 이용에 의해 퍼뮤테이션된 머신 언어 코드를 링크하도록 구성될 수도 있다.
상기 요약은 단지 예증적인 것에 불과하며 제한하려는 의도는 아니다. 상기 상술된 예시적인 양태들, 구체예들, 및 특징들에 부가하여, 다른 양태들, 구체예들, 및 특징들이 첨부된 도면과 연계한 하기의 상세한 설명으로부터 더욱 명확해질 것이다.
본 개시물의 앞서의 특징들 및 다른 특징들은 첨부 도면들을 함께 취하여, 다음의 설명 및 첨부된 청구항들로부터 보다 완전히 명백해질 것이다. 이들 도면이 본 개시물에 따라 수개의 실시형태들만을 설명하고 이에 따라 본원의 범위를 제한하는 것으로 간주되지 않는다는 이해하에, 본 개시물은 첨부된 도면들의 사용 전반에 걸쳐 추가적인 상세 및 세부 사항들로 설명될 것이다.
도 1 은 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격 방지를 구현하는데 이용될 수 있는 예시적인 시스템을 나타낸다.
도 2 는 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격 방지를 구현하는데 이용될 수 있는 다른 예시적인 시스템을 나타낸다.
도 3 은 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격 방지를 구현하는데 이용될 수 있는 또 다른 예시적인 시스템을 나타낸다.
도 4 는 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격들을 방지하는 예시적인 프로세스에 대한 플로우도를 나타낸다.
도 5 는 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격 방지를 구현하는데 이용될 수 있는 컴퓨터 프로그램 제품을 나타낸다.
도 6 은 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격 방지를 구현하도록 배열된 예시적인 컴퓨팅 디바이스를 예시하는 블록도이다.
이들 모두는 본원에서 설명되는 적어도 몇몇의 구체예들에 따라 정렬된다.
다음의 상세한 설명에서는, 본원의 일부분을 형성하는 첨부 도면들에 대한 참조가 이루어진다. 도면에서, 문맥상 다르게 지시하지 않는 한, 유사한 도면 부호는 통상 유사한 컴포넌트를 식별한다. 상세한 설명, 도면, 및 청구범위에서 설명된 예증적인 구체예들은 제한적인 것을 의미하는 것은 아니다. 본원에서 제시되는 본질의 취지 또는 범위를 벗어나지 않으면서, 다른 구체예들이 활용될 수도 있고, 다른 변경예들이 이루어질 수도 있다. 본원에서 일반적으로 설명되고, 도면에서 도해된 본 개시의 양태들이 아주 다양하고 상이한 구성들로 정렬되고, 대체되고, 조합되고, 분리되고, 설계될 수 있으며, 이들 모두는 본원에서 명시적으로 고려된 것임을 쉽게 이해할 수 있을 것이다.
본 개시물은 그중에서 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격들을 방지하는 것에 관련된 방법들, 장치들, 시스템들, 디바이스들, 및 컴퓨터 프로그램 제품들에 대해 일반적으로 묘사한다.
간략히 말하면, 기술들은 실행가능 코드를 생성하도록 구성되는 시스템들 및 방법들에 대하여 일반적으로 설명된다. 일부 예들에서, 디벨로퍼는 시스템 매니저에 머신 언어 코드를 전송할 수도 있다. 머신 언어 코드는 둘 이상의 머신 언어 블록들 및 링킹 정보를 포함할 수도 있다. 시스템 매니저는 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션하도록 구성되는 프로세서를 포함할 수도 있다. 프로세서는 변경된 링킹 정보를 생성하기 위해 퍼뮤테이션된 머신 언어 코드에 기초하여 링킹 정보를 변경할 수도 있다. 프로세서는 실행가능 코드를 생성하기 위해, 변경된 링킹 정보의 이용에 의해 퍼뮤테이션된 머신 언어 코드를 링크할 수도 있다.
도 1 은 본원에서 개시된 적어도 일부의 실시형태들에 따라 배열된, 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지를 구현하는데 이용될 수 있는 예시적인 시스템을 나타낸다. 예시적인 시스템 (100) 은 서로 통신하도록 배열되는, 컴파일러 모듈 (112), 퍼뮤테이션 모듈 (124), 및/또는 로더 (128) 를 포함할 수도 있다. 컴파일러 모듈 (112) 은 하드웨어일 수도 있거나, 또는 소프트웨어의 피스로서 구현되어 프로세서 (136) 에 의해 실행될 수도 있다. 퍼뮤테이션 모듈 (124) 은 하드웨어일 수도 있거나, 또는 소프트웨어의 피스로서 구현되어 프로세서 (138) 또는 로더 (128) 에 의해 실행될 수도 있다.
아래 보다 상세하게 설명된 바와 같이, 컴파일러 모듈 (112) 은 둘 이상의 블록들 (102, 104, 106, 108 및/또는 110) 을 포함하는 프로그램 (132) 을 수신할 수도 있다. 본원에서는 설명을 간략화하기 위해 5 개의 블록들이 도시되어 있지만, 프로그램 (132) 은 임의의 수의 블록들을 포함할 수도 있다. 컴파일러 모듈 (112) 은 둘 이상의 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 을 포함하는 머신 언어 코드 (134) 를 생성하기 위해 블록들 (102, 104, 106, 108, 및/또는 110) 을 컴파일할 수도 있다. 머신 언어 블록들은 컴파일러 모듈 (112) 에 의해 생성된 오브젝트들, 컴파일러 등에 생성된 오브젝트들, 라이브러리들, 또는 다른 머신 코드 파일의 부분들을 포함할 수도 있다. 퍼뮤테이션 모듈 (124) 은 머신 언어 코드 (134) 를 수신하고, 퍼뮤테이션된 머신 언어 실행가능 코드 (126) 를 생성하기 위해 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 의 순서를 퍼뮤테이션할 수도 있다. 예를 들어, 퍼뮤테이션 모듈 (124) 은 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 을 큐 내에 로딩한 다음, 상이한 순서로 큐로부터 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 을 페치할 수도 있다. 다른 예에서, M 개의 블록들에 대해, 퍼뮤테이션 모듈 (124) 은 블록들의 수에 대응하는 M 개의 의사 랜덤 수들을 생성할 수도 있다. 각각의 랜덤 수는 M 개의 엔트리들을 갖는 테이블에서의 엔트리에 할당될 수도 있다. 퍼뮤테이션 모듈 (124) 은 그 후, 테이블에서의 블록에 대한 대응하는 수에 기초하여 블록들을 순서화할 수도 있다. 로더 (128) 는 퍼뮤테이션된 머신 언어 실행가능 코드 (126) 를 수신하고, 퍼뮤테이션된 머신 언어 실행가능 코드 (126) 를 실행을 위해 메모리 (130) 내에 로딩할 수도 있다.
도 2 는 본원에서 개시된 적어도 일부의 실시형태들에 따라 배열된, 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지를 구현하는데 이용될 수 있는 다른 예시적인 시스템을 나타낸다. 도 2 는 시스템 (100) 과 실질적으로 유사하며 추가적인 세부사항들을 갖는다. 도 1 의 컴포넌트들과 동일하게 라벨링된 도 2 에서의 이들 컴포넌트들은 명료화를 목적으로 다시 설명되지 않는다.
퍼뮤테이션 모듈 (124) 은 프로세서 (138) 에 의해 및/또는 로더 (128) 에 의해 구현될 수도 있다. 예를 들어, 퍼뮤테이션은 메모리 (130) 내에 코드를 로딩할 때와 동시에, 또는 메모리 (130) 내에 코드를 로딩하기 전에 수행될 수도 있다. 일 예에서, 시스템 매니저 (142) 는 디벨로퍼 (140) 로부터 링킹 정보 (146) 와 함께 머신 언어 코드 (134) 를 수신할 수도 있다. 링킹 정보 (146) 는 실행가능 코드를 생성하기 위해 머신 언어 블록들 (114, 116, 118, 120, 122) 을 링크하는 방법에 대한 정보를 제공할 수도 있다. 예를 들어, 머신 언어 블록들 (114, 116, 118, 120 및 122) 이 컴파일될 때, 각각의 머신 언어 블록은 0 의 동일한 시작 어드레스를 갖고 시작할 수도 있다. 링킹 정보 (146) 는 프로그램 (132) 을 실행하기 위한 순서에 기초하여 상이한 머신 언어 블록들에 대해 시작 어드레스들을 할당할 수도 있다. 추가로, 머신 언어 블록들 (114, 116, 118, 120 및 122) 이 컴파일될 때, 서브루틴들에 대한 호출들이 심볼들을 이용하여 행해질 수도 있다. 링킹 정보 (146) 는 서브루틴의 로케이션을 식별하고 서브루틴에 관련된 오브젝트 코드를 추가함으로써 이들 심볼들을 분해할 수도 있다. 머신 언어 블록들 (114, 116, 118, 120 및 122) 에서의 명령들 중 일부는 라이브러리들 또는 다른 오브젝트들에 대한 호출들을 포함할 수도 있다. 링킹 정보 (146) 는 각각의 라이브러리들에 대한 호출들에 관한 정보를 제공할 수도 있고, 이들 라이브러리들에 관련된 머신 언어 코드를 추가할 수도 있다. 시스템 매니저 (142) 는 메모리에서의 링킹 정보 (146) 를 포함하는 머신 언어 코드 (134) 를 메모리, 이를 테면 파일 시스템 (144) 에 저장할 수도 있다.
프로그램 (132) 을 실행하라는 요청에 응답하여, 퍼뮤테이션 모듈 (124) 은 파일 시스템 (144) 으로부터 머신 언어 코드 (134) 를 취출하여 머신 언어 코드 (134) 를 메모리 (148) 에 저장할 수도 있다. 머신 언어 블록들이 메모리 로케이션들 (A, B, C, D, 및 E) 에 저장되는 것으로 도시되어 있다. 퍼뮤테이션 모듈 (124) 은 머신 언어 블록들 (114, 116, 118, 120, 122) 을 퍼뮤테이션하여 머신 언어 블록들 (114, 116, 118, 120, 122) 의 순서를 변경하고 퍼뮤테이션된 머신 언어 코드 (134p) 를 생성할 수도 있다. 이때, 메모리 (148) 에서, 머신 언어 블록들은 아래 설명된 비연산 (no operation) 블록 (150) 과 함께, 상이한 메모리 로케이션들에 저장된 것으로 도시되어 있다. 이와 유사하게, 퍼뮤테이션 모듈 (124) 은 변경된 링킹 정보 (146p) 를 생성하기 위해 퍼뮤테이션된 머신 언어 코드 (134p) 에 기초하여 링킹 정보 (146) 를 변경할 수도 있다. 머신 언어 블록들 (114, 116, 118, 120 및 122) 을 퍼뮤테이션한 후, 퍼뮤테이션 모듈 (124) 은 또한 퍼뮤테이션된 머신 언어 실행가능 코드 (126) 를 생성하기 위해 변경된 링킹 정보 (146p) 를 이용하여, 퍼뮤테이션된 머신 언어 블록들 (114, 116, 118, 120 및 122) 을 링크할 수도 있다. 링크는 링커 모듈 (129) 을 이용하여 수행될 수도 있다. 링커 모듈 (129) 은 퍼뮤테이션 모듈 (124) 및/또는 로더 (128) 의 부분일 수도 있다. 변경된 링킹 정보 (146p) 로 링킹하는 것은, 머신 언어 코드 (134) 를 퍼뮤테이션하기 때문에 변경될 수도 있는 로케이션들에서 퍼뮤테이션된 머신 언어 코드 (134p) 에서의 오브젝트들에 대한 호출들을 분해할 수도 있다. 퍼뮤테이션, 링크, 및 로딩은 시스템 (100) 에 의해 동시에 또는 개별적으로 수행될 수도 있다.
일 예에서, 머신 언어 블록들은 순서 (122, 118, 114, 116), 비연산 블록 (150) 을 갖도록 퍼뮤테이션된다. 변경된 링킹 정보 (146p) 는 프로그램 (132) 이 머신 언어 블록 (114) 에서 시작함을 나타내는 명령들을 제공할 수도 있으며, 이 블록은 메모리 (148) 에서 로케이션 (C) 을 점유한다. 변경된 링킹 정보 (146p) 는 그 후, 프로그램 (132) 이 로케이션 (D) 으로 순방향으로 이동함을 표시할 수도 있다. 그 후, 제어는 메모리 (148) 에서의 로케이션 (B) 등으로 점프할 수도 있다. 머신 언어 블록 (120) 이 프로세싱을 완료할 때, 변경된 링킹 정보는 프로세싱이 머신 언어 블록 (122) 에 대해 메모리 로케이션 (A) 으로 점프해야 함을 표시할 수도 있다. 퍼뮤테이션 모듈 (124) 은 또한, 퍼뮤테이션된 머신 언어 코드 (134p) 의 길이를 변경하기 위해 퍼뮤테이션된 머신 언어 코드 (134p) 에 대해, 퍼뮤테이션된 머신 언어 코드 (134p) 에 영향을 주지 않는, 하나 이상의 비연산 코드 (no operation code; "NOP")(150) 또는 다른 코드들을 추가할 수도 있다. 비연산 코드 (150) 를 추가하는 것은 변경되어진 퍼뮤테이션된 머신 언어 코드를 생성할 수도 있다.
머신 언어 코드 (134) 에서 머신 언어 블록들 (114, 116, 118, 120 및 122) 의 순서를 퍼뮤테이션함으로써, 머신 언어 실행가능 코드 (126) 에서의 머신 언어 블록들 (114, 116, 118, 120 및 122) 의 순서가 변경될 수도 있다. 머신 언어 실행가능 코드 (126) 에서의 머신 언어 블록들 (114, 116, 118, 120 및 122) 의 순서는 프로그램 (132) 의 실행을 위한 상이한 요청들에 대해 상이할 수도 있다. 그러나, 링킹 정보가 변경되었기 때문에, 머신 언어 블록들은 여전히 동일한 순서로 실행된다.
머신 언어 실행가능 코드 (126) 에서의 머신 언어 블록들 (114, 116, 118, 120 및 122) 의 순서를 변경하는 것은 메모리 (144) 에서의 프로그램 (132) 의 제어를 멀웨어 생성자가 획득하는 것을 방지할 수도 있다. 비연산 코드들 (150) 을 추가하는 것은, 또한 머신 언어 실행가능 코드 (126) 를 추가로 변경하여, 프로그램 (132) 의 제어를 멀웨어 생성자가 획득하는 것을 추가로 방지할 수도 있다. 비연산 코드들 (150) 을 추가하는 것은 실행가능 코드 (126) 의 풋프린트를 변경시킬 수도 있다. 그러나, 명령들의 순서를 퍼뮤테이션하는 것은 프로그램 (132) 의 기능에서의 변경들을 가져오지 않을 수도 있다.
도 3 은 본원에서 개시된 적어도 일부의 실시형태들에 따라 배열된, 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지를 구현하는데 이용될 수 있는 또 다른 예시적인 시스템을 나타낸다. 도 3 은 시스템 (100) 과 실질적으로 유사하고 추가적인 세부사항들을 갖는다. 도 1 및 도 2 의 컴포넌트들과 동일하게 라벨링된 도 3 에서의 이들 컴포넌트들은 명료화를 목적으로 다시 설명되지 않는다.
일 예에서, 디벨로퍼 (140) 는 실행가능 코드 (132) 를 생성하기 위해 프로그램 (132) 에서의 블록들을 컴파일하고 링크할 수도 있다. 시스템 매니저 (142) 는 컴파일러 모듈 (112) 로부터 링킹 정보 (146) 와 함께 실행가능 코드 (152) 를 수신할 수도 있다. 퍼뮤테이션 모듈 (124) 은 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 을 식별하기 위해 실행가능 코드 (152) 를 분석할 수도 있다. 예를 들어, 머신 언어 블록들은 각각의 블록의 시작 및 끝을 정의할 수도 있는 링킹 정보 (146) 를 이용하여 식별될 수 있다. 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 이 식별되면, 퍼뮤테이션 모듈 (124) 은 퍼뮤테이션된 머신 언어 코드 (134p) 를 생성하기 위해 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 을 퍼뮤테이션할 수도 있다.
프로그램 (132) 을 실행하라는 요청에 응답하여, 퍼뮤테이션 모듈 (124) 은 파일 시스템 (144) 으로부터 실행가능 코드 (152) 를 취출할 수도 있다. 퍼뮤테이션 모듈 (124) 은 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 의 순서를 변경하고 퍼뮤테이션된 머신 언어 코드 (134p) 를 생성하기 위해 머신 언어 블록들 (114, 116, 118, 120 및/또는 122) 을 식별 및 퍼뮤테이션할 수도 있다. 이와 유사하게, 퍼뮤테이션 모듈 (124) 은 변경된 링킹 정보 (146p) 를 생성하기 위해 링킹 정보 (146) 를 변경할 수도 있다.
퍼뮤테이션 모듈 (124) 은 퍼뮤테이션된 머신 언어 실행가능 코드 (126) 를 생성하기 위해, 변경된 링킹 정보 (146p) 를 이용하여 퍼뮤테이션된 머신 언어 코드 (134p) 를 또한 링크할 수도 있다. 퍼뮤테이션 모듈 (124) 은 퍼뮤테이션된 머신 언어 코드 (134p) 의 길이를 변경하기 위해 퍼뮤테이션된 머신 언어 코드 (134p) 에 하나 이상의 비연산 코드들 ("NOP")(150) 을 또한 추가할 수도 있다. 비연산 코드 (150) 를 추가하는 것은 변경되어진 퍼뮤테이션된 머신 언어 코드를 생성할 수도 있다.
다른 가능한 이점들 중에서, 본 개시물에 따른 시스템은 멀웨어에 의해 영향을 받는 것을 보다 어렵게 하는 프로그램을 제작할 수도 있다. 예를 들어, 멀웨어 피스가 프로그램에서의 에러를 활용하고 메모리에 바이러스성 실행가능 코드를 실행시키는 방법을 이전에 결정하였다면, 프로그램의 동일한 블록들이 퍼뮤테이션 후에 동일한 로케이션에 있지 않을 수도 있어, 이에 의해 에러의 활용이 보다 더 어렵게 된다. 프로그램의 블록들이 상이한 로케이션들에 존재할 수도 있기 때문에 동일한 활용이 동작되지 못할 수도 있다. 코드의 정확한 로케이션은 공격자에 의해 특정되지 못할 수도 있다. 퍼뮤테이션 및 링킹 단계들은 메모리 내에 프로그램의 초기 로딩 시에 이들이 한번 수행될 수도 있기 때문에 시스템에 대한 열화를 무시할 수도 있다. 시스템은 링킹 프로세서를 애플리케이션 로딩 프로세스로 이동시킬 수도 있고, 링크는 프로그램을 실행하라는 각각의 요청에 대하여 상이하게 수행될 수도 있다.
도 4 는 여기에 설명된 적어도 일부의 실시형태들에 따라 배열된, 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격들을 방지하는 예시적인 프로세스에 대한 플로우도를 나타낸다. 일부 예들에서, 도 4 에서의 프로세스는 위에 설명된 시스템 (100) 을 이용하여 구현될 수 있고 실행가능 코드를 생성하는데 이용될 수도 있다.
예시적인 프로세스는 S2, S4, S6, S8 및/또는 S10 중 하나 이상에 의해 예시된 바와 같은 하나 이상의 동작들, 액션들, 또는 기능들을 포함할 수도 있다.
프로세싱은 블록 S2, "머신 언어 코드를 수신, 머신 언어 코드는 둘 이상의 머신 언어 블록들을 포함할 수도 있음" 에서 시작할 수도 있다. 블록 S2 에서, 시스템 매니저에서의 프로세서는 머신 언어 코드를 수신할 수도 있다. 머신 언어 코드는 둘 이상의 머신 언어 블록들을 포함할 수도 있다. 머신 언어 코드는 프로세서가 실행가능 코드를 수신하도록 링크될 수도 있다.
프로세싱은 블록 S2 에서 블록 S4, "머신 언어 코드에 관련된 링킹 정보를 수신" 으로 계속 진행할 수도 있다. 블록 S4 에서, 프로세서는 머신 언어 코드에 관련된 링킹 정보 라인을 수신할 수도 있다. 프로세서는 프로그램을 실행하라는 요청에 응답하여 링킹 정보 및 머신 언어 코드를 수신할 수도 있다.
프로세싱은 블록 S4 에서 블록 S6, "퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션" 으로 계속 진행할 수도 있다. 블록 S6 에서, 프로세서는 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 머신 언어 블록들을 퍼뮤테이션할 수도 있다. 블록들은 코드를 실행하라는 각각의 요청에 대해 상이한 순서로 퍼뮤테이션될 수도 있다.
프로세싱은 또한, 블록 S6 에서 블록 S8, "변경된 링킹 정보를 생성하기 위해, 퍼뮤테이션된 머신 언어 코드에 기초하여 링킹 정보를 변경" 으로 계속 진행할 수도 있다. 블록 S8 에서, 프로세서는 변경된 링킹 정보를 생성하기 위해 퍼뮤테이션된 머신 언어 코드에 기초하여 링킹 정보를 변경할 수도 있다.
프로세싱은 블록 S8 에서 블록 S10, "실행가능 코드를 생성하기 위해 변경된 링킹 정보를 이용하여, 퍼뮤테이션된 머신 언어 코드를 링크" 로 계속 진행할 수도 있다. 블록 S10 에서, 프로세서는 실행가능 코드를 생성하기 위해, 변경된 링킹 정보의 이용에 의해 퍼뮤테이션된 머신 언어 코드를 링크할 수도 있다. 프로세서는 변경되어진 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 퍼뮤테이션된 머신 언어 코드에 비연산 블록을 추가할 수도 있다. 프로세서는 그 후, 변경된 링킹 정보를 이용하여, 변경되어진 퍼뮤테이션된 머신 언어 코드를 링크할 수도 있다.
도 5 는 본원에서 개시된 적어도 일부의 실시형태들에 따라 배열된, 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지를 구현하는데 이용될 수 있는 예시적인 컴퓨터 프로그램 제품 (300) 을 나타낸다. 프로그램 제품 (300) 은 신호 베어링 매체 (302) 를 포함할 수도 있다. 신호 베어링 매체 (302) 는 예를 들어, 프로세서에 의해 실행될 때 도 1 내지 도 4 에 대하여 위에 설명된 기능을 제공할 수도 있는 하나 이상의 명령들 (304) 을 포함할 수도 있다. 따라서, 예를 들어, 시스템 (100) 을 참조하여 보면, 퍼뮤테이션 모듈 (124) 은 매체 (302) 에 의해 시스템 (100) 에 전달된 명령들 (304) 에 응답하여, 도 5 에 도시된 블록들 중 하나 이상을 착수할 수도 있다.
일부 구현예들에서, 신호 베어링 매체 (302) 는, 하드디스크 드라이브, 컴팩트 디스크 (Compact Disc; CD), 디지털 다기능 디스크 (Digital Versatile Disk; DVD), 디지털 테이프, 메모리 등과 같은 그러나 이들에 제한되지 않는 컴퓨터 판독가능 매체 (306) 를 포함할 수도 있다. 일부 구현예들에서, 신호 베어링 매체 (302) 는, 메모리, 판독/기록 (R/W) CD들, R/W DVD들 등과 같은 그러나 이들에 제한되지 않는 기록가능 매체 (308) 를 포함할 수도 있다. 일부 구현예들에서, 신호 베어링 매체 (302) 는, 디지털 및/또는 아날로그 통신 매체 (예를 들어, 광섬유 케이블, 도파관, 유선 통신 링크, 무선 통신 링크 등) 와 같은 그러나 이에 제한되지 않는 통신 매체 (310) 를 포함할 수도 있다. 따라서, 예를 들어, 프로그램 제품 (300) 은 RF 신호 베어링 매체 (302) 에 의해 시스템 (100) 의 하나 이상의 모듈들에 전달될 수도 있고, 여기에서 신호 베어링 매체 (302) 는 무선 통신 매체 (310) (예를 들어, IEEE 802.11 표준에 순응하는 무선 통신 매체) 에 의해 전달된다.
도 6 은 본원에서 설명된 적어도 일부 실시형태들에 따라 배치된, 멀웨어 공격 방지를 구현하도록 배치된 예시적인 컴퓨팅 디바이스 (400) 를 나타내는 블록도이다. 아주 기본적인 구성 (402) 에서, 컴퓨팅 디바이스 (400) 는 일반적으로 하나 이상의 프로세서들 (404) 및 시스템 메모리 (406) 를 포함한다. 메모리 버스 (408) 는 프로세서 (404) 와 시스템 메모리 (406) 사이에서 통신하기 위해 이용될 수도 있다.
소망하는 구성에 따라, 프로세서 (404) 는, 마이크로프로세서 (μP), 마이크로컨트롤러 (μC), 디지털 신호 프로세서 (DSP), 또는 이들의 임의의 조합을 포함하는 임의의 형태를 취할 수도 있지만, 이들에 제한되는 것은 아니다. 프로세서 (404) 는 레벨 1 캐시 (410) 및 레벨 2 캐시 (412) 와 같은 하나 이상의 레벨들의 캐시, 프로세서 코어 (414), 및 레지스터 (416) 를 포함할 수도 있다. 예시적인 프로세서 코어 (414) 는 산술 로직 유닛 (ALU), 부동 소수점 유닛 (FPU), 디지털 신호 프로세싱 코어 (DSP Core), 또는 이들의 임의의 조합을 포함할 수도 있다. 예시적인 메모리 제어기 (418) 는 또한 프로세서 (404) 와 함께 이용될 수도 있고, 또는 몇몇 구현예들에서 메모리 제어기 (418) 는 프로세서 (404) 의 내부 부분일 수도 있다.
소망하는 구성에 따라, 시스템 메모리 (406) 는 휘발성 메모리 (이를 테면, RAM), 불휘발성 메모리 (이를 테면, ROM, 플래시 메모리 등) 또는 이들의 임의의 조합을 포함하는 임의의 형태를 취할 수도 있는데, 이들에 제한되는 것은 아니다. 시스템 메모리 (406) 는 오퍼레이팅 시스템 (420), 하나 이상의 애플리케이션들 (422), 및 프로그램 데이터 (424) 를 포함할 수도 있다. 애플리케이션 (422) 은 도 1 의 시스템 (100) 에 대하여 설명된 것을 포함한, 본원에서 설명된 기능들을 수행하도록 배열된 블록 코드 퍼뮤테이션 알고리즘 (426) 을 포함할 수도 있다. 프로그램 데이터 (424) 는 본원에서 설명된 바와 같이, 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격들의 방지를 구현하는데 유용할 수도 있는 블록 코드 퍼뮤테이션 데이터 (428) 를 포함할 수도 있다. 일부 실시형태들에서, 애플리케이션 (422) 은 블록 코드 퍼뮤테이션을 이용하여 멀웨어 공격들의 방지가 제공될 수도 있도록 오퍼레이팅 시스템 (420) 상의 프로그램 데이터 (424) 와 함께 동작하도록 배열될 수도 있다. 이 설명된 기본 구성 (402) 은 도 6 에서 안쪽의 점선 내의 이들 컴포넌트들에 의해 예시된다.
컴퓨팅 디바이스 (400) 는 부가적인 특징 또는 기능, 및 기본 구성 (402) 및 임의의 필요한 디바이스들 및 인터페이스들 사이의 통신들을 용이하게 하기 위한 부가적인 인터페이스들을 가질 수도 있다. 예를 들면, 버스/인터페이스 제어기 (430) 는 기본 구성 (402) 및 하나 이상의 데이터 스토리지 디바이스들 (432) 사이의 스토리지 인터페이스 버스 (434) 를 통한 통신들을 용이하게 하기 위해 이용될 수도 있다. 데이터 스토리지 디바이스들 (432) 은 탈착가능 스토리지 디바이스들 (436), 비탈착가능 스토리지 디바이스들 (438), 또는 이들의 조합일 수도 있다. 탈착가능 스토리지 및 비탈착가능 스토리지 디바이스들의 실시예들은, 몇몇을 거론하자면, 자기 디스크 디바이스들, 이를 테면, 플렉시블 디스크 드라이브들 및 하드 디스크 드라이블 (HDD), 광학 디스크 드라이브들, 이를 테면 컴팩트 디스크 (CD) 드라이브들 또는 디지털 다기능 디스크 (DVD) 드라이브들, 솔리드 스테이트 드라이브들 (SSD), 및 테이프 드라이브들을 포함한다. 예시적인 컴퓨터 저장 매체는, 컴퓨터 판독 가능 명령들, 데이터 구조들, 프로그램 모듈들 또는 다른 데이터와 같이, 정보 저장을 위한 임의의 방법 또는 기술에 의해 구현되는 휘발성 및 비휘발성, 탈착가능 및 비탈착가능 매체를 포함할 수도 있다.
시스템 메모리 (406), 탈착가능 스토리지 디바이스들 (436) 및 비탈착가능 스토리지 디바이스들 (438) 은 컴퓨터 저장 매체의 실시예들이다. 컴퓨터 저장 매체는, RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, 디지털 다기능 디스크들 (DVD) 또는 다른 광학 스토리지, 자기 카세트들, 자기 테이프, 자기 디스크 스토리지 또는 다른 자기 스토리지 디바이스들, 또는 소망의 정보를 저장하기 위해 사용될 수도 있고 컴퓨팅 디바이스 (400) 에 의해 액세스될 수도 있는 임의의 다른 매체를 포함하지만, 이들에 제한되는 것은 아니다. 임의의 이러한 컴퓨터 저장 매체는 컴퓨팅 디바이스 (400) 의 일부일 수도 있다.
컴퓨팅 디바이스 (400) 는 또한 여러 인터페이스 디바이스들 (예를 들면, 출력 디바이스들 (442), 주변 인터페이스들 (444), 및 통신 디바이스들 (446)) 로부터 기본 구성 (402) 으로의 버스/인터페이스 제어기 (430) 를 통한 통신을 용이하게 하기 위한 인터페이스 버스 (440) 를 포함할 수도 있다. 예시적인 출력 디바이스들 (442) 은 그래픽 프로세싱 유닛 (448), 및 오디오 프로세싱 유닛 (450) 을 포함하며, 이들은 하나 이상의 A/V 포트들 (452) 을 통해 디스플레이 또는 스피커들과 같은 여러 외부 디바이스들과 통신하도록 구성될 수도 있다. 예시적인 주변 인터페이스 (444) 는 직렬 인터페이스 제어기 (454) 또는 병렬 인터페이스 제어기 (456) 를 포함하며, 이들은 입력 디바이스들, 이를 테면 입력 디바이스들 (예를 들면, 키보드, 마우스, 펜, 음성 입력 디바이스, 터치 입력 디바이스 등) 또는 다른 주변 디바이스들 (예를 들어, 프린터, 스캐너 등) 과 하나 이상의 I/O 포트들 (458) 을 통해 통신하도록 구성될 수도 있다. 예시적인 통신 디바이스 (446) 는 네트워크 제어기 (460) 를 포함하며, 이것은 하나 이상의 통신 포트들 (464) 을 통한 네트워크 통신 링크 상에서 하나 이상의 다른 컴퓨팅 디바이스들 (462) 과의 통신을 용이하게 하도록 배열될 수도 있다.
네트워크 통신 링크는 통신 매체의 일 예일 수도 있다. 통신 매체는 일반적으로 컴퓨터 판독 가능 명령들, 데이터 구조들, 프로그램 모듈들, 또는 반송파 또는 변조된 데이터 신호에서의 다른 데이터, 이를 테면, 반송파, 또는 다른 전송 메카니즘에 의해 구체화될 수도 있고, 임의의 정보 전송 매체를 포함할 수도 있다. "변조된 데이터 신호"는 특성들 세트의 하나 이상을 구비하거나 또는 신호에 정보를 인코딩하도록 변경된 신호일 수도 있다. 예를 들어, 비제한적으로, 통신 매체는 유선 매체, 이를 테면, 유선 네트워크 또는 직결 접속, 및 무선 매체, 이를 테면 음향, 라디오 주파수 (RF), 마이크로파, 적외선 (IR), 및 다른 무선 매체를 포함할 수도 있다. 본원에서 이용된 컴퓨터 판독가능 매체는 저장 매체 및 통신 매체 양쪽 모두를 포함할 수도 있다.
컴퓨팅 디바이스 (400) 는, 소형 형태 팩터 포터블 (또는 모바일) 전자 디바이스, 이를 테면, 셀폰, 개인 휴대 정보 단말기 (PDA), 퍼스널 미디어 플레이어 디바이스, 무선 웹-워치 디바이스, 퍼스널 헤드셋 디바이스, 애플리케이션 특정 디바이스, 또는 임의의 상기 기능들을 포함하는 하이브리드 디바이스의 일부로서 구현될 수도 있다. 컴퓨팅 디바이스 (400) 는 또한 랩톱 컴퓨터 및 비랩톱 컴퓨터 구성들 양자를 포함하는 퍼스널 컴퓨터로서 구현될 수도 있다.
본 개시물은 여러 양태들을 설명하는 것으로 의도된 본 출원에서 설명된 특정 실시형태들에 의해 제한되지 않는다. 많은 수정예들 및 변형예들이 본 개시물의 취지와 범위를 벗어나지 않으면서 이루어질 수 있으며, 당업자에게는 명백할 것이다. 본 개시물의 범위 내에 있는 기능적으로 등가의 방법들 및 장치들은, 본원에서 열거된 것들에 부가하여, 상기 설명들로부터 당업자에게는 명백할 것이다. 이러한 변경들 및 수정들은 첨부된 청구범위의 범위 내에 드는 것으로 의도된다. 본 개시물은 이러한 청구범위에 부여된 등가의 모든 범위와 함께, 첨부된 청구범위에 의해서만 제한될 것이다. 본 개시는 특정 방법들, 시약들, 화합물 조성 또는 생물학적 시스템들로 제한되지 않으며, 당연히 변경될 수 있음이 이해되어야만 한다. 또한, 본원에서 사용된 전문 용어는 특정 구체예를 설명하려는 목적이며, 제한하려는 의도는 아님을 이해해야 할 것이다.
본원에서의 실질적인 임의의 단복수 용어들의 사용과 관련하여, 당업자라면, 상황 및/또는 어플리케이션에 적절하게 복수에서 단수로 및/또는 단수에서 복수로 변경할 수 있을 것이다. 본원에서의 여러 단/복수 치환들은 명확화를 위해 명백히 설명될 수도 있다.
당업자라면, 일반적으로, 본원, 특히 하기의 특허청구범위(예를 들어, 첨부된 청구항들 특징부) 에서 사용된 용어들은 일반적으로, "열린" 용어들로서 의도되며 (예를 들어, 용어 "포함하는" 은 " 포함하지만 제한되지 않는"으로 해석되어야 하고, 용어 "구비하는" 은 "적어도 구비하는" 으로 해석되어야 하며, 용어 "포함한다"는 포함하나 제한되지 않는"으로 해석되는 등) 로서 의도된다는 것이 이해될 것이다. 하기의 청구범위에서 특정 청구항의 인용을 의도하면, 그러한 의도는 청구항에서 명시적으로 인용될 것이며, 이러한 인용이 없으면 그러한 의도가 없는 것으로 당업자는 더 이해할 수 있을 것이다. 예를 들면, 이해를 돕기 위한 것으로서, 하기의 청구범위에서는, 청구항의 인용관계를 도입하기 위해, 도입부에 "적어도 하나" 및 "하나 이상의"의 사용을 포함할 수도 있다. 그러나, 이러한 구들의 사용은, 부정 관사 "a(본 번역문에서는 특별히 번역하지 않음)" 또는 "an(본 번역문에서는 특별히 번역하지 않음)"에 의한 청구항의 인용 관계의 도입이, 이렇게 도입된 청구항 인용관계를 포함하는 임의의 특정 청구항을, 그 동일한 청구항이 도입구 "하나 이상의" 또는 "적어도 하나" 및 "a" 또는 "an"(예를 들면, "a" 및/또는 "an"은 "적어도 하나" 또는 "하나 이상"으로 해석되어야 한다)과 같은 부정 관사들을 포함하는 경우에도, 단지 하나의 인용항을 포함하는 구체예들로 제한한다는 것을 의미하는 것으로 이해되어선 안되며; 청구항 인용관계를 도입하기 위해 정관사를 사용하는 경우에도 마찬가지이다. 또한, 특정 인용항이 명시적으로 인용되어도, 당업자라면, 이러한 인용은 적어도 인용된 번호를 의미하는 것으로 이해되어야 한다(예를 들면, 다른 수정자들이 없는 "두 인용항들"의 순수한 인용은 적어도 두 개의 인용항들 또는 두개 이상의 인용항들을 의미한다). 또한, "A, B 및 C 중 적어도 하나 등"과 유사한 또한, "A, B, 및 C 등 중 적어도 하나" 와 통상 유사한 것들이 이용되는 이러한 예들에서, 일반적으로 그러한 구성은 지식을 지닌 당업자는 종래의 것을 이해할 것이다 (예를 들어, "A, B, 및 C 중 적어도 하나를 갖는 시스템" 은 A 만 단독으로, B 만 단독으로, C 만 단독으로, A 와 B 를 함께, A 와 C 를 함께, B 와 C 를 함께, 그리고/또는 A, B 와 C 를 함께 갖는 등의 시스템을 포함하나, 이로 제한되지는 않을 것이다). 또한, "A, B, 또는 C 등 중 적어도 하나" 와 통상 유사한 것들이 이용되는 이러한 예들에서, 일반적으로 그러한 구성은 지식을 지닌 당업자는 종래의 것을 이해할 것이다 (예를 들어, "A, B, 또는 C 중 적어도 하나를 갖는 시스템" 은 A 만 단독으로, B 만 단독으로, C 만 단독으로, A 와 B 를 함께, A 와 C 를 함께, B 와 C 를 함께, 그리고/또는 A, B 와 C 를 함께 갖는 등의 시스템을 포함하나, 이로 제한되지는 않을 것이다). 상세한 설명, 청구항들, 또는 도면들 어디에서든, 2 개 이상의 대안적인 용어들을 나타내는 사실상 임의의 이접 단어 및/또는 구는 용어들 중 하나, 용어들 중 어느 일방, 또는 용어들 양자 모두를 포함하는 가능성들을 고려한다는 것이 이해됨이 당업자들에 의해 또한 이해될 것이다. 예를 들어, 구 "A 또는 B" 는 "A" 나 "B", 또는 "A 및 B" 의 가능성들을 포함하는 것으로 이해될 것이다.
또한, 본 명세서의 특징들 또는 양태들이 마커쉬 (Markush) 군들에 의해 기술되는 경우에, 당업자는 본 개시물이 또한 이에 따라 마커쉬 군의 임의의 개별 요소 또는 요소들의 하위군에 의해 기술됨을 인식할 것이다.
당업자에 의해 이해되는 바와 같이, 임의의 그리고 모든 목적을 위해, 특히 서면 기재를 제공하는 관점에서, 본 명세서에 개시된 모든 범위는 또한 임의의 그리고 모든 가능한 하위범위 (subrange) 및 그 하위범위들의 조합을 포괄한다. 임의의 기재된 범위는 충분히 기술하고 동일 범위가 적어도 2 등분, 3 등분, 4 등분, 5 등분, 10 등분 등으로 분할되게 하는 것으로서 용이하게 인식될 수 있다. 비한정적 예로서, 본 명세서에서 논의된 각각의 범위는 용이하게 하위 3 분의 1, 중위 3 분의 1 및 상위 3 분의 1 등으로 분할될 수도 있다. 또한, 당업자에 의해 이해되는 바와 같이, "까지", "적어도", "보다 큰", "미만" 등과 같은 모든 용어는 인용된 수를 포함하고 계속해서 상술한 바와 같은 하위범위들로 분할될 수도 있는 범위를 언급한다. 마지막으로, 당업자에 의해 이해되는 바와 같이, 범위는 각각의 개별 요소를 포함한다. 따라서, 예를 들면, 1-3 셀을 갖는 그룹은 1 셀, 2 셀, 또는 3 셀을 갖는 그룹을 의미할 수 있다. 마찬가지로, 1-5 셀을 갖는 그룹은 1 셀, 2 셀, 3 셀, 4 셀, 또는 5 셀 등을 갖는 그룹을 의미할 수 있다.
많은 양태들 및 실시형태들이 여기에 설명되어 있지만, 다른 양태들 및 실시형태들이 당업자에게는 명백할 것이다. 여기에 설명된 여러 양태들 및 실시형태들은 설명의 목적을 위한 것이지 제한하기 위한 것이 아니며, 그 진정한 범위 및 사상은 다음의 청구범위에서 기재된다.

Claims (20)

  1. 실행가능 코드를 생성하는 방법으로서,
    프로세서에 의해,
    머신 언어 코드를 수신하는 것으로서, 상기 머신 언어 코드는 둘 이상의 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 수신하는 것;
    상기 머신 언어 코드의 상기 둘 이상의 머신 언어 블록들의 제 1 의 각각의 로케이션들에 관련된 링킹 정보를 수신하는 것;
    퍼뮤테이션 (permute) 된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 퍼뮤테이션된 머신 언어 코드는 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하는 것;
    상기 퍼뮤테이션된 머신 언어 코드의 상기 둘 이상의 머신 언어 블록들의 제 2 의 각각의 로케이션들에 관련된, 변경된 링킹 정보를 생성하기 위해 상기 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하는 것; 및
    상기 실행가능 코드를 생성하기 위해 상기 변경된 링킹 정보를 이용하여 상기 퍼뮤테이션된 머신 언어 코드의 상기 머신 언어 블록들을 링크하는 것을 포함하는, 실행가능 코드를 생성하는 방법.
  2. 제 1 항에 있어서,
    프로그램을 실행하라는 요청에 응답하여 메모리로부터 상기 머신 언어 코드와 상기 링킹 정보를 취출하는 것을 더 포함하는, 실행가능 코드를 생성하는 방법.
  3. 제 1 항에 있어서,
    변경되어진 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 퍼뮤테이션된 머신 언어 코드에 비연산 블록 (no operation block) 을 추가하는 것; 및
    상기 실행가능 코드를 생성하기 위해 상기 변경된 링킹 정보를 이용하여 상기 변경되어진 퍼뮤테이션된 머신 언어 코드를 링크하는 것을 더 포함하는, 실행가능 코드를 생성하는 방법.
  4. 제 1 항에 있어서,
    상기 실행가능 코드를 메모리에 로딩하고 상기 실행가능 코드를 실행하는 것을 더 포함하는, 실행가능 코드를 생성하는 방법.
  5. 제 1 항에 있어서,
    프로그램을 실행하라는 제 1 요청에 응답하여,
    제 1 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 제 1 퍼뮤테이션된 머신 언어 코드는 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하는 것;
    제 1 변경된 링킹 정보를 생성하기 위해 상기 제 1 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하는 것; 및
    제 1 실행가능 코드를 생성하기 위해 상기 제 1 변경된 링킹 정보를 이용하여 상기 제 1 퍼뮤테이션된 머신 언어 코드를 링크하는 것;
    상기 프로그램을 실행하라는 제 2 요청에 응답하여,
    제 2 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 제 2 퍼뮤테이션된 머신 언어 코드는 상기 제 1 퍼뮤테이션된 머신 언어 코드와 상이하고 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하는 것;
    제 2 변경된 링킹 정보를 생성하기 위해 상기 제 2 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하는 것; 및
    제 2 실행가능 코드를 생성하기 위해 상기 제 2 변경된 링킹 정보를 이용하여 상기 제 2 퍼뮤테이션된 머신 언어 코드를 링크하는 것으로서, 상기 제 2 실행가능 코드는 상기 제 1 실행가능 코드와는 상이한 순서로 상기 머신 언어 블록들을 포함하는, 상기 제 2 퍼뮤테이션된 머신 언어 코드를 링크하는 것을 더 포함하는, 실행가능 코드를 생성하는 방법.
  6. 제 1 항에 있어서,
    머신 언어 코드를 수신하는 것으로서, 상기 머신 언어 코드는 둘 이상의 링크된 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 수신하는 것을 더 포함하는, 실행가능 코드를 생성하는 방법.
  7. 제 1 항에 있어서,
    둘 이상의 링크된 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 수신하는 것;
    상기 머신 언어 블록들을 식별하는 것; 및
    상기 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것을 더 포함하는, 실행가능 코드를 생성하는 방법.
  8. 실행가능 코드를 생성하도록 구성되는 디바이스로서,
    메모리; 및
    상기 메모리와 통신하도록 구성되는 프로세서를 포함하고,
    상기 프로세서는,
    상기 메모리로부터 머신 언어 코드를 취출하는 것으로서, 상기 머신 언어 코드는 둘 이상의 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 취출하고;
    상기 메모리로부터 링킹 정보를 취출하는 것으로서, 상기 링킹 정보는 상기 머신 언어 코드의 상기 둘 이상의 머신 언어 블록들의 제 1 의 각각의 로케이션들에 관련된, 상기 링킹 정보를 취출하고;
    퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 퍼뮤테이션된 머신 언어 코드는 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하고;
    상기 퍼뮤테이션된 머신 언어 코드의 상기 둘 이상의 머신 언어 블록들의 제 2 의 각각의 로케이션들에 관련된, 변경된 링킹 정보를 생성하기 위해 상기 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하고; 그리고
    상기 실행가능 코드를 생성하기 위해, 상기 변경된 링킹 정보의 이용에 의해 상기 퍼뮤테이션된 머신 언어 코드의 상기 머신 언어 블록들을 링크하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  9. 제 8 항에 있어서,
    상기 프로세서는 또한, 프로그램을 실행하라는 요청에 응답하여 상기 메모리로부터 상기 머신 언어 코드와 상기 링킹 정보를 취출하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  10. 제 8 항에 있어서,
    상기 프로세서는 또한,
    변경되어진 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 퍼뮤테이션된 머신 언어 코드에 비연산 블록을 추가하고; 그리고
    상기 실행가능 코드를 생성하기 위해, 상기 변경된 링킹 정보의 이용에 의해 상기 변경되어진 퍼뮤테이션된 머신 언어 코드를 링크하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  11. 제 8 항에 있어서,
    상기 실행가능 코드를 상기 메모리 내에 로딩하고 상기 실행가능 코드를 실행하도록 구성되는 로더를 더 포함하는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  12. 제 8 항에 있어서,
    상기 프로세서는 또한,
    프로그램을 실행하라는 제 1 요청에 응답하여,
    제 1 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 제 1 퍼뮤테이션된 머신 언어 코드는 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하고;
    제 1 변경된 링킹 정보를 생성하기 위해 상기 제 1 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하고; 그리고
    제 1 실행가능 코드를 생성하기 위해 상기 제 1 변경된 링킹 정보의 이용에 의해 상기 제 1 퍼뮤테이션된 머신 언어 코드를 링크하고;
    상기 프로그램을 실행하라는 제 2 요청에 응답하여,
    제 2 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 제 2 퍼뮤테이션된 머신 언어 코드는 상기 제 1 퍼뮤테이션된 머신 언어 코드와 상이하고 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하고;
    제 2 변경된 링킹 정보를 생성하기 위해 상기 제 2 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하고; 그리고
    제 2 실행가능 코드를 생성하기 위해 상기 제 2 변경된 링킹 정보의 이용에 의해 상기 제 2 퍼뮤테이션된 머신 언어 코드를 링크하는 것으로서, 상기 제 2 실행가능 코드는 상기 제 1 실행가능 코드와는 상이한 순서로 상기 머신 언어 블록들을 포함하는, 상기 제 2 퍼뮤테이션된 머신 언어 코드를 링크하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  13. 제 8 항에 있어서,
    상기 프로세서는 상기 머신 언어 코드를 취출하는 것으로서, 상기 머신 언어 코드는 둘 이상의 링크된 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 취출하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  14. 제 8 항에 있어서,
    상기 프로세서는,
    상기 머신 언어 코드를 취출하는 것으로서, 상기 머신 언어 코드는 둘 이상의 링크된 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 취출하고;
    상기 머신 언어 블록들을 식별하고; 그리고
    상기 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 디바이스.
  15. 실행가능 코드를 생성하도록 구성되는 시스템으로서,
    제 1 프로세서; 및
    상기 제 1 프로세서와 통신하도록 구성되는 제 2 프로세서를 포함하고,
    상기 제 1 프로세서는,
    프로그램을 수신하고;
    둘 이상의 머신 언어 블록들을 포함하는 머신 언어 코드를 생성하도록 상기 프로그램을 컴파일하고; 그리고
    상기 머신 언어 코드의 상기 둘 이상의 머신 언어 블록들의 제 1 의 각각의 로케이션들에 관련된 링킹 정보를 생성하도록 구성되고; 그리고
    상기 제 2 프로세서는,
    상기 머신 언어 코드를 수신하고;
    상기 링킹 정보를 수신하고;
    퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 퍼뮤테이션된 머신 언어 코드는 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하고;
    상기 퍼뮤테이션된 머신 언어 코드의 상기 둘 이상의 머신 언어 블록들의 제 2 의 각각의 로케이션들에 관련된, 변경된 링킹 정보를 생성하기 위해 상기 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하고; 그리고
    상기 실행가능 코드를 생성하기 위해, 상기 변경된 링킹 정보의 이용에 의해 상기 퍼뮤테이션된 머신 언어 코드의 상기 머신 언어 블록들을 링크하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 시스템.
  16. 제 15 항에 있어서,
    상기 제 2 프로세서는 프로그램을 실행하라는 요청에 응답하여 메모리로부터 상기 머신 언어 코드와 상기 링킹 정보를 취출하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 시스템.
  17. 제 15 항에 있어서,
    상기 제 2 프로세서는 또한,
    변경되어진 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 퍼뮤테이션된 머신 언어 코드에 비연산 블록을 추가하고; 그리고
    상기 실행가능 코드를 생성하기 위해, 상기 변경된 링킹 정보의 이용에 의해 상기 변경되어진 퍼뮤테이션된 머신 언어 코드를 링크하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 시스템.
  18. 제 15 항에 있어서,
    상기 실행가능 코드를 메모리 내에 로딩하고 상기 실행가능 코드를 실행하도록 구성되는 로더를 더 포함하는, 실행가능 코드를 생성하도록 구성되는 시스템.
  19. 제 15 항에 있어서,
    상기 제 2 프로세서는 또한,
    프로그램을 실행하라는 제 1 요청에 응답하여,
    제 1 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 제 1 퍼뮤테이션된 머신 언어 코드는 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하고;
    제 1 변경된 링킹 정보를 생성하기 위해 상기 제 1 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하고; 그리고
    제 1 실행가능 코드를 생성하기 위해 상기 제 1 변경된 링킹 정보의 이용에 의해 상기 제 1 퍼뮤테이션된 머신 언어 코드를 링크하고;
    상기 프로그램을 실행하라는 제 2 요청에 응답하여,
    제 2 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하는 것으로서, 상기 제 2 퍼뮤테이션된 머신 언어 코드는 상기 제 1 퍼뮤테이션된 머신 언어 코드와 상이하고 상기 머신 언어 코드와 상이한, 상기 머신 언어 블록들을 퍼뮤테이션하고;
    제 2 변경된 링킹 정보를 생성하기 위해 상기 제 2 퍼뮤테이션된 머신 언어 코드에 기초하여 상기 링킹 정보를 변경하고; 그리고
    제 2 실행가능 코드를 생성하기 위해 상기 제 2 변경된 링킹 정보의 이용에 의해 상기 제 2 퍼뮤테이션된 머신 언어 코드를 링크하는 것으로서, 상기 제 2 실행가능 코드는 상기 제 1 실행가능 코드와는 상이한 순서로 상기 머신 언어 블록들을 포함하는, 상기 제 2 퍼뮤테이션된 머신 언어 코드를 링크하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 시스템.
  20. 제 15 항에 있어서,
    상기 제 2 프로세서는,
    상기 머신 언어 코드를 취출하는 것으로서, 상기 머신 언어 코드는 둘 이상의 링크된 머신 언어 블록들을 포함하는, 상기 머신 언어 코드를 취출하고;
    상기 머신 언어 블록들을 식별하고; 그리고
    상기 퍼뮤테이션된 머신 언어 코드를 생성하기 위해 상기 머신 언어 블록들을 퍼뮤테이션하도록 구성되는, 실행가능 코드를 생성하도록 구성되는 시스템.
KR1020157013449A 2012-12-06 2012-12-06 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지 KR101681440B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2012/068115 WO2014088576A1 (en) 2012-12-06 2012-12-06 Malware attack prevention using block code permutation

Publications (2)

Publication Number Publication Date
KR20150074143A KR20150074143A (ko) 2015-07-01
KR101681440B1 true KR101681440B1 (ko) 2016-11-30

Family

ID=50882566

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157013449A KR101681440B1 (ko) 2012-12-06 2012-12-06 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지

Country Status (3)

Country Link
US (1) US20140165197A1 (ko)
KR (1) KR101681440B1 (ko)
WO (1) WO2014088576A1 (ko)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9270647B2 (en) 2013-12-06 2016-02-23 Shape Security, Inc. Client/server security by an intermediary rendering modified in-memory objects
US8954583B1 (en) 2014-01-20 2015-02-10 Shape Security, Inc. Intercepting and supervising calls to transformed operations and objects
US9544329B2 (en) * 2014-03-18 2017-01-10 Shape Security, Inc. Client/server security by an intermediary executing instructions received from a server and rendering client application instructions
US9858440B1 (en) * 2014-05-23 2018-01-02 Shape Security, Inc. Encoding of sensitive data
US9003511B1 (en) 2014-07-22 2015-04-07 Shape Security, Inc. Polymorphic security policy action
US9602543B2 (en) 2014-09-09 2017-03-21 Shape Security, Inc. Client/server polymorphism using polymorphic hooks
US9438625B1 (en) 2014-09-09 2016-09-06 Shape Security, Inc. Mitigating scripted attacks using dynamic polymorphism
US10834101B2 (en) 2016-03-09 2020-11-10 Shape Security, Inc. Applying bytecode obfuscation techniques to programs written in an interpreted language
CN106295343B (zh) * 2016-08-24 2019-03-12 北京奇虎测腾安全技术有限公司 一种基于序列化中间表示的源代码分布式检测系统及方法
US11349816B2 (en) 2016-12-02 2022-05-31 F5, Inc. Obfuscating source code sent, from a server computer, to a browser on a client computer
US11741197B1 (en) 2019-10-15 2023-08-29 Shape Security, Inc. Obfuscating programs using different instruction set architectures

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040268322A1 (en) * 2001-11-26 2004-12-30 Chow Stanley T. Secure method and system for computer protection
US20110055592A1 (en) 2009-08-26 2011-03-03 Nxp B.V. Method of obfuscating a code

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7770016B2 (en) * 1999-07-29 2010-08-03 Intertrust Technologies Corporation Systems and methods for watermarking software and other media
US8041958B2 (en) * 2006-02-14 2011-10-18 Lenovo (Singapore) Pte. Ltd. Method for preventing malicious software from execution within a computer system
US7899977B2 (en) * 2006-12-08 2011-03-01 Pandya Ashish A Programmable intelligent search memory
US8544089B2 (en) * 2009-08-17 2013-09-24 Fatskunk, Inc. Auditing a device
US8495299B2 (en) * 2009-11-16 2013-07-23 Microsoft Corporation Non-blocking data transfer via memory cache manipulation

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040268322A1 (en) * 2001-11-26 2004-12-30 Chow Stanley T. Secure method and system for computer protection
US20110055592A1 (en) 2009-08-26 2011-03-03 Nxp B.V. Method of obfuscating a code

Also Published As

Publication number Publication date
WO2014088576A1 (en) 2014-06-12
KR20150074143A (ko) 2015-07-01
US20140165197A1 (en) 2014-06-12

Similar Documents

Publication Publication Date Title
KR101681440B1 (ko) 블록 코드 퍼뮤테이션을 이용한 멀웨어 공격 방지
US10599846B2 (en) Segregating executable files exhibiting network activity
TWI590096B (zh) 來自程序的返回目標限制返回指令、處理器、方法、及系統
TWI769595B (zh) 用以保護影子堆疊之處理器、方法、系統和指令
JP5707011B2 (ja) 統合分岐先・述語予測
US8499352B2 (en) Obfuscated malware detection
KR101480821B1 (ko) 리턴-지향형 프로그래밍을 억제하기 위한 동적 실행 방지
US9135443B2 (en) Identifying malicious threads
US10223528B2 (en) Technologies for deterministic code flow integrity protection
KR20130044290A (ko) 악성 소프트웨어를 분석 및 검출하기 위한 방법 및 장치
US20110083184A1 (en) Anti-malware scanning in parallel processors of a graphics processing unit
JP2014508363A (ja) アンチマルウェアメタデータのルックアップを行うためのシステム及び方法
EP3373133B1 (en) Secure just-in-time (jit) code generation
JP5989599B2 (ja) 情報処理装置、および、情報処理方法
Kim et al. Fast and space-efficient defense against jump-oriented programming attacks
JP6081540B2 (ja) 広告コンテンツを悪意のあるソフトウェアと互いに関係付けること
WO2022044021A1 (en) Exploit prevention based on generation of random chaotic execution context
Yin et al. Dynamic Binary Analysis Platform

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