KR20190031030A - 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템 - Google Patents

바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템 Download PDF

Info

Publication number
KR20190031030A
KR20190031030A KR1020170118840A KR20170118840A KR20190031030A KR 20190031030 A KR20190031030 A KR 20190031030A KR 1020170118840 A KR1020170118840 A KR 1020170118840A KR 20170118840 A KR20170118840 A KR 20170118840A KR 20190031030 A KR20190031030 A KR 20190031030A
Authority
KR
South Korea
Prior art keywords
open source
software package
source software
identifier
file
Prior art date
Application number
KR1020170118840A
Other languages
English (en)
Other versions
KR102006245B1 (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 주식회사 인사이너리
Priority to KR1020170118840A priority Critical patent/KR102006245B1/ko
Priority to US15/858,119 priority patent/US10642965B2/en
Priority to PCT/KR2018/007936 priority patent/WO2019054613A1/ko
Publication of KR20190031030A publication Critical patent/KR20190031030A/ko
Application granted granted Critical
Publication of KR102006245B1 publication Critical patent/KR102006245B1/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/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/105Arrangements for software license management or administration, e.g. for managing licenses at corporate level
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/14Details of searching files based on file metadata
    • G06F16/148File search processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/60Software deployment
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/71Version control; Configuration management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/10Protecting distributed programs or content, e.g. vending or licensing of copyrighted material ; Digital rights management [DRM]
    • G06F21/107License processing; Key processing
    • G06F21/1077Recurrent authorisation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Technology Law (AREA)
  • Multimedia (AREA)
  • Library & Information Science (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Stored Programmes (AREA)

Abstract

바이너리 파일로부터 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템이 개시된다. 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일로부터 오픈소스 소프트웨어 패키지를 식별하는 방법은, 복수의 오픈소스 파일 각각에 포함된 복수의 제1 식별자에 기초하여 복수의 오픈소스 파일을 포함하는 복수의 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 포함하도록 생성된 데이터베이스를 액세스하는 단계; 바이너리 파일을 수신하는 단계; 바이너리 파일에 문자열 검색을 수행하여 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하는 단계; 및 데이터베이스로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출하고, 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 단계를 포함한다.

Description

바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템{METHOD AND SYSTEM FOR IDENTIFYING AN OPEN SOURCE SOFTWARE PACKAGE BASED ON BINARY FILES}
본 개시는 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템에 관한 것이다.
오픈소스(open source)는 소프트웨어 또는 하드웨어의 원작자의 권리를 유지하면서, 제3자에게 그 소프트웨어의 원시 코드에 대한 열람을 할 수 있도록 한 소프트웨어 또는 소프트웨어 라이선스를 의미한다. 일반적으로 오픈소스는, 특정 목적의 소프트웨어나 하드웨어 개발에 있어서 공동 참여, 신속한 프로토타입 제작, 의견 교환의 투명성 및 커뮤니티 개발을 허용하기 때문에, 개발자 및 업체들은 다양한 오픈소스를 활용하여 원하는 기능을 갖는 소프트웨어 또는 하드웨어를 빠르고 안정적으로 제작할 수 있다.
상용 소프트웨어와 마찬가지로 오픈소스 소프트웨어에도 저작권(라이선스)이 발생한다. 다만, 오픈소스 소프트웨어는 상용 소프트웨어와는 저작권의 행사 방식에 차이점이 있으며, 일반적인 오픈소스 소프트웨어 저작권자들은 소스 코드(오픈소스 파일)를 공개하고 누구나 열람, 복제, 설치, 사용, 변경, 재배포가 가능하도록 권리를 행사할 수 있다.
하지만, 오픈소스 소프트웨어는 누구나 쉽게 인터넷 등을 통해 검색 및 다운로드하여 사용할 수 있기 때문에, 해당 소프트웨어의 저작권자들의 저작권을 위배해서 사용하는 경우가 늘어나고 있다. 이 때문에, 특정 소프트웨어가 오픈소스 소프트웨어의 소스코드를 사용했는지 여부나, 오픈소스 소프트웨어의 라이선스를 검증해 주는 기술이 사용되고 있다.
오프소스 소프트웨어의 라이선스 검증은, 그 소스 코드뿐만 아니라, 소스 코드를 이용하여 생성된 다른 형식의 코드(예를 들어, 기계 코드, 오브젝트 코드, 바이너리 코드/파일)에 대해서도 필요할 수 있다.
예를 들어, 바이너리 파일(binary file)은 소스 코드 형태의 파일을 컴파일하여 컴퓨터 또는 프로세서가 직접 실행 가능한 형태로 생성된 파일을 지칭한다. 그러나, 소스 코드로부터 다른 코드 형태로 변환된 바이너리 파일은 일반 사용자나 프로그래머들이 쉽게 이해하거나 식별하기 어렵기 때문에, 원래 소스 코드에 대해 부여된 라이선스 검증에 어려움이 있다. 이에 따라, 바이너리 파일을 생성하기 위해 사용된 소스 코드를 통해 해당 오픈소스 소프트웨어의 라이선스의 검증을 실행해야 하는 번거로움이 있다.
본 개시는, 위에서 설명한 바와 같이, 오픈소스 소프트웨어의 소스 코드로부터 변환된 다른 형태의 코드에 대한 라이선스 검증이 어려운 문제점을 해결하는 것을 목적으로 한다. 이러한 문제점 해결을 위해, 복수의 오픈소스 파일 각각에 포함된 식별자와 바이너리 파일에 포함된 식별자에 기초하여 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지 및 버전 정보를 식별하는 방법 및 시스템을 제공한다.
본 개시의 일 실시예에 있어서, 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일로부터 오픈소스 소프트웨어 패키지를 식별하는 방법은, 복수의 오픈소스 파일 각각에 포함된 복수의 제1 식별자에 기초하여 복수의 오픈소스 파일을 포함하는 복수의 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 버전 정보를 포함하도록 생성된 데이터베이스를 액세스하는 단계; 바이너리 파일을 수신하는 단계; 바이너리 파일에 문자열 검색을 수행하여 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하는 단계; 및 데이터베이스로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출하고, 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 버전 정보를 출력하는 단계를 포함한다.
일 실시예에 따르면, 제1 식별자 및 제2 식별자 각각은 오픈소스 파일을 컴파일하여도 보존되는 문자열을 포함한다.
일 실시예에 따르면, 데이터베이스를 액세스하는 단계는, 오픈소스 제공 서버로부터 복수의 오픈소스 소프트웨어 패키지를 다운로드하는 단계; 복수의 오픈소스 소프트웨어 패키지로부터 오픈소스 정보를 추출하는 단계; 및 오픈소스 정보에 기초하여 데이터베이스를 생성하는 단계를 포함한다.
일 실시예에 따르면, 오픈소스 정보는 제1 식별자, 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명을 포함한다.
일 실시예에 따르면, 데이터베이스는, 복수의 오픈소스 소프트웨어 패키지 각각에 대응되는 제1 식별자, 오픈소스 소프트웨어 패키지명 및 제1 식별자가 존재하는 오픈소스 파일명을 포함하는 제1 테이블을 저장하는 제1 데이터베이스; 복수의 오픈소스 파일 각각에 대응하는 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보, 오픈소스 파일명, 오픈소스 파일의 체크섬을 포함하는 제2 테이블을 저장하는 제2 데이터베이스; 및 제1 식별자에 대응하는 오픈소스 파일의 체크섬 및 오픈소스 파일내의 제1 식별자의 위치 정보를 포함하는 제3 테이블을 저장하는 제3 데이터베이스를 포함한다.
일 실시예에 따르면, 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하는 단계는, 바이너리 파일의 파일 타입을 식별하는 단계; 및 파일 타입에 따라 바이너리 파일로부터 적어도 하나의 제2 식별자를 추출하는 단계를 포함한다.
일 실시예에 따르면, 데이터베이스는 복수의 오픈소스 소프트웨어 패키지 중 관리자에 의해 지정된 기준 오픈소스 소프트웨어 패키지의 기준 오픈소스 소프트웨어 패키지명, 및 복수의 버전 정보의 기준 오픈소스 소프트웨어 패키지에 동일하게 포함된 기준 제1 식별자를 더 포함한다.
일 실시예에 따르면, 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 단계는, 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하는 단계; 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명에 기초하여, 적어도 하나의 오픈소스 소프트웨어 패키지명에 가중치를 부여하는 단계; 및 가중치가 부여된 적어도 하나의 오픈소스 소프트웨어 패키지명에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 검출하는 단계를 포함한다.
일 실시예에 따르면, 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하는 단계는, 기준 제1 식별자에 기초하여 추출된 적어도 하나의 오픈소스 소프트웨어 패키지명 중 기준 오픈소스 소프트웨어 패키지명에 매칭되는 오픈소스 소프트웨어 패키지명을 검출하는 단계를 포함한다.
일 실시예에 따르면, 기준 오픈소스 소프트웨어 패키지명에 매칭되는 오픈소스 소프트웨어 패키지명을 검출하는 단계는, 적어도 하나의 제1 식별자 중 기준 제1 식별자에 매칭되는 제1 식별자를 식별하는 단계; 및 매칭되는 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 기준 오픈소스 소프트웨어 패키지명으로 간주하는 단계를 포함한다.
일 실시예에 따르면, 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하는 단계는, 적어도 하나의 제1 식별자가 식별되는 순서에 따라 연속하는 2개의 제1 식별자를 추출하는 단계; 연속하는 2개의 제1 식별자 중 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인지 판단하는 단계; 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인 것으로 판단되면, 연속하는 2개의 제1 식별자 중 최후에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명 중 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는지 판단하는 단계; 및 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는 것으로 판단되면, 매칭되는 오픈소스 소프트웨어 패키지명을 유일한 오픈소스 소프트웨어 패키지명으로 대체하는 단계를 포함한다.
일 실시예에 따르면, 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 단계는, 검출된 오픈소스 소프트웨어 패키지명에 포함되는 적어도 하나의 오픈소스 파일명에 대응하는 적어도 하나의 오픈소스 파일 체크섬 및 적어도 하나의 오픈소스 파일 체크섬에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지 버전 정보를 제2 데이터베이스로부터 추출하는 단계; 및 적어도 하나의 제1 식별자 및 적어도 하나의 오픈소스 파일 체크섬에 기초하여, 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 단계를 포함한다.
일 실시예에 따르면, 적어도 하나의 제1 식별자 및 적어도 하나의 체크섬에 기초하여 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 단계는, 제3 데이터베이스에서 적어도 하나의 오픈소스 파일 체크섬에 대해 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는지 판단하는 단계; 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는 것으로 판단되면, 적어도 하나의 오픈소스 파일 체크섬에 대응하는 오픈소스 소프트웨어 패키지 버전 정보에 소정의 가중치를 부여하는 단계; 및 오픈소스 소프트웨어 패키지 버전 정보중에서 가장 큰 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보를, 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출하는 단계를 포함한다.
본 개시의 다른 실시예에 있어서, 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일로부터 오픈소스 소프트웨어 패키지를 식별하는 시스템은, 복수의 오픈소스 파일 각각에 포함된 복수의 제1 식별자에 기초하여 복수의 오픈소스 파일을 포함하는 복수의 오픈소스 소프트웨어 패키지 및 버전 정보를 포함하도록 생성된 데이터베이스를 저장하는 저장부; 바이너리 파일을 수신하는 수신부; 바이너리 파일에 문자열 검색을 수행하여 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하고, 데이터베이스로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출하며, 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 버전 정보를 검출하는 프로세서; 및 검출된 오픈소스 소프트웨어 패키지 및 버전 정보를 출력하는 출력부를 포함한다.
일 실시예에 따르면, 제1 식별자 및 제2 식별자 각각은 오픈소스 파일을 컴파일하여도 보존되는 문자열을 포함한다.
일 실시예에 따르면, 프로세서는, 수신부를 통해 오픈소스 제공 서버로부터 복수의 오픈소스 소프트웨어 패키지를 다운로드하고, 복수의 오픈소스 소프트웨어 패키지로부터 오픈소스 정보를 추출하고, 오픈소스 정보에 기초하여 데이터베이스를 생성한다.
일 실시예에 따르면, 오픈소스 정보는 제1 식별자, 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명을 포함한다.
일 실시예에 따르면, 데이터베이스는 복수의 오픈소스 소프트웨어 패키지 각각에 대응되는 제1 식별자, 오픈소스 소프트웨어 패키지명 및 제1 식별자가 존재하는 오픈소스 파일명을 포함하는 제1 테이블을 저장하는 제1 데이터베이스; 복수의 오픈소스 파일 각각에 대응하는 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보, 오픈소스 파일명, 오픈소스 파일의 체크섬을 포함하는 제2 테이블을 저장하는 제2 데이터베이스; 및 제1 식별자에 대응하는 오픈소스 파일의 체크섬 및 오픈소스 파일내의 제1 식별자의 위치 정보를 포함하는 제3 테이블을 저장하는 제3 데이터베이스를 포함한다.
일 실시예에 따르면, 프로세서는, 바이너리 파일의 파일 타입을 식별하고, 파일 타입에 따라 바이너리 파일로부터 적어도 하나의 제2 식별자를 추출한다.
일 실시예에 따르면, 데이터베이스는 복수의 오픈소스 소프트웨어 패키지 중 관리자에 의해 지정된 기준 오픈소스 소프트웨어 패키지의 기준 오픈소스 소프트웨어 패키지명, 및 복수의 버전 정보의 상기 기준 오픈소스 소프트웨어 패키지에 동일하게 포함된 기준 제1 식별자를 더 포함한다.
일 실시예에 따르면, 프로세서는 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하고, 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명에 기초하여 적어도 하나의 오픈소스 소프트웨어 패키지명에 가중치를 부여하며, 가중치가 부여된 적어도 하나의 오픈소스 소프트웨어 패키지명에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 검출한다.
일 실시예에 따르면, 프로세서는 기준 제1 식별자에 기초하여 추출된 적어도 하나의 오픈소스 소프트웨어 패키지명 중 기준 오픈소스 소프트웨어 패키지명에 매칭되는 오픈소스 소프트웨어 패키지명을 검출한다.
일 실시예에 따르면, 프로세서는, 적어도 하나의 제1 식별자 중 기준 제1 식별자에 매칭되는 제1 식별자를 식별하고, 매칭되는 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 기준 오픈소스 소프트웨어 패키지명으로 대체한다.
일 실시예에 따르면, 프로세서는, 적어도 하나의 제1 식별자가 식별되는 순서에 따라 연속하는 2개의 제1 식별자를 추출하고, 연속하는 2개의 제1 식별자 중 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인지 판단하고, 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인 것으로 판단되면, 연속하는 2개의 제1 식별자 중 최후에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명 중 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는지 판단하고, 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는 것으로 판단되면, 매칭되는 오픈소스 소프트웨어 패키지명을 유일한 오픈소스 소프트웨어 패키지명으로 대체한다.
일 실시예에 따르면, 프로세서는 검출된 오픈소스 소프트웨어 패키지명에 포함되는 적어도 하나의 오픈소스 파일명에 대응하는 적어도 하나의 오픈소스 파일 체크섬 및 적어도 하나의 오픈소스 파일 체크섬에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지 버전 정보를 제2 데이터베이스로부터 추출하고, 적어도 하나의 제1 식별자 및 적어도 하나의 오픈소스 파일 체크섬에 기초하여, 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출한다.
일 실시예에 따르면, 프로세서는 제3 데이터베이스에서 적어도 하나의 오픈소스 파일 체크섬에 대해 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는지 판단하고, 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는 것으로 판단되면, 적어도 하나의 오픈소스 파일 체크섬에 대응하는 오픈소스 소프트웨어 패키지 버전 정보에 소정의 가중치를 부여하며, 오픈소스 소프트웨어 패키지 버전 정보중에서 가장 큰 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보를, 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출한다.
본 개시의 다양한 실시예들에 의하면, 오픈소스 소프트웨어의 소스 코드 파일을 컴파일하여 바이너리 파일을 생성한 후에도, 바이너리 파일에 보존되는 식별자에 기초하여 바이너리 파일에 사용된 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 식별할 수 있다.
또한, 이와 같이 식별된 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보에 기초하여, 바이너리 파일에 대응하는 오픈소스 소프트웨어의 라이선스 정보를 제공할 수 있다.
도 1은 본 개시의 일 실시예에 따른 오픈소스 식별 시스템의 구성을 개략적으로 나타낸 블록도이다.
도 2a 내지 도 2c는 본 개시의 일 실시예에 따른 데이터베이스를 나타낸 예시도이다.
도 3은 본 개시의 일 실시예에 따른 프로세서의 구성의 개략적으로 나타낸 블록도이다.
도 4는 본 개시의 일 실시예에 따라 데이터베이스를 생성하는 방법을 나타낸 흐름도이다.
도 5는 본 개시의 일 실시예에 따라 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 방법을 나타낸 흐름도이다.
도 6a는 본 개시의 일 실시예에 따른 바이너리 파일에 포함된 제2 식별자에 매칭되는 제1 식별자와, 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명 및 오픈소스 파일명을 나타낸 예시도이다.
도 6b는 본 개시의 일 실시예에 따른 오픈소스 소프트웨어 패키지명에 가중치를 부여한 예를 나타낸 예시도이다.
도 7은 본 개시의 일 실시예에 따른 오픈소스 소프트웨어 패키지 버전 정보에 가중치를 부여한 예를 나타낸 예시도이다.
본 개시의 실시예들은 본 개시의 기술적 사상을 설명하기 위한 목적으로 예시된 것이다. 본 개시에 따른 권리범위가 이하에 제시되는 실시예들이나 이들 실시예들에 대한 구체적 설명으로 한정되는 것은 아니다.
본 개시에 사용되는 모든 기술적 용어들 및 과학적 용어들은, 달리 정의되지 않는 한, 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자에게 일반적으로 이해되는 의미를 갖는다. 본 개시에 사용되는 모든 용어들은 본 개시를 더욱 명확히 설명하기 위한 목적으로 선택된 것이며 본 개시에 따른 권리범위를 제한하기 위해 선택된 것이 아니다.
본 개시에서 사용되는 "포함하는", "구비하는", "갖는" 등과 같은 표현은, 해당 표현이 포함되는 어구 또는 문장에서 달리 언급되지 않는 한, 다른 실시예를 포함할 가능성을 내포하는 개방형 용어(open-ended terms)로 이해되어야 한다.
본 개시에서 기술된 단수형의 표현은 달리 언급하지 않는 한 복수형의 의미를 포함할 수 있으며, 이는 청구범위에 기재된 단수형의 표현에도 마찬가지로 적용된다.
본 개시에서 사용되는 "제1", "제2" 등의 표현들은 복수의 구성요소들을 상호 구분하기 위해 사용되며, 해당 구성요소들의 순서 또는 중요도를 한정하는 것은 아니다.
본 개시에서 사용되는 용어 "부"는 소프트웨어, 또는 FPGA(field-programmable gate array), ASIC(application specific integrated circuit)과 같은 하드웨어 구성요소를 의미한다. 그러나, "부"는 하드웨어 및 소프트웨어에 한정되는 것은 아니다. "부"는 어드레싱할 수 있는 저장 매체에 있도록 구성될 수도 있고, 하나 또는 그 이상의 프로세서들을 재생시키도록 구성될 수도 있다. 따라서, 일 예로서, "부"는 소프트웨어 구성요소들, 객체지향 소프트웨어 구성요소들, 클래스 구성요소들 및 태스크 구성요소들과 같은 구성요소들과, 프로세서, 함수, 속성, 프로시저, 서브루틴, 프로그램 코드의 세그먼트, 드라이버, 펌웨어, 마이크로코드, 회로, 데이터, 데이터베이스, 데이터 구조, 테이블, 어레이 및 변수를 포함한다. 구성요소와 "부" 내에서 제공되는 기능은 더 작은 수의 구성요소 및 "부"로 결합되거나 추가적인 구성요소와 "부"로 더 분리될 수 있다.
본 개시에서 사용되는 "~에 기초하여"라는 표현은, 해당 표현이 포함되는 어구 또는 문장에서 기술되는, 결정, 판단의 행위 또는 동작에 영향을 주는 하나 이상의 인자를 기술하는데 사용되며, 이 표현은 결정, 판단의 행위 또는 동작에 영향을 주는 추가적인 인자를 배제하지 않는다.
본 개시에서, 어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급된 경우, 어떤 구성요소가 다른 구성요소에 직접적으로 연결될 수 있거나 접속될 수 있는 것으로, 또는 새로운 다른 구성요소를 매개로 하여 연결될 수 있거나 접속될 수 있는 것으로 이해되어야 한다.
본 개시에서, "오픈소스(open source)"라는 용어는 소프트웨어 또는 하드웨어의 원작자의 권리를 유지하면서 제3자에게 그 소프트웨어의 원시 코드에 대한 열람을 할 수 있도록 한 소프트웨어 또는 소프트웨어 라이선스를 의미한다. 본 개시의 다양한 실시예들을 설명함에 있어서, "오픈소스", "오픈소스 소프트웨어", "오픈소스 소프트웨어 패키지"는 동일 또는 유사한 의미로 상호 대체적으로 사용될 수 있다. 또한, 본 개시에서,"오픈소스 파일(또는 오픈소스 코드파일)"이라는 용어는, 오픈소스 라이선스가 부여된, 임의의 프로그래밍 언어로 작성된 컴퓨터 프로그램 소스코드가 포함된 파일을 의미하며, "오픈소스 소프트웨어 패키지(또는 오픈소스 패키지)"는 하나 또는 그 이상의 오픈소스 파일로 이루어진 소프트웨어 패키지 또는 제품을 의미한다.
이하, 첨부한 도면들을 참조하여, 본 개시의 실시예들을 설명한다. 첨부된 도면에서, 동일하거나 대응하는 구성요소에는 동일한 참조부호가 부여되어 있다. 또한, 이하의 실시예들의 설명에 있어서, 동일하거나 대응하는 구성요소를 중복하여 기술하는 것이 생략될 수 있다. 그러나, 구성요소에 관한 기술이 생략되어도, 그러한 구성요소가 어떤 실시예에 포함되지 않는 것으로 의도되지는 않는다.
도 1은 본 개시의 일 실시예에 따른 오픈소스 식별 시스템의 구성을 개략적으로 나타낸 블록도이다. 도 1을 참조하면, 오픈소스 식별 시스템(100)은, 저장부(110), 수신부(120), 프로세서(130) 및 출력부(140)를 포함한다.
저장부(110)는, 복수의 오픈소스 파일 각각에 포함된 복수의 제1 식별자에 기초하여 생성된, 복수의 오픈소스 파일을 포함하는 복수의 오픈소스 소프트웨어 패키지 및 버전 정보를 포함하는 데이터베이스를 저장한다. 또한, 저장부(110)는, 복수의 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보 각각에 대응하는 오픈소스 라이선스 정보를 저장할 수도 있다.
일 실시예에 있어서, 오픈소스 소프트웨어 패키지는 오프소스 식별 시스템(100)에 네트워크(150)를 통해 연결되는 오픈소스 제공 서버(160)에서 제공될 수 있다. 예를 들면, 네트워크(150)는 인터넷, 전용선 등을 포함하는 유선 네크워크와, 무선 인터넷, 이동 통신망 및 위성 통신망 등을 포함하는 무선 네트워크를 모두 포함할 수 있다. 또한, 오픈소스 제공 서버(160)는, 리눅스 커널 오픈소스 소프트웨어 패키지를 제공하는 서버(예를 들면, linux kernel open source(https://www.kernel.org)), OpenSSL 오픈소스 소프트웨어 패키지를 제공하는 서버(예를 들면, Github(https://github.com/openssl/openssl)) 등을 포함한다.
본 개시에서 오픈소스 또는 오픈소스 소프트웨어 (또는 오픈소스 소프트웨어 패키지)의 "식별자(identifier)"는, 해당 오픈 소스 등에 부여된 라이선스 또는 라이선스 버전을 유일하게 식별할 수 있는 정보 또는 데이터를 의미할 수 있다. 여기서, 오픈소스 등의 식별자를 나타내는 정보 또는 데이터는, 해당 오픈소스 등에 포함된 하나 이상의 임의의 문자열일 수 있으나, 이에 한정되는 것은 아니다.
일 실시예에 있어서, 제1 식별자는 오픈소스 파일에 포함된 문자열일 수 있으며, 이 문자열은, 해당 오픈소스 파일(또는 소스 코드)를 컴파일하여 바이너리 파일과 같은 다른 형태의 코드로 변경된 후에도, 식별 가능하도록 보존될 수 있다. 일 예에서, 제1 식별자는 함수명, 변수, 심벌 등을 나타내는 문자열을 포함할 수도 있다.
일 실시예에 있어서, 저장부(110)에 저장된 데이터베이스는, 복수의 오픈소스 소프트웨어 패키지로부터 추출된 오픈소스 정보에 기초하여 생성될 수 있다. 예를 들면, 오픈소스 정보는, 제1 식별자, 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명을 포함한다. 또한, 오픈소스 정보는, 오픈소스 파일의 체크섬, 오픈소스 파일 내의 제1 식별자의 위치 정보, 오픈소스 파일의 경로를 나타내는 오픈소스 파일 경로명을 더 포함할 수 있다.
전술한 실시예에서는 데이터베이스에 저장되는 정보의 용량을 감소시키기 위해, 오픈소스 파일의 중복 검사에 해당하는 체크섬을 데이터베이스에 저장하는 것으로 설명하였지만, 다른 실시예에서는, 오픈소스 파일 자체를 데이터베이스에 저장할 수도 있다.
일 실시예에 있어서, 저장부(110)에 저장된 데이터베이스는 관리자에 의해 원본으로 지정된 오픈소스 소프트웨어 패키지(이하, "기준 오픈소스 소프트웨어 패키지"라 함)의 오픈소스 소프트웨어 패키지명 및 기준 오픈소스 소프트웨어 패키지에 포함된 복수의 제1 식별자 중에서, 기준 오픈소스 소프트웨어 패키지의 모든 버전 정보에 동일하게 포함된 제1 식별자(이하, "기준 제1 식별자"라 함)를 저장할 수 있다.
도 2a 내지 도 2c는 본 개시의 일 실시예에 따른 데이터베이스를 나타낸 예시도이다. 일 실시예에 있어서, 데이터베이스는, 도 2a에 도시된 바와 같이, 복수의 오픈소스 소프트웨어 패키지 각각에 대응되는 제1 식별자, 오픈소스 소프트웨어 패키지명, 및 제1 식별자가 존재하는 오픈소스 파일명을 포함하는 제1 테이블(210)을 저장하는 제1 데이터베이스를 포함할 수 있다. 또한, 데이터베이스는, 도 2b에 도시된 바와 같이, 복수의 오픈소스 파일 각각에 대응하는 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보, 오픈소스 파일명, 오픈소스 파일 경로명, 오픈소스 파일의 체크섬을 포함하는 제2 테이블(220)을 저장하는 제2 데이터베이스를 포함할 수 있다. 또한, 데이터베이스는, 도 2c에 도시된 바와 같이, 제1 식별자, 제1 식별자에 대응하는 오픈소스 파일의 체크섬, 및 오픈소스 파일내의 제1 식별자의 위치 정보를 포함하는 제3 테이블(230)을 저장하는 제3 데이터베이스를 포함할 수 있다.
일 실시예에 있어서, 저장부(110)는 제1 데이터베이스를 저장하는 제1 저장부(도시하지 않음), 제2 데이터베이스를 저장하는 제2 저장부(도시하지 않음) 및 제3 데이터베이스를 저장하는 제3 저장부(도시하지 않음)를 포함할 수 있다. 다른 실시예에 있어서, 제1 데이터베이스, 제2 데이터베이스 및 제3 데이터베이스는 1개 저장부(110)에 저장될 수도 있다.
일 실시예에 있어서, 저장부(110)는 자기 디스크(예를 들어, 자기 테이프, 플렉시블 디스크, 하드 디스크), 광 디스크(예를 들어, CD, DVD 등), 반도체 메모리(예를 들어, RAM, ROM, 플레시 메모리, 플레시 메모리를 포함하는 USB 또는 SD 카드 등) 등을 포함할 수 있지만, 반드시 이에 한정되는 것은 아니다.
수신부(120)는, 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일을 수신한다. 일 실시예에 있어서, 수신부(120)는 바이너리 파일을 제공하는 외부 서버(예를 들어, 서버(160))에 접속하여 외부 서버로부터 바이너리 파일을 다운로드할 수 있다. 다른 실시예에 있어서, 수신부(120)는 바이너리 파일이 저장된 외부 저장매체(도시하지 않음)에 연결되어 그 저장매체로부터 바이너리 파일을 다운로드할 수 있다.
프로세서(130)는, 수신부(120)로부터 바이너리 파일을 수신하고, 수신된 바이너리 파일로부터 적어도 하나의 제2 식별자를 추출한다. 일 실시예에 있어서, 제2 식별자는, 오픈소스 파일에 포함된 문자열로써, 오픈소스 파일을 컴파일하여 다른 형태의 코드로 변경된 후에도 보존되는 문자열, 즉 오픈소스 파일을 컴파일하여도 변경되지 않는 문자열을 포함할 수 있다. 또한, 프로세서(130)는, 저장부(110)에 저장된 데이터베이스로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출하고, 추출된 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 버전 정보를 검출한다. 또한, 프로세서(130)는, 식별된 오픈소스 소프트웨어 패키지 및 버전 정보에 대응하는 오픈소스 라이선스 정보를 검출할 수도 있다. 더욱이, 프로세서(130)는, 저장부(110), 수신부(120) 및 출력부(140)의 동작을 제어할 수 있다.
일 실시예에 있어서, 프로세서(130)는, 이상 기술된 처리 또는 제어 동작 또는 이 동작을 실행하는 프로그램 명령어를 실행할 수 있는 프로세서로써, CPU(central processing unit), FPGA(field-programmable gate array), ASIC(application specific integrated circuit), GPU(graphic processing unit), AP(application processor) 등 중의 어느 하나를 포함할 수 있지만, 반드시 이에 한정되는 것은 아니다.
출력부(140)는, 프로세서(130)에 의해 검출된 오픈소스 소프트웨어 패키지 및 버전 정보를 출력한다. 또한, 출력부(140)는, 프로세서(130)에 의해 검출된 오픈소스 라이선스 정보를 출력할 수도 있다.
일 실시예에 있어서, 출력부(140)는, 오픈소스 소프트웨어 패키지, 버전 정보, 오픈소스 라이선스 정보 등을 시각적으로 표시할 수 있는 디스플레이, 이러한 정보를 청각적으로 출력할 수 있는 스피커 등을 포함할 수 있지만, 반드시 이에 한정되는 것은 아니다.
도 3은, 본 개시의 일 실시예에 따른 프로세서의 구성을 개략적으로 나타낸 블록도이다. 도 3을 참조하면, 프로세서(130)는, 파일 처리부(310), 식별자 추출부(320), 식별자 검출부(330), 패키지 검출부(340) 및 버전 검출부(350)를 포함한다.
파일 처리부(310)는, 수신부(120)에 연결되어 수신부(120)로부터 바이너리 파일을 수신한다. 또한, 파일 처리부(310)는, 수신된 바이너리 파일의 파일 타입을 분석한다. 파일 처리부(310)는, 파일 타입을 분석하여, 바이너리 파일이 압축된 바이너리 파일이라고 판단할 경우, 바이너리 파일에 압축 해체 처리를 수행한다.
식별자 추출부(320)는, 파일 처리부(310)에 연결되어 파일 처리부(310)로부터 바이너리 파일을 수신한다. 또한, 식별자 추출부(320)는 수신된 바이너리 파일로부터 적어도 하나의 제2 식별자를 추출한다. 일 실시예에 있어서, 제2 식별자는 오픈소스 파일을 컴파일한 후에도 보존되는, 즉 오픈소스 파일을 컴파일하여도 변경되지 않는 문자열을 포함할 수 있다. 또한, 제2 식별자는 함수명, 변수, 심벌 등을 나타내는 문자열을 포함할 수도 있다.
식별자 검출부(330)는, 식별자 추출부(320)에 연결되어 식별자 추출부(320)로부터 적어도 하나의 제2 식별자를 수신한다. 또한, 식별자 검출부(330)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제1 데이터베이스)로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 검출하고, 적어도 하나의 제1 식별자를 포함하는 오픈소스 소프트웨어 패키지명 및 오픈소스 파일명을 검출한다.
패키지 검출부(340)는, 식별자 검출부(330)에 연결되어 식별자 검출부(330)로부터 적어도 하나의 오픈소스 소프트웨어 패키지명 및 오픈소스 파일명을 수신한다. 또한, 패키지 검출부(340)는, 수신된 적어도 하나의 오픈소스 소프트웨어 패키지명 및 오픈소스 파일명에 기초하여, 적어도 하나의 오픈소스 소프트웨어 패키지명에 가중치를 부여하고, 가중치가 부여된 적어도 하나의 오픈소스 소프트웨어 패키지명 중에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 검출한다. 즉, 패키지 검출부(340)는, 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 검출함으로써, 이 패키지명을 바이너리 파일에 매칭되는 오픈소스 소프트웨어 패키지명로 결정한다.
일 실시예에 있어서, 패키지 검출부(340)는 데이터베이스에 저장된 기준 제1 식별자에 기초하여, 수신된 적어도 하나의 오픈소스 소프트웨어 패키지명 중 원본 오픈소스 소프트웨어 패키지에 해당하는 오픈소스 소프트웨어 패키지명을 검출할 수 있다. 예를 들면, 패키지 검출부(340)는 저장부(110)에 저장된 데이터베이스에 기초하여, 식별자 검출부(330)에 의해 검출된 적어도 하나의 제1 식별자 중에서 기준 제1 식별자에 매칭되는 제1 식별자가 존재하는지 판단한다. 기준 제1 식별자에 매칭되는 제1 식별자가 존재하는 것으로 판단되면, 패키지 검출부(340)는 매칭되는 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 원본 오픈소스 소프트웨어 패키지명으로서 검출하고, 검출된 원본 오픈소스 소프트웨어 패키지명을 기준 오픈소스 소프트웨어 패키지명으로 간주(대체)할 수 있다.
일 실시예에 있어서, 제2 식별자에 매칭되는 복수의 제1 식별자 중 어느 하나의 제1 식별자에 대응하는 유일한 오픈소스 소프트웨어 패키지명이 바로 직전에 검출되고, 그 다음의 제1 식별자에 대응하는 복수의 오픈소스 소프트웨어 패키지명이 검출되며, 복수의 오픈소스 소프트웨어 패키지명에 유일한 오픈소스 소프트웨어 패키지명이 포함되어 있는 경우, 패키지 검출부(340)는 그 다음의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 유일한 오픈소스 소프트웨어 패키지명으로 대체할 수 있다.
예를 들면, 제2 식별자에 매칭되는 제1 식별자가 "AAA" 및 "BBB"이고, 제1 식별자 "AAA"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A"로 유일하게 검출되고, 그 다음의 제1 식별자 "BBB"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A" 및 "패키지 B"인 경우, 패키지 검출부(340)는 제1 식별자 "BBB"에 대응하는 오픈소스 소프트웨어 패키지명을 오픈소스 소프트웨어패키지명 "패키지 A"로 대체한다.
버전 검출부(350)는, 패키지 검출부(340)에 연결되어 패키지 검출부(340)로부터 검출된 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 수신한다. 또한, 버전 검출부(350)는, 저장부(110)에 저장된 데이터베이스로부터, 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명과, 오픈소스 파일명에 대응하는 적어도 하나의 체크섬을 추출한다. 또한, 버전 검출부(350)는, 적어도 하나의 제1 식별자 및 적어도 하나의 체크섬에 기초하여, 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출한다. 이와 같은 검출 과정을 통해, 버전 검출부(350)는, 바이너리 파일에 매칭되는 오픈소스 소프트웨어 패키지 버전 정보를 검출한다.
추가적으로 또는 선택적으로, 프로세서(130)는 데이터베이스 생성부(도시하지 않음)를 더 포함할 수 있다. 데이터베이스 생성부는, 수신부(120)를 통해 오픈소스 제공 서버로부터 복수의 오픈소스 소프트웨어 패키지를 다운로드하고, 다운로드된 복수의 오픈소스 소프트웨어 패키지에 기초하여 데이터베이스를 생성할 수 있다.
도 4는, 본 개시의 일 실시예에 따라 데이터베이스를 생성하는 방법을 나타낸 흐름도이다. 도 4에 도시된 흐름도에서 프로세스 단계들, 방법 단계들, 알고리즘들 등이 순차적인 순서로 설명되었지만, 그러한 프로세스들, 방법들 및 알고리즘들은 임의의 적합한 순서로 작동하도록 구성될 수 있다. 다시 말하면, 본 개시의 다양한 실시예들에서 설명되는 프로세스들, 방법들 및 알고리즘들의 단계들이 본 개시에서 기술된 순서로 수행될 필요는 없다. 또한, 일부 단계들이 비동시적으로 수행되는 것으로서 설명되더라도, 다른 실시예에서는 이러한 일부 단계들이 동시에 수행될 수 있다. 또한, 도면에서의 묘사에 의한 프로세스의 예시는 예시된 프로세스가 그에 대한 다른 변화들 및 수정들을 제외하는 것을 의미하지 않으며, 예시된 프로세스 또는 그의 단계들 중 임의의 것이 본 개시의 다양한 실시예들 중 하나 이상에 필수적임을 의미하지 않으며, 예시된 프로세스가 바람직하다는 것을 의미하지 않는다.
도 4를 참조하면, 단계 S402에서 오픈소스 제공 서버에 접속되고, 단계 S404에서 오픈소스 제공 서버로부터 복수의 오픈소스 소프트웨어 패키지가 다운로드된다. 예를 들면, 프로세서(130)는 수신부(120)를 통해 오픈소스 제공 서버(160)에 접속하고, 접속된 오픈소스 제공 서버(160)로부터 복수의 오픈소스 소프트웨어 패키지를 다운로드한다.
단계 S406에서 복수의 오픈소스 소프트웨어 패키지 각각으로부터 오픈소스 정보가 추출된다. 예를 들면, 프로세서(130)는 복수의 오픈소스 소프트웨어 패키지로부터 오픈소스 정보를 추출한다. 일 실시예에 있어서, 오픈소스 정보는, 제1 식별자, 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명을 포함한다. 또한, 오픈소스 정보는, 오픈소스 파일의 체크섬, 오픈소스 파일내의 제1 식별자의 위치 정보, 오픈소스 파일의 경로를 나타내는 오픈소스 파일 경로명을 더 포함할 수 있다.
단계 S408에서 오픈소스 정보에 기초하여 데이터베이스가 생성된다. 예를 들면, 프로세서(130)는, 오픈소스 정보에 기초하여, 도 2a 내지 도 2c에 도시된 바와 같은 데이터베이스를 생성한다. 생성된 데이터베이스는 저장부(110)에 저장될 수 있다.
도 5는 본 개시의 일 실시예에 따라 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지 및 버전 정보를 검출하는 방법을 나타낸 흐름도이다. 도 5에 도시된 흐름도에서 프로세스 단계들, 방법 단계들, 알고리즘들 등이 순차적인 순서로 설명되었지만, 그러한 프로세스들, 방법들 및 알고리즘들은 임의의 적합한 순서로 작동하도록 구성될 수 있다. 다시 말하면, 본 개시의 다양한 실시예들에서 설명되는 프로세스들, 방법들 및 알고리즘들의 단계들이 본 개시에서 기술된 순서로 수행될 필요는 없다. 또한, 일부 단계들이 비동시적으로 수행되는 것으로서 설명되더라도, 다른 실시예에서는 이러한 일부 단계들이 동시에 수행될 수 있다. 또한, 도면에서의 묘사에 의한 프로세스의 예시는 예시된 프로세스가 그에 대한 다른 변화들 및 수정들을 제외하는 것을 의미하지 않으며, 예시된 프로세스 또는 그의 단계들 중 임의의 것이 본 개시의 다양한 실시예들 중 하나 이상에 필수적임을 의미하지 않으며, 예시된 프로세스가 바람직하다는 것을 의미하지 않는다.
도 5를 참조하면, 단계 S502에서 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일이 수신된다. 예를 들면, 프로세서(130)는, 수신부(120)를 통해 외부 서버 또는 저장매체로부터 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일을 수신한다.
단계 S504에서 수신된 바이너리 파일의 파일 타입이 분석되고, 단계 S506에서 바이너리 파일이 압축된 파일인지가 판단된다. 예를 들면, 프로세서(130)는 수신된 바이너리 파일의 파일 타입을 분석하여, 바이너리 파일이 압축된 파일인지를 판단한다.
단계 S506에서 바이너리 파일이 압축된 파일인 것으로 판단되면, 단계 S508에서 바이너리 파일에 압축 해제 처리가 수행된다. 예를 들면, 프로세서(130)는 바이너리 파일의 압축 형태(예를 들어, zip, rar 등)에 따라 바이너리 파일에 압축 해체 처리를 수행한다.
단계 S510에서 바이너리 파일로부터 적어도 하나의 제2 식별자가 추출된다. 예를 들면, 프로세서(130)는 바이너리 파일에 문자열 검색을 수행하여 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출한다. 프로세서(130)가 실행하는 문자열 검색 방법은, 일반적인 소스 코드를 포함하는 파일, 또는 소스 코드와 다른 형태의 코드를 포함하는 파일에서 특정 문자열 또는 특정 패턴을 검색할 수 있는 적절한 문자열 알고리즘을 사용할 수 있다. 예를 들어, 문자열 검색 방법은, Native string search, 오토마타 검색(Finite-state automaton based search), KMP 알고리즘(Knuth-Morris-Pratt Algorithm), 카프라빈 문자열 검색 알고리즘(Rabin-Karp string search algorithm) 등과 같이 공지된 문자열 검색 알고리즘들 중의 어느 하나를 이용할 수 있으나, 이에 한정되는 것은 아니다.
단계 S512에서 데이터베이스로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자가 추출된다. 예를 들면, 프로세서(130)는 저장부(110)에 저장된 데이터베이스로부터 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출한다.
단계 S514에서 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지가 검출된다. 예를 들면, 프로세서(130)는 저장부(110)에 저장된 데이터베이스로부터 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지를 검출한다.
일 실시예에 있어서, 프로세서(130)는 저장부(110)에 저장된 데이터베이스로부터 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출한다.
예를 들면, 바이너리 파일에 포함된 제2 식별자에 매칭되는 제1 식별자가, 도 6a에 도시된 바와 같이, "AAA", "BBB" 및 "CCC"인 경우, 프로세서(130)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제1 데이터베이스)로부터 제1 식별자 "AAA"에 대응하는 오픈소스 소프트웨어 패키지명 "패키지 A" 및 오픈소스 소프트웨어 패키지명 "패키지 A"에 대응하는 오픈소스 파일명 "파일 a"를 추출한다. 또한, 프로세서(130)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제1 데이터베이스)로부터 제1 식별자 "BBB"에 대응하는 오픈소스 소프트웨어 패키지명 "패키지 A" 및 "패키지 B", 오픈소스 소프트웨어 패키지명 "패키지 A"에 대응하는 오픈소스 파일명 "파일 b" 및 오픈소스 소프트웨어 패키지명 "패키지 B"에 대응하는 오픈소스 파일명 "파일 c"를 추출한다. 또한, 프로세서(130)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제1 데이터베이스)로부터 제1 식별자 "CCC"에 대응하는 오픈소스 소프트웨어 패키지명 "패키지 A", "패키지 B" 및 "패키지 C", 오픈소스 소프트웨어 패키지명 "패키지 A"에 대응하는 오픈소스 파일명 "파일 d", 오픈소스 소프트웨어 패키지명 "패키지 B"에 대응하는 오픈소스 파일명 "파일 d", 및 오픈소스 소프트웨어 패키지명 "패키지 C"에 대응하는 오픈소스 파일명 "파일 d"를 추출한다.
일 실시예에 있어서, 프로세서(130)는 저장부(110)에 저장된 데이터베이스에 기초하여, 식별자 검출부(330)에 의해 검출된 적어도 하나의 제1 식별자 중에서 기준 제1 식별자에 매칭되는 제1 식별자가 존재하는지 판단한다. 기준 제1 식별자에 매칭되는 제1 식별자가 존재하는 것으로 판단되면, 프로세서(130)는 매칭되는 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 원본 오픈소스 소프트웨어 패키지명으로서 검출하고, 검출된 원본 오픈소스 소프트웨어 패키지명을 기준 오픈소스 소프트웨어 패키지명으로 간주(대체)할 수 있다.
일 실시예에 있어서, 프로세서(130)는 제2 식별자에 매칭되는 복수의 제1 식별자 중 어느 하나의 제1 식별자(이하, "이전 제1 식별자"라 함)에 대응하는 오픈소스 소프트웨어 패키지명이 유일하게 검출되는지 판단한다. 이전 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일하게 검출된 것으로 판단되면, 프로세서(130)는 이전 제1 식별자에 연속하는(즉, 바로 다음의) 제1 식별자(이하, "현재 제1 식별자"라 함)에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명을 검출한다. 프로세서(130)는 현재 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 중, 이전 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명을 검출하고, 매칭되는 오픈소스 소프트웨어 패키지명을 제1 식별자에 대응하는 유일한 오픈소스 소프트웨어 패키지명으로서 검출한다.
일 실시예에 있어서, 프로세서(130)는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명에 기초하여, 적어도 하나의 오픈소스 소프트웨어 패키지명에 가중치를 부여한다.
예를 들면, 도 6a에 도시된 바와 같이, 제1 식별자 "AAA"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A"이고, 오픈소스 소프트웨어 패키지명 "AAA"에 대응하는 오픈소스 파일명이 "파일 a"인 경우, 프로세서(130)는 제1 식별자 "AAA"에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 것으로 판단할 수 있다. 이 경우, 프로세서(130)는, 도 6b에 도시된 바와 같이, 제1 식별자 "AAA"에 대응하는 오픈소스 소프트웨어 패키지명 "패키지 A"에 제1 가중치(예를 들어, 20)를 부여한다. 일 실시예에 있어서, 제1 가중치는 제1 식별자의 문자열 길이에 기초하여 산출될 수 있지만, 반드시 이에 한정되는 것은 아니다. 여기서, 유일한 오픈소스 소프트웨어 패키지명이 검출될 경우 부여되는 제1 가중치는 다른 가중치보다 항상 높은 우선순위가 되도록 한다.
또한, 도 6a에 도시된 바와 같이, 제1 식별자 "BBB"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A" 및 "패키지 B"이며, 오픈소스 소프트웨어 패키지명 "패키지 A"에 대응하는 오픈소스 파일명이 "파일 b"이고, 오픈소스 소프트웨어 패키지명 "패키지 B"에 대응하는 오픈소스 파일명이 "파일 c"인 경우, 프로세서(130)는 제1 식별자 "BBB"에 대응하는 오픈소스 소프트웨어 패키지명이 2개 이상이고, 오픈소스 파일명이 1개의 오픈소스 소프트웨어 패키지명에 포함된 것으로 판단하여, 오픈소스 소프트웨어 패키지명에 제2 가중치를 부여한다. 즉, 프로세서(130)는 오픈소스 파일명 "파일 b"가 오픈소스 소프트웨어 패키지명 "패키지 A"에 포함되고 오픈소스 파일명 "파일 c"가 오픈소스 소프트웨어 패키지명 "패키지 B"에 포함된 것으로 판단하여, 도 6b에 도시된 바와 같이, 오픈소스 소프트웨어 패키지명 "패키지 A" 및 "패키지 B" 각각에 제2 가중치(예를 들어, 10)를 부여한다. 일 실시예에 있어서, 제2 가중치는 제1 가중치보다 항상 작은 값이다.
여기서, 제1 식별자가 "AAA"와 "BBB"의 순서로 연속적으로 나타난 경우, 즉, 이전 제1 식별자가 "AAA"이고 현재 제1 식별자가 "BBB"인 경우, 이전 제1 식별자 "AAA"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A"이고 유일한 오픈소스 소프트웨어 패키지명이므로, 프로세서(130)는 오픈소스 소프트웨어 패키지명 "패키지 A"를 유일한 오픈소스 소프트웨어 패키지명으로 지정한다. 예를 들면, 프로세서(130)는 오픈소스 소프트웨어 패키지명 "패키지 A"에 제1 가중치를 부여한다. 현재 제1 식별자 "BBB"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A" 및 "패키지 B"이고, 이중 제1 및 제2 식별자에 공통으로 대응하는 오픈소스 소프트웨어 패키지명은 오픈소스 소프트웨어 패키지명 "패키지 A"이므로, 프로세서(130)는 오픈소스 소프트웨어 패키지명 "패키지 A"에 제1 가중치를 부여한다.
더욱이, 도 6a에 도시된 바와 같이, 제1 식별자 "CCC"에 대응하는 오픈소스 소프트웨어 패키지명이 "패키지 A", "패키지 B" 및 "패키지 C"이며, 오픈소스 소프트웨어 패키지명 "패키지 A"에 대응하는 오픈소스 파일명이 "파일 d"이고, 오픈소스 소프트웨어 패키지명 "패키지 B"에 대응하는 오픈소스 파일명이 "파일 d"이고, 오픈소스 소프트웨어 패키지명 "패키지 C"에 대응하는 오픈소스 파일명이 "파일 d"인 경우, 프로세서(130)는 동일한 오픈소스 소프트웨어 패키지의 오픈소스 파일이 복수의 오픈소스 소프트웨어 패키지에 포함된 것으로 판단하여, 추후 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명에 제3 가중치를 부여한다. 예를 들면, 프로세서(130)는 오픈소스 파일명 "파일 d"는 "패키지 A"에 포함된 것으로 판단하여, 도 6b에 도시된 바와 같이, 오픈소스 소프트웨어 패키지명 "패키지 A"에 제3 가중치(예를 들어, 20)를 부여한다. 일 실시예에 있어서, 제3 가중치는 제1 가중치와 동일한 값, 또는 제1 가중치보다 작은 값일 수 있다.
일 실시예에 있어서, 프로세서(130)는 가중치가 부여된 적어도 하나의 오픈소스 소프트웨어 패키지명에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지명으로써 검출한다. 예를 들면, 프로세서(130)는, 도 6b에 도시된 바와 같이, 오픈소스 소프트웨어 패키지명 "패키지 A", "패키지 B" 및 "패키지 C" 중에서 가장 높은 가중치(예를 들어, 50)를 갖는 오픈소스 소프트웨어 패키지명 "패키지 A"를 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지명으로서 검출한다.
다시 도 5를 참조하면, 단계 S516에서 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보가 검출된다. 예를 들면, 프로세서(130)는 오픈소스 소프트웨어 패키지명에 대응하는 복수의 오픈소스 소프트웨어 패키지 버전 정보 중에서 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출한다.
일 실시예에 있어서, 프로세서(130)는 저장부(110)에 저장된 데이터베이스로부터 오픈소스 소프트웨어 패키지명에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지 버전 정보 및 적어도 하나의 제1 식별자에 대한 적어도 하나의 오픈소스 파일명에 대응하는 적어도 하나의 오픈소스 파일의 체크섬을 추출한다.
예를 들면, 프로세서(130)는, 도 7에 도시된 바와 같이, 저장부(110)에 저장된 데이터베이스(예를 들어, 제2 데이터베이스)로부터 제1 식별자 "AAA"에 대해 오픈소스 소프트웨어 패키지명 "패키지 A"에 포함되는 오픈소스 파일명 "파일 a"에 대응하는 오픈소스 파일 체크섬 "제1 체크섬"을 추출한다. 또한, 프로세서(130)는 오픈소스 파일 체크섬 "제1 체크섬"에 대응하는 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1", "1.0.2" 및 "1.1.0"을 추출한다.
또한, 프로세서(130)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제2 데이터베이스)로부터 제1 식별자 "BBB"에 대해 오픈소스 소프트웨어 패키지명 "패키지 A"에 포함되는 오픈소스 파일명 "파일 b"에 대응하는 오픈소스 파일 체크섬 "제4 체크섬"을 추출한다. 프로세서(130)는 오픈소스 파일 체크섬 "제4 체크섬"에 대응하는 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1", "1.0.2" 및 "1.1.1"을 추출한다.
또한, 프로세서(130)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제2 데이터베이스)로부터 제1 식별자 "CCC"에 대해 오픈소스 소프트웨어 패키지명 "패키지 A"에 포함되는 오픈소스 파일명 "파일 d"에 대응하는 오픈소스 파일 체크섬 "제6 체크섬"을 추출한다. 프로세서(130)는 오픈소스 파일 체크섬 "제6 체크섬"에 대응하는 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1" 및 "1.0.2"를 추출한다.
일 실시예에 있어서, 프로세서(130)는 적어도 하나의 제1 식별자 및 적어도 하나의 오픈소스 파일 체크섬에 기초하여, 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출한다. 일부 실시예에서, 프로세서(130)는 저장부(110)에 저장된 데이터베이스에서 적어도 하나의 오픈소스 파일 체크섬에 대해 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는지 판단한다. 또한, 프로세서(130)는 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는 것으로 판단되면, 적어도 하나의 오픈소스 파일 체크섬에 대응하는 오픈소스 소프트웨어 패키지 버전 정보에 소정의 가중치를 부여하며, 오픈소스 소프트웨어 패키지 버전 정보 중에서 가장 큰 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보를, 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출한다.
예를 들면, 프로세서(130)는 저장부(110)에 저장된 데이터베이스(예를 들어, 제3 데이터베이스)에서 오픈소스 파일 체크섬 "제1 체크섬"에 대해 제1 식별자 "AAA"에 대응하는 위치 정보가 존재하는지 판단한다. 프로세서(130)는 오픈소스 파일 체크섬 "제1 체크섬"에 대해 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1", "1.0.2" 및 "1.1.0"에서 제1 식별자 "AAA"에 대응하는 위치 정보("제1 위치" 및 "제2 위치")가 존재하는 것으로 판단하여, 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1", "1.0.2" 및 "1.1.0" 각각에 소정의 가중치(예를 들어, 1)를 부여한다.
프로세서(130)는 오픈소스 파일 체크섬 "제4 체크섬" 및 "제6 체크섬"에 대해 전술한 바와 같이 가중치를 부여한다. 프로세서(130)는 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1", "1.0.2" 및 "1.1.0"중에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1"을 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출한다. 즉, 프로세서(130)는 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보 "1.0.1"을 바이너리 파일에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출한다.
추가적으로 또는 선택적으로, 프로세서(130)는 저장부(110)에 저장된 데이터베이스로부터 오픈소스 소프트웨어 패키지명 및 오픈소스 소프트웨어 패키지 버전 정보에 해당하는 오픈소스 라이선스 정보를 추출하고, 추출된 오픈소스 라이선스 정보를 출력부(140)를 통해 출력할 수 있다.
위 방법은 특정 실시예들을 통하여 설명되었지만, 위 방법은 또한 컴퓨터로 읽을 수 있는 기록매체에 컴퓨터가 읽을 수 있는 코드로서 구현하는 것이 가능하다. 컴퓨터가 읽을 수 있는 기록매체는 컴퓨터 시스템에 의해 읽혀질 수 있는 데이터가 저장되는 모든 종류의 기록장치를 포함한다. 컴퓨터가 읽을 수 있는 기록매체의 예로는 ROM, RAM, CD-ROM, 자기 테이프, 플로피 디스크, 광데이터 저장장치 등이 있으며, 또한 케리어 웨이브(예를 들어 인터넷을 통한 전송)의 형태로 구현되는 것도 포함한다. 또한, 컴퓨터가 읽을 수 있는 기록매체는 네트워크로 연결된 컴퓨터 시스템에 분산되어, 분산방식으로 컴퓨터가 읽을 수 있는 코드가 저장되고 실행될 수 있다. 그리고, 위 실시예들을 구현하기 위한 기능적인(functional) 프로그램, 코드 및 코드 세그먼트들은 본 개시가 속하는 기술분야의 프로그래머들에 의해 용이하게 추론될 수 있다.
이상 일부 실시예들과 첨부된 도면에 도시된 예에 의해 본 개시의 기술적 사상이 설명되었지만, 본 개시가 속하는 기술 분야에서 통상의 지식을 가진 자가 이해할 수 있는 본 개시의 기술적 사상 및 범위를 벗어나지 않는 범위에서 다양한 치환, 변형 및 변경이 이루어질 수 있다는 점을 알아야 할 것이다. 또한, 그러한 치환, 변형 및 변경은 첨부된 청구범위 내에 속하는 것으로 생각되어야 한다.
100: 오픈소스 시스템 110: 저장부
120: 수신부 130: 프로세서
140: 출력부 210: 제1 테이블
220: 제2 테이블 230: 제3 테이블
310: 파일 처리부 320: 식별자 추출부
330: 식별자 검출부 340: 패키지 검출부
350: 버전 검출부

Claims (26)

  1. 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일로부터 오픈소스 소프트웨어 패키지를 식별하는 방법으로서,
    복수의 오픈소스 파일 각각에 포함된 복수의 제1 식별자에 기초하여 상기 복수의 오픈소스 파일을 포함하는 복수의 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 포함하도록 생성된 데이터베이스를 액세스하는 단계;
    상기 바이너리 파일을 수신하는 단계;
    상기 바이너리 파일에 문자열 검색을 수행하여 상기 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하는 단계; 및
    상기 데이터베이스로부터 상기 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출하고, 상기 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 단계
    를 포함하는 방법.
  2. 제1항에 있어서,
    상기 제1 식별자 및 상기 제2 식별자 각각은 오픈소스 파일을 컴파일하여도 보존되는 문자열을 포함하는 방법.
  3. 제2항에 있어서,
    상기 데이터베이스를 액세스하는 단계는,
    오픈소스 제공 서버로부터 상기 복수의 오픈소스 소프트웨어 패키지를 다운로드하는 단계;
    상기 복수의 오픈소스 소프트웨어 패키지로부터 오픈소스 정보를 추출하는 단계; 및
    상기 오픈소스 정보에 기초하여 상기 데이터베이스를 생성하는 단계
    를 포함하는 방법.
  4. 제3항에 있어서,
    상기 오픈소스 정보는 상기 제1 식별자, 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명을 포함하는 방법.
  5. 제4항에 있어서,
    상기 데이터베이스는
    상기 복수의 오픈소스 소프트웨어 패키지 각각에 대응되는 상기 제1 식별자, 상기 오픈소스 소프트웨어 패키지명 및 상기 제1 식별자가 존재하는 상기 오픈소스 파일명을 포함하는 제1 테이블을 저장하는 제1 데이터베이스;
    상기 복수의 오픈소스 파일 각각에 대응하는 상기 오픈소스 소프트웨어 패키지명, 상기 오픈소스 소프트웨어 패키지 버전 정보, 상기 오픈소스 파일명, 상기 오픈소스 파일의 체크섬을 포함하는 제2 테이블을 저장하는 제2 데이터베이스; 및
    상기 제1 식별자에 대응하는 오픈소스 파일 체크섬 및 상기 오픈소스 파일내의 상기 제1 식별자의 위치 정보를 포함하는 제3 테이블을 저장하는 제3 데이터베이스
    를 포함하는 방법.
  6. 제5항에 있어서,
    상기 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하는 단계는,
    상기 바이너리 파일의 파일 타입을 식별하는 단계; 및
    상기 파일 타입에 따라 상기 바이너리 파일로부터 상기 적어도 하나의 제2 식별자를 추출하는 단계
    를 포함하는 방법.
  7. 제5항에 있어서, 상기 데이터베이스는 상기 복수의 오픈소스 소프트웨어 패키지 중 관리자에 의해 지정된 기준 오픈소스 소프트웨어 패키지의 기준 오픈소스 소프트웨어 패키지명, 및 복수의 버전 정보의 상기 기준 오픈소스 소프트웨어 패키지에 동일하게 포함된 기준 제1 식별자를 더 포함하는 방법.
  8. 제7항에 있어서,
    상기 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 단계는,
    상기 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하는 단계;
    상기 적어도 하나의 오픈소스 소프트웨어 패키지명 및 상기 적어도 하나의 오픈소스 파일명에 기초하여, 상기 적어도 하나의 오픈소스 소프트웨어 패키지명에 가중치를 부여하는 단계; 및
    상기 가중치가 부여된 적어도 하나의 오픈소스 소프트웨어 패키지명에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 검출하는 단계
    를 포함하는 방법.
  9. 제8항에 있어서,
    상기 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하는 단계는,
    상기 기준 제1 식별자에 기초하여 상기 추출된 적어도 하나의 오픈소스 소프트웨어 패키지명 중 상기 기준 오픈소스 소프트웨어 패키지명에 매칭되는 오픈소스 소프트웨어 패키지명을 검출하는 단계
    를 포함하는 방법.
  10. 제9항에 있어서,
    상기 기준 오픈소스 소프트웨어 패키지명에 매칭되는 오픈소스 소프트웨어 패키지명을 검출하는 단계는,
    상기 적어도 하나의 제1 식별자 중 상기 기준 제1 식별자에 매칭되는 제1 식별자를 식별하는 단계; 및
    상기 매칭되는 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 상기 기준 오픈소스 소프트웨어 패키지명으로 간주하는 단계
    를 포함하는 방법.
  11. 제8항에 있어서,
    상기 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하는 단계는,
    상기 적어도 하나의 제1 식별자가 식별되는 순서에 따라 연속하는 2개의 제1 식별자를 추출하는 단계;
    상기 연속하는 2개의 제1 식별자 중 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인지 판단하는 단계;
    상기 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인 것으로 판단되면, 상기 연속하는 2개의 제1 식별자 중 최후에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명 중 상기 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는지 판단하는 단계; 및
    상기 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는 것으로 판단되면, 상기 매칭되는 오픈소스 소프트웨어 패키지명을 상기 유일한 오픈소스 소프트웨어 패키지명으로 대체하는 단계
    를 포함하는 방법.
  12. 제8항에 있어서, 상기 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 단계는,
    상기 제2 데이터베이스로부터 상기 검출된 오픈소스 소프트웨어 패키지명에 포함되는 적어도 하나의 오픈소스 파일명에 대응하는 적어도 하나의 오픈소스 파일 체크섬 및 상기 적어도 하나의 오픈소스 파일 체크섬에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지 버전 정보를 추출하는 단계; 및
    상기 적어도 하나의 제1 식별자 및 상기 적어도 하나의 오픈소스 파일 체크섬에 기초하여 상기 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 단계
    를 포함하는 방법.
  13. 제12항에 있어서,
    상기 적어도 하나의 제1 식별자 및 상기 적어도 하나의 체크섬에 기초하여 상기 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 단계는,
    상기 제3 데이터베이스에서 상기 적어도 하나의 오픈소스 파일 체크섬에 대해 상기 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는지 판단하는 단계;
    상기 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는 것으로 판단되면, 상기 적어도 하나의 오픈소스 파일 체크섬에 대응하는 오픈소스 소프트웨어 패키지 버전 정보에 소정의 가중치를 부여하는 단계; 및
    상기 오픈소스 소프트웨어 패키지 버전 정보 중에서 가장 큰 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보를 상기 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출하는 단계
    를 포함하는 방법.
  14. 오픈소스의 라이선스를 검사하고자 하는 바이너리 파일로부터 오픈소스 소프트웨어 패키지를 식별하는 시스템으로서,
    복수의 오픈소스 파일 각각에 포함된 복수의 제1 식별자에 기초하여 상기 복수의 오픈소스 파일을 포함하는 복수의 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 포함하도록 생성된 데이터베이스를 저장하는 저장부;
    상기 바이너리 파일을 수신하는 수신부;
    상기 바이너리 파일에 문자열 검색을 수행하여 상기 바이너리 파일에 포함된 적어도 하나의 제2 식별자를 추출하고, 상기 데이터베이스로부터 상기 적어도 하나의 제2 식별자에 매칭되는 적어도 하나의 제1 식별자를 추출하며, 상기 적어도 하나의 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 프로세서; 및
    상기 검출된 오픈소스 소프트웨어 패키지 및 오픈소스 소프트웨어 패키지 버전 정보를 출력하는 출력부
    를 포함하는 시스템.
  15. 제14항에 있어서,
    상기 제1 식별자 및 상기 제2 식별자 각각은 오픈소스 파일을 컴파일하여도 보존되는 문자열을 포함하는 시스템.
  16. 제14항에 있어서,
    상기 프로세서는, 상기 수신부를 통해 오픈소스 제공 서버로부터 상기 복수의 오픈소스 소프트웨어 패키지를 다운로드하고, 상기 복수의 오픈소스 소프트웨어 패키지로부터 오픈소스 정보를 추출하고, 상기 오픈소스 정보에 기초하여 상기 데이터베이스를 생성하는, 시스템.
  17. 제16항에 있어서,
    상기 오픈소스 정보는, 상기 제1 식별자, 오픈소스 소프트웨어 패키지명, 오픈소스 소프트웨어 패키지 버전 정보 및 오픈소스 파일명을 포함하는 시스템.
  18. 제17항에 있어서,
    상기 데이터베이스는
    상기 복수의 오픈소스 소프트웨어 패키지 각각에 대응되는 상기 제1 식별자, 상기 오픈소스 소프트웨어 패키지명 및 상기 제1 식별자가 존재하는 상기 오픈소스 파일명을 포함하는 제1 테이블을 저장하는 제1 데이터베이스;
    상기 복수의 오픈소스 파일 각각에 대응하는 상기 오픈소스 소프트웨어 패키지명, 상기 오픈소스 소프트웨어 패키지 버전 정보, 상기 오픈소스 파일명, 상기 오픈소스 파일의 체크섬을 포함하는 제2 테이블을 저장하는 제2 데이터베이스; 및
    상기 제1 식별자에 대응하는 상기 오픈소스 파일의 체크섬 및 상기 오픈소스 파일내의 상기 제1 식별자의 위치 정보를 포함하는 제3 테이블을 저장하는 제3 데이터베이스
    를 포함하는 시스템.
  19. 제18항에 있어서,
    상기 프로세서는, 상기 바이너리 파일의 파일 타입을 식별하고, 상기 파일 타입에 따라 상기 바이너리 파일로부터 상기 적어도 하나의 제2 식별자를 추출하는 시스템.
  20. 제18항에 있어서,
    상기 데이터베이스는 상기 복수의 오픈소스 소프트웨어 패키지 중 관리자에 의해 지정된 기준 오픈소스 소프트웨어 패키지의 기준 오픈소스 소프트웨어 패키지명, 및 복수의 버전 정보의 상기 기준 오픈소스 소프트웨어 패키지에 동일하게 포함된 기준 제1 식별자를 더 포함하는 시스템.
  21. 제20항에 있어서,
    상기 프로세서는, 상기 적어도 하나의 제1 식별자에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지명 및 적어도 하나의 오픈소스 파일명을 추출하고, 상기 적어도 하나의 오픈소스 소프트웨어 패키지명 및 상기 적어도 하나의 오픈소스 파일명에 기초하여, 상기 적어도 하나의 오픈소스 소프트웨어 패키지명에 가중치를 부여하며, 상기 가중치가 부여된 적어도 하나의 오픈소스 소프트웨어 패키지명에서 가장 높은 가중치를 갖는 오픈소스 소프트웨어 패키지명을 검출하는 시스템.
  22. 제21항에 있어서,
    상기 프로세서는 상기 기준 제1 식별자에 기초하여 상기 추출된 적어도 하나의 오픈소스 소프트웨어 패키지명 중 상기 기준 오픈소스 소프트웨어 패키지명에 매칭되는 오픈소스 소프트웨어 패키지명을 검출하는, 시스템.
  23. 제22항에 있어서,
    상기 프로세서는, 상기 적어도 하나의 제1 식별자 중 상기 기준 제1 식별자에 매칭되는 제1 식별자를 식별하고, 상기 매칭되는 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명을 상기 기준 오픈소스 소프트웨어 패키지명으로 대체하는, 시스템.
  24. 제21항에 있어서,
    상기 프로세서는, 적어도 하나의 제1 식별자가 식별되는 순서에 따라 연속하는 2개의 제1 식별자를 추출하고, 연속하는 2개의 제1 식별자 중 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인지 판단하고, 최초에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명이 유일한 오픈소스 소프트웨어 패키지명인 것으로 판단되면, 연속하는 2개의 제1 식별자 중 최후에 식별된 제1 식별자에 대응하는 오픈소스 소프트웨어 패키지명 중 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는지 판단하고, 유일한 오픈소스 소프트웨어 패키지명과 매칭되는 오픈소스 소프트웨어 패키지명이 존재하는 것으로 판단되면, 매칭되는 오픈소스 소프트웨어 패키지명을 유일한 오픈소스 소프트웨어 패키지명으로 대체하는, 시스템.
  25. 제21항에 있어서,
    상기 프로세서는, 상기 제2 데이터베이스로부터 상기 검출된 오픈소스 소프트웨어 패키지명에 포함되는 적어도 하나의 오픈소스 파일명에 대응하는 적어도 하나의 오픈소스 파일 체크섬 및 상기 적어도 하나의 오픈소스 파일 체크섬에 대응하는 적어도 하나의 오픈소스 소프트웨어 패키지 버전 정보를 추출하고, 상기 적어도 하나의 제1 식별자 및 상기 적어도 하나의 오픈소스 파일 체크섬에 기초하여 상기 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보를 검출하는 시스템.
  26. 제25항에 있어서,
    상기 프로세서는, 상기 제3 데이터베이스에서 상기 적어도 하나의 오픈소스 파일 체크섬에 대해 상기 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는지 판단하고, 상기 적어도 하나의 제1 식별자에 대응하는 위치 정보가 존재하는 것으로 판단되면, 상기 적어도 하나의 오픈소스 파일 체크섬에 대응하는 오픈소스 소프트웨어 패키지 버전 정보에 소정의 가중치를 부여하며, 상기 오픈소스 소프트웨어 패키지 버전 정보 중에서 가장 큰 가중치를 갖는 오픈소스 소프트웨어 패키지 버전 정보를 상기 검출된 오픈소스 소프트웨어 패키지명에 대응하는 오픈소스 소프트웨어 패키지 버전 정보로서 검출하는 시스템.
KR1020170118840A 2017-09-15 2017-09-15 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템 KR102006245B1 (ko)

Priority Applications (3)

Application Number Priority Date Filing Date Title
KR1020170118840A KR102006245B1 (ko) 2017-09-15 2017-09-15 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
US15/858,119 US10642965B2 (en) 2017-09-15 2017-12-29 Method and system for identifying open-source software package based on binary files
PCT/KR2018/007936 WO2019054613A1 (ko) 2017-09-15 2018-07-13 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020170118840A KR102006245B1 (ko) 2017-09-15 2017-09-15 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템

Publications (2)

Publication Number Publication Date
KR20190031030A true KR20190031030A (ko) 2019-03-25
KR102006245B1 KR102006245B1 (ko) 2019-08-06

Family

ID=65720352

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020170118840A KR102006245B1 (ko) 2017-09-15 2017-09-15 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템

Country Status (3)

Country Link
US (1) US10642965B2 (ko)
KR (1) KR102006245B1 (ko)
WO (1) WO2019054613A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102006245B1 (ko) * 2017-09-15 2019-08-06 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
US11074154B2 (en) * 2018-06-06 2021-07-27 International Business Machines Corporation Identifying a source file for use in debugging compiled code
US10789067B2 (en) * 2018-11-05 2020-09-29 WhiteSource Ltd. System and method for identifying open source usage
US10936726B2 (en) * 2018-11-26 2021-03-02 Blackberry Limited Determining security risks in software code
CN111475824B (zh) * 2020-03-23 2023-05-05 深圳前海百递网络有限公司 数据访问方法、装置、设备和存储介质
CN111782239B (zh) * 2020-06-03 2023-07-11 中移(杭州)信息技术有限公司 软件打包和源码版本信息获取方法、装置及存储介质
US20220198003A1 (en) * 2020-12-22 2022-06-23 Microsoft Technology Licensing, Llc Detecting added functionality in open source package

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100185686A1 (en) * 2009-01-13 2010-07-22 Juergen Weigert System and method for providing a license description syntax in a software due diligence system
US20120054733A1 (en) * 2010-09-01 2012-03-01 Seth Kelby Vidal Systems and methods for generating package profiles in software package repositories using selective subsets of packages
KR20140050323A (ko) * 2012-10-19 2014-04-29 삼성전자주식회사 라이선스 검증 방법 및 그 장치
KR20170079961A (ko) * 2015-12-31 2017-07-10 단국대학교 산학협력단 소프트웨어 유사도 측정 방법 및 장치

Family Cites Families (21)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9565275B2 (en) * 2012-02-09 2017-02-07 Rockwell Automation Technologies, Inc. Transformation of industrial data into useful cloud information
US7260557B2 (en) * 2003-02-27 2007-08-21 Avaya Technology Corp. Method and apparatus for license distribution
US20060026567A1 (en) * 2004-07-27 2006-02-02 Mcvoy Lawrence W Distribution of data/metadata in a version control system
US8006242B2 (en) * 2005-10-31 2011-08-23 Microsoft Corporation Identification of software configuration data
US9304980B1 (en) 2007-10-15 2016-04-05 Palamida, Inc. Identifying versions of file sets on a computer system
CN103797480B (zh) * 2011-09-14 2017-11-28 富士通株式会社 提取方法、提取程序、提取装置、以及提取系统
US20150169321A1 (en) * 2012-06-01 2015-06-18 2236008 Ontario Inc. System And Method For Generating Compliance Information For A Build-System Product
KR101999656B1 (ko) * 2012-06-20 2019-07-12 삼성전자 주식회사 라이선스 검증 방법, 그 장치 및 이를 실행하기 위한 프로그램이 기록된 컴퓨터로 읽을 수 있는 기록 매체
US9311613B2 (en) * 2013-03-15 2016-04-12 Openlogic, Inc. Open source software development tools
KR101624387B1 (ko) 2013-11-04 2016-05-25 단국대학교 산학협력단 소프트웨어 버스마크에 기반한 소프트웨어 자산 관리 방법 및 그 장치
FR3022661B1 (fr) * 2014-06-20 2016-06-24 Bull Sas Procede et dispositif de codage de fichiers sources pour la livraison securisee de code source
US9805099B2 (en) * 2014-10-30 2017-10-31 The Johns Hopkins University Apparatus and method for efficient identification of code similarity
US9436463B2 (en) 2015-01-12 2016-09-06 WhiteSource Ltd. System and method for checking open source usage
US20160335275A1 (en) * 2015-05-11 2016-11-17 Google Inc. Privacy-sensitive query for localization area description file
US9965639B2 (en) * 2015-07-17 2018-05-08 International Business Machines Corporation Source authentication of a software product
WO2017134665A1 (en) * 2016-02-03 2017-08-10 Cocycles System for organizing, functionality indexing and constructing of a source code search engine and method thereof
WO2018031703A1 (en) * 2016-08-09 2018-02-15 Synopsys, Inc. Technology validation and ownership
KR101937933B1 (ko) * 2016-11-08 2019-01-14 한국전자통신연구원 오픈 소스 소프트웨어 패키지의 안전성 정량화 장치, 최적화 장치 및 최적화 방법
US11816190B2 (en) * 2017-06-30 2023-11-14 Tata Consultancy Services Limited Systems and methods to analyze open source components in software products
US10795977B2 (en) * 2017-08-24 2020-10-06 Oracle International Corporation Digital asset traceability and assurance using a distributed ledger
KR102006245B1 (ko) * 2017-09-15 2019-08-06 주식회사 인사이너리 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20100185686A1 (en) * 2009-01-13 2010-07-22 Juergen Weigert System and method for providing a license description syntax in a software due diligence system
US20120054733A1 (en) * 2010-09-01 2012-03-01 Seth Kelby Vidal Systems and methods for generating package profiles in software package repositories using selective subsets of packages
KR20140050323A (ko) * 2012-10-19 2014-04-29 삼성전자주식회사 라이선스 검증 방법 및 그 장치
KR20170079961A (ko) * 2015-12-31 2017-07-10 단국대학교 산학협력단 소프트웨어 유사도 측정 방법 및 장치

Also Published As

Publication number Publication date
US20190087550A1 (en) 2019-03-21
WO2019054613A1 (ko) 2019-03-21
US10642965B2 (en) 2020-05-05
KR102006245B1 (ko) 2019-08-06

Similar Documents

Publication Publication Date Title
KR102006245B1 (ko) 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
Zhang et al. Enhancing state-of-the-art classifiers with api semantics to detect evolved android malware
JP7131946B2 (ja) アプリケーションの保安性を評価する方法およびシステム
Lin et al. Automated forensic analysis of mobile applications on Android devices
US20160267270A1 (en) Method and system for fast inspection of android malwares
CN104123493A (zh) 应用程序的安全性检测方法和装置
KR20140060299A (ko) 변형 컨텍스트-인식 데이터 소스 관리
KR102006242B1 (ko) 바이너리 파일에 기초하여 오픈소스 소프트웨어 패키지를 식별하는 방법 및 시스템
EP2693356A2 (en) Detecting pirated applications
KR102011725B1 (ko) 악성코드 검출을 위한 화이트리스트 구축 방법 및 이를 수행하기 위한 기록매체 및 장치
CN110287696A (zh) 一种反弹shell进程的检测方法、装置和设备
CN106709336A (zh) 识别恶意软件的方法和装置
US10628140B2 (en) Program code generation apparatus
KR102462541B1 (ko) 오픈소스 소프트웨어의 라이선스를 검증하는 방법 및 시스템
CN111654495A (zh) 用于确定流量产生来源的方法、装置、设备及存储介质
JP7079664B2 (ja) チートアプリケーション識別方法およびシステム
CN108664384B (zh) 数据处理装置和数据处理方法
JP5906906B2 (ja) ログ管理方法、ログ管理システムおよび情報処理装置
JP2017220236A (ja) クライアント改ざん判断システムおよび方法
KR101829426B1 (ko) 문자열 점수 기반 소프트웨어 저장 장치와 분류 장치 및 그 방법
CN108153666B (zh) 一种静态检测安卓代码中的资源回收漏洞的方法和装置
KR101673151B1 (ko) 프로그램 소스 및 db 스키마의 연관 관계 변화 분석 방법 및 장치
KR101845155B1 (ko) 어플리케이션 패키지를 제공하는 방법 및 시스템, 그리고 어플리케이션을 실행하는 방법 및 시스템
KR101842267B1 (ko) Mld를 이용한 소프트웨어 분류 장치 및 그 방법
JPWO2018154784A1 (ja) 影響抽出装置、影響抽出プログラム及び影響抽出方法

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