KR20240088444A - 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램 - Google Patents

메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램 Download PDF

Info

Publication number
KR20240088444A
KR20240088444A KR1020220174184A KR20220174184A KR20240088444A KR 20240088444 A KR20240088444 A KR 20240088444A KR 1020220174184 A KR1020220174184 A KR 1020220174184A KR 20220174184 A KR20220174184 A KR 20220174184A KR 20240088444 A KR20240088444 A KR 20240088444A
Authority
KR
South Korea
Prior art keywords
pointer
type safety
depth value
safety violation
memory
Prior art date
Application number
KR1020220174184A
Other languages
English (en)
Inventor
전유석
Original Assignee
울산과학기술원
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 울산과학기술원 filed Critical 울산과학기술원
Priority to KR1020220174184A priority Critical patent/KR20240088444A/ko
Publication of KR20240088444A publication Critical patent/KR20240088444A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3696Methods or tools to render software testable
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3684Test management for test design, e.g. generating new test cases
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3688Test management for test execution, e.g. scheduling of test suites
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3668Software testing
    • G06F11/3672Test management
    • G06F11/3692Test management for test results analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0893Caches characterised by their organisation or structure
    • G06F12/0895Caches characterised by their organisation or structure of parts of caches, e.g. directory or tag array

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Storage Device Security (AREA)

Abstract

본 개시의 실시예들에 따르면, 메모리 태깅이 내재된 프로세서 및 비휘발성 메모리를 포함하는 타입 안전 위반 탐지 장치가, 상기 비휘발성 메모리에 저장된 프로그램을 판독하는 단계; 상기 타입 안전 위반 탐지 장치가, 판독된 제1 포인터에 제2 포인터가 할당되는 코드에서, 상기 제2 포인터의 깊이 값을 상기 메모리 태깅에 저장하고, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교하는 단계; 상기 타입 안전 위반 탐지 장치가, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교한 결과에 따라서, 상기 할당되는 코드의 타입 안전 위반인지 여부를 판단하는 단계; 상기 타입 안전 위반 탐지 장치가, 상기 타입 안전 위반인 경우, 상기 할당되는 코드에 대한 데이터를 생성하는 단계;를 포함하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 방법을 개시한다.

Description

메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램{DEVICE AND METHOD FOR DETECTING TYPE CONFUSION USING MEMORY TAGGING, AND COMPUTER PROGRAM FOR EXECUTING THE METHOD}
본 개시의 실시예들은 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램에 관한 것으로, 메모리 할당 코드의 타입 위반을 탐지하기 위한 값을 프로세서에 내재된 메모리 태깅 영역에 저장하고 메모리 태깅 영역의 값을 이용하여 타입 안전 위반을 탐지하는 점을 특징으로 한다.
소스 코드에 존재하는 잠재적인 오류(bug)나 취약점을 발견하기 위해 정적분석기가 널리 사용된다. 정적분석기는 각 기능별 체커의 실행에 의해 각 체커별로 미리 정의된 오류를 검출하고, 오류가 검출된 것으로 판단하면 이에 대한 경보(alarm) 메시지를 발생한다.
그러나, 이러한 정적분석기의 분석 과정에서 오류 여부의 판단이 항상 정확하게 이뤄지지 못하는 것이 현실이며, 이로 인해 분석 대상 소스 코드에 오류가 존재하지 않음에도 불구하고 오류가 존재하는 것으로 잘못 판단하여 오경보(false alarm)를 발생하는 문제가 존재하였다.
일반적으로 소스 코드의 오류 검출 경보가 발생되면, 오류를 검토 및 처리하기 위해 다양한 리소스가 투입되어야 하므로, 이러한 오경보는 프로그램 개발 및 검수 과정에서 다양한 리소스의 낭비 요인이 되었다.
[선행문헌]
대한민국 등록특허공보 제10-1694778호
본 발명은 상기와 같은 문제점을 포함하여 여러 문제점들을 해결하기 위한 것으로서, 프로세서에 내재된 메모리 태깅을 이용하여 포인터들의 깊이 값을 비교함으로써, 프로그램에 존재하는 타입 안전 위반을 탐지할 수 있다.
본 개시의 실시예들에 따른 방법은, 메모리 태깅이 내재된 프로세서 및 비휘발성 메모리를 포함하는 타입 안전 위반 탐지 장치가, 상기 비휘발성 메모리에 저장된 프로그램을 판독하는 단계; 상기 타입 안전 위반 탐지 장치가, 판독된 제1 포인터에 제2 포인터가 할당되는 코드에서, 상기 제2 포인터의 깊이 값을 상기 메모리 태깅에 저장하고, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교하는 단계; 상기 타입 안전 위반 탐지 장치가, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교한 결과에 따라서, 상기 할당되는 코드의 타입 안전 위반인지 여부를 판단하는 단계; 상기 타입 안전 위반 탐지 장치가, 상기 타입 안전 위반인 경우, 상기 할당되는 코드에 대한 데이터를 생성하는 단계;를 포함할 수 있다.
상기 타입 안전 위반인지 여부를 판단하는 단계는, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값 미만인 경우, 상기 할당되는 코드의 타입 안전 위반한 것으로 판단할 수 있다.
상기 타입 안전 위반인지 여부를 판단하는 단계는, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값 이상인 경우, 상기 할당되는 코드의 타입 안전 위반이 아닌 것으로 판단할 수 있다.
상기 제1 및 제2 포인터의 깊이 값은 최상단의 부모 계층의 깊이 값을 1로 설정하고, 하위로 내려오면서 증가되는 값으로 설정되는 것 일 수 있다.
본 개시의 실시예들에 따르면, 메모리 태깅이 내재된 프로세서 및 비휘발성 메모리를 포함하고, 상기 프로세서가, 판독된 제1 포인터에 제2 포인터가 할당되는 코드에서, 상기 제2 포인터의 깊이 값을 상기 메모리 태깅에 저장하고, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교하고,
상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교한 결과에 따라서, 상기 할당되는 코드의 타입 안전 위반인지 여부를 판단하며, 상기 타입 안전 위반인 경우, 상기 할당되는 코드에 대한 데이터를 생성하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치가 개시될 수 있다.
본 발명의 실시예에 따른 컴퓨터 프로그램은 컴퓨터를 이용하여 본 발명의 실시예에 따른 방법 중 어느 하나의 방법을 실행시키기 위하여 매체에 저장될 수 있다.
이 외에도, 본 발명을 구현하기 위한 다른 방법, 다른 시스템 및 상기 방법을 실행하기 위한 컴퓨터 프로그램을 기록하는 컴퓨터 판독 가능한 기록 매체가 더 제공된다.
전술한 것 외의 다른 측면, 특징, 이점이 이하의 도면, 특허청구범위 및 발명의 상세한 설명으로부터 명확해 질 것이다.
상기한 바와 같이 이루어진 본 발명의 실시예에 따르면, 프로세서에 내재된 메모리 태깅을 이용하여 포인터들의 깊이 값을 비교함으로써, 프로그램에 존재하는 타입 안전 위반을 탐지하는 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램을 구현할 수 있다.
도 1은 본 개시의 실시예들에 따른 타입 안전 위반 탐지 장치의 블록도이다.
도 2는 메모리(120)의 블록도이다.
도 3은 본 개시의 실시 예들에 따른 타입 안전 위반을 탐지하는 방법의 흐름도이다.
도 4는 포인터들의 깊이 값들을 비교하는 단계(S150)의 흐름도이다.
도 5는 종래의 탐지 방법에 대한 예시 도면이다.
도 6은 본 개시의 실시 예들에 따라서 탐지되는 타입안전위반에 대한 예시 도면이다.
이하 첨부된 도면들에 도시된 본 발명에 관한 실시예를 참조하여 본 발명의 구성 및 작용을 상세히 설명한다.
본 발명은 다양한 변환을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 본 발명의 효과 및 특징, 그리고 그것들을 달성하는 방법은 도면과 함께 상세하게 후술되어 있는 실시예들을 참조하면 명확해질 것이다. 그러나 본 발명은 이하에서 개시되는 실시예들에 한정되는 것이 아니라 다양한 형태로 구현될 수 있다.
이하, 첨부된 도면을 참조하여 본 발명의 실시예들을 상세히 설명하기로 하며, 도면을 참조하여 설명할 때 동일하거나 대응하는 구성 요소는 동일한 도면부호를 부여하고 이에 대한 중복되는 설명은 생략하기로 한다.
본 명세서에서 “학습”, “러닝” 등의 용어는 인간의 교육 활동과 같은 정신적 작용을 지칭하도록 의도된 것이 아닌 절차에 따른 컴퓨팅(computing)을 통하여 기계 학습(machine learning)을 수행함을 일컫는 용어로 해석한다.
이하의 실시예에서, 제1, 제2 등의 용어는 한정적인 의미가 아니라 하나의 구성 요소를 다른 구성 요소와 구별하는 목적으로 사용되었다.
이하의 실시예에서, 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다.
이하의 실시예에서, 포함하다 또는 가지다 등의 용어는 명세서상에 기재된 특징, 또는 구성요소가 존재함을 의미하는 것이고, 하나 이상의 다른 특징들 또는 구성요소가 부가될 가능성을 미리 배제하는 것은 아니다.
도면에서는 설명의 편의를 위하여 구성 요소들이 그 크기가 과장 또는 축소될 수 있다. 예컨대, 도면에서 나타난 각 구성의 크기 및 두께는 설명의 편의를 위해 임의로 나타내었으므로, 본 발명이 반드시 도시된 바에 한정되지 않는다.
어떤 실시예가 달리 구현 가능한 경우에 특정한 공정 순서는 설명되는 순서와 다르게 수행될 수도 있다. 예를 들어, 연속하여 설명되는 두 공정이 실질적으로 동시에 수행될 수도 있고, 설명되는 순서와 반대의 순서로 진행될 수 있다.
본 명세서에서, 타입 안전 위반은, 메모리 할당 코드에서, 제1 포인터에 제2 포인터가 할당되는 경우, 제1 포인터의 타입과 제2 포인터의 타입이 일치하지 않는 코드를 말한다. 여기서, 제1 및 제2 포인터는, 포인터 타입으로 정의된 데이터를 말할 수 있다. 타입 안전 위반에 해당하는지 여부는, 제1 포인터의 타입과 제2 포인터의 타입이 일치하는지 여부로 판단될 수 있다. 제1 포인터에 제2 포인터가 할당될 수 없는 경우에, 제1 포인터의 타입과 제2 포인터의 타입이 일치하지 않는다고 말할 수 있다.
여기서, 제1 포인터의 타입과 제2 포인터의 타입이 일치하지 않는다는 것은, 제1 포인터에 할당된 메모리의 크기가 제2 포인터에 할당된 메모리의 크기와 다르다는 것, 제1 포인터에 할당된 데이터 구조체와 제2 포인터에 할당된 데이터 구조체가 서로 다름, 제2 포인터가 가르키는 데이터가, 제1 포인터에 할당된 영역을 초과하는 데이터임을 의미할 수 있다. 예를 들어, 계층적으로 정의된 데이터 구조체에 대해서, 부모 계층의 제1 포인터에 자식 계층의 제2 포인터가 할당되거나, 자식 계층의 제1 포인터에 부모 계층의 제2 포인터가 할당되는 경우, 제1 포인터와 제2 포인터의 타입이 일치하지 않는 타입 안전 위반으로 판단될 수 있다.
프로그램의 개발이 완료되면, 프로그램에 포함된 에러를 검출하는 테스팅 방법을 사용할 수 있다. 구체적으로, 프로그램을 정적 분석 또는 동적 분석 할 수 있다. 이러한 분석 방법을 통해서는, 프로그램에 존재하는 키워드의 맞춤법이 틀리거나, 필요한 문장 부호를 빠뜨리거나, IF, END IF 등의 잘못된 사용, 선언되지 않은 변수의 사용, 무한 루프에 빠지거나, NULL POINTER 에러 등과 같이 형식적인 에러들을 검출할 수 있었지만, 본 개시의 실시예들과 같이, 타입 안전 위반에 해당하는 코드를 검출할 수는 없었다. 즉, 메모리 할당 코드에서, 제1 포인터에 제2 포인터를 할당하는 경우, 포인터들 사이의 데이터 타입이 일치하지 않는 에러를 검출할 수는 없었다.
제1 포인터에 제2 포인터를 할당하는 경우, 포인터들 사이의 데이터 타입이 일치하지 않게 되면, 제1 포인터의 데이터는 제2 포인터의 데이터로 할당되지 않게 된다. 이러한 코드 이후에, 제1 포인터를 통해 처리되는 연산, 함수, 코드 등은 프로그램된 값과 다른 값들을 반환할 수 있다. 결과적으로, 타입 안전 위반을 포함하는 프로그램은 오류없이 컴파일된다고 하더라도, 원하는 출력을 제공할 수 없게 된다.
본 명세서에서, 프로그램은, 프로그래밍 언어로 구현된 명령어들의 셋트를 말할 수 있다. 또한, 프로그램은, 프로세서에 의해 실행되는 명령어들의 셋트를 말할 수 있다. 즉, 프로그램은, 실행 파일이 되기 전의 프로그래밍 언어로 구현된 명령어들의 셋트이거나, 프로세서에 의해 실행 가능한 기계어로 변환된 명령어들의 셋트일 수 있다.
도 1은 본 개시의 실시예들에 따른 타입 안전 위반 탐지 장치의 블록도이다.
타입 안전 위반 탐지 장치(100)는 프로그램에 포함된 메모리 할당 코드의 타입 안전 위반을 검출할 수 있다. 타입 안전 위반 탐지 장치(100)는 컴파일 되기 이전의 프로그래밍 언어로 구현된 프로그램에서 하나 이상의 메모리 할당 코드를 검출할 수 있다. 타입 안전 위반 탐지 장치(100)는 이렇게 검출된 메모리 할당 코드에서 제1 포인터에 제2 포인터가 할당되는 경우, 제1 포인터의 깊이 값과 제2 포인터의 깊이 값을 비교하여 제1 포인터와 제2 포인터 사이의 타입 안전 위반의 발생 여부를 탐지할 수 있다. 이때, 제1 포인터의 깊이 값과 제2 포인터의 깊이 값은 프로세서에 내재된 메모리 태깅에 저장될 수 있다. 타입 안전 위반 탐지 장치(100)는, 메모리 태깅을 포함하는 프로세서를 포함하여 구현되어 이러한 메모리 태깅에 제1 포인터에 대한 정보를 저장할 수 있다. 여기서, 프로세서는 메모리 할당 코드를 실행시키는 경우, 제2 포인터를 메모리에 저장하고, 제1 포인터에 제2 포인터가 할당되도록 할 수 있다. 이때, 제2 포인터의 값(주소 값 또는 인덱스 값 등)과 제2 포인터의 깊이 값이 메모리에 저장되어 제1 포인터에 할당되기 전에 제1 포인터의 깊이 값과 제2 포인터의 깊이 값을 비교할 수 있다.
여기서, 제1 및 제2 포인터는, 포인터 타입으로 정의된 데이터, 변수를 의미할 수 있다. 여기서, 깊이 값은, 계층적으로 정의된 포인터의 계층 값을 말할 수 있다. 예를 들어, 제일 상위로 정의된 제1 포인터의 계층인 깊이 값은, 1이고, 그 다음 계층으로 정의된 제2 포인터의 깊이 값은, 2, 그 다음 계층으로 정의된 제3 포인터의 깊이 값은 3이 되는 등의 방법으로, 깊이 값이 순차적으로 증가하도록 설정될 수 있다.
포인터들의 사이의 관계와 관련하여, 제1 포인터는, 제2 포인터의 부모(parent)로 정의되고, 제2 포인터는, 제1 포인터의 자식(child)이 될 수 있다. 이러한 경우에 깊이 값의 정의를 살펴보면, 제2 포인터는, 제3 포인터의 부모(parent)로 정의된 경우에, 제1 포인터의 깊이 값은, 1이고, 제2 포인터의 깊이 값은, 2이고, 제3 포인터의 깊이 값은 3일 수 있으나, 이는 하나의 예시에 불과하며 다른 값들로 깊이 값을 설정할 수 있다. 부모 포인터의 깊이 값은, 자식 포인터의 깊이 값 보다 작게 될 수 있다. 최상단의 부모에 해당하는 포인터의 깊이 값을 1로 설정하고, 계층이 내려오면서 포인터의 깊이 값은 증가할 수 있다.
상기의 방식과 반대로 깊이 값을 정의하게 되면, 부모 포인터의 깊이 값이 자식 포인터의 깊이 값보다 큰 값으로 설정될 수 있다.
타입 안전 위반 탐지 장치(100)에 포함된 프로세서(110)는 명령어 세트와 명령어 세트 아키텍쳐(Instruction Set Architecture)를 포함하는 것으로, 32비트 명령어, 또는 64비트 명령어를 처리하도록 구현될 수 있으나, 이에 한정되지 않고 다양한 비트의 명령어를 처리하도록 구현될 수 있다.
구체적으로, 64비트의 명령어를 처리하도록 구현된 경우, 프로세서(110)는 포인터 타입의 데이터를 메모리(110a)에 저장에 48비트 만을 사용하고, 16비트를 메모리 태깅(MT)으로 이용할 수 있다. 제1 포인터의 깊이 값과, 제2 포인터의 깊이 값은, 64비트의 메모리의 일부인, 16비트의 메모리 태깅(MT)에 저장되어 비교될 수 있다. 16비트의 메모리 태깅(MT)은 데이터에 할당되지 않고 별도의 값이 저장되도록 설계될 수 있다.
상기와 같이 64비트의 프로세서는 16비트의 메모리 태깅(MT)을 내재할 수 있으나, 이에 한정되지 않고 다른 비트의 명령어 체계의 프로세서는 다른 크기의 메모리 태깅을 내재할 수 있다.
본 개시의 일 실시예에 따르면, 프로세서(110)는 통상적으로, 타입 안전 위반 탐지 장치(100)의 전반적인 동작을 제어한다. 예를 들어, 프로세서(110)는 타입 안전 위반 탐지 장치(100)에 저장된 프로그램을 실행함으로써, 타입 안전 위반 탐지 장치(100)가 포함하는 구성요소들을 전반적으로 제어할 수 있다.
프로세서(110)는 프로그램에 포함된 메모리 할당 코드의 타입 안전 위반을 검출할 수 있다. 프로세서(110)는 컴파일 되기 이전의 프로그래밍 언어로 구현된 프로그램에서 하나 이상의 메모리 할당 코드를 검출할 수 있다.
프로세서(110)는 메모리 할당 코드에서 제1 포인터에 제2 포인터가 할당되는 경우, 제1 포인터의 깊이 값과 제2 포인터의 깊이 값을 비교하여 제1 포인터와 제2 포인터 사이의 타입 안전 위반의 발생 여부를 탐지할 수 있다. 이때, 제1 포인터의 깊이 값과 제2 포인터의 깊이 값은 프로세서에 내재된 메모리의 일부인 메모리 태깅에 저장될 수 있다. 프로세서(110)는 메모리 할당 코드를 실행시키는 경우, 제2 포인터를 메모리에 저장하고, 제1 포인터에 제2 포인터가 할당되도록 할 수 있다. 이때, 제2 포인터의 값과 제2 포인터의 깊이 값이 메모리에 저장되어 제1 포인터에 할당되기 전에 제1 포인터의 깊이 값과 제2 포인터의 깊이 값을 비교할 수 있다.
본 개시의 일 실시예에 따르면, 메모리(120)는 프로세서(110)의 처리 및 제어를 위한 프로그램을 저장할 수 있고, 타입 안전 위반 탐지 장치(100)로 입력되거나 타입 안전 위반 탐지 장치(100)로부터 출력되는 데이터를 저장할 수도 있다. 본 개시의 일 실시예에 따르면, 메모리(120)는 타입 안전 위반을 판단하는데 필요한 데이터, 구성요소를 저장할 수도 있고, 타입 안전 위반에 대한 정보를 저장할 수도 있다. 메모리(120)는 타입 안전 위반의 탐지가 필요한 프로그램을 저장할 수 있고, 프로그램을 정적 분석하는 구성, 프로그램의 실행을 모니터링하는 구성 등을 저장할 수 있다. 메모리(120)는 상기의 정보들을 저장한 데이터베이스를 포함할 수 있다.
본 개시의 일 실시예에 따르면, 메모리(120)는 플래시 메모리 타입(flash memory type), 하드디스크 타입(hard disk type), 멀티미디어 카드 마이크로 타입(multimedia card micro type), 카드 타입의 메모리(예를 들어 SD 또는 XD 메모리 등), 램(RAM, Random Access Memory) SRAM(Static Random Access Memory), 롬(ROM, Read-Only Memory), EEPROM(Electrically Erasable Programmable Read-Only Memory), PROM(Programmable Read-Only Memory), 자기 메모리, 자기 디스크, 광디스크 중 적어도 하나의 타입의 저장매체를 포함할 수 있다. 또한 본 개시의 일 실시예에 따르면, 메모리(120)에 저장된 프로그램들은 그 기능에 따라 복수 개의 모듈들로 분류할 수 있다.
본 개시의 일 실시예에 따르면, 통신부(130)는 프로세서(110)의 외부 장치와 통신을 수행할 수 있다. 예를 들어, 통신부(130)는 프로세서(110)의 제어에 의해 보안이 필요한 프로그램이 저장된 전자 장치와 통신을 수행할 수 있다. 또한, 통신부(130)는 외부 인터페이스와의 통신을 통해 보안이 필요한 프로그램이 저장된 전자 장치에 접근하여 프로그램을 분석하고 프로그램에 대한 보안 정책을 설정하도록 통신할 수 있다.
입출력부(140)는 입출력 장치와의 인터페이스를 위한 수단일 수 있다. 예를 들어, 입력 장치는 키보드 또는 마우스 등의 장치를, 그리고 출력 장치는 어플리케이션의 통신 세션을 표시하기 위한 디스플레이와 같은 장치를 포함할 수 있다. 다른 예로 입출력부(140)는 터치스크린과 같이 입력과 출력을 위한 기능이 하나로 통합된 장치와의 인터페이스를 위한 수단일 수도 있다. 보다 구체적인 예로, 타입 안전 위반 탐지 장치(100)의 프로세서(110)는 메모리(120)에 로딩되거나, 저장된 컴퓨터 프로그램의 명령을 처리함에 있어서 서비스 화면이나 컨텐츠가 입출력부(140)를 통해 디스플레이에 표시될 수 있다.
또한, 다른 실시예들에서 타입 안전 위반 탐지 장치(100)는 도 1의 구성요소들보다 더 많은 구성요소들을 포함할 수도 있다. 예를 들어, 상술한 입출력 장치 중 적어도 일부를 포함하도록 구현되거나 또는 내부 구성요소들에 전력을 공급하는 배터리 및 충전 장치, 각종 센서, 데이터베이스 등과 같은 다른 구성요소들을 더 포함할 수도 있다.
도 2는 메모리(120)의 블록도이다.
메모리(120)는, 대상 프로그램(121)과 타입 안전 위반 판단부(122)를 포함할 수 있다. 대상 프로그램(121)는 복수의 명령어들을 포함하는 소프트웨어로서, 타입 안전 위반을 탐지하고자 하는 대상 프로그램을 말한다. 사용자는, 타입 안전 위반을 탐지하고자 하는 프로그램을 메모리에 저장시켜 타입 안전 위반에 대해서 판단하도록 타입 안전 위반 판단부(122)를 실행시킬 수 있다.
타입 안전 위반 판단부(122)는 대상 프로그램(122)에 포함된 명령어들을 판독하면서 프로그램에 포함된 타입 안전 위반을 탐지할 수 있다.
타입 안전 위반 판단부(122)는 도 6에 도시된 바와 같이, 자식 포인터를 부모 포인터로 할당하는 제1 타입(Upcasting), 부모 포인터를 자식 포인터로 할당하는 제2 타입(Downcasting) 중에서, 제2 타입을 타입 안전 위반으로 탐지할 수 있다. 여기서, 자식 포인터는 부모 포인터보다 계층, 깊이 값이 큰 포인터를 의미할 수 있으나, 깊이 값이 반대로 정의된 경우에는, 자식 포인터는 부모 포인터보다 계층, 깊이 값이 작은 포인터를 의미할 수 있다. 제1 타입에서도 안전 위반이 발생할 수 있으나, 포인터를 더 낮은 계층의 포인터로 할당하는 것은 계층 사이의 차이로 인해서 제1 포인터에 제2 포인터가 완전히 할당되지 않을 수 있다. 즉, 깊이 값이 다른 포인터들의 사이의 메모리 할당 코드는, 안전하지 않으므로, 본 개시의 실시예들에 따라서, 유효하지 않은 코드로 판단될 수 있다. C의 부모인 P를 가리키는 포인터 값pptr을 C의 포인터 값cptr로 할당하는 것은, 다운 캐스팅(downcasting)인 제2 타입에 해당하여 타입 안전 위반으로 판단할 수 있다.
타입 안전 위반 판단부(122)는 포인터 할당 코드에서, 제1 포인터에 제2 포인터가 할당되는 경우 제1 포인터의 깊이 값과 제2 포인터의 깊이 값을 비교하여 타입 안전 위반을 판단할 수 있다. 예를 들어, 제1 포인터의 깊이 값이 제2 포인터의 깊이 값 미만인 경우, 제1 포인터에 제2 포인터가 할당되는 코드가 타입 안전 위반을 포함하는 것으로 판단할 수 있다. 깊이 값을 최상단의 부모 포인터에 대해서 가장 낮게 설정하고, 계층이 증가하면서 깊이 값도 증가되는 경우에, 제1 포인터의 깊이 값이 제2 포인터의 깊이 값 미만인 경우, 제1 포인터에 제2 포인터가 할당되는 코드가 타입 안전 위반을 포함하는 것으로 판단할 수 있다. 반대로, 깊이 값이 계층이 증가하면서 감소하는 경우에는, 제1 포인터의 깊이 값이 제2 포인터의 깊이 값 초과인 경우, 제1 포인터에 제2 포인터가 할당되는 코드가 타입 안전 위반을 포함하는 것으로 판단할 수 있 으나, 이에 한정되지 않고 변경되는 깊이 값을 정의하는 방식에 따라 제1 포인터의 깊이 값과 제2 포인터의 깊이 값 사이의 비교는 달라질 수 있다.
제1 포인터의 깊이 값이 제2 포인터의 깊이 값 이상인 경우, 해당 코드가 적법한 것, 타입 안전 위반을 포함하지 않는 것으로 판단할 수 있으나, 이에 한정되지 않고 변경되는 깊이 값을 정의하는 방식에 따라 제1 포인터의 깊이 값과 제2 포인터의 깊이 값 사이의 비교는 달라질 수 있다.
이때, 타입 안전 위반 판단부(122)는, 제1 포인터의 깊이 값, 제2 포인터의 깊이 값을 프로세서의 메모리 태깅(MT)에 저장할 수 있다.
타입 안전 위반 판단부(122)는 상기의 과정으로 판단된 타입 안전 위반에 대한 데이터를 생성할 수 있다. 타입 안전 위반 판단부(122)는 타입 안전 위반에 대한 데이터를 출력 장치를 통해서 제공할 수 있다. 타입 안전 위반에 대한 데이터는, 타입 안전이 발생된 위치(파일명, 줄수 등), 타입 안전이 발생된 변수명, 타입 안전에 대한 내용을 포함할 수 있다. 타입 안전에 대한 내용은, 포인터들과, 포인터들 사이의 계층인 깊이 값들을 포함할 수 있다.
본 개시의 실시예들에 따르면, 메모리 할당 코드에서 제1 포인터에 제2 포인터를 할당하는 경우, 프로세서에 내재된 메모리에 저장된 제2 포인터를 제1 포인터와 비교함으로써, 제1 포인터와 제2 포인터 사이의 타입 안전 위반을 탐지할 수 있다. 타입 안전 위반을 탐지하는 별도의 함수, 또는 코드 없이도 메모리 할당 코드에서 제1 포인터에 제2 포인터를 할당하면서 제1 포인터와 제2 포인터 사이의 타입 안전 위반을 탐지할 수 있다. 이를 통해, 타입 안전 위반을 탐지하는 별도의 함수 또는 코드를 이용하지 않고 프로세서에 내재된 메모리 태깅 영역 만을 이용하기 때문에 좀더 적은 시간으로 타입 안전 위반을 탐지할 수 있다.
도 3은 본 개시의 실시 예들에 따른 타입 안전 위반을 탐지하는 방법의 흐름도이다.
S110에서는, 타입 안전 위반 탐지 장치(100)는 제1 프로그램에 포함된 하나 이상의 명령어들을 순차적으로 판독할 수 있다. 여기서, 제1 프로그램은, 프로그래밍 언어로 구현된 명령어들을 포함하는 것이거나, 컴파일되어 기계어로 변환된 명령어들을 포함하는 것일 수 있다.
S120에서는, 타입 안전 위반 탐지 장치(100)는 제1 포인터에 제2 포인터를 할당하는 메모리 할당 코드를 판독할 수 있다.
S130에서는 타입 안전 위반 탐지 장치(100)는 제1 프로그램의 메모리 할당 코드를 판독 및 실행시킴에 따라 제2 포인터를 메모리에 저장하고 제2 포인터의 깊이 값을 프로세서에 내재된 메모리 태깅에 저장할 수 있다.
S140에서는 타입 안전 위반 탐지 장치(100)는 프로세서에 의해서, 메모리 태깅에 저장된 제2 포인터의 깊이 값을 제1 포인터의 깊이 값과 비교할 수 있다.
S150에서는, 타입 안전 위반 탐지 장치(100)는 비교한 결과를 이용하여 메모리 할당 코드가 타입 안전 위반에 해당하는지 여부를 판단할 수 있다.
도 4는 포인터들의 깊이 값들을 비교하는 단계(S150)의 흐름도이다.
S151에서는, 타입 안전 위반 탐지 장치(100)는 제1 포인터의 깊이 값이 제2 포인터의 깊이 값 미만인지 여부를 판단할 수 있다. 제1 포인터의 깊이 값은, 제1 포인터가 정의된 계층에 대한 정보를 말하며, 최상단의 부모 포인터의 깊이 값은 1로 설정되고 하위로 내려오면서 증가되도록 설정될 수 있다. 제1 포인터의 깊이 값과 제2 포인터의 깊이 값이 다르고, 제1 포인터의 깊이 값이 더 작은 값이라면, 낮은 계층의 포인터를 더 높은 계층의 포인터에 할당함을 의미한다. 이는, 제1 포인터와 제2 포인터 사이에 불일치가 존재함을 의미한다.
S152에서는, 타입 안전 위반 탐지 장치(100)는 제1 포인터의 깊이 값이 제2 포인터의 깊이 값 미만인 경우, 타입 안전 위반을 포함하는 것으로 판단할 수 있다. S153에서는, 타입 안전 위반 탐지 장치(100)는 제1 포인터의 깊이 값이 제2 포인터의 깊이 값 이상인 경우, 타입 안전 위반을 포함하지 않는 것으로 판단할 수 있다.
도 5는 종래의 탐지 방법에 대한 예시 도면이다.
부모 계층의 포인터가 자식 계층의 포인터로 할당되는 코드를 탐지하기 위해서, Verify_type_casting(srcptr, Dstptr)를 정의하고, 상기 함수에서, srcptr의 타입값과, Dstptr의 타입값 사이의 위반 여부를 판단하는 명령어를 이용하여 타입 안전 위반을 탐지하였다. 이러한 방법을 이용하게 되면, 타입 안전 위반을 탐지하기 위해서, 몇번의 연산을 수행하고 이에 따른 리소스가 낭비되는 문제점이 있었다.
이상에서 설명된 장치는 하드웨어 구성요소, 소프트웨어 구성요소, 및/또는 하드웨어 구성요소 및 소프트웨어 구성요소의 조합으로 구현될 수 있다. 예를 들어, 실시예들에서 설명된 장치 및 구성요소는, 예를 들어, 프로세서, 콘트롤러, ALU(arithmetic logic unit), 디지털 신호 프로세서(digital signal processor), 마이크로컴퓨터, FPGA(field programmable gate array), PLU(programmable logic unit), 마이크로프로세서, 또는 명령(instruction)을 실행하고 응답할 수 있는 다른 어떠한 장치와 같이, 하나 이상의 범용 컴퓨터 또는 특수 목적 컴퓨터를 이용하여 구현될 수 있다. 처리 장치는 운영 체제(OS) 및 상기 운영 체제 상에서 수행되는 하나 이상의 소프트웨어 어플리케이션을 수행할 수 있다. 또한, 처리 장치는 소프트웨어의 실행에 응답하여, 데이터를 접근, 저장, 조작, 처리 및 생성할 수도 있다. 이해의 편의를 위하여, 처리 장치는 하나가 사용되는 것으로 설명된 경우도 있지만, 해당 기술분야에서 통상의 지식을 가진 자는, 처리 장치가 복수 개의 처리 요소(processing element) 및/또는 복수 유형의 처리 요소를 포함할 수 있음을 알 수 있다. 예를 들어, 처리 장치는 복수 개의 프로세서 또는 하나의 프로세서 및 하나의 콘트롤러를 포함할 수 있다. 또한, 병렬 프로세서(parallel processor)와 같은, 다른 처리 구성(processing configuration)도 가능하다.
소프트웨어는 컴퓨터 프로그램(computer program), 코드(code), 명령(instruction), 또는 이들 중 하나 이상의 조합을 포함할 수 있으며, 원하는 대로 동작하도록 처리 장치를 구성하거나 독립적으로 또는 결합적으로(collectively) 처리 장치를 명령할 수 있다. 소프트웨어 및/또는 데이터는, 처리 장치에 의하여 해석되거나 처리 장치에 명령 또는 데이터를 제공하기 위하여, 어떤 유형의 기계, 구성요소(component), 물리적 장치, 가상 장치(virtual equipment), 컴퓨터 저장 매체 또는 장치, 또는 전송되는 신호 파(signal wave)에 영구적으로, 또는 일시적으로 구체화(embody)될 수 있다. 소프트웨어는 네트워크로 연결된 컴퓨터 시스템 상에 분산되어서, 분산된 방법으로 저장되거나 실행될 수도 있다. 소프트웨어 및 데이터는 하나 이상의 컴퓨터 판독 가능 기록 매체에 저장될 수 있다.
실시예에 따른 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 실시예를 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 실시예의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 실시예들이 비록 한정된 실시예와 도면에 의해 설명되었으나, 해당 기술분야에서 통상의 지식을 가진 자라면 상기의 기재로부터 다양한 수정 및 변형이 가능하다. 예를 들어, 설명된 기술들이 설명된 방법과 다른 순서로 수행되거나, 및/또는 설명된 시스템, 구조, 장치, 회로 등의 구성요소들이 설명된 방법과 다른 형태로 결합 또는 조합되거나, 다른 구성요소 또는 균등물에 의하여 대치되거나 치환되더라도 적절한 결과가 달성될 수 있다.
그러므로, 다른 구현들, 다른 실시예들 및 특허청구범위와 균등한 것들도 후술하는 특허청구범위의 범위에 속한다.

Claims (9)

  1. 메모리 태깅이 내재된 프로세서 및 비휘발성 메모리를 포함하는 타입 안전 위반 탐지 장치가, 상기 비휘발성 메모리에 저장된 프로그램을 판독하는 단계;
    상기 타입 안전 위반 탐지 장치가, 판독된 제1 포인터에 제2 포인터가 할당되는 코드에서, 상기 제2 포인터의 깊이 값을 상기 메모리 태깅에 저장하고, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교하는 단계;
    상기 타입 안전 위반 탐지 장치가, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교한 결과에 따라서, 상기 할당되는 코드의 타입 안전 위반인지 여부를 판단하는 단계;
    상기 타입 안전 위반 탐지 장치가, 상기 타입 안전 위반인 경우, 상기 할당되는 코드에 대한 데이터를 생성하는 단계;를 포함하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 방법.
  2. 제1항에 있어서,
    상기 타입 안전 위반인지 여부를 판단하는 단계는,
    상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값 미만인 경우, 상기 할당되는 코드의 타입 안전 위반한 것으로 판단하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 방법.
  3. 제1항에 있어서,
    상기 타입 안전 위반인지 여부를 판단하는 단계는,
    상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값 이상인 경우, 상기 할당되는 코드의 타입 안전 위반이 아닌 것으로 판단하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 방법.
  4. 제1항에 있어서,
    상기 제1 및 제2 포인터의 깊이 값은
    최상단의 부모 계층의 깊이 값을 1로 설정하고, 하위로 내려오면서 증가되는 값으로 설정되는 것인, 메모리 태깅을 이용하는 타입 안전 위반 탐지 방법.
  5. 메모리 태깅이 내재된 프로세서 및 비휘발성 메모리를 포함하고,
    상기 프로세서가,
    판독된 제1 포인터에 제2 포인터가 할당되는 코드에서, 상기 제2 포인터의 깊이 값을 상기 메모리 태깅에 저장하고, 상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교하고,
    상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값을 비교한 결과에 따라서, 상기 할당되는 코드의 타입 안전 위반인지 여부를 판단하며,
    상기 타입 안전 위반인 경우, 상기 할당되는 코드에 대한 데이터를 생성하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치.
  6. 제5항에 있어서,
    상기 프로세서가,
    상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값 미만인 경우, 상기 할당되는 코드의 타입 안전 위반한 것으로 판단하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치.
  7. 제1항에 있어서,
    상기 프로세서가,
    상기 제1 포인터의 깊이 값과 상기 제2 포인터의 깊이 값 이상인 경우, 상기 할당되는 코드의 타입 안전 위반이 아닌 것으로 판단하는, 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치.
  8. 제5항에 있어서,
    상기 제1 및 제2 포인터의 깊이 값은
    최상단의 부모 계층의 깊이 값을 1로 설정하고, 하위로 내려오면서 증가되는 값으로 설정되는 것인, 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치.
  9. 컴퓨터를 이용하여 제1항 내지 제4항 중 어느 한 항의 방법을 실행시키기 위하여 컴퓨터 판독 가능한 저장 매체에 저장된 컴퓨터 프로그램.
KR1020220174184A 2022-12-13 2022-12-13 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램 KR20240088444A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020220174184A KR20240088444A (ko) 2022-12-13 2022-12-13 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020220174184A KR20240088444A (ko) 2022-12-13 2022-12-13 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램

Publications (1)

Publication Number Publication Date
KR20240088444A true KR20240088444A (ko) 2024-06-20

Family

ID=91669808

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020220174184A KR20240088444A (ko) 2022-12-13 2022-12-13 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램

Country Status (1)

Country Link
KR (1) KR20240088444A (ko)

Similar Documents

Publication Publication Date Title
JP7201078B2 (ja) データ引数を動的に識別し、ソースコードを計装するためのシステムと方法
CN109583200B (zh) 一种基于动态污点传播的程序异常分析方法
Yang et al. Are slice-based cohesion metrics actually useful in effort-aware post-release fault-proneness prediction? An empirical study
US8627290B2 (en) Test case pattern matching
US8087005B2 (en) Software testing by groups
US7178136B2 (en) Debugging step-back button
US7536678B2 (en) System and method for determining the possibility of adverse effect arising from a code change in a computer program
US12093398B2 (en) Vulnerability analysis and reporting for embedded systems
EP2238540A1 (en) Selective code instrumentation for software verification
JP7047969B2 (ja) 障害保護のための並列実行および関連プロセスの比較のためのシステムおよび方法
US10936474B2 (en) Software test program generation
JP2021533485A (ja) プログラムの機能を向上するための制御フローシステム、非一時的可読媒体、および方法
KR20180010053A (ko) 보안 취약점 점검을 위한 위험성 코드 검출 시스템 및 그 방법
US11868465B2 (en) Binary image stack cookie protection
US10318403B2 (en) Code update based on detection of change in runtime code during debugging
EP3765965B1 (en) Static software analysis tool approach to determining breachable common weakness enumerations violations
US8943370B2 (en) Trace value correlation with data field declarations
KR102209151B1 (ko) 바이너리 취약점 패치 방법 및 장치
Heelan et al. Augmenting vulnerability analysis of binary code
KR101995176B1 (ko) 프로그램 실행 컨텍스트 기반의 빅데이터를 활용한 역공학 방법 및 시스템
US20020129336A1 (en) Automatic symbol table selection in a multi-cell environment
KR20240088444A (ko) 메모리 태깅을 이용하는 타입 안전 위반 탐지 장치, 타입 안전 위반 탐지 방법 및 컴퓨터 프로그램
US9442701B1 (en) Verifying models for exceptional behavior
Yousaf et al. Efficient Identification of Race Condition Vulnerability in C code by Abstract Interpretation and Value Analysis
KR20240088450A (ko) 보안체크코드의 유효성 점검 장치, 보안체크코드의 유효성 점검 방법 및 컴퓨터 프로그램

Legal Events

Date Code Title Description
A302 Request for accelerated examination
E902 Notification of reason for refusal