KR100917370B1 - 프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법 - Google Patents

프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법 Download PDF

Info

Publication number
KR100917370B1
KR100917370B1 KR1020060108147A KR20060108147A KR100917370B1 KR 100917370 B1 KR100917370 B1 KR 100917370B1 KR 1020060108147 A KR1020060108147 A KR 1020060108147A KR 20060108147 A KR20060108147 A KR 20060108147A KR 100917370 B1 KR100917370 B1 KR 100917370B1
Authority
KR
South Korea
Prior art keywords
program
address
caller
access target
caller program
Prior art date
Application number
KR1020060108147A
Other languages
English (en)
Other versions
KR20070056940A (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 KR20070056940A publication Critical patent/KR20070056940A/ko
Application granted granted Critical
Publication of KR100917370B1 publication Critical patent/KR100917370B1/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/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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F1/00Details not covered by groups G06F3/00 - G06F13/00 and G06F21/00
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/468Specific access rights for resources, e.g. using capability register

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Storage Device Security (AREA)

Abstract

컴퓨터 판독 가능 매체는 호출원 프로그램으로부터의 호출 명령에 따른 처리와, 상기 처리에 의한 처리 결과를 상기 호출원 프로그램으로 반환하는 반환 처리를 포함하는 서브 처리를 컴퓨터에 실행시키기 위한 프로그램을 저장한다. 상기 서브 처리는 상기 반환 처리를 실행하기 전에, 상기 프로그램이 억세스하는 억세스 목표 어드레스이며 상기 호출원 프로그램의 메모리 영역에 할당된 억세스 목표 어드레스를 취득하는 어드레스 취득 처리와, 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정하는 판정 처리와, 판정의 결과, 상기 호출원 프로그램이 정규가 아닐 경우, 상기 서브 처리의 실행을 중단하는 중단 처리를 포함한다.
CPU, 하드 디스크, 메인 메모리, 메인 프로그램, 서브 프로그램

Description

프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을 실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한 프로그램 제어 방법{INFORMATION PROCESSING APPARATUS THAT EXECUTES PROGRAM, COMPUTER READABLE MEDIUM IN WITCH PROGRAM IS STORED, AND PROGRAM CONTROL METHOD FOR EXECUTING PROGRAM}
도 1은 실시예나 제 1 내지 제 3 변형예에서의 정보 처리 장치의 기능 블록을 나타내는 도면.
도 2는 정보 처리 장치가 구비하는 하드 디스크의 개념도.
도 3은 메인 메모리에 구축된 어드레스 공간의 모식도.
도 4는 실시예에서, 호출원 프로그램으로부터 호출된 경우에서의 서브 프로그램의 처리 순서를 나타내는 플로우 차트.
도 5는 제 1 변형예에서, 호출원 프로그램으로부터 호출된 경우에서의 서브 프로그램의 처리 순서를 나타내는 플로우 차트.
도 6은 재할당이 행해지고 있는지의 여부를 검증하는 경우에서의 서브 프로그램의 처리 순서를 나타내는 플로우 차트.
도 7은 제 2 변형예에서, 호출원 프로그램으로부터 호출된 경우에서의 서브 프로그램의 처리 순서를 나타내는 플로우 차트.
도면의 주요 부분에 대한 부호의 설명
10…CPU 20…하드 디스크 22…메인 프로그램
24…서브 프로그램 30…메인 메모리
본 발명은 메인 프로그램으로부터의 호출 명령에 따라 소정의 처리를 행하고, 처리 결과를 그 메인 프로그램에 반환하는 서브 프로그램에 관한 것이다.
종래로부터, 메인 프로그램으로부터의 호출 명령에 따라 소정의 처리를 행하고, 처리 결과를 그 메인 프로그램에 반환하는 플러그인 등의 서브 프로그램이 알려져 있다.
이러한 서브 프로그램으로부터 메인 프로그램으로 반환되는 처리 결과 중에는, 이용 제한에 관련 있는 억세스(access) 권한 정보나, 비공개 정보, 복호 키(decryption key) 등 부정하게 이용되면 문제가 발생하는 바와 같은 데이터가 포함되어 있는 경우가 있다.
이러한 기밀성이 높은 데이터를 서브 프로그램으로부터 메인 프로그램으로 넘길 때, 메인 프로그램을 위장하는 공격이 알려져 있다. 예를 들면, 메인 프로그램 그 자체를 개찬(改竄; falsify)하거나, 또는 메인 프로그램과 서브 프로그램 사이에 끼어들어, 그 사이에서 주고받아지는 데이터를 도청하거나 개찬하는 공격이 가능해진다.
일본 공개특허 2005-166051호 공보에는, API(어플리케이션 프로그램 인터페 이스)의 호출을 API 후크 엔진(hook engine)이 후크해서 API 후크 엔진이 호출되는 API의 대상 프로세스나 처리 종류에 따라 API 처리를 속행 또는 중단할지의 여부를 판단함으로써, API에 부정 억세스되는 것을 방지하는 기술이 개시되어 있다.
일본 공개특허 2005-166051호 공보에 기재된 API 후크 엔진은 호출되는 API의 종류에 따라 호출 대상인 API의 처리를 속행 또는 중단할지의 여부를 판단하고 있다. 그러나, 이 API 후크 엔진은 호출되는 API의 종류가 허가 대상인 API라면, API의 처리는 속행된다. 그 때문에, 예를 들면, 위장한 메인 프로그램이 허가 대상인 API의 호출을 행한 경우, API 후크 엔진은 그 호출을 허가하게 된다. 따라서, 일본 공개특허 2005-166051호 공보에 기재된 기술에서는, 예를 들면, 허가 대상인 API로부터 위장한 메인 프로그램으로 기밀 정보 등이 유출될 우려가 있다.
본 발명은 호출원 프로그램으로부터의 호출 명령에 따라 소정의 처리를 행하고, 처리 결과를 그 호출원 프로그램으로 반환하는 서브 프로그램에서, 처리 결과에 대한 보안의 강화를 도모한다.
본 발명에 따른 매체는 메인 프로그램으로부터의 호출 명령에 따른 소정 처리와, 상기 소정 처리에 의한 처리 결과를 상기 메인 프로그램으로 반환하는 반환 처리를 포함하는 서브 처리를 컴퓨터에 실행시키기 위한 서브 프로그램을 저장한 컴퓨터 판독 가능 매체이다. 상기 서브 처리는 상기 반환 처리를 실행하기 전에, 상기 서브 프로그램이 억세스하는 억세스 목표 어드레스이며 상기 메인 프로그램의 메모리 영역에 할당된 억세스 목표 어드레스를 취득하는 어드레스 취득 처리와, 취득한 억세스 목표 어드레스에 의거하여 상기 메인 프로그램이 정규의 메인 프로그램인지의 여부를 판정하는 판정 처리와, 판정의 결과, 상기 메인 프로그램이 정규의 메인 프로그램이 아닌 경우, 상기 반환 처리를 실행하기 전에 상기 서브 처리의 실행을 중단하는 중단 처리를 포함한다.
본 발명에 따른 매체의 한 형태에서, 상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 사용하는 메모리 영역에 관한 메모리 정보를 취득하고, 상기 메모리 정보에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정한다.
또한, 본 발명에 따른 매체의 한 형태에서, 상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램의 속성 정보를 취득하고, 상기 속성 정보와 정규의 호출원 프로그램의 속성 정보를 비교함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정한다.
또한, 본 발명에 따른 매체의 한 형태에서, 상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스와 정규의 호출원 프로그램에서의 본래의 억세스 목표 어드레스를 비교함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정한다. 이 경우, 정규의 호출원 프로그램의 본래의 억세스 목표 어드레스 그룹이 등록된 어드레스 리스트를 참조함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정해도 된다.
게다가, 본 발명에 따른 매체의 한 형태에서, 상기 판정 처리에서는 상기 취 득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 저장되는 메모리 영역의 선두 어드레스를 취득하고, 취득한 선두 어드레스와 미리 등록된 정규의 호출원 프로그램의 선두 어드레스를 비교하여, 차분(差分)이 있는 경우에는 그 차분을 구하며, 그 차분에 의거하여 상기 취득한 억세스 목표 어드레스를 보정하고, 보정 후의 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정한다.
또한, 본 발명에 따른 매체의 한 형태에서, 상기 판청 처리에서는 상기 취득한 억세스 목표 어드레스를 기준으로 해서 정해지는 소정의 어드레스 범위에 저장된 판정 대상 데이터를 메모리로부터 취득하고, 상기 판정 대상 데이터와 정규의 호출원 프로그램에서의 본래의 억세스 목표 어드레스를 기준으로 해서 정해지는 상기 소정의 어드레스 범위에 저장되어야 하는 데이터를 비교함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정한다.
또한, 본 발명에 따른 매체의 한 형태에서, 상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스를 기준으로 해서 정해지는 소정의 어드레스 범위에 저장된 판정 대상 데이터를 메모리로부터 취득하고, 그 데이터의 해시(hash)값을 계산하며, 상기 판정 대상 데이터와 정규의 호출원 프로그램에서의 본래의 억세스 목표 어드레스를 기준으로 해서 정해지는 상기 소정의 어드레스 범위에 저장되어야 하는 데이터로부터 구해지는 해시값을 비교함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정하는 것을 특징으로 한다.
게다가, 본 발명에 따른 매체의 한 형태에서, 상기 판정 처리에서는 상기 취 득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 저장되는 메모리 영역의 선두 어드레스를 취득하고, 취득한 선두 어드레스와 미리 등록된 정규의 호출원 프로그램의 선두 어드레스를 비교하여, 차분이 있는 경우에는 그 차분을 구하고, 그 차분에 의거하여 상기 판정 대상 데이터를 보정하고, 보정 후의 판정 대상 데이터와 상기 저장되어야 하는 데이터를 비교함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정한다.
또한, 본 발명에 따른 매체의 한 형태에서, 상기 억세스 목표 어드레스는 상기 서브 프로그램에 의한 일련의 처리가 종료 후에 상기 서브 프로그램이 억세스해야 하는 반환 목표 어드레스이다.
또한, 본 발명에 따른 매체의 한 형태에서, 상기 억세스 목표 어드레스는 상기 서브 프로그램이 상기 호출원 프로그램으로부터 호출될 때에 상기 호출원 프로그램으로부터 넘겨받는 인수(argument)로 나타내어지는 어드레스이다. 이 어드레스는 상기 호출원 프로그램으로부터 콜백(callback) 목표로서 지정된 콜백 어드레스여도 된다.
본 발명에 의하면, 호출원 프로그램으로부터의 호출 명령에 따라 소정의 처리를 행하고, 처리 결과를 그 호출원 프로그램으로 반환하는 서브 프로그램에서, 처리 결과에 대한 보안의 강화를 도모할 수 있다.
본 발명을 실시하기 위한 최선의 형태(이하, 실시예라고 함)에 대하여, 이하 도면을 이용해서 설명한다.
도 1은 본 실시예에 따른 정보 처리 장치의 기능 블록을 나타낸다. 도 1에 서, CPU(10)는 정보 처리 장치 전체의 제어를 행하는 중앙 처리 장치이다. 하드 디스크(20)는 정보 처리 장치상에서 동작하는 프로그램을 보존하는 보조 기억 장치이다. 메인 메모리(30)는 정보 처리 장치상에서 프로그램을 실행할 경우에 일시적으로 프로그램을 유지하는 주기억 장치이다.
이렇게 구성된 정보 처리 장치에서 프로그램을 실행할 경우, 우선, CPU(10)가 하드 디스크(20)로부터 지정된 프로그램을 취출(取出)해서 메인 메모리(30)상에 로드(load)한다. 또한, CPU(10)는 메인 메모리(30)로부터 프로그램에 기술된 처리 명령을 페치(fetch)해서, 그 명령 내용을 디코드(decode)한다. 이에 의해, 정보 처리 장치는 프로그램을 실행할 수 있다.
본 실시예에서, 하드 디스크(20)에는, 도 2에 나타낸 바와 같이, 적어도 메인 프로그램(22)과 서브 프로그램(24)이 저장되어 있다.
메인 프로그램(22)은 어떤 특정한 처리를 정보 처리 장치상에서 실행하기 위한 주(主)가 되는 소프트웨어이며, 예를 들면 어플리케이션 프로그램이다. 어플리케이션 프로그램으로서는, 예를 들면 워드프로세서 소프트웨어나 표 계산 소프트웨어, 문서 열람 소프트웨어, 화상 편집 소프트웨어, 데이터 베이스 소프트웨어, 프레젠테이션 소프트웨어, 게임, 웹 브라우저, 전자 메일 소프트웨어 등이 있다. 또한, 기업에서 사용되는 재무 회계 소프트웨어나 인사 관리 소프트웨어, 재고 관리 소프트웨어 등도 어플리케이션 프로그램의 일종이다.
한편, 서브 프로그램(24)은 메인 프로그램(22)과는 독립된 소프트웨어이며, 메인 프로그램(22)에 변경을 가하지 않고, 후에 서드 파티(third party) 등이 독자 적인 기능을 메인 프로그램(22)에 추가할 수 있는 보조 프로그램이다. 서브 프로그램(24)은 메인 프로그램(22)으로부터 호출되어, 소정의 처리를 행하고, 그 처리 결과를 메인 프로그램(22)에 반환하는 처리를 행한다. 이후, 서브 프로그램(24)이 메인 프로그램(22)으로부터의 호출에 따라 행하는 일련의 처리를 「서브 처리」라 칭한다. 또한, 서브 프로그램을 호출하는 메인 프로그램은 「호출원 프로그램」을 타나내며, 서브 프로그램은 「호출된 프로그램」을 나타낸다.
서브 프로그램(24)은, 예를 들면 소위 플러그인이다. 또한, 메인 프로그램(22)이 기본 OS(Operating System)의 하나인 Windows(등록상표)상에서 동작하는 경우, 서브 프로그램(24)은 DLL(Dynamic Link Library)로 실현되어 있는 경우가 많다.
도 3은 서브 프로그램(24)이 메인 프로그램(22)으로부터 호출될 경우에서의 메인 메모리(30)의 어드레스 공간을 모식적으로 나타낸 도면이다. 도 3에 나타낸 바와 같이, 메인 메모리(30)상에 구축되는 어드레스 공간은 목적별로 몇 개의 영역으로 나누어진다. 본 실시예에서는 적어도, 메인 프로그램(22)의 프로그램 데이터를 저장하는 메인 프로그램 영역(M10)과, 서브 프로그램(24)의 프로그램 데이터를 저장하는 서브 프로그램 영역(M12)과, 각종 변수 데이터를 저장하는 스택 영역(M14)이 구축되어 있다. 여기에서, 스택 영역(M14)에는 본 실시예에서 중요한 역할을 수행하는 「반환 목표 어드레스」 등이 저장된다. 반환 목표 어드레스란, 서브 프로그램(24)이 소정의 처리를 행한 후에 메인 프로그램(22)에 처리를 반환할 경우에, 서브 프로그램(24)으로부터 실행 제어가 옮겨지는 어드레스이며, 이 어드 레스는 메인 프로그램 영역(M10)에 할당된 어드레스이다.
그런데, 서드 파티 등이 메인 프로그램에 대해서 자유롭게 기능 추가를 실현 가능하도록, 플러그인 등의 서브 프로그램을 개발하기 위한 개발 툴(SDK(Software Development Kit))은 공개되어 있는 경우가 많다. 또한, 플러그인 등의 서브 프로그램은 대응하는 메인 프로그램 이외의 다른 프로그램으로부터도 호출되는 것이 가능한 경우가 많다. 이러한 경우, 메인 프로그램과 서브 프로그램이 주고받는 데이터의 감시나 개변(改變)을 행하는 모듈을 작성하는 것도 비교적 용이하게 가능하다. 이렇게 범용성이 높은 플러그인과 같은 서브 프로그램은 편리성이 높은 반면, 예를 들면 서브 프로그램이 보안 기능을 제공하는 모듈의 경우, 보안상 문제가 되는 경우가 있다.
예를 들면, 서브 프로그램이 정당한 권리를 갖는 유저로부터 호출된 경우에만 암호화된 컨텐츠를 복호(復號)하고, 그 컨텐츠를 이용할 수 있도록 하는 기능을 제공하는 모듈이라고 하자. 이러한 서브 프로그램은 호출원 프로그램으로부터의 호출에 따라 유저에 대한 권리 인증 처리를 행하고, 인증에 성공한 경우에 컨텐츠의 복호 키를 호출원 프로그램에 넘기는 처리를 행하는 경우가 있다. 또는, 서브 프로그램(24)이 암호화된 컨텐츠에 대한 관람만, 편집 가능, 인쇄 가능 등의 권리 정보를 호출원 프로그램에 넘기고, 호출원 프로그램이 넘겨받은 권리 정보에 의거하여 컨텐츠에 대한 보안 제어를 행하는 경우도 있다.
상기한 바와 같은 보안 기능을 서브 프로그램에 의해 제공하는 경우, 상기와 같은 메인 프로그램과 서브 프로그램이 주고받는 데이터의 감시나 개변을 행하는 툴을 이용함으로써, 암호화된 컨텐츠에 대한 복호 키를 부정하게 입수하거나, 컨텐츠에 대한 권리 정보를 사칭하는 부정 억세스가 행해질 가능성이 있다.
이러한 부정 억세스를 방지하기 위해, 메인 프로그램이 호출 목표가 되는 서브 프로그램을 디지털 서명의 확인 등에 의해 인증하고, 그 인증 결과가 올바른 서브 프로그램인 경우에만 호출 목표의 서브 프로그램에 처리를 계속시키는 인증 기능에 관한 기술이 알려져 있다.
그러나, 메인 프로그램이 이러한 인증 기능을 제공하고 있어도, 서브 프로그램이 메인 프로그램을 인증하는 것이 아니므로, 메인 프로그램과 서브 프로그램이 주고받는 데이터를 보호할 수 없다.
그래서, 본 실시예에서는 서브 프로그램(24)이 올바른 메인 프로그램(22)으로부터 직접 호출되어 있는지의 여부를 확인함으로써, 메인 프로그램(22)과 서브 프로그램(24)이 주고받는 데이터를 보호한다.
이하, 호출원 프로그램으로부터 서브 프로그램(24)이 호출된 경우에서의 본 실시예에 따른 서브 프로그램(24)의 처리 순서에 대하여 도 4에 나타낸 플로우 차트를 이용해서 설명한다.
우선, 서브 프로그램(24)은 호출원 프로그램으로부터 호출을 받으면 메인 메모리(30)의 스택 영역(M14)으로부터 반환 목표 어드레스를 취득한다(S100).
또한, 반환 목표 어드레스가 저장되는 장소를 나타내는 메모리 어드레스는 메인 프로그램(22)의 실행 환경인 OS나 메인 프로그램(22)을 컴파일(compile)하는 컴파일러의 사양에 의해 미리 정해져 있고, 예를 들면, 상기 메모리 어드레스는 서 브 프로그램(24)이 호출된 시점에서의 스택 영역(M14)의 선두 어드레스이다. 또한, 반환 목표 어드레스는 컴퓨터 아키텍처에 의해서는 스택 영역(M14)이 아니라 특정한 레지스터에 저장되는 경우도 있다.
메인 프로그램(22)이 서브 프로그램(24)을 호출할 때에, 반환 목표 어드레스를 나타내는 데이터가 스택 영역(M14)의 선두 어드레스 등에 저장된다. 따라서, 서브 프로그램(24)은 미리 정해진 어드레스에 억세스함으로써, 반환 목표 어드레스를 취득할 수 있다.
반환 목표 어드레스를 취득 후, 서브 프로그램은 반환 목표 어드레스를 포함하는 메모리 영역(이하, 「호출원 메모리 영역」이라 칭함)에 관한 메모리 정보를 취득한다(S102). 메모리 정보에는 호출원 메모리 영역의 실행 가능 상태나, 호출원 메모리 영역의 선두 어드레스의 정보가 있다. 예를 들면, Windows(등록 상표)의 경우, VirtualQuery 함수를 이용함으로써, 상기 메모리 정보를 취득할 수 있다. 더 구체적으로는, 서브 프로그램(24)은 VirtualQuery 함수에, 반환 목표 어드레스, 취득하는 메모리 정보를 저장하는 버퍼 영역의 선두 어드레스, 및 버퍼 영역의 데이터 사이즈를 패러미터로서 나타내어 OS에 억세스함으로써, OS로부터 반환 목표 어드레스를 포함하는 메모리 영역에 관한 메모리 정보를 취득할 수 있다.
이어서, 서브 프로그램(24)은 취득한 메모리 정보를 참조함으로써, 호출원 메모리 영역이 실행 가능 상태인지의 여부를 판정한다(S104). 판정의 결과, 호출원 메모리 영역이 실행 가능 상태가 아닌 경우(스텝 S104의 판정 결과가 부정 「N」), 정규의 메인 프로그램을 가장한 가짜 프로그램으로부터 호출된 가능성이 있다 고 판단하여, 서브 프로그램(24)은 서브 처리를 중단한다(S106).
한편, 호출원 메모리 영역이 실행 가능 상태인 경우(스텝 S104의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 취득한 메모리 정보를 참조함으로써, 호출원 메모리 영역의 선두 어드레스를 취득하고(S108), 그 선두 어드레스에 의거하여 호출원 프로그램의 속성 정보를 취득한다(S110). 이어서, 서브 프로그램(24)은 취득한 속성 정보에 의거하여 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부의 인증을 행한다(S112). 인증은, 예를 들면, 서브 프로그램(24)이 미리 소유하고 있는 정규의 메인 프로그램(24)에 대응하는 속성 정보와, 호출원 프로그램으로부터 취득한 속성 정보가 일치하는지의 여부를 검증함으로써 행하면 된다.
여기에서, 속성 정보는, 예를 들면 호출원 프로그램의 파일명이다. 이 파일명은, 예를 들면 Windows(등록상표)의 경우, GetModuleFileName 함수를 이용함으로써 취득할 수 있다. 더 구체적으로는, 서브 프로그램(24)은 선두 어드레스 등을 패러미터로서 나타내어 GetModuleFileName 함수를 호출함으로써 호출원 프로그램의 파일명을 취득할 수 있다. 또한, GetModuleFileName 함수를 호출함으로써, 서브 프로그램(24)은 호출원 프로그램이 저장되어 있는 파일 패스도 취득할 수 있다. 따라서, 서브 프로그램(24)은 그 파일 패스에 의거하여 파일에 억세스하여, 그 파일의 작성자, 작성 일시, 파일 사이즈 등도 특정할 수 있다. 그 때문에, 서브 프로그램(24)은 이들 정보도 속성 정보로서 이용할 수 있다. 파일명에 의거하는 인증만으로는, 예를 들면, 가짜 프로그램이 동일 패스상에 동일한 파일명으로 정규의 메인 프로그램(24)과 치환된 경우, 올바르게 인증할 수 없다. 그러나, 상기한 대 로 파일명 이외의 속성 정보를 이용해서 인증을 행하면, 그러한 부정한 치환이 행해진 경우에도 올바르게 인증할 수 있는 가능성이 높아진다.
또한, 메인 프로그램(22)에 디지털 서명이 실시되어 있는 경우, 정규의 메인 프로그램(22)이라면 그 디지털 서명이 실시되어 있기 때문에, 서브 프로그램(24)은 호출원 프로그램에 대응하는 파일에 억세스하여 디지털 서명의 유무나 디지털 서명의 올바름 등을 검사함으로써, 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부를 검사할 수 있다.
인증의 결과, 호출원 프로그램의 인증에 실패한 경우(스텝 S114의 판정 결과가 부정 「N」), 서브 프로그램(24)은 서브 처리를 중단한다(S106).
한편, 호출원 프로그램의 인증에 성공한 경우(스텝 S114의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 서브 처리를 계속한다(S116).
이상에 의해, 서브 프로그램(24)은 호출에 따라 서브 처리를 실행하기 전에, 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부를 인증하고, 인증에 성공한 경우에만 서브 처리를 실행한다.
이에 의해, 본 실시예에 의하면, 메인 프로그램(22)과 서브 프로그램(24)이 주고받는 데이터의 감시나 개변을 행하는 툴을 이용함으로써, 암호화된 컨텐츠에 대한 복호 키를 부정으로 취득하거나, 컨텐츠에 대한 권리 정보를 사칭하는 부정 억세스를 방지할 수 있다.
또한, 본 실시예에 의하면, 정규의 메인 프로그램(22)의 대신에 가짜 프로그램이 서브 프로그램(24)을 호출해도 서브 처리는 속행되지 않기 때문에, 서브 프로 그램(24)이 부정하게 호출되어 서브 프로그램(24)으로부터 부정하게 데이터가 취득되는 것을 방지할 수 있다.
계속해서, 본 실시예의 제 1 변형예에 관하여 설명한다.
제 1 변형예에서는, 반환 목표 어드레스가 정규의 메인 프로그램(22)에 대응하는 반환 목표 어드레스인지의 여부를 검증함으로써, 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부의 인증을 행한다.
이하, 제 1 변형예에서 호출원 프로그램으로부터 서브 프로그램(24)이 호출된 경우에서의 서브 프로그램(24)의 처리 순서에 대하여, 도 5에 나타낸 플로우 차트를 이용하여 설명한다. 또한, 도 5에서 스텝 S100∼스텝 S106은 도 4와 동일한 처리이므로 설명을 생략하고, 스텝 S120으로부터 설명한다.
호출원 메모리 영역이 실행 가능 상태인 경우(스텝 S104의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 정규의 메인 프로그램(22)에 대응하는 반환 목표 어드레스가 등록된 어드레스 리스트를 참조하여, 취득한 반환 목표 어드레스가 그 어드레스 리스트에 등록되어 있는지의 여부의 검증을 행한다(S120).
또한, 이 어드레스 리스트는 서브 프로그램의 개발 단계에서 작성하면 된다. 더 구체적으로는, 정규의 메인 프로그램(22)을 실행하여 서브 프로그램(24)을 호출시키고, 그때에 스택 영역(M14)에 저장되는 반환 목표 어드레스를 감시한다. 이에 의해, 정규의 메인 프로그램(22)이 실행되는 경우에 스택 영역(M14)에 저장되는 반환 목표 어드레스가 판명되므로, 그 반환 목표 어드레스를 등록한 리스트를 작성함으로써 상기한 어드레스 리스트를 작성할 수 있다. 또한, 정규의 메인 프로그 램(22)이 일련의 처리를 실행하는 사이에, 복수 회 서브 프로그램(24)을 호출하는 경우도 있기 때문에, 어드레스 리스트에 등록되는 반환 목표 어드레스는 1개라고는 한정할 수 없다.
어드레스 리스트의 검증의 결과, 취득한 반환 목표 어드레스가 어드레스 리스트에 등록되어 있지 않으면(스텝 S122의 판정 결과가 부정 「N」), 정규의 메인 프로그램(22)으로부터 호출되어 있지 않다고 판단하여, 서브 프로그램(24)은 서브 처리를 중단한다(S106).
한편, 반환 목표 어드레스가 어드레스 리스트에 등록되어 있으면(스텝 S122의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 정규의 메인 프로그램(22)으로부터 호출되어 있다고 판단하여, 서브 처리를 계속한다(S124).
이상, 제 1 변형예에서는, 호출원 프로그램의 반환 목표 어드레스에 의거하여 그 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부를 판정한 후, 정규의 메인 프로그램(22)인 경우에만 서브 프로그램(24)은 서브 처리를 속행한다.
따라서, 제 1 변형예에 의하면, 상기한 실시예와 마찬가지로 서브 프로그램(24)이 부정하게 호출됨으로써 서브 프로그램(24)으로부터 부정하게 데이터가 취득되는 것을 방지할 수 있다.
또한, 상기에서는 메인 프로그램(22)의 프로그램 데이터가 로드되는 메인 프로그램 영역(M10)의 어드레스가 재할당(리로케이션)되는 경우를 고려하지 않고 있다. 그러나, OS의 사양에 따라서는 재할당이 행해지는 경우가 있다. 이 경우, 정규의 메인 프로그램(22)으로부터의 호출에도 불구하고, 서브 프로그램(24)이 호출 원 프로그램을 정규의 메인 프로그램(22)이라고 판정하지 않는 경우가 있다.
그래서, 서브 프로그램(24)은 어드레스 리스트에 의한 검증을 행하기 전에, 재할당이 행해져 있는지를 검증해도 된다. 이 경우, 서브 프로그램(24)은 재할당이 행해져 있는 경우에는 취득한 반환 목표 어드레스의 보정을 행한다.
여기에서, 도 6에 나타낸 플로우 차트를 이용하여 어드레스 리스트에 의한 검증을 행하기 전에, 서브 프로그램(24)이 어드레스의 재할당이 행해져 있는지의 여부의 검증을 할 때의 처리 순서에 대해 더 설명한다.
우선, 서브 프로그램(24)은 호출원 메모리 영역의 선두 어드레스를 상기한 실시예와 동일한 방법으로 취득한다(S200). 이어서, 서브 프로그램(24)은 미리 기억하고 있는 정규의 메인 프로그램(22)에 대한 선두 어드레스와 취득한 선두 어드레스를 비교해서, 일치하는지의 여부를 판정한다(S202).
판정의 결과, 일치하는 경우에는(스텝 S202의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 호출원 프로그램의 어드레스 재할당이 행해져 있지 않다고 판단하여, 취득한 반환 목표 어드레스를 그대로 이용해서 도 5에 나타낸 처리를 행한다.
한편, 반환 목표 어드레스가 일치하지 않는 경우는(스텝 S202에서의 판정 결과가 부정 「N」), 서브 프로그램(24)은 호출원 프로그램의 어드레스 재할당이 행해져 있다고 판단하여, 취득한 선두 어드레스와 등록된 선두 어드레스의 차분을 산출한다(S204). 이어서, 서브 프로그램(24)은 이 차분에 의거하여 취득한 반환 목표 어드레스를 보정한다(S206). 이후, 서브 프로그램(24)은 보정 후의 반환 목표 어드레스를 이용하여 도 5에 나타낸 처리를 행한다.
이상에 의해, 메인 프로그램 영역(M10)의 어드레스가 재할당되는 경우에도, 서브 프로그램(24)은 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부의 검증을 올바르게 행할 수 있다.
또한, 메인 프로그램(24)이 동작하는 OS에 따라서는, 메모리 영역의 어드레스가 재할당되는 경우라도, OS측에서 어드레스 변환 등을 행하여, 프로그램측에 어드레스 변경에 의한 영향이 발생하지 않도록 하고 있는 경우가 있다. 이러한 경우에는, 서브 프로그램(24)은 상기한 바와 같은 어드레스의 재할당을 고려하지 않고 호출원 프로그램의 인증을 행하면 된다.
계속해서, 본 실시예의 제 2 변형예에 관하여 설명한다.
제 2 변형예에서는, 서브 프로그램(24)은 반환 목표 어드레스를 기준으로 해서 정해지는 소정의 어드레스 범위에 저장된 프로그램 데이터에 의거하여 호출원 프로그램의 인증을 행한다.
이하, 제 2 변형예에서, 호출원 프로그램으로부터 서브 프로그램(24)이 호출된 경우에서의 서브 프로그램(24)의 처리 순서에 대하여, 도 7에 나타낸 플로우 차트를 이용해서 참조한다. 또한, 도 7에서 스텝 S100∼스텝 S106은 도 4와 동일한 처리이므로 설명을 생략하고, 스텝 S130으로부터 설명한다.
호출원 메모리 영역이 실행 가능 상태인 경우(스텝 S014의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 취득한 반환 목표 어드레스를 기준으로 해서 정해지는 소정의 어드레스 범위에 저장된 프로그램 데이터를 메인 메모리(30)로부터 취득 한다(S130). 또한, 상기 소정의 어드레스 범위는, 예를 들면, 반환 목표 어드레스를 기준 어드레스로 하는 상대 어드레스에 의해 미리 정해두면 된다.
여기에서, 소정의 어드레스 범위에는 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부를 검증하는 것이 가능한 프로그램 데이터가 저장되어 있는 범위를 정할 필요가 있다. 따라서, 소정의 어드레스 범위는 그 외의 프로그램과는 다른 정규의 메인 프로그램 고유의 프로그램 데이터가 저장되는 어드레스 범위를 지정하는 것이 바람직하다.
이어서, 서브 프로그램(24)은 취득한 프로그램 데이터에 의거하여 호출원 프로그램의 인증 검사를 행한다(S132).
이 검증은, 예를 들면 다음과 같이 행하면 된다. 서브 프로그램(24)은 소정의 어드레스 범위에 로드되어야 하는 정규의 메인 프로그램(22)의 프로그램 데이터를 미리 유지하고 있다. 그리고, 서브 프로그램(24)은 미리 유지하고 있는 프로그램 데이터와, 호출원 프로그램이 로드되어 있는 메모리 영역으로부터 취득한 프로그램 데이터를 비교하여, 호출원 프로그램이 정규의 메인 프로그램(22)인지의 여부를 검증한다. 또한, 상기한 바와 같이 프로그램 데이터 그 자체를 비교하는 것이 아니라, 예를 들면 정규의 메인 프로그램의 프로그램 데이터에 대한 해시값 등의 특징량을 미리 계산해두고, 특징량끼리를 비교함으로써 검증을 행해도 된다.
인증의 결과, 호출원 프로그램의 인증에 실패한 경우에는(스텝 S134의 판정 결과가 부정「N」), 정규의 메인 프로그램(22)으로부터 호출되어 있지 않다고 판단하여, 서브 프로그램(24)은 서브 처리를 중단한다(S106).
한편, 호출원 프로그램의 인증에 성공한 경우에는(스텝 S134의 판정 결과가 긍정 「Y」), 서브 프로그램(24)은 정규의 메인 프로그램(22)으로부터 호출되어 있다고 판단하여, 서브 처리를 계속한다(S124).
이상, 제 2 변형예에서는 호출원 프로그램의 반환 목표 어드레스를 포함하는 소정의 어드레스 범위에 로드되어 있는 프로그램 데이터가 정규의 메인 프로그램(22)의 프로그램 데이터인지의 여부를 검증한 후, 정규의 메인 프로그램(22)인 경우에만, 서브 프로그램(24)은 서브 처리를 속행한다.
따라서, 제 2 변형예에 의하면, 상기한 실시예나 제 1 변형예와 마찬가지로, 서브 프로그램(24)이 부정하게 호출됨으로써 서브 프로그램(24)으로부터 부정하게 데이터가 취득되는 것을 방지할 수 있다.
또한, 프로그램 데이터에 포함되는 처리 명령 중에는, JUMP 명령 등과 같이, 데이터 내에 어드레스 정보가 포함되는 경우가 있다. 따라서, 메인 프로그램 영역(M10)의 어드레스가 재할당되면, 프로그램 데이터의 내용도 변경되는 경우가 있다.
거기서, 제 2 변형예에서도, 메인 프로그램(22)의 사양에 따라서는 어드레스의 재할당이 행해지는 것을 고려해야 하는 경우가 있다.
이 경우, 예를 들면, 상기한 소정의 어드레스 범위 중에서 어드레스 재할당이 행해짐으로써 데이터 내용이 고쳐쓰여질 가능성이 있는 어드레스(이하, 「데이터 고쳐쓰기 어드레스」라 칭함)를 미리 제거해둔다. 이렇게 하면, 검증 대상의 프로그램 데이터 중에는 어드레스의 재할당이 행해짐으로써 데이터 내용이 변경되 는 데이터가 포함되지 않는다.
따라서, 어드레스의 재할당이 행해지는 경우에도 서브 프로그램(24)은 올바르게 호출원 프로그램의 인증을 행할 수 있다.
또한, 데이터 고쳐쓰기 어드레스는, 예를 들면 리로케이션 테이블이라 불리는, 어드레스의 재할당이 행해짐으로써 데이터 내용이 고쳐쓰여질 가능성이 있는 어드레스가 등록되어 있는 테이블을 참조함으로써 특정하면 된다. 또한, 메인 프로그램(22)이 리로케이션 테이블을 제공하고 있지 않은 경우에는, 미리 데이터 고쳐쓰기 어드레스를 등록한 리스트를 작성해두고, 서브 프로그램(24)이 참조 가능한 메모리 영역에 로드해두면 된다.
또한, 데이터 고쳐쓰기 어드레스를 제거하는 것이 아니라, 데이터 고쳐쓰기 어드레스에 저장된 프로그램 데이터를 보정함으로써, 호출원 프로그램의 인증을 행해도 된다. 이 경우는, 예를 들면, 도 6에 나타낸 방법을 이용하여 차분을 구하고, 그 차분에 의거하여 데이터 고쳐쓰기 어드레스에 저장된 프로그램 데이터를 보정하면 된다. 즉, 데이터 고쳐쓰기 어드레스에 로드된 처리 명령에 포함되는 어드레스를, 산출한 차분에 의거하여 보정하면 된다.
이상, 상기한 실시예 및 각 변형예에서는, 서브 프로그램(24)은 호출원 프로그램이 사용하는 메모리 영역에 할당된 어드레스로서, 스택 영역(M14) 등으로부터 취득할 수 있는 반환 목표 어드레스를 이용하여 호출원 프로그램의 인증을 행하는 예에 관하여 설명했다. 그러나, 서브 프로그램(24)은 호출원 프로그램의 인증을 행할 수 있으면, 반환 목표 어드레스 이외의 어드레스를 이용할 수도 있다.
그래서, 본 실시예의 제 3 변형예에서는, 반환 목표 어드레스 이외의 어드레스로서, 메인 프로그램(22)이 서브 프로그램을 호출할 때에 넘겨주는 인수에 나타나는 어드레스를 이용해서 호출원 프로그램의 인증을 행하는 경우에 관하여 설명한다.
제 3 변형예에서는, 인수에 나타나는 어드레스로서 콜백 어드레스를 이용한다. 여기서, 콜백 어드레스란, 호출 대상의 콜백 함수가 저장되는 장소의 어드레스를 말한다. 콜백 함수란, 서브 프로그램(24)이 호출원 프로그램으로부터의 호출에 따라 호출하는 호출원 프로그램 중의 함수를 말한다. 즉, 서브 프로그램(24)은 호출원 프로그램으로부터 넘겨받는 인수로 나타내어지는 콜백 어드레스에 억세스하여, 콜백 함수를 호출한다.
제 3 변형예에서는, 서브 프로그램(24)이 호출원 프로그램으로부터 넘겨받는 인수에 나타나는 콜백 어드레스를 이용하는 점에서, 스택 영역(M14) 등으로부터 취득한 반환 목표 어드레스를 이용하는 상기한 실시예와는 다르다. 그러나, 그 이외의 점에서는 처리 순서에서 상기한 실시예와 동일해도 되므로, 상세한 설명은 생략한다. 따라서, 상기한 실시예의 설명을 적당히 반환 목표 어드레스로부터 콜백 어드레스로 바꿔 읽어서 참조하면 된다.
또한, 제 1 변형예나 제 2 변형예에서의 처리 순서에서도 반환 목표 어드레스 대신에 콜백 어드레스를 이용할 수 있다. 따라서, 이 경우에도, 제 1 변형예나 제 2 변형예의 설명을 적당히 반환 목표 어드레스로부터 콜백 어드레스로 바꿔 읽어서 참조하면 된다.
또한, 콜백 어드레스를 이용하는 경우에도, 메인 프로그램(22)에 저장되는 메모리 영역의 어드레스의 재할당을 고려해야 하는 경우가 있다. 이 경우에는, 제 1, 제 2 변형예와 마찬가지로, 서브 프로그램(24)은 도 6에 나타낸 순서에 의거하여 어드레스의 재할당이 행해졌는지의 여부를 판정하고, 재할당이 행해져 있는 경우에는 차분을 구한다. 그리고, 서브 프로그램(24)은 그 차분에 의거하여 취득한 콜백 어드레스나 콜백 어드레스를 기준으로 해서 정해지는 소정의 어드레스 범위에 저장되어 있는 프로그램 데이터의 보정을 행한 후에, 호출원 프로그램의 인증을 행한다.
또한, 상기한 실시예나 각 변형예에서 나타낸 호출원 프로그램의 인증 처리는, 서브 프로그램(24)이 서브 처리의 결과 얻어지는 데이터를 호출원 프로그램에 반환하는 처리를 행하기 전에 실행하면 된다. 예를 들면, 서브 프로그램(24)은 호출 명령을 받은 직후나, 콜백 함수를 호출하기 직전, 서브 처리의 결과 얻어지는 데이터를 호출원 프로그램으로 반환하기 직전 등에 호출원 프로그램의 인증 처리를 행하면 된다.
이상 설명해온 각 처리는 프로그램의 형태로 배포할 수도 있다. 그 경우, 플로피(등록 상표) 디스크, CD-ROM, DVD 등의 기록 매체에 상기 프로그램을 기록하여 배포하거나, 또는, 공중망 등에서 이용되는 전송 매체를 통해서 그 프로그램이나 파일의 일부, 또는 전부를 전송하도록 할 수 있다. 이 경우, 그것을 수취한 유저는 CD-ROM 장치 등의 판독 장치(입출력부의 일부)를 이용해서 플로피(등록상표) 디스크나 CD-ROM이나 DVD 등의 이동 가능형 기록 매체로부터 상기 프로그램을 외부 기록부에 카피하거나, 컴퓨터의 통신부를 통해서 인터넷으로부터 상기 프로그램을 외부 기록부에 카피하거나 할 수 있다. 그리고, CPU에서 실행함으로써 유저의 컴퓨터상에서도 상술한 기능을 실현할 수 있다.
본 발명의 실시예의 상기 서술은 도시 및 설명을 위한 것이다. 그러나 이는 본 발명을 본원에 개시된 형태에만 제한하는 것은 아니다. 다양한 변경과 변형이 가능하다는 것은 당업자에게 명백하다. 상기 실시예는 본 발명의 원리와 그 실질적인 적용을 양호하게 설명하기 위해 선택되어 기술된 것이며, 그에 따라 당업자라면 본 발명의 다양한 실시예 및 다양한 변형예가 특정한 용도에 적합하다는 것을 이해할 수 있다. 본 발명의 범위는 하기의 특허청구범위 및 그 동등물에 의해서만 한정된다.
본 발명에 의하면, 호출원 프로그램으로부터의 호출 명령에 따라 소정의 처리를 행하고, 처리 결과를 그 호출원 프로그램으로 반환하는 서브 프로그램에서, 처리 결과에 대한 보안의 강화를 도모할 수 있다.

Claims (15)

  1. 호출원 프로그램으로부터의 호출 명령에 따른 처리와, 상기 처리에 의한 처리 결과를 상기 호출원 프로그램으로 반환하는 반환 처리를 포함하는 서브 처리를 컴퓨터에 실행시키기 위한 프로그램을 저장한 컴퓨터 판독 가능 매체로서,
    상기 서브 처리는,
    상기 서브 처리를 컴퓨터에 실행시키기 위한 프로그램이 억세스하는 억세스 목표 어드레스이며 상기 호출원 프로그램의 메모리 영역에 저장된 억세스 목표 어드레스를 취득하는 어드레스 취득 처리와,
    취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정하는 판정 처리와,
    판정의 결과, 상기 호출원 프로그램이 정규가 아닐 경우, 상기 서브 처리의 실행을 중단하는 중단 처리를 포함하고,
    상기 판정 처리에서는,
    상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 저장되는 메모리 영역의 선두 어드레스를 취득하고, 상기 취득한 선두 어드레스와 미리 등록된 정규의 호출원 프로그램의 선두 어드레스에 차분이 있는 경우에는 그 차분을 구하여, 상기 차분에 의거하여 상기 취득한 억세스 목표 어드레스를 보정하는 단계와,
    정규의 호출원 프로그램의 복수의 본래의 억세스 목표 어드레스가 미리 등록된 어드레스 리스트를 참조하여, 상기 보정된 억세스 목표 어드레스와 미리 등록된 정규의 호출원 프로그램의 본래의 억세스 목표 어드레스를 비교하는 단계를 수행하는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  2. 제 1 항에 있어서,
    상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 사용하는 메모리 영역에 관한 메모리 정보를 취득하고, 상기 메모리 정보에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정하는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  3. 제 1 항에 있어서,
    상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램의 속성 정보를 취득하고, 상기 속성 정보와 미리 등록된 정규의 호출원 프로그램의 속성 정보를 비교함으로써, 상기 호출원 프로그램이 정규의 호출원 프로그램인지의 여부를 판정하는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  4. 삭제
  5. 삭제
  6. 삭제
  7. 제 1 항에 있어서,
    상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스에 의거하여 정해지는 어드레스 범위에 저장된 판정 대상 데이터를 메모리로부터 취득하고, 상기 판정 대상 데이터와 정규의 호출원 프로그램에서의 본래의 억세스 목표 어드레스에 의거하여 정해지는 상기 어드레스 범위에 저장되어야 하는 데이터를 비교함으로써, 상기 호출원 프로그램이 정규인지의 여부를 판정하는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  8. 제 7 항에 있어서,
    상기 어드레스 범위에는 어드레스의 재할당에 의해 내용이 변경될 수 있는 데이터를 저장하는 어드레스는 포함하지 않는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  9. 제 7 항에 있어서,
    상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 저장되는 메모리 영역의 선두 어드레스를 취득하고, 취득한 선두 어드레스와 미리 등록된 정규의 호출원 프로그램의 선두 어드레스에 차분이 있는 경우에는 그 차분을 구하며, 그 차분에 의거하여 상기 판정 대상 데이터를 보정하고, 보정 후의 판정 대상 데이터와 상기 저장되어야 하는 데이터를 비교함으로써, 상기 호출원 프로그램이 정규인지의 여부를 판정하는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  10. 제 1 항에 있어서,
    상기 판정 처리에서는 상기 취득한 억세스 목표 어드레스를 기준으로 해서 정해지는 소정의 어드레스 범위에 저장된 판정 대상 데이터를 메모리로부터 취득하고, 그 데이터의 해시(hash)값을 계산하며, 상기 해시값과 정규의 호출원 프로그램의 억세스 목표 어드레스에 의거하여 정해지는 상기 어드레스 범위에 저장되어야 하는 데이터로부터 구해지는 해시값을 비교함으로써, 상기 호출원 프로그램이 정규인지의 여부를 판정하는 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  11. 제 1 항에 있어서,
    상기 억세스 목표 어드레스는 상기 프로그램에 의한 일련의 처리가 종료 후에 상기 프로그램이 실행 제어를 옮기는 반환 목표 어드레스인 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  12. 제 1 항에 있어서,
    상기 억세스 목표 어드레스는 상기 프로그램이 상기 호출원 프로그램으로부터 호출될 때에 상기 호출원 프로그램으로부터 넘겨받는 인수(argument)로 나타내어지는 어드레스인 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  13. 제 12 항에 있어서,
    상기 어드레스는 상기 호출원 프로그램으로부터 콜백(callback) 목표로서 지정된 콜백 어드레스인 것을 특징으로 하는 컴퓨터 판독 가능 매체.
  14. 호출원 프로그램으로부터의 호출 명령에 따른 처리와, 상기 처리에 의한 처리 결과를 상기 호출원 프로그램에 반환하는 반환 처리를 포함하는 서브 처리를 실행하는 서브 처리부와,
    상기 서브 처리부가 상기 서브 처리를 실행할 때에 억세스하는 억세스 목표 어드레스이며 상기 호출원 프로그램의 메모리 영역에 저장된 억세스 목표 어드레스를 취득하는 어드레스 취득 처리부와,
    취득한 메모리 정보에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정하는 판정 처리부와,
    판정의 결과, 상기 호출원 프로그램이 아닌 경우, 상기 서브 처리의 실행을 중단하는 중단 처리부를 구비하고,
    상기 판정 처리부는,
    상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 저장되는 메모리 영역의 선두 어드레스를 취득하고, 상기 취득한 선두 어드레스와 미리 등록된 정규의 호출원 프로그램의 선두 어드레스에 차분이 있는 경우에는 그 차분을 구하여, 상기 차분에 의거하여 상기 취득한 억세스 목표 어드레스를 보정하는 단계와,
    정규의 호출원 프로그램의 복수의 본래의 억세스 목표 어드레스가 미리 등록된 어드레스 리스트를 참조하여, 상기 보정된 억세스 목표 어드레스와 미리 등록된 정규의 호출원 프로그램의 본래의 억세스 목표 어드레스를 비교하는 단계를 수행하는 것을 특징으로 하는 정보 처리 장치.
  15. 호출원 프로그램으로부터의 호출 명령에 따른 처리와, 상기 처리에 의한 처리 결과를 상기 호출원 프로그램에 반환하는 반환 처리를 포함하는 서브 처리를 행하는 프로그램을 실행하기 위한 프로그램 제어 방법으로서,
    상기 반환 처리를 실행하기 전에, 상기 서브 처리를 컴퓨터에 실행시키기 위한 프로그램이 억세스하는 억세스 목표 어드레스이며 상기 호출원 프로그램의 메모리 영역에 저장된 억세스 목표 어드레스를 취득하고,
    취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 정규인지의 여부를 판정하고,
    판정의 결과, 상기 호출원 프로그램이 정규가 아닌 경우, 상기 반환 처리를 실행하기 전에 상기 서브 처리의 실행을 중단하고,
    상기 판정시에는,
    상기 취득한 억세스 목표 어드레스에 의거하여 상기 호출원 프로그램이 저장되는 메모리 영역의 선두 어드레스를 취득하고, 상기 취득한 선두 어드레스와 미리 등록된 정규의 호출원 프로그램의 선두 어드레스에 차분이 있는 경우에는 그 차분을 구하여, 상기 차분에 의거하여 상기 취득한 억세스 목표 어드레스를 보정하는 단계와,
    정규의 호출원 프로그램의 복수의 본래의 억세스 목표 어드레스가 미리 등록된 어드레스 리스트를 참조하여, 상기 보정된 억세스 목표 어드레스와 미리 등록된 정규의 호출원 프로그램의 본래의 억세스 목표 어드레스를 비교하는 단계를 수행하는 것을 특징으로 하는 프로그램 제어 방법.
KR1020060108147A 2005-11-30 2006-11-03 프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법 KR100917370B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
JP2005345074A JP4844102B2 (ja) 2005-11-30 2005-11-30 サブプログラム及びそのサブプログラムを実行する情報処理装置
JPJP-P-2005-00345074 2005-11-30

Publications (2)

Publication Number Publication Date
KR20070056940A KR20070056940A (ko) 2007-06-04
KR100917370B1 true KR100917370B1 (ko) 2009-09-16

Family

ID=38125763

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020060108147A KR100917370B1 (ko) 2005-11-30 2006-11-03 프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법

Country Status (4)

Country Link
US (1) US7962952B2 (ko)
JP (1) JP4844102B2 (ko)
KR (1) KR100917370B1 (ko)
CN (1) CN1975678A (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20080301816A1 (en) * 2007-06-01 2008-12-04 Ting David M T Method and system for handling keystroke commands
JP4939382B2 (ja) * 2007-11-28 2012-05-23 ルネサスエレクトロニクス株式会社 情報処理装置及びそのプログラム実行制御方法
US8209757B1 (en) * 2008-03-06 2012-06-26 Symantec Corporation Direct call into system DLL detection system and method
US8065734B1 (en) 2008-03-06 2011-11-22 Symantec Corporation Code module operating system (OS) interactions intercepting system and method
JP5377748B2 (ja) 2010-02-18 2013-12-25 株式会社東芝 プログラム
KR101212553B1 (ko) * 2012-05-11 2012-12-14 주식회사 안랩 악성 파일 검사 장치 및 방법
US9846717B2 (en) * 2012-10-23 2017-12-19 Galois, Inc. Software security via control flow integrity checking
CN104937510B (zh) * 2014-01-15 2017-04-05 三菱电机株式会社 数控装置
US20160381050A1 (en) 2015-06-26 2016-12-29 Intel Corporation Processors, methods, systems, and instructions to protect shadow stacks
US10394556B2 (en) 2015-12-20 2019-08-27 Intel Corporation Hardware apparatuses and methods to switch shadow stack pointers
US10430580B2 (en) 2016-02-04 2019-10-01 Intel Corporation Processor extensions to protect stacks during ring transitions
JP2020098506A (ja) 2018-12-18 2020-06-25 ルネサスエレクトロニクス株式会社 マイクロコントローラ及び半導体装置
CN111191203A (zh) * 2020-01-02 2020-05-22 北京字节跳动网络技术有限公司 身份验证方法及装置

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0784786A (ja) * 1993-09-09 1995-03-31 Casio Comput Co Ltd プログラム実行制御方法
JPH1040138A (ja) 1996-07-22 1998-02-13 Fuji Electric Co Ltd サブルーチンの運用情報収集方法
KR20010006750A (ko) * 1999-03-16 2001-01-26 포만 제프리 엘 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법
KR20010040981A (ko) * 1998-02-26 2001-05-15 케네쓰 올센 스택에 기초한 보안 조건
US20070150729A1 (en) * 2005-12-22 2007-06-28 Kirschner Wesley A Apparatus and method to limit access to selected sub-program in a software system

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2934039B2 (ja) * 1991-03-20 1999-08-16 富士通株式会社 複数ロードモジュール保護方式
JPH0529328A (ja) * 1991-07-24 1993-02-05 Mitsubishi Electric Corp 半導体装置及びその製造方法
JPH07182239A (ja) * 1993-12-24 1995-07-21 Nec Corp セグメント分割管理システム
US5895467A (en) * 1997-04-11 1999-04-20 Informix Software, Inc. Selectively switching memory access permission for manipulating data in a database
DE19944991B4 (de) 1999-09-20 2004-04-29 Giesecke & Devrient Gmbh Verfahren zur Sicherung eines Programmablaufs
US7051200B1 (en) * 2000-06-27 2006-05-23 Microsoft Corporation System and method for interfacing a software process to secure repositories
JP2004509392A (ja) * 2000-09-08 2004-03-25 インターナショナル・ビジネス・マシーンズ・コーポレーション ソフトウェアのセキュア認証済チャネル
JP4023654B2 (ja) * 2001-09-28 2007-12-19 日立ソフトウエアエンジニアリング株式会社 アプリケーションの監視方法およびプログラム
US7000087B2 (en) * 2001-11-07 2006-02-14 International Business Machines Corporation Programmatically pre-selecting specific physical memory blocks to allocate to an executing application
JP2004126854A (ja) * 2002-10-01 2004-04-22 Mitsubishi Electric Corp 攻撃対策装置
US7203941B2 (en) * 2002-11-14 2007-04-10 Microsoft Corporation Associating a native resource with an application
US7149863B1 (en) * 2003-10-08 2006-12-12 Sun Microsystems, Inc. System and method of descriptively specifying memory placement in a computer system
KR100483700B1 (ko) 2003-12-03 2005-04-19 주식회사 잉카인터넷 온라인 게임 클라이언트 보안을 위한 실시간 프로세스 불법 접근 및 조작 차단 방법
US7546587B2 (en) * 2004-03-01 2009-06-09 Microsoft Corporation Run-time call stack verification
US20050235136A1 (en) * 2004-04-16 2005-10-20 Lucent Technologies Inc. Methods and systems for thread monitoring
US7558986B2 (en) * 2005-05-26 2009-07-07 United Parcel Service Of America, Inc. Software process monitor

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0784786A (ja) * 1993-09-09 1995-03-31 Casio Comput Co Ltd プログラム実行制御方法
JPH1040138A (ja) 1996-07-22 1998-02-13 Fuji Electric Co Ltd サブルーチンの運用情報収集方法
KR20010040981A (ko) * 1998-02-26 2001-05-15 케네쓰 올센 스택에 기초한 보안 조건
KR20010006750A (ko) * 1999-03-16 2001-01-26 포만 제프리 엘 호출의 타겟이 동일한 패키지에 속한다고 보증된 자바패키지 내의 호출을 식별하는 방법
US20070150729A1 (en) * 2005-12-22 2007-06-28 Kirschner Wesley A Apparatus and method to limit access to selected sub-program in a software system

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
Tan Yu-an; Cao Yuan-da, "Method of preventing buffer overflow attacks by intercepting DLL functions", J. Beijing Inst. Technol. (China) Journal of Beijing Institute of Technology 255~259, 2005*

Also Published As

Publication number Publication date
JP4844102B2 (ja) 2011-12-28
US20070136728A1 (en) 2007-06-14
US7962952B2 (en) 2011-06-14
KR20070056940A (ko) 2007-06-04
JP2007148962A (ja) 2007-06-14
CN1975678A (zh) 2007-06-06

Similar Documents

Publication Publication Date Title
KR100917370B1 (ko) 프로그램을 저장한 컴퓨터 판독 가능 매체, 프로그램을실행하는 정보 처리 장치, 및 프로그램을 실행하기 위한프로그램 제어 방법
AU2005201995B2 (en) System and method for protected operating system boot using state validation
US6178504B1 (en) Host system elements for an international cryptography framework
RU2390836C2 (ru) Отображение достоверности из высоконадежной среды на незащищенную среду
US7543336B2 (en) System and method for secure storage of data using public and private keys
US7546587B2 (en) Run-time call stack verification
JP5190800B2 (ja) プログラムの実行制御システム、実行制御方法、実行制御用コンピュータプログラム
US8918654B2 (en) Information processing device, program verification method, and recording medium
US7739516B2 (en) Import address table verification
EP0843249A1 (en) Dynamic classes of service for an international cryptography framework
US20050060568A1 (en) Controlling access to data
US20110016508A1 (en) Security Deployment System
JP2008503014A5 (ko)
EP1368718B1 (en) Software-defined communications system execution control
US20110271350A1 (en) method for protecting software
US10628562B2 (en) Method for protecting a computer program from being influenced, and computer system
AU2001257276A1 (en) Software-defined communications system execution control
JP4664055B2 (ja) プログラム分割装置、プログラム実行装置、プログラム分割方法及びプログラム実行方法
CN114651253A (zh) 用于策略强制实施的虚拟环境类型验证
KR100949024B1 (ko) 리소스 획득 방법 및 컴퓨터 판독 가능 매체
JP4526383B2 (ja) 実行可能なコードを格納するタンパーエビデントな取り外し可能な媒体
US20230195884A1 (en) Method for securing a system call, method for implementing an associated security policy and devices for carrying out such methods
KR101203722B1 (ko) 데이터 보호장치 및 그 방법
JP3654165B2 (ja) コンピュータシステムに適用するライブラリのリンク方法及びそのプログラムを記録した記録媒体
JP4507569B2 (ja) 情報処理装置および情報処理方法、プログラム、並びに記録媒体

Legal Events

Date Code Title Description
A201 Request for examination
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
J201 Request for trial against refusal decision
E801 Decision on dismissal of amendment
B601 Maintenance of original decision after re-examination before a trial
J301 Trial decision

Free format text: TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20080620

Effective date: 20090730

S901 Examination by remand of revocation
GRNO Decision to grant (after opposition)
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20120821

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20130822

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20140825

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20150819

Year of fee payment: 7

FPAY Annual fee payment

Payment date: 20160818

Year of fee payment: 8

FPAY Annual fee payment

Payment date: 20170823

Year of fee payment: 9

FPAY Annual fee payment

Payment date: 20180816

Year of fee payment: 10

FPAY Annual fee payment

Payment date: 20190819

Year of fee payment: 11