KR101534493B1 - 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법 - Google Patents

구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법 Download PDF

Info

Publication number
KR101534493B1
KR101534493B1 KR1020140167264A KR20140167264A KR101534493B1 KR 101534493 B1 KR101534493 B1 KR 101534493B1 KR 1020140167264 A KR1020140167264 A KR 1020140167264A KR 20140167264 A KR20140167264 A KR 20140167264A KR 101534493 B1 KR101534493 B1 KR 101534493B1
Authority
KR
South Korea
Prior art keywords
instruction
program
source code
security
sentences
Prior art date
Application number
KR1020140167264A
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 KR1020140167264A priority Critical patent/KR101534493B1/ko
Application granted granted Critical
Publication of KR101534493B1 publication Critical patent/KR101534493B1/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

Landscapes

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

Abstract

구조 변환에 기초한 소스코드(source code) 보안 약점 탐지 장치 및 방법이 개시된다. 본 발명의 실시예들은 프로그램의 소스코드 내에 존재하는 보안 약점을 정확하게 탐지하고, 그에 대한 결과를 프로그램 개발자에게 제공해 줌으로써, 프로그램 개발자가 소스코드 내에 존재하는 보안 약점을 손쉽게 교정할 수 있도록 지원하고, 프로그램의 소스코드를 상기 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 구조화된 문장들로 구성된 자료 구조로 변환한 후 상기 변환된 자료 구조로부터 상기 소스코드의 보안 약점을 탐지함으로써, 보안 약점 탐지에 있어서의 효율성을 증대시키고, 다양한 언어로 작성된 프로그램에 대해서 본 보안 약점 탐지 기법을 손쉽게 적용시킬 수 있다.

Description

구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법{SOURCE CODE SECURITY WEAKNESS DETECTION APPARATUS AND METHOD BASED ON STRUCTURE CONVERSION}
본 발명의 실시예들은 프로그램의 소스코드(source code) 상에 내재하는 보안상 취약한 부분을 탐지하여 해당 부분에 대한 탐지 결과를 사용자에게 제공하는 기법에 대한 것이다.
최근, 데스크탑 PC, 스마트폰, 태블릿 PC 등과 같이, 마이크로 프로세서가 내장된 다양한 기기가 보급됨에 따라, 이러한 기기들에서 사용할 수 있는 다양한 종류의 프로그램들이 등장하고 있다.
아울러, 최근에는 프로그램 제작을 위한 다양한 프로그래밍 언어들도 등장함에 따라, 프로그램 개발자의 선택폭이 증가하게 되었고, 이로 인해, 프로그램의 양적 증가뿐만 아니라 질적 수준까지 높아지고 있다.
보통, 프로그램들은 컴퓨터 프로그램을 기록하고 있는 텍스트 파일인 소스코드(source code)로 제작되어 있고, 프로그램 개발자들은 소정의 프로그램 동작 알고리즘을 자신이 선택한 프로그래밍 언어에 따른 소스코드로 표현함으로써 프로그램을 개발할 수 있다.
일반적으로 프로그램 개발자들은 프로그램을 개발하면서, 자신이 작성한 소스코드에 오류가 없는지 여부를 확인하는 과정을 수행함으로써, 소스코드의 오류를 수정해 가고, 이렇게 소스코드의 오류를 수정해 가는 작업을 통해 완성도가 높은 프로그램을 개발하려고 노력한다.
하지만, 최근에는 정보의 노출 등 보안 이슈가 강화되고 있다는 점에서 프로그램 개발자들은 프로그램을 개발할 때, 단순히 소스코드의 오류여부만을 체크하는 것이 아니라, 자신이 작성한 소스코드 내에 보안상 약점으로 작용할 수 있는 부분이 있는지 여부를 확인해야 할 필요성이 증대되고 있다.
예컨대, 프로그램의 소스코드 내에서 사용되는 특정 명령어가 소정의 데이터를 변수로 참조할 때, 상기 특정 명령어는 해당 프로그램이 구동되는 시스템이 아닌 외부의 시스템으로부터 유입된 외부 데이터를 변수로 참조할 경우, 상기 특정 명령어의 실행에 따라 시스템 내의 주요 정보가 손쉽게 노출될 수 있는 특징을 갖는 명령어임에도 불구하고, 상기 소스코드 내에서 상기 특정 명령어가 외부 데이터를 참조하도록 작성되어 있다면, 해당 프로그램은 보안상 취약점을 갖는 프로그램이기 때문에 상기 프로그램의 사용자에게 큰 피해를 입힐 수 있다.
따라서, 프로그램의 소스코드 내에 존재하는 보안 약점을 정확하게 탐지하고, 그에 대한 결과를 프로그램 개발자에게 제공해 줌으로써, 프로그램 개발자가 소스코드 내에 존재하는 보안 약점을 제거할 수 있도록 지원하는 기법에 대한 연구가 필요하다.
대한민국 공개특허공보 제10-2006-0072353호(2006.06.28) 대한민국 등록특허공보 제10-1051600호(2011.07.22) 대한민국 공개특허공보 제10-2009-0112099호(2009.10.28) 미국 공개특허공보 제2012-0042361호(2012.02.16)
본 발명의 실시예들은 프로그램의 소스코드(source code) 내에 존재하는 보안 약점을 정확하게 탐지하고, 그에 대한 결과를 프로그램 개발자에게 제공해 줌으로써, 프로그램 개발자가 소스코드 내에 존재하는 보안 약점을 손쉽게 교정할 수 있도록 지원하고자 한다.
또한, 본 발명의 실시예들은 프로그램의 소스코드를 상기 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 구조화된 문장들로 구성된 자료 구조로 변환한 후 상기 변환된 자료 구조로부터 상기 소스코드의 보안 약점을 탐지함으로써, 보안 약점 탐지에 있어서의 효율성을 증대시키고, 다양한 언어로 작성된 프로그램에 대해서 본 보안 약점 탐지 기법을 손쉽게 적용할 수 있도록 지원하고자 한다.
본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 장치는 제1 프로그래밍 언어에 기초한 프로그램 소스코드(source code)에서 사용 가능한 복수의 명령어들 각각에 대해, 보안 약점으로 미리 지정된 참조 데이터에 대한 속성 정보가 저장되어 있는 보안 약점 데이터베이스, 상기 제1 프로그래밍 언어를 기반으로 제작된 제1 프로그램에 대한 보안 약점 탐지 명령이 입력되면, 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환하는 소스코드 변환부, 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인하는 속성 정보 확인부, 상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출하는 명령어 추출부 및 상기 자료 구조로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점에 대응하는 라인(line)에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 보안 약점 디스플레이부를 포함한다.
또한, 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 제1 프로그래밍 언어에 기초한 프로그램 소스코드에서 사용 가능한 복수의 명령어들 각각에 대해, 보안 약점으로 미리 지정된 참조 데이터에 대한 속성 정보가 저장되어 있는 보안 약점 데이터베이스를 유지하는 단계, 상기 제1 프로그래밍 언어를 기반으로 제작된 제1 프로그램에 대한 보안 약점 탐지 명령이 입력되면, 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환하는 단계, 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인하는 단계, 상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출하는 단계 및 상기 자료 구조로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 단계를 포함한다.
본 발명의 실시예들은 프로그램의 소스코드(source code) 내에 존재하는 보안 약점을 정확하게 탐지하고, 그에 대한 결과를 프로그램 개발자에게 제공해 줌으로써, 프로그램 개발자가 소스코드 내에 존재하는 보안 약점을 손쉽게 교정할 수 있도록 지원할 수 있다.
또한, 본 발명의 실시예들은 프로그램의 소스코드를 상기 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 구조화된 문장들로 구성된 자료 구조로 변환한 후 상기 변환된 자료 구조로부터 상기 소스코드의 보안 약점을 탐지함으로써, 보안 약점 탐지에 있어서의 효율성을 증대시키고, 다양한 언어로 작성된 프로그램에 대해서 본 보안 약점 탐지 기법을 손쉽게 적용시킬 수 있다.
또한, 본 발명의 실시예들은 개발자가 소스코드 내의 일정 부분에 대해 보안 약점으로 탐지되지 않도록 지정하면, 추후 보안 약점 탐지 과정을 재수행할 때, 개발자에 의해 지정된 부분이 더 이상 보안 약점으로 탐지되지 않도록 함으로써, 보안 약점 탐지 과정에 발생할 수 있는 오탐지의 가능성을 줄일 수 있다.
도 1은 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드(source code) 보안 약점 탐지 장치의 구조를 도시한 도면이다.
도 2는 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 장치가 소정의 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환한 예를 도시한 도면이다.
도 3은 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법을 도시한 순서도이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면에 예시하고 상세한 설명에 상세하게 설명하고자 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 때에는, 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
이하에서, 본 발명에 따른 실시예들을 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드(source code) 보안 약점 탐지 장치의 구조를 도시한 도면이다.
도 1을 참조하면, 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 장치(110)는 보안 약점 데이터베이스(111), 소스코드 변환부(112), 속성 정보 확인부(113), 명령어 추출부(114) 및 보안 약점 디스플레이부(115)를 포함한다.
보안 약점 데이터베이스(111)에는 제1 프로그래밍 언어에 기초한 프로그램 소스코드에서 사용 가능한 복수의 명령어들 각각에 대해, 보안 약점으로 미리 지정된 참조 데이터에 대한 속성 정보가 저장되어 있다.
예컨대, 상기 제1 프로그래밍 언어가 '자바(Java)'라는 프로그래밍 언어라고 가정하면, 보안 약점 데이터베이스(111)에는 하기의 표 1과 같은 형태로 '자바'기반의 프로그래밍 언어에 기초한 프로그램 소스코드에서 사용할 수 있는 복수의 명령어들 각각에 대해, 각 명령어들이 참조 데이터를 변수로 참조할 경우, 보안상 약점으로 적용될 수 있을 것으로 판단되는 참조 데이터에 대한 속성 정보가 개발자에 의해 미리 지정되어 있을 수 있다.
복수의 명령어들 보안 약점으로 지정된 참조 데이터의 속성 정보
File 외부 데이터 속성
null 속성
...
ServerSocket 외부 데이터 속성
명령어 1 속성 1
속성 2
...
명령어 2 외부 데이터 속성
... ...
소스코드 변환부(112)는 상기 제1 프로그래밍 언어를 기반으로 제작된 제1 프로그램에 대한 보안 약점 탐지 명령이 입력되면, 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환한다.
이때, 본 발명의 일실시예에 따르면, 소스코드 변환부(112)는 상기 제1 프로그램의 소스코드 상에 포함되어 있는 상기 복수의 문장들 각각을 하나의 문장 단위로 구분하고, 상기 제1 프로그램의 소스코드 상에서 스코프(Scope)를 지시하는 연산자를 기초로 상기 하나의 문장 단위로 구분된 상기 복수의 문장들을 각 스코프 별로 그룹화한 후 상기 복수의 문장들 중 데이터에 대한 변수 지정에 사용되는 문장들과 명령어로 구성된 문장들을 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화하여 상기 제1 프로그램의 소스코드를 상기 자료 구조로 변환할 수 있다.
관련하여, 도 2에는 소스코드 변환부(112)가 소정의 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환한 예가 도시되어 있다.
도 2에서 나타낸 예와 같이, 소스코드 변환부(112)는 도면부호 210에 도시된 소스코드 상에 포함되어 있는 복수의 문장들 각각을 "SfDataTrack"이라는 구분자를 이용해서 하나의 문장 단위로 구분할 수 있고, 상기 "SfDataTrack"으로 구분된 상기 복수의 문장들을 상기 소스코드 상에서 스코프를 지시하는 연산자인 "{"와 "}"을 참조하여, "SfDataScope"라는 구분자를 통해 각 스코프 별로 그룹화할 수 있으며, 상기 소스코드 상에 포함되어 있는 복수의 문장들 중 "String sys = null;", "input = test.firstData()" 또는 "Runtime.getRuntime().exec( sys );"와 같이, 소정의 데이터에 대한 변수 지정에 사용되는 문장들과 명령어로 구성된 문장들을 "SfDataRoom"이라는 구분자를 이용하여 프로그램 소스코드에 대한 실행흐름에 따라 구조화함으로써, 도면부호 210에 도시된 소스코드를 도면부호 220에 도시된 바와 같은 자료 구조로 변환할 수 있다.
즉, 소스코드 변환부(112)는 "public class A"와 같은 하나의 문장을 "SfDataTrack"으로, 하나의 스코프("{ }")를 "SfDataScope"로 구성할 수 있고, 이때, "SfDataTrack"은 자식(child)으로 "SfDataScope"를 가지고, "SfDataScope"는 다시 자식으로 "SfDataTrack"을 가지도록 구성할 수 있다.
그리고, "SfDataTrack"은 자식으로 "SfDataRoom"을 가질 수 있고, "SfDataRoom"은 다시 "SfDataRoom"을 자식으로 가질 수 있으며, 여기서, "SfDataRoom"은 전술한 바와 같이, "String sys = null;", "input = test.firstData()" 또는 "Runtime.getRuntime().exec( sys );"와 같은 소정의 데이터를 변수로 지정하는 문장들과 명령어로 구성된 문장들을 프로그램 소스코드에 대한 실행흐름에 따라 구조화하기 위한 구분자로 사용될 수 있다.
속성 정보 확인부(113)는 상기 제1 프로그램의 소스코드가 상기 자료 구조로 변환되면, 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인한다.
이때, 본 발명의 일실시예에 따르면, 속성 정보 확인부(113)는 상기 자료 구조 상에서 전술한 실시예의 "SfDataRoom"과 같은 구분자에 의해 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화되어 있는 상기 변수 지정에 사용되는 문장들과 상기 명령어로 구성된 문장들을 참조하여 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인할 수 있다.
명령어 추출부(114)는 보안 약점 데이터베이스(111)를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출한다.
보안 약점 디스플레이부(115)는 상기 자료 구조로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점에 대응하는 라인(line)에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이한다.
이하에서는 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 장치(110)의 동작에 대해 예를 들어 상세히 설명하기로 한다.
먼저, 보안 약점 데이터베이스(111) 상에는 상기 표 1과 같은 형태로 정보가 저장되어 있고, 프로그램 개발자는 '자바' 기반의 프로그래밍 언어를 이용하여 하기의 표 2에서 나타낸 프로그램 소스코드로 구성된 제1 프로그램을 개발한다고 가정한다.
String name = request.getProperty("filename");
if(name != null)
{
File file = new File("/usr/local/download/" + name);
if (file != null)
}
관련하여, 상기 표 2에서 나타낸 프로그램의 소스코드는 소정의 클라이언트 단말이 "http://www.softforum.com/download.do?filename=report.hwp"라는 형태의 URL에 접속한 후 서버에 대해 "report.hwp"라는 파일에 대한 다운로드를 요청한다고 할 때, 상기 서버가 상기 클라이언트 단말에 대해 "report.hwp"라는 파일을 전송해 주기 위해 "report.hwp"라는 파일을 읽어오도록 제어하는 소스코드의 일부분이다.
상기 제1 프로그램에 대한 개발자가 상기 표 2와 같은 소스코드를 작성한 후 상기 제1 프로그램에 대한 보안 약점 탐지 명령을 인가하면, 소스코드 변환부(112)는 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환할 수 있다.
이때, 소스코드 변환부(112)는 하기의 표 3에 나타낸 바와 같이, 상기 제1 프로그램의 소스코드를 구성하는 복수의 문장들 각각을 "SfDataTrack"이라는 구분자를 이용해서 하나의 문장 단위로 구분할 수 있고, 상기 "SfDataTrack"으로 구분된 상기 복수의 문장들을 상기 소스코드 상에서 스코프를 지시하는 연산자인 "{"와 "}"를 참조하여, "SfDataScope"라는 구분자를 통해 각 스코프 별로 그룹화할 수 있으며, 상기 소스코드 상에 포함되어 있는 복수의 문장들 중 "String name = request.getProperty("filename")"와 같이, 소정의 데이터에 대한 변수 지정에 사용되는 문장들과 명령어로 구성된 문장들을 "SfDataRoom"이라는 구분자를 이용하여 프로그램 소스코드에 대한 실행흐름에 따라 구조화함으로써, 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환할 수 있다.
SfDataTrack : SfDataRoom(D)[ name() ]
SfDataRoom(R)[ request() ] -> SfDataRoom(R)[ getProperty() ] -> SfDataRoom(R)[ "filename"( $#J_Literal() ) ]
SfDataTrack : SfDataRoom(E)[ SfDataRoom(R)[ name() ], SfDataRoom(O)[ "!="() ], SfDataRoom(R)[ null( #J_NullLiteral() ) ] ]
SfDataScope : [ file() ]
SfDataTrack : SfDataRoom(D)[ file() ] SfDataRoom(R)[ File() ] -> SfDataRoom(E)[ SfDataRoom(R)[ "/usr/local/download/"( #J_Literal()) ], SfDataRoom(O)[ "+"() ], SfDataRoom(R)[ name() ] ]
SfDataTrack : SfDataRoom(E)[ SfDataRoom(R)[ file() ], SfDataRoom(O) [ "!="( ) ], SfDataRoom(R)[ null( #J_NullLiteral() ) ] ]
상기 표 3과 같이, 상기 제1 프로그램의 소스코드가 구조화된 문장들로 구성된 자료 구조로 변환되면, 속성 정보 확인부(113)는 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인할 수 있다.
이때, 속성 정보 확인부(113)는 상기 자료 구조 상에서 "SfDataRoom"에 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화되어 있는 상기 변수 지정에 사용되는 문장들과 상기 명령어로 구성된 문장들을 참조하여 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인할 수 있다.
그리고 나서, 명령어 추출부(114)는 보안 약점 데이터베이스(111)를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출할 수 있다.
만약, 상기 표 3에서 나타낸 자료 구조 상의 "SfDataTrack : SfDataRoom(D)[ file() ] SfDataRoom(R)[ File() ] -> SfDataRoom(E)[ SfDataRoom(R)[ "/usr/local/download/"( #J_Literal()) ], SfDataRoom(O)[ "+"() ], SfDataRoom(R)[ name() ] ]"에 해당되는 라인에서 "File"에 해당하는 명령어가 변수로 참조하는 참조데이터인 ""/usr/local/download/" + name"이 외부 데이터 속성인 경우, 명령어 추출부(114)는 보안 약점 데이터베이스(111) 상에 "File"이라는 명령어에 대해 "외부 데이터 속성"이라는 속성 정보가 보안 약점으로 지정되어 있기 때문에 상기 표 3에서 나타낸 자료 구조 상에 존재하는 명령어들 중 "File"이라는 명령어를 보안 약점에 해당되는 명령어로 추출할 수 있다.
그리고 나서, 보안 약점 디스플레이부(115)는 상기 자료 구조로부터 상기 추출된 "File"이라는 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 "File"이라는 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이할 수 있다.
관련하여, 보안 약점 디스플레이부(115)는 상기 자료 구조로부터 "File"이라는 명령어가 기록되어 있는 지점을 확인한 후 상기 제1 프로그램의 소스코드로부터 상기 "File"이라는 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 하기의 표 4와 같이, 상기 제1 프로그램의 소스코드가 표시되는 화면 상에서 "File file = new File("/usr/local/download/" + name);"이 기록되어 있는 라인을 굵게 표시하면서, 해당 라인을 기울임체로 변경하는 등의 방식으로 표시함으로써, 상기 제1 프로그램의 개발자가 보안 약점 탐지 결과를 쉽게 확인할 수 있도록 보조할 수 있다.
String name = request.getProperty("filename");
if(name != null)
{
File file = new File ("/ usr / local / download /" + name );
if (file != null)
}
이때, 본 발명의 일실시예에 따르면, 구조 변환에 기초한 소스코드 보안 약점 탐지 장치(110)는 보안 약점 예외 지정부(116)를 더 포함할 수 있다.
보안 약점 예외 지정부(116)는 상기 적어도 하나의 제1 명령어 중 적어도 하나의 제2 명령어에 대한 보안 약점 예외 지정 명령이 입력되면, 보안 약점 데이터베이스(111) 상에서 상기 적어도 하나의 제2 명령어에 대해 보안 약점으로 미리 지정되어 있는 속성 정보 중 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터의 속성 정보에 대해 보안 약점 예외 지정을 수행한다.
이때, 본 발명의 일실시예에 따르면, 속성 정보 확인부(113)는 상기 보안 약점 예외 지정이 수행된 이후, 상기 제1 프로그램에 대한 보안 약점 탐지 명령이 재입력되면, 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 재확인할 수 있다.
그리고, 명령어 추출부(114)는 보안 약점 데이터베이스(111)를 참조하여 상기 적어도 하나의 명령어 중 상기 적어도 하나의 제1 명령어로부터 상기 보안 약점 예외 지정이 수행된 상기 적어도 하나의 제2 명령어가 제외된 적어도 하나의 제3 명령어를 추출할 수 있고, 보안 약점 디스플레이부(115)는 상기 자료 구조로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이할 수 있다.
앞서, 상기 표 2와 표 3을 이용한 실시예에서 보안 약점 디스플레이부(115)가 표 4와 같은 화면을 표시함으로써, 상기 제1 프로그램의 개발자는 상기 제1 프로그램의 소스코드에서 "File file = new File("/usr/local/download/" + name);"이 기록되어 있는 라인이 보안 약점임을 확인할 수 있었다.
이로부터 상기 제1 프로그램의 개발자는 상기 제1 프로그램에 대한 소스코드의 수정을 통해 "File"이라는 명령어가 변수로 참조하는 데이터를 외부 데이터가 아닌 시스템 내부의 데이터로 변경할 수도 있지만, "File"이라는 명령어가 참조하는 데이터가 외부 데이터가 맞다면, 상기 제1 프로그램에 대한 소스코드의 수정이 불가할 것이다.
따라서, 상기 개발자는 "File"이라는 명령어가 참조하는 데이터가 외부 데이터가 되어야 하는 것이 맞다면, 추후 상기 제1 프로그램에 대한 보안 약점 탐지가 재수행될 때, 더 이상 "File"이라는 명령어가 기록되어 있는 라인이 보안 약점으로 탐지되지 않도록 하기 위해, 보안 약점으로 탐지되었던 "File"이라는 명령어에 대해 보안 약점 예외 지정 명령을 입력할 수 있고, 이때, 보안 약점 예외 지정부(116)는 보안 약점 데이터베이스(111) 상에서 "File"이라는 명령어에 대해 보안 약점으로 미리 지정되어 있는 속성 정보 중 "외부 데이터 속성"이라는 속성 정보에 대해 보안 약점 예외 지정을 수행할 수 있다.
이렇게, 상기 보안 약점 예외 지정이 수행된 이후, 상기 제1 프로그램에 대한 보안 약점 탐지 명령이 재입력되면, 속성 정보 확인부(113)는 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인할 수 있고, 명령어 추출부(114)는 보안 약점 데이터베이스(111)를 참조하여 상기 적어도 하나의 명령어 중 보안 약점에 해당되는 명령어로 "File"이라는 명령어를 추출해야 하지만, 보안 약점 데이터베이스(111) 상에 "File"이라는 명령어에 대해 "외부 데이터 속성"에 대한 속성 정보가 보안 약점 예외로 지정되어 있기 때문에 명령어 추출부(114)는 "File"이라는 명령어를 보안 약점으로 추출하지 않을 수 있다.
이로 인해, 보안 약점 디스플레이부(115)는 상기 제1 프로그램의 소스코드가 표시되는 화면 상에서 "File file = new File("/usr/local/download/" + name);"이 기록되어 있는 라인을 더 이상 보안 약점 탐지 결과로 디스플레이하지 않을 수 있다.
본 발명의 일실시예에 따르면, 구조 변환에 기초한 소스코드 보안 약점 탐지 장치(110)는 명령어 선택부(117)를 더 포함할 수 있다.
명령어 선택부(117)는 상기 적어도 하나의 제3 명령어가 추출되면, 상기 적어도 하나의 제3 명령어 중, 상기 자료 구조 상의 동일 스코프로 그룹화된 문장들 내에서 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터와 동일한 데이터를 변수로 참조하는 명령어를 제외시킨 적어도 하나의 제4 명령어를 선택한다.
이때, 보안 약점 디스플레이부(115)는 상기 자료 구조로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이할 수 있다.
예컨대, 상기 표 2에서 나타낸 소스코드 중 하기의 표 5와 같이 "new File("/usr/local/download/" + name)"이라는 명령어 이외에 별도의 "명령어 2"라고 하는 명령어와 "명령어 1"이라는 명령어가 추가로 존재하고, 상기 "명령어 2"가 ""/usr/local/download/" + name"이라는 변수를 참조 데이터로 이용하고 있고, 상기 "명령어 1"이 "속성 1"에 해당되는 속성 정보를 갖는 참조 데이터를 변수로 이용하고 있다고 가정하자.
String name = request.getProperty("filename");
if(name != null)
{
File file = new File("/usr/local/download/" + name);
if (file != null)
명령어 2("/usr/local/download/" + name);
}
...
명령어 1(속성 1을 갖는 데이터)
이때, 소스코드 변환부(112)는 상기 표 5에서 나타낸 소스코드를 하기의 표 6과 같은 자료 구조로 변환할 수 있다.
SfDataTrack : SfDataRoom(D)[ name( ) ]
SfDataRoom(R)[ request( ) ] -> SfDataRoom(R)[ getProperty( ) ] -> SfDataRoom(R)[ "filename"( #J_Literal() ) ]
SfDataTrack : SfDataRoom(E)[ SfDataRoom(R)[ name( ) ], SfDataRoom(o)[ "!="( ) ], SfDataRoom(R)[ null( #J_NullLiteral() ) ] ]
SfDataScope : [ file( ) ]
SfDataTrack : SfDataRoom(D)[ file( ) ] SfDataRoom(R)[ File( ) ] -> SfDataRoom(E)[ SfDataRoom(R)[ "/usr/local/download/"( #J_Literal() ) ], SfDataRoom(o)[ "+"( ) ], SfDataRoom(R)[ name( ) ] ]
SfDataTrack : SfDataRoom(E)[ SfDataRoom(R)[ file( ) ], SfDataRoom(o)[ "!="( ) ], SfDataRoom(R)[ null( #J_NullLiteral() ) ] ]
SfDataTrack : SfDataRoom(R)[ 명령어 2( ) ] -> SfDataRoom(E)[ SfDataRoom(R)[ "/usr/local/download/"( #J_Literal( ) ) ], SfDataRoom(o)[ "+"( ) ], SfDataRoom(R)[ name( ) ] ]
...
SfDataTrack : SfDataRoom(R)[ 명령어 1( ) ] -> SfDataRoom(R)[ 속성 1을 갖는 데이터( ) ]
상기 표 6과 같이, 상기 제1 프로그램의 소스코드가 자료 구조로 변환되고, 개발자가 "File"이라는 명령어에 대해서만 보안 약점 예외 지정을 수행한 후 보안 약점 탐지 명령을 입력하면, 먼저, 속성 정보 확인부(113)는 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인할 수 있다.
이때, 만약, "File"과 "명령어 2"가 변수로 참조하는 참조 데이터의 속성이 외부 데이터 속성인 경우, 명령어 추출부(114)는 보안 약점 데이터베이스(111)를 참조하여 상기 적어도 하나의 명령어 중 보안 약점에 해당되는 명령어로 "File"과 "명령어 2" 및 "명령어 1"을 확인할 수 있고, 보안 약점 데이터베이스(111) 상에 "File"이라는 명령어는 "외부 데이터 속성"에 대한 속성 정보가 보안 약점 예외로 지정되어 있기 때문에 명령어 추출부(114)는 "File"과 "명령어 2" 및 "명령어 1" 중 최종적으로 "명령어 2"와 "명령어 1"만을 보안 약점으로 추출해 낼 수 있다.
이렇게, "명령어 2"와 "명령어 1"이 보안 약점으로 추출되었지만, "명령어 2"는 상기 표 6에서 나타낸 자료 구조 상에서 "SfDataScope : [ ]"를 통해 보안 약점 예외로 지정된 "File"과 동일한 스코프로 그룹화된 문장들 내에 존재하는 명령어이고, "명령어 2"가 변수로 참조하는 참조 데이터는 보안 약점 예외로 지정된 "File"이 변수로 참조하는 참조 데이터인 ""/usr/local/download/" + name"과 동일하다 점에서 명령어 선택부(117)는 앞서 보안 약점으로 추출된 "명령어 2"와 "명령어 1" 중 "명령어 2"를 제외시키고, "명령어 1"만을 보안 약점에 해당되는 명령어로 최종 선택할 수 있다.
이렇게, "명령어 1"이 보안 약점으로 최종 선택되면, 보안 약점 디스플레이부(115)는 상기 자료 구조로부터 상기 "명령어 1"이 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 "명령어 1"이 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 "명령어 1"이 기록되어 있는 지점에 대한 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이할 수 있다.
도 3은 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법을 도시한 순서도이다.
단계(S310)에서는 제1 프로그래밍 언어에 기초한 프로그램 소스코드에서 사용 가능한 복수의 명령어들 각각에 대해, 보안 약점으로 미리 지정된 참조 데이터에 대한 속성 정보가 저장되어 있는 보안 약점 데이터베이스를 유지한다.
단계(S320)에서는 상기 제1 프로그래밍 언어를 기반으로 제작된 제1 프로그램에 대한 보안 약점 탐지 명령이 입력되면, 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환한다.
단계(S330)에서는 상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인한다.
단계(S340)에서는 상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출한다.
단계(S350)에서는 상기 자료 구조로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이한다.
이때, 본 발명의 일실시예에 따르면, 단계(S320)에서는 상기 제1 프로그램의 소스코드 상에 포함되어 있는 상기 복수의 문장들 각각을 하나의 문장 단위로 구분하고, 상기 제1 프로그램의 소스코드 상에서 스코프를 지시하는 연산자를 기초로 상기 하나의 문장 단위로 구분된 상기 복수의 문장들을 각 스코프 별로 그룹화한 후 상기 복수의 문장들 중 데이터에 대한 변수 지정에 사용되는 문장들과 명령어로 구성된 문장들을 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화하여 상기 제1 프로그램의 소스코드를 상기 자료 구조로 변환할 수 있다.
이때, 단계(S330)에서는 상기 자료 구조로부터 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화되어 있는 상기 변수 지정에 사용되는 문장들과 상기 명령어로 구성된 문장들을 참조하여 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인할 수 있다.
또한, 본 발명의 일실시예에 따르면, 상기 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 단계(S350)이후에 상기 적어도 하나의 제1 명령어 중 적어도 하나의 제2 명령어에 대한 보안 약점 예외 지정 명령이 입력되면, 상기 보안 약점 데이터베이스 상에서 상기 적어도 하나의 제2 명령어에 대해 보안 약점으로 미리 지정되어 있는 속성 정보 중 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터의 속성 정보에 대해 보안 약점 예외 지정을 수행하는 단계를 더 포함할 수 있다.
이때, 본 발명의 일실시예에 따르면, 상기 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 상기 보안 약점 예외 지정이 수행된 이후, 상기 제1 프로그램에 대한 보안 약점 탐지 명령이 재입력되면, 상기 자료 구조 상에 포함되어 있는 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 재확인하는 단계, 상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 적어도 하나의 제1 명령어로부터 상기 보안 약점 예외 지정이 수행된 상기 적어도 하나의 제2 명령어가 제외된 적어도 하나의 제3 명령어를 추출하는 단계 및 상기 자료 구조로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 단계를 더 포함할 수 있다.
이때, 본 발명의 일실시예에 따르면, 상기 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 상기 적어도 하나의 제3 명령어가 추출되면, 상기 적어도 하나의 제3 명령어 중, 상기 자료 구조 상의 동일 스코프로 그룹화된 문장들 내에서 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터와 동일한 데이터를 변수로 참조하는 명령어를 제외시킨 적어도 하나의 제4 명령어를 선택하는 단계 및 상기 자료 구조로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 단계를 더 포함할 수 있다.
이상, 도 3을 참조하여 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법에 대해 설명하였다. 여기서, 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 도 1과 도 2를 이용하여 설명한 구조 변환에 기초한 소스코드 보안 약점 탐지 장치(110)의 동작에 대한 구성과 대응될 수 있으므로, 이에 대한 보다 상세한 설명은 생략하기로 한다.
본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 컴퓨터와의 결합을 통해 실행시키기 위한 저장매체에 저장된 컴퓨터 프로그램으로 구현될 수 있다.
또한, 본 발명의 일실시예에 따른 구조 변환에 기초한 소스코드 보안 약점 탐지 방법은 다양한 컴퓨터 수단을 통하여 수행될 수 있는 프로그램 명령 형태로 구현되어 컴퓨터 판독 가능 매체에 기록될 수 있다. 상기 컴퓨터 판독 가능 매체는 프로그램 명령, 데이터 파일, 데이터 구조 등을 단독으로 또는 조합하여 포함할 수 있다. 상기 매체에 기록되는 프로그램 명령은 본 발명을 위하여 특별히 설계되고 구성된 것들이거나 컴퓨터 소프트웨어 당업자에게 공지되어 사용 가능한 것일 수도 있다. 컴퓨터 판독 가능 기록 매체의 예에는 하드 디스크, 플로피 디스크 및 자기 테이프와 같은 자기 매체(magnetic media), CD-ROM, DVD와 같은 광기록 매체(optical media), 플롭티컬 디스크(floptical disk)와 같은 자기-광 매체(magneto-optical media), 및 롬(ROM), 램(RAM), 플래시 메모리 등과 같은 프로그램 명령을 저장하고 수행하도록 특별히 구성된 하드웨어 장치가 포함된다. 프로그램 명령의 예에는 컴파일러에 의해 만들어지는 것과 같은 기계어 코드뿐만 아니라 인터프리터 등을 사용해서 컴퓨터에 의해서 실행될 수 있는 고급 언어 코드를 포함한다. 상기된 하드웨어 장치는 본 발명의 동작을 수행하기 위해 하나 이상의 소프트웨어 모듈로서 작동하도록 구성될 수 있으며, 그 역도 마찬가지이다.
이상과 같이 본 발명에서는 구체적인 구성 요소 등과 같은 특정 사항들과 한정된 실시예 및 도면에 의해 설명되었으나 이는 본 발명의 보다 전반적인 이해를 돕기 위해서 제공된 것일 뿐, 본 발명은 상기의 실시예에 한정되는 것은 아니며, 본 발명이 속하는 분야에서 통상적인 지식을 가진 자라면 이러한 기재로부터 다양한 수정 및 변형이 가능하다.
따라서, 본 발명의 사상은 설명된 실시예에 국한되어 정해져서는 아니되며, 후술하는 특허청구범위뿐 아니라 이 특허청구범위와 균등하거나 등가적 변형이 있는 모든 것들은 본 발명 사상의 범주에 속한다고 할 것이다.
110: 구조 변환에 기초한 소스코드(source code) 보안 약점 탐지 장치
111: 보안 약점 데이터베이스 112: 소스코드 변환부
113: 속성 정보 확인부 114: 명령어 추출부
115: 보안 약점 디스플레이부 116: 보안 약점 예외 지정부
117: 명령어 선택부

Claims (12)

  1. 제1 프로그래밍 언어에 기초한 프로그램 소스코드(source code)에서 사용 가능한 복수의 명령어들 각각에 대해, 보안 약점으로 미리 지정된 참조 데이터에 대한 속성 정보가 저장되어 있는 보안 약점 데이터베이스;
    상기 제1 프로그래밍 언어를 기반으로 제작된 제1 프로그램에 대한 보안 약점 탐지 명령이 입력되면, 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환하는 소스코드 변환부;
    상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인하는 속성 정보 확인부;
    상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출하는 명령어 추출부;
    상기 자료 구조로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점에 대응하는 라인(line)에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 보안 약점 디스플레이부; 및
    상기 적어도 하나의 제1 명령어 중 적어도 하나의 제2 명령어에 대한 보안 약점 예외 지정 명령이 입력되면, 상기 보안 약점 데이터베이스 상에서 상기 적어도 하나의 제2 명령어에 대해 보안 약점으로 미리 지정되어 있는 속성 정보 중 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터의 속성 정보에 대해 보안 약점 예외 지정을 수행하는 보안 약점 예외 지정부
    를 포함하고,
    상기 속성 정보 확인부는
    상기 보안 약점 예외 지정이 수행된 이후, 상기 제1 프로그램에 대한 보안 약점 탐지 명령이 재입력되면, 상기 자료 구조 상에 포함되어 있는 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 재확인하고,
    상기 명령어 추출부는
    상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 적어도 하나의 제1 명령어로부터 상기 보안 약점 예외 지정이 수행된 상기 적어도 하나의 제2 명령어가 제외된 적어도 하나의 제3 명령어를 추출하며,
    상기 보안 약점 디스플레이부는
    상기 자료 구조로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 구조 변환에 기초한 소스코드 보안 약점 탐지 장치.
  2. 제1항에 있어서,
    상기 소스코드 변환부는
    상기 제1 프로그램의 소스코드 상에 포함되어 있는 상기 복수의 문장들 각각을 하나의 문장 단위로 구분하고, 상기 제1 프로그램의 소스코드 상에서 스코프(Scope)를 지시하는 연산자를 기초로 상기 하나의 문장 단위로 구분된 상기 복수의 문장들을 각 스코프 별로 그룹화한 후 상기 복수의 문장들 중 데이터에 대한 변수 지정에 사용되는 문장들과 명령어로 구성된 문장들을 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화하여 상기 제1 프로그램의 소스코드를 상기 자료 구조로 변환하고,
    상기 속성 정보 확인부는
    상기 자료 구조로부터 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화되어 있는 상기 변수 지정에 사용되는 문장들과 상기 명령어로 구성된 문장들을 참조하여 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인하는 구조 변환에 기초한 소스코드 보안 약점 탐지 장치.
  3. 삭제
  4. 삭제
  5. 제1항에 있어서,
    상기 적어도 하나의 제3 명령어가 추출되면, 상기 적어도 하나의 제3 명령어 중, 상기 자료 구조 상의 동일 스코프로 그룹화된 문장들 내에서 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터와 동일한 데이터를 변수로 참조하는 명령어를 제외시킨 적어도 하나의 제4 명령어를 선택하는 명령어 선택부
    를 더 포함하고,
    상기 보안 약점 디스플레이부는
    상기 자료 구조로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 구조 변환에 기초한 소스코드 보안 약점 탐지 장치.
  6. 제1 프로그래밍 언어에 기초한 프로그램 소스코드(source code)에서 사용 가능한 복수의 명령어들 각각에 대해, 보안 약점으로 미리 지정된 참조 데이터에 대한 속성 정보가 저장되어 있는 보안 약점 데이터베이스를 유지하는 단계;
    상기 제1 프로그래밍 언어를 기반으로 제작된 제1 프로그램에 대한 보안 약점 탐지 명령이 입력되면, 상기 제1 프로그램의 소스코드 상에 포함되어 있는 복수의 문장들의 속성과 상기 복수의 문장들 간의 코드의 실행흐름에 기초하여 상기 제1 프로그램의 소스코드를 구조화된 문장들로 구성된 자료 구조로 변환하는 단계;
    상기 자료 구조 상에 포함되어 있는 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인하는 단계;
    상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 보안 약점으로 미리 지정된 속성 정보를 갖는 참조 데이터를 변수로 참조하는 적어도 하나의 제1 명령어를 추출하는 단계;
    상기 자료 구조로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제1 명령어가 기록되어 있는 지점에 대응하는 라인(line)에 대한 위치 정보를 추출하여 상기 추출된 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 단계;
    상기 적어도 하나의 제1 명령어 중 적어도 하나의 제2 명령어에 대한 보안 약점 예외 지정 명령이 입력되면, 상기 보안 약점 데이터베이스 상에서 상기 적어도 하나의 제2 명령어에 대해 보안 약점으로 미리 지정되어 있는 속성 정보 중 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터의 속성 정보에 대해 보안 약점 예외 지정을 수행하는 단계;
    상기 보안 약점 예외 지정이 수행된 이후, 상기 제1 프로그램에 대한 보안 약점 탐지 명령이 재입력되면, 상기 자료 구조 상에 포함되어 있는 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 재확인하는 단계;
    상기 보안 약점 데이터베이스를 참조하여 상기 적어도 하나의 명령어 중 상기 적어도 하나의 제1 명령어로부터 상기 보안 약점 예외 지정이 수행된 상기 적어도 하나의 제2 명령어가 제외된 적어도 하나의 제3 명령어를 추출하는 단계; 및
    상기 자료 구조로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제3 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 단계
    를 포함하는 구조 변환에 기초한 소스코드 보안 약점 탐지 방법.
  7. 제6항에 있어서,
    상기 구조화된 문장들로 구성된 자료 구조로 변환하는 단계는
    상기 제1 프로그램의 소스코드 상에 포함되어 있는 상기 복수의 문장들 각각을 하나의 문장 단위로 구분하고, 상기 제1 프로그램의 소스코드 상에서 스코프(Scope)를 지시하는 연산자를 기초로 상기 하나의 문장 단위로 구분된 상기 복수의 문장들을 각 스코프 별로 그룹화한 후 상기 복수의 문장들 중 데이터에 대한 변수 지정에 사용되는 문장들과 명령어로 구성된 문장들을 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화하여 상기 제1 프로그램의 소스코드를 상기 자료 구조로 변환하고,
    상기 속성 정보를 확인하는 단계는
    상기 자료 구조로부터 상기 제1 프로그램의 소스코드에 대한 실행흐름에 따라 구조화되어 있는 상기 변수 지정에 사용되는 문장들과 상기 명령어로 구성된 문장들을 참조하여 상기 적어도 하나의 명령어 각각이 변수로 참조하는 참조 데이터의 속성 정보를 확인하는 구조 변환에 기초한 소스코드 보안 약점 탐지 방법.
  8. 삭제
  9. 삭제
  10. 제6항에 있어서,
    상기 적어도 하나의 제3 명령어가 추출되면, 상기 적어도 하나의 제3 명령어 중, 상기 자료 구조 상의 동일 스코프로 그룹화된 문장들 내에서 상기 적어도 하나의 제2 명령어가 변수로 참조하는 참조 데이터와 동일한 데이터를 변수로 참조하는 명령어를 제외시킨 적어도 하나의 제4 명령어를 선택하는 단계; 및
    상기 자료 구조로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점을 확인하고, 상기 제1 프로그램의 소스코드로부터 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 추출하여 상기 적어도 하나의 제4 명령어가 기록되어 있는 지점에 대응하는 라인에 대한 위치 정보를 보안 약점 탐지 결과로 디스플레이하는 단계
    를 더 포함하는 구조 변환에 기초한 소스코드 보안 약점 탐지 방법.
  11. 제6항, 제7항 또는 제10항 중 어느 한 항의 방법을 수행하는 프로그램을 기록한 컴퓨터 판독 가능 기록 매체.
  12. 제6항, 제7항 또는 제10항 중 어느 한 항의 방법을 컴퓨터와의 결합을 통해 실행시키기 위한 저장매체에 저장된 컴퓨터 프로그램.
KR1020140167264A 2014-11-27 2014-11-27 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법 KR101534493B1 (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020140167264A KR101534493B1 (ko) 2014-11-27 2014-11-27 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020140167264A KR101534493B1 (ko) 2014-11-27 2014-11-27 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법

Publications (1)

Publication Number Publication Date
KR101534493B1 true KR101534493B1 (ko) 2015-07-07

Family

ID=53790164

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020140167264A KR101534493B1 (ko) 2014-11-27 2014-11-27 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법

Country Status (1)

Country Link
KR (1) KR101534493B1 (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021085983A1 (ko) * 2019-10-28 2021-05-06 삼성전자 주식회사 소스 코드에서 취약성을 탐지하기 위한 방법, 디바이스, 및 컴퓨터 판독가능 매체
WO2022097798A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060072353A (ko) * 2004-12-23 2006-06-28 한국전자통신연구원 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20060072353A (ko) * 2004-12-23 2006-06-28 한국전자통신연구원 파라미터 상태 추적을 통한 웹 응용프로그램 취약점의소스코드 분석 장치 및 방법

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2021085983A1 (ko) * 2019-10-28 2021-05-06 삼성전자 주식회사 소스 코드에서 취약성을 탐지하기 위한 방법, 디바이스, 및 컴퓨터 판독가능 매체
WO2022097798A1 (ko) * 2020-11-09 2022-05-12 동국대학교 산학협력단 중간언어 기반 코드 변환 방법 및 이를 포함하는 전자 장치

Similar Documents

Publication Publication Date Title
JP4667386B2 (ja) 業務モデル図作成支援プログラム、業務モデル図作成支援方法、および業務モデル図作成支援装置
US8533664B2 (en) Method and system to automatically generate GUI object addressing queries
US10437574B2 (en) System and method for providing code completion features for code modules
US20130239098A1 (en) Source code conversion method and source code conversion program
CN105446874B (zh) 一种资源配置文件的检测方法和装置
KR101554424B1 (ko) 테스트 케이스 생성 자동화 방법 및 장치
CN104182335A (zh) 软件测试方法和装置
JP2012103791A (ja) プログラム試験装置、プログラム試験方法およびプログラム試験用プログラム
JP5303795B2 (ja) アプリケーションの解析方法、解析システム及び解析プログラム
CN108241720B (zh) 数据处理方法、装置和计算机可读存储介质
KR101479516B1 (ko) 소스코드 보안 약점 탐지 장치 및 방법
US10318403B2 (en) Code update based on detection of change in runtime code during debugging
KR101534493B1 (ko) 구조 변환에 기초한 소스코드 보안 약점 탐지 장치 및 방법
KR101563494B1 (ko) 파일 변경에 따른 실시간 소스코드 보안 약점 탐지 장치 및 방법
US8434072B2 (en) Automatic retrieval of translated messages for interacting with legacy systems
EP2174256A1 (en) Method and apparatus for changing and adding activation keys for functions of digital content without having to change and recompile the digital content
CN116501415B (zh) 命令执行方法及装置、电子设备、计算机可读存储介质
JP6451417B2 (ja) デバッグ支援装置、デバッグ支援システム、デバッグ支援方法、および、デバッグ支援プログラム
JP2012173745A (ja) データベース解析装置及びデータベース解析プログラム
JP6217440B2 (ja) シンボリック実行プログラム、シンボリック実行方法及びシンボリック実行装置
CN109460236B (zh) 程序版本构建和检查方法及系统
JP5808264B2 (ja) コード生成装置及びコード生成方法及びプログラム
JP2016126700A (ja) プログラム検証装置、プログラム検証方法及びプログラム検証プログラム
JP5736588B2 (ja) ソースコード変換方法及びソースコード変換プログラム
JP6281239B2 (ja) プログラム開発サポート装置および方法

Legal Events

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

Payment date: 20180702

Year of fee payment: 4