KR20220067521A - 스마트 컨트랙트 코드 취약점 분석 장치 및 방법 - Google Patents

스마트 컨트랙트 코드 취약점 분석 장치 및 방법 Download PDF

Info

Publication number
KR20220067521A
KR20220067521A KR1020210158436A KR20210158436A KR20220067521A KR 20220067521 A KR20220067521 A KR 20220067521A KR 1020210158436 A KR1020210158436 A KR 1020210158436A KR 20210158436 A KR20210158436 A KR 20210158436A KR 20220067521 A KR20220067521 A KR 20220067521A
Authority
KR
South Korea
Prior art keywords
code
information
vulnerability
unit
smart contract
Prior art date
Application number
KR1020210158436A
Other languages
English (en)
Other versions
KR102550596B1 (ko
Inventor
박지수
Original Assignee
주식회사 수호아이오
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 주식회사 수호아이오 filed Critical 주식회사 수호아이오
Publication of KR20220067521A publication Critical patent/KR20220067521A/ko
Application granted granted Critical
Publication of KR102550596B1 publication Critical patent/KR102550596B1/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
    • G06F21/562Static detection
    • G06F21/563Static detection by source code analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/55Detecting local intrusion or implementing counter-measures
    • G06F21/56Computer malware detection or handling, e.g. anti-virus arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F21/00Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F21/50Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
    • G06F21/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • 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/57Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
    • G06F21/577Assessing vulnerabilities and evaluating computer system security
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/42Syntactic analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/447Target code generation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/70Software maintenance or management
    • G06F8/75Structural analysis for program understanding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2221/00Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
    • G06F2221/03Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
    • G06F2221/033Test or assess software

Landscapes

  • Engineering & Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Computer Security & Cryptography (AREA)
  • Computer Hardware Design (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Computing Systems (AREA)
  • Virology (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 메타 정보 추출부; 상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 중간 표현 언어 변환부; 상기 중간 표현 언어 변환부에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 코드 분석부; 및 상기 코드 분석부에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 취약성 검출부를 포함하는 스마트 컨트랙트 코드 취약점 분석 장치 및 이를 이용한 분석 방법을 제공한다.

Description

스마트 컨트랙트 코드 취약점 분석 장치 및 방법{APPARATUS AND METHOD FOR ANALYZING VULNERABILITY OF SMART CONTRACT CODE}
본 발명은 스마트 컨트랙트 코드 취약점 분석 장치 및 방법에 관한 것으로서, 보다 상세하게는 블록체인 상에서 동작하는 스마트 컨트랙트 기반 소프트웨어에서 발생할 수 있는 취약점을 간편하고 효율적으로 분석할 수 있는 스마트 컨트랙트 코드 취약점 분석 장치 및 방법에 관한 것이다.
주지된 바와 같이, 블록체인(Blockchain)은 중앙 서버의 개입 없이 복수개의 노드(Node)들에 거래 내역을 저장하는 분산 원장(ledger)를 공유 저장하도록 함으로써 거래 내역의 위변조를 차단할 수 있는 장점을 갖는다.
이러한 블록체인 플랫폼은 합의 알고리듬에 의해 블록을 검증하고 생성한 노드에 대해 보상으로서 암호 화폐(Cryptocurrency)를 지급하는데, 예컨대 비트코인(Bitcoin) 등이 잘 알려져 있다.
최근의 블록체인 기술은, 비트코인과 같이 분산 원장을 이용하여 중개인 없이 가치를 주고 받는 단계를 지나서 분산 원장에 튜링 완전(turing complete)한 프로그래밍 언어의 실행 결과를 기록하여 분산된 방법으로 탈중앙화 어플리케이션(DApp, Decentralized Application, 이하, "댑"이라고도 칭한다)을 실행할 수 있는 단계로 진화 중이다. 이러한 탈중앙화 어플리케이션은 사용자의 컴퓨터간에 직접 연결되는 네트워크(Peer to Peer Network)를 통해 서버를 거치지 않고 각 사용자의 컴퓨터에 설치된 댑(DApp)의 동작에 의해 다양한 서비스를 제공할 수 있는 특징을 갖는다.
예컨대, 이더리움(Ethereum)과 같은 플랫폼이 대표적인 예라 할 수 있으며, 사용자는 이 플랫폼을 이용하기 위해 플랫폼의 기반 토큰인 이더리움(Ethereum)과 각각의 댑(DApp)이 발행하는 토큰(token)을 거래하고 토큰을 댑(DApp)에 지불하고 서비스를 제공받을 수 있다.
비트코인이나 이더리움 등과 같은 종래 기술에서의 블록체인의 구현 방식을 보다 자세히 살펴 보면, 블록체인을 구성하는 각각의 블록들은, 블록체인 시스템을 통해 사용자간의 거래 내역 정보인 트랜잭션(transaction) 정보를 저장하며, 블록 헤더(header)와 트랜잭션(transaction)으로 구성될 수 있고, 이들은 이른바 채굴자(miner) 노드들에 의한 작업 증명 등을 통해 생성되어 블록체인에 포함된다.
한편, 이더리움 블록체인 플랫폼에서는, 비트코인(Bitcoin)과 같은 기존의 블록체인 플랫폼에서는 단순한 거래 내역만을 저장하는 것에 비해, 프로그래밍에 의해 코드(code)로 구성되는 "스마트 컨트랙트(smart contract)"를 저장해 두고 이를 블록체인 시스템을 구성하는 노드에서 실행할 수 있도록 하고 스마트 컨트랙트의 실행 결과에 의한 거래 내역을 블록체인에 반영할 수 있도록 하고 있다.
그러나, 이러한 스마트 컨트랙트는 프로그래밍에 의해 특정 언어로 작성되는데, 소스 코드 상의 오류나 작성시의 실수 등으로 인한 다양한 취약점이 발생할 수 있다. 특히, 이더리움 기반 토큰들은 스마트 컨트랙트를 이용하기 때문에, 스마트 컨트랙트에 취약점이 있다면 해킹 등과 같은 보안 문제가 발생할 수 있어서 심각한 경제적 피해를 발생시킬 수 있다. 따라서, 이러한 스마트 컨트랙트의 취약점을 사전에 검증하는 것은 매우 중요한 문제이다.
그러나, 기존의 취약점 분석 기술은 블록체인 상에서 동작하는 스마트 컨트랙트 기반 소프트웨어에 대한 취약점 분석이 불가능하다는 한계가 있다. 따라서, 스마트 컨트랙트 환경에 따른 별도의 취약점 분석 시스템의 개발이 요망된다.
본 발명은 상기한 바와 같은 문제점을 해결하기 위한 것으로서, 블록체인 상에서 동작하는 스마트 컨트랙트 기반 소프트웨어에서 발생할 수 있는 취약점을 간편하고 효율적으로 분석할 수 있는 장치 및 방법을 제공하는 것을 목적으로 한다.
또한, 본 발명은, 다양한 스마트 컨트랙트들의 시맨틱을 유지하는 중간 언어를 기반으로 동시에 여러 플랫폼 상에서의 취약점을 분석할 수 있는 장치 및 방법을 제공하는 것을 또 다른 목적으로 한다.
상기한 바와 같은 과제를 해결하기 위하여 본 발명은, 스마트 컨트랙트 코드 취약점 분석 장치로서, 스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 메타 정보 추출부; 상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 중간 표현 언어 변환부; 상기 중간 표현 언어 변환부에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 코드 분석부; 및 상기 코드 분석부에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 취약성 검출부를 포함하는 스마트 컨트랙트 코드 취약점 분석 장치를 제공한다.
여기에서, 상기 메타 정보는 블록체인 플랫폼 정보, 프로그래밍 언어 정보 및 버전 정보 중 적어도 어느 하나를 포함할 수 있다.
또한, 상기 중간 표현 언어 변환부는, 상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환할 수 있는지의 여부를 판단하는 변환 가능 판단부; 및 상기 변환 가능 판단부에서 입력 코드를 중간 표현 언어로 변환 가능한 것으로 판단된 경우, 입력 코드를 중간 표현 언어로 변환하는 변환 수행부를 포함할 수 있다.
또한, 상기 변환 수행부는, 입력 코드를 파싱하여 추상 구문 트리를 생성하는 추상 구문 트리 생성부; 및 상기 추상 구문 트리 생성부에서 생성된 추상 구문 트리를 방문자(visitor)를 통해 순회함으로써 입력 코드에 대한 중간 표현 언어를 생성하는 중간 표현 언어 생성부를 포함할 수 있다.
또한, 상기 코드 분석부는, 상기 메타 정보 추출부에서 추출된 메타 정보에 상응하는 복수개로 구성될 수 있다.
또한, 상기 코드 분석부는, 중간 표현 언어로 변환된 입력 코드의 코드 패턴 정보에 기반하여 취약 코드 및 룰 위반 사례를 탐지하는 코드 패턴 정보 기반 분석부; 및 중간 표현 언어로 변환된 입력 코드의 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나에 기반하여 취약 코드 및 룰 위반 사례를 탐지하는 시맨틱 정보 기반 분석부를 포함할 수 있다.
또한, 상기 코드 패턴 정보 기반 분석부는, 중간 표현 언어로 표현된 입력 코드의 패턴 정보를 추출하는 코드 패턴 정보 추출부; 및 상기 코드 패턴 정보 추출부에서 추출된 코드 패턴 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 취약 코드 탐지부를 포함할 수 있다.
또한, 상기 코드 패턴 정보 추출부는, 중간 표현 언어로 변환되어 표현된 입력 코드에 대해, 라인 단위, 함수 단위, 블록 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 추출된 구문과, 상기 추출된 구문의 해시값, 시작 라인 정보 및 끝 라인 정보를 포함하는 코드 패턴 정보를 추출할 수 있다.
또한, 상기 취약 코드 탐지부는, 상기 코드 패턴 정보 추출부에서 추출된 코드 패턴 정보에 대해 취약점 데이터베이스에 구축되어 있는 취약 코드 및 룰 데이터와 동일한 데이터가 존재하는지를 탐지할 수 있다.
또한, 상기 취약점 데이터베이스는, 취약 코드와 취약 코드의 라인 정보를 입력으로 하여 메타 정보를 추출한 후, 추출된 메타 정보에 기초하여 입력된 취약 코드를 중간 표현 언어로 변환한 후, 취약 코드의 라인 정보에 기초하여 코드 패턴 정보를 추출함으로써 생성될 수 있다.
또한, 상기 시맨틱 정보 기반 분석부는, 중간 표현 언어로 표현된 입력 코드로부터 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나를 포함하는 시맨틱(semantic) 정보를 추출하는 시맨틱 정보 추출부; 및 상기 시맨틱 정보 추출부에 의해 생성된 시맨틱 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 취약 코드 탐지부를 포함할 수 있다.
또한, 상기 시맨틱 정보 추출부는, 중간 표현 언어로 변환된 입력 코드에서 각각의 변수가 선언된 경우 각각의 변수들을 변수 관리 테이블에 추가하고, 각 변수에 대해 변수가 표현할 수 있는 값의 범위를 변수 값 테이블에 저장하여 변수 트래킹 정보를 생성할 수 있다.
또한, 상기 취약 코드 탐지부는, 상기 변수 트래킹 정보에 포함된 변수 값 정보가 정수형 오버플로우이거나, 초기화되지 않은 변수이거나, 변수의 표현값이 block.timestamp값이거나, balance가 0 이하인 경우 취약 코드 및 룰 위반 사례로 탐지할 수 있다.
또한, 상기 시맨틱 정보 추출부는, 실행 흐름 정보를 나타내는 제어 흐름 그래프를 생성하여 저장할 수 있다.
또한, 상기 취약 코드 탐지부는 제어 흐름 그래프에서 도달할 수 없는 노드가 존재하거나, 미리 설정된 값보다 많은 개수의 노드가 존재하거나, 리프 노드가 아님에도 외부 스마트 컨트랙트를 호출하는 경우, 취약 코드 및 룰 위반 사례로 탐지할 수 있다.
또한, 상기 취약성 검출부는, 상기 코드 분석부에서 탐지된 코드 취약점 및 룰 위반 사례에 기초하여 검출된 취약점에 대해 취약점 모델을 생성하고, 중복을 제거하고, 우선 순위에 따라 정렬하여 최종 취약점 모델을 생성할 수 있다.
또한, 상기 취약성 검출부는, 코드 패턴 정보 기반 분석부의 취약 코드 탐지부에서 생성된 코드 패턴 취약점 테이블에 기록된 취약점 정보로부터 구문 취약점 모델(syntactic vulnerability model)을 생성하고, 시맨틱 정보 기반 분석부의 취약 코드 탐지부에서 생성된 시맨틱 취약점 테이블에 기록된 취약점 정보로부터 시맨틱 취약점 모델(semantic vulnerability model)을 생성하고, 이들 2 모델에 의해 취약점 모델을 표혐하고, 여기에 심각도(severity) 정보, 참조 정보(references), 패치 정보(patch information)를 포함하는 부가 정보를 추가함으로써 취약점 모델을 생성할 수 있다.
또한, 상기 취약성 검출부는, 취약점으로 탐지된 입력 코드의 부분들이 서로 같은 종류의 취약점을 가지고 어느 하나가 다른 하나에 포함되는 관계인 경우 포함되는 입력 코드의 부분을 중복으로 판단하여 제거하고, 패치 정보가 동일한 입력 코드의 부분들이 존재하는 경우 이들 중 어느 하나를 중복으로 판단하여 제거할 수 있다.
또한, 상기 취약성 검출부는, 심각도(severity) 정보가 가장 위험한 단계인 "Critical"로 분류된 취약점들에 대해 패치 정보가 존재하는 경우를 가장 높은 순위로 정렬하고 패치 정보가 존재하지 않는 경우를 그 다음 순서로 정렬할 수 있다.
또한, 상기 취약성 검출부는, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬하고, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬하고, 패치 정보가 존재하지 않으면서 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬함으로써 최종 취약점 모델을 생성할 수 있다.
본 발명의 다른 측면에 의하면, 상기한 바와 같은 스마트 컨트랙트 코드 취약점 분석 장치에서 수행되는 스마트 컨트랙트 코드 취약점 분석 방법으로서, 스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 제1 단계; 상기 제1 단계에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 제2 단계; 상기 제2 단계에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 제3 단계; 및 상기 제3 단계에서 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 제4 단계를 포함하는 스마트 컨트랙트 코드 취약점 분석 방법을 제공한다.
본 발명에 의하면, 블록체인 상에서 동작하는 스마트 컨트랙트 기반 소프트웨어에서 발생할 수 있는 취약점을 간편하고 효율적으로 분석할 수 있는 장치 및 방법을 제공할 수 있다.
또한, 본 발명은, 다양한 스마트 컨트랙트들의 시맨틱을 유지하는 중간 언어를 기반으로 동시에 여러 플랫폼 상에서의 취약점을 분석할 수 있는 장치 및 방법을 제공할 수 있다.
또한, 본 발명은 추가적인 취약점 분석기를 쉽게 추가하거나 제거할 수 있는 장점을 갖는다.
도 1은 본 발명의 일실시예에 의한 스마트 컨트랙트 코드 취약점 분석 장치(100)의 전체적인 구성을 나타낸 도면이다.
도 2는 메타 정보 추출부(10)의 동작을 설명하기 위한 도면이다.
도 3은 중간 표현 언어 변환부(20)의 구성을 나타낸 도면이다.
도 4는 변환 가능 판단부(21)의 동작을 나타낸 도면이다.
도 5는 중간 표현 언어를 설명하기 위한 도면이다.
도 6은 변환 수행부(22)의 구성의 일실시예를 나타낸 도면이다.
도 7은 추상 구문 트리의 일예를 나타낸 것이다.
도 8 및 도 9는 중간 표현 언어 생성부(222)에 의해 입력 코드가 중간 표현 언어로 변환되는 일예를 나타낸 것이다.
도 10은 코드 분석부(30)의 구성을 나타낸 도면이다.
도 11은 코드 패턴 정보 기반 분석부(31)의 구성의 일예를 나타낸 도면이다.
도 12는 코드 패턴 정보의 일예를 나타낸 것이다.
도 13은 시맨틱 정보 기반 분석부(32)의 구성의 일예를 나타낸 도면이다.
도 14는 시맨틱 정보 추출부(321)의 동작을 설명하기 위한 도면으로서, 변수 트래킹 정보를 추출하는 과정을 설명하기 위한 것이다.
도 15는 시맨틱 정보 추출부(321)가 실행 흐름 정보를 추출하는 과정을 설명하기 위한 것이다.
도 16은 취약 코드 탐지부(322)의 동작을 설명하기 위한 도면이다.
도 17 및 도 18은 취약성 검출부(40)의 동작을 설명하기 위한 도면이다.
도 19는 본 발명에 의한 분석 장치(100)에 의해 수행되는 스마트 컨트랙트 코드 취약점 분석 방법의 일실시예를 나타낸 흐름도이다.
이하, 첨부 도면을 참조하여 본 발명에 의한 실시예를 상세하게 설명하기로 한다.
도 1은 본 발명의 일실시예에 의한 스마트 컨트랙트 코드 취약점 분석 장치(100)의 전체적인 구성을 나타낸 도면이다.
도 1을 참조하면, 본 실시예의 스마트 컨트랙트 코드 취약점 분석 장치(100, 이하 간단히 "분석 장치(100)"라 한다)는, 메타 정보 추출부(10), 중간 표현 언어 변환부(20), 코드 분석부(30) 및 취약성 검출부(40)를 포함한다.
메타 정보 추출부(10)는 입력 코드에 대한 메타 정보를 추출하는 기능을 수행한다. 여기에서, 입력 코드는 스마트 컨트랙트의 소스 코드를 의미한다.
스마트 컨트랙트를 지원하는 블록체인 플랫폼은 복수개가 존재할 수 있으므로, 메타 정보 추출부(10)는 어떤 블록체인 플랫폼에서 동작하는 스마트 컨트랙트인지를 탐지하기 위해 입력 코드로부터 메타 정보들을 추출한다. 추출되는 메타 정보는 예컨대, 블록체인 플랫폼 정보, 프로그래밍 언어, 버전 등과 같은 정보를 포함할 수 있다.
도 2는 메타 정보 추출부(10)의 동작을 설명하기 위한 도면이다.
도 2에 나타낸 바와 같이, 예컨대 입력 코드가 이더리움의 솔리디티(solidity) 파일(.sol)인 경우, 메타 정보 추출부(10)는 파일의 확장자(.sol)를 통해 언어 정보를 추출하고, 라인 단위로 파일을 읽어가면서 버전 정보를 추출한다. 메타 정보 추출부(10)는 이러한 과정을 통해 블록체인 플랫폼 정보, 프로그래밍 언어 정보, 버전 정보를 추정할 수 있다. 예컨대, 블록체인 플랫폼 정보로서는 "이더리움", 프로그래밍 언어 정보로서는 "solidity", 버전 정보는 "0.5.0" 등과 같은 메타 정보를 추출할 수 있다.
입력 코드가 하이퍼레져 패브릭 기반의 고(go) 파일(.go)인 경우에는 메타 정보 추출부(10)는 확장자를 통해 프로그래밍 언어 정보를 추출하고, 파일을 읽어서 어떤 패키지를 임포트(import)했는지와 어떤 API를 썼는지를 기반으로 메타 정보를 추출한다. 이러한 과정을 통해 블록체인 플랫폼을 추정하여, 메타 정보를 추출할 수 있다.
중간 표현 언어 변환부(20)는, 메타 정보 추출부(10)에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 기능을 수행한다. 중간 표현 언어는 후술하는 취약점 분석을 위한 기초 자료가 된다.
도 3은 중간 표현 언어 변환부(20)의 구성을 나타낸 도면이다.
도 3을 참조하면, 중간 표현 언어 변환부(20)는 변환 가능 판단부(21) 및 변환 수행부(22)를 포함한다.
변환 가능 판단부(21)는, 메타 정보 추출부(10)에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환할 수 있는지의 여부를 판단하는 기능을 수행한다.
도 4는 변환 가능 판단부(21)의 동작을 나타낸 도면이다.
도 4에 나타낸 바와 같이, 변환 가능 판단부(21)는, 입력 코드가 예컨대 이더리움 solidity 파일(.sol)이거나 하이퍼레져 패브릭 기반 go 파일(.go)인 경우, 중간 표현 언어로 변환 가능한 것으로 판단한다. 한편, 메타 정보 추출부(10)에서 추출된 메타 정보에 의해 알려지지 않은(unknown) 블록체인 java 파일(.java)이 입력 코드인 경우에는 중간 표현 언어로 변환 불가능한 것으로 판단한다.
변환 가능 판단부(21)는 이와 같이 메타 정보 중 프로그래밍 언어 정보에 의해 중간 표현 언어로 변환이 가능한지를 판단한다. 이를 위하여, 변환 가능 판단부(21)는 도 4와 같이 변환 가능 여부를 나타내는 테이블을 미리 저장해 두고, 입력 코드의 메타 정보에 기초하여 중간 표현 언어로 변환이 가능한지를 판단할 수 있다.
변환 수행부(22)는, 변환 가능 판단부(21)에서 중간 표현 언어로 변환 가능한 것으로 판단된 경우, 해당 입력 코드를 중간 표현 언어로 변환하는 기능을 수행한다.
중간 표현 언어(intermediate representation)이란, 타겟 소프트웨어에서 사용되는 언어와 소스 코드 사이에서 사용되는 중간 코드를 의미하며, 소스 코드와 독립적이며, 이를 이용해 다양한 컴파일러에서 사용할 수 있다.
도 5는 중간 표현 언어를 설명하기 위한 도면이다.
도 5의 (a)는, 중간 언어를 사용하지 않는 컴파일러를 나타낸 것이다. 도시된 바와 같이, 포트란, 스킴, 자바, 스몰토크 등의 다양한 프로그래밍 언어로 표현된 소스 코드는 각각의 컴파일러 전단부를 통해 입력되고 각각의 컴파일러 후단부를 통해 목적 기계어로 변환됨을 알 수 있다. 따라서, N(=4)×M(=3)개의 컴파일러가 필요하게 된다.
한편, 도 5의 (b)는, 중간 표현 언어를 사용한 컴파일러를 나타낸 것이다. 도시된 바와 같이, 포트란, 스킴, 자바, 스몰토크 등의 다양한 프로그래밍 언어로 표현된 소스 코드는 컴파일러 전단부를 통해 입력되어 중간 표현 언어로 변환되고, 각각의 컴파일러 후단부에 의해 목적 기계어로 변환됨을 알 수 있다. 따라서, N(=4)+M(=3)개의 컴파일러가 필요하게 된다.
도 6은 변환 수행부(22)의 구성의 일실시예를 나타낸 도면이다.
도 6을 참조하면, 변환 수행부(22)는 추상 구문 트리 생성부(221) 및 중간 표현 언어 생성부(222)를 포함한다.
추상 구문 트리 생성부(221)는 입력 코드를 파싱하여 추상 구문 트리를 생성하는 기능을 수행한다.
추상 구문 트리(abstract syntax tree)는 소스 코드를 컴파일하는 단계에서 구문 분석 과정을 통해 생성되는 트리(tree) 형태의 자료 구조를 의미한다. 추상 구문 트리 생성부(221)는 입력 코드를 파싱(parsing)하고, 파싱 결과를 트리(tree) 형태로 생성한다.
도 7은 추상 구문 트리의 일예를 나타낸 것이다.
도 7에 나타낸 바와 같이, 예컨대 입력 코드가 1 + 2*(3+4)인 경우, 추상 구문 트리는 입력 코드를 데이터 형태, 연산자의 종류, 기호의 종류 등으로 파싱하고 이를 트리 형태로 표현한다.
중간 표현 언어 생성부(222)는 추상 구문 트리 생성부(221)에서 생성된 추상 구문 트리에 기초하여 입력 코드를 중간 표현 언어로 변환한다.
이 때, 추상 구문 트리를 방문자(visitor)를 통해 순회함으로써 입력 코드를 중간 표현 언어로 변환한다. 여기에서, 방문자(visitor)는 예컨대 depth first left-to-right 방식으로 추상 구문 트리를 순회하고, 추상 구문 트리의 각 노드에 도달시 주어진 규칙에 맞춰서 중간 표현 언어로 변환할 수 있다. 데코레이터(decorator) 또는 이중 연산자, 블록체인 플랫폼 별로 정해진 문법이 디슈거(desugar)된다. 이 때, 중간 표현 언어는 변수당 할당이 한번만 발생하는 정적 단일 할당(single static assignment) 형태를 따를 수 있다. 중간 표현 언어로 변환시 LLVM 컴파일러에서 제공하는 패스(Pass) 등을 활용할 수도 있다.
도 8 및 도 9는 중간 표현 언어 생성부(222)에 의해 입력 코드가 중간 표현 언어로 변환되는 일예를 나타낸 것이다.
도 8 및 도 9에 도시된 바와 같이, 다양한 형태의 입력 코드가 중간 표현 언어에 각각 상응하도록 변환되어 있음을 알 수 있다.
다만, 도 7 내지 도 9를 참조하여 설명한 중간 표현 언어의 변환 방법은 예시적인 것으로서, 본 발명의 직접적인 목적이 아니며, 이러한 방법 이외에도 종래 알려져 있는 기타 다른 다양한 방법을 사용할 수도 있음은 물론이다.
이러한 과정을 통해 입력 코드가 중간 표현 언어로 변환되면, 중간 표현 언어 변환부(20)는 변환된 중간 표현 언어를 코드 분석부(30)로 전달한다.
코드 분석부(30)는 중간 표현 언어 변환부(20)에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 수단이다.
코드 분석부(30)는, 메타 정보 추출부(10)에서 추출된 메타 정보에 상응하는 복수개로 구성될 수 있다. 전술한 바와 같이, 메타 정보는 블록체인 플랫폼 정보, 프로그래밍 언어 정보 및 버전 정보 중 적어도 어느 하나를 포함하므로, 중간 표현 언어 변환부(20)는 중간 표현 언어로 변환된 입력 코드의 메타 정보에 상응하는 각각의 코드 분석부(30)로 중간 표현 언어로 변환된 입력 코드를 전달한다.
도 10은 코드 분석부(30)의 구성을 나타낸 도면이다.
도 10을 참조하면, 코드 분석부(30)는 코드 패턴 정보 기반 분석부(31)와 시맨틱 정보 기반 분석부(32)를 포함한다.
코드 패턴 정보 기반 분석부(31)는, 중간 표현 언어로 변환된 입력 코드의 코드 패턴 정보에 기반하여 취약 코드 및 룰(rule) 위반 사례를 탐지하는 수단이다.
도 11은 코드 패턴 정보 기반 분석부(31)의 구성의 일예를 나타낸 도면이다.
도 11을 참조하면, 코드 패턴 정보 기반 분석부(31)는 코드 패턴 정보 추출부(311)와 취약 코드 탐지부(312)를 포함한다.
코드 패턴 정보 추출부(311)는 중간 표현 언어로 변환되어 표현된 입력 코드의 패턴 정보를 추출하는 기능을 수행한다.
여기에서, 코드 패턴이란, 중간 표현 언어로 변환되어 표현된 입력 코드의 구문(statement)을 미리 설정된 단위로 구분한 것을 의미한다.
도 12는 코드 패턴 정보의 일예를 나타낸 것이다.
도 12에 나타낸 바와 같이, 코드 패턴 정보는 복수개의 종류(type)의 코드 패턴 정보로 구성되며, 각 종류별로 코드 패턴 정보를 구성할 수 있다.
도 12에서, 코드 패턴 정보는 4가지 종류로 구성되며, 각 코드 패턴 정보는 입력 코드의 ID(예컨대, 스마트 컨트랙트 이름, 파일 이름 등), 블록체인 플랫폼, 프로그래밍 언어, 버전, 식별자(No)로 구성되는 코드 패턴 정보 ID별로 생성될 수 있다.
도 12에서, 첫번째 코드 패턴 정보는, 입력 코드의 라인 단위 구문(statement)를 리스트 형태로 추출한 것으로서, 입력 코드 ID, 버전, 구문, 구문 해시값, 시작 라인, 끝 라인에 의해 구성되며, "SOOHO_ethereum_solidity_0.4.6_1"로 구성되는 코드 패턴 정보 ID가 부여된다.
두번째 코드 패턴 정보는 입력 코드의 함수 단위 구문을 리스트 형태로 추출한 것으로서, 입력 코드 ID, 버전, 함수명, 함수 본문, 함수 해시값, 시작 라인, 끝 라인에 의해 구성될 수 있고, "SOOHO_ethereum_solidity_0.4.6_2"로 구성되는 코드 패턴 정보 ID가 부여된다.
세번째 코드 패턴 정보는 입력 코드의 블록별 구문을 리스트 형태로 추출한 것으로서, 입력 코드 ID, 버전, 블록을 포함한 함수명, 함수 기준 블록 번호, 블록 본문, 블록 본문 해시값, 시작 라인, 끝 라인에 의해 구성될 수 있고, "SOOHO_ethereum_solidity_0.4.6_3"로 구성된느 코드 패턴 정보 ID가 부여된다.
네번째 코드 패턴 정보는 입력 코드의 토큰(token) 단위 구문을 추출한 것으로서, 입력 코드 ID, 버전, 기준 토큰 n의 값, 구문, 구문 해시값, 시작 라인, 끝 라인에 의해 구성될 수 있고, "SOOHO_ethereum_solidity_0.4.6_4"로 구성되는 코드 패턴 정보 ID가 부여된다. 여기에서, 토큰이란 연속되는 n개의 글자로 구성되는 말뭉치를 의미한다.
상기에서 각 코드 패턴 정보의 해시값은 예컨대 md5에 의해 계산될 수 있다.
이와 같이, 중간 표현 언어로 변환된 입력 코드에 대해 각 블록체인 플랫폼의 언어, 버전 별로 라인 단위, 함수 단위, 블록 단위, 토큰 단위로 코드 패턴 정보를 추출할 수 있다.
다만, 상기 코드 패턴 정보는 예시적인 것이며, 이들 중 일부만을 사용할 수도 있고, 기타 다른 코드 패턴 정보를 추가적으로 사용할 수도 있음은 물론이다. 또한,
다시 도 11을 참조하면, 취약 코드 탐지부(312)는 전술한 바와 같은 방법에 의해 코드 패턴 정보 추출부(311)에서 추출된 코드 패턴 정보에 기초하여 취약 코드 및 룰(rule) 위반 사례가 있는지를 탐지하는 수단이다.
취약 코드 탐지부(312)는 코드 패턴 정보 추출부(311)에서 추출된 코드 패턴 정보 ID별 코드 패턴 정보에 대해 취약점 데이터베이스(DB)에 구축되어 있는 취약 코드 및 룰(rule) 데이터와 동일한 데이터가 존재하는지를 탐지한다. 탐지 시에, 취약점 데이터베이스에서 제공하는 조건문(예컨대, mysql의 where 구문 등)을 이용하여 같은 조건에서 존재하는 취약 코드가 존재하는지를 탐지할 수 있다. 취약 코드가 탐지되면, 취약 코드 탐지부(312)는 각각의 코드 패턴 정보 ID별로 코드 패턴 취약점 테이블을 생성한다.
코드 패턴 기반 취약점 테이블은 취약 코드로 판별된 입력 코드의 전체 소스 코드 및 라인 정보(시작 라인 및 끝 라인)를 입력으로 하여 취약점 데이터베이스에 각각의 코드 패턴 정보 ID를 엔티티(entity)로 하여 일대다(one-to-many) 방식으로 생성될 수 있다.
상기 취약점 데이터베이스는, 전술한 바와 같은 메타 정보 추출부(10) 및 중간 표현 언어 변환부(20) 및 코드 패턴 정보 추출부(311)에서 설명한 방법을 이용하여 생성된다. 즉, 취약 코드와 취약 코드의 라인 정보를 입력으로 하여 메타 정보를 추출한 후, 추출된 메타 정보에 기초하여 입력된 취약 코드를 중간 표현 언어로 변환한 후, 취약 코드의 라인 정보에 기초하여 코드 패턴 정보를 추출한 후, 이를 취약점 데이터베이스에 저장할 수 있다.
이와 같이 취약점 데이터베이스가 생성되면, 취약 코드 탐지부(312)는 코드 패턴 정보 ID를 이용하여 취약점 데이터베이스에 질의하여 취약 코드 및 룰(rule) 위반 사례가 있는지를 탐지한다. 이 때, 빠른 검색을 위해 예컨대 "코드 패턴 정보 ID & md5"를 페어(pair)으로 하여 인덱스를 걸어서 질의할 수 있다.
다시 도 10을 참조하여 시맨틱 정보 기반 분석부(32)에 대해 설명한다.
시맨틱 정보 기반 분석부(32)는 중간 표현 언어로 변환된 입력 코드의 시맨틱 정보를 추출하고, 추출한 시맨틱 정보에 기초하여 취약 코드 및 룰(rule) 위반 사례를 탐지하는 수단이다.
도 13은 시맨틱 정보 기반 분석부(32)의 구성의 일예를 나타낸 도면이다.
도 13을 참조하면, 시맨틱 정보 기반 분석부(32)는 시맨틱 정보 추출부(321)와 취약 코드 탐지부(322)를 포함한다.
시맨틱 정보 추출부(321)는, 중간 표현 언어로 표현된 입력 코드로부터 시맨틱(semantic) 정보를 추출하는 기능을 수행한다.
여기에서, 시맨틱(semantic) 정보란 입력 코드의 실행에 대한 정보로서 구문적(syntactic) 정보와 구분되는 개념이며, 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나를 포함할 수 있다.
시맨틱 정보 추출부(321)는 시맨틱 정보를 추출하기 위해 중간 표현 언어로 변환된 입력 코드의 구문을 읽어 들인 후 테이블과 그래프 형태의 자료 구조로 데이터를 저장하는 방식에 의해 시맨틱 정보를 생성할 수 있다.
도 14는 시맨틱 정보 추출부(321)의 동작을 설명하기 위한 도면으로서, 변수 트래킹 정보를 추출하는 과정을 설명하기 위한 것이다.
도 14에 나타낸 바와 같이, 시맨틱 정보 추출부(321)는 변수 관리 테이블과 변수 값 테이블에 의해 변수 트래킹 정보를 추출하여 저장한다.
중간 표현 언어로 변환된 입력 코드에서 각각의 변수가 선언된 경우 이들을 변수 관리 테이블에 추가된다. 다만, 본 발명에서의 입력 코드는 스마트 컨트랙트이므로, 스마트 컨트랙트의 취약점 분석을 위해 일반적인 변수 관리 테이블과 다르게 특정 변수의 경우 별도 플래그(flag)를 통해 관리된다. 또한, 조건식 등에 의해 변수가 표현할 수 있는 값의 범위가 바뀔 수 있는데, 이에 대한 정보 또한 변수 값 테이블로 관리한다.
예컨대, 변수 x가 임의의 값이 가능할 경우
Figure pat00001
로 표현되고, 만약 0 이상일 경우
Figure pat00002
, -100 이상 100 이하라면 (-100, 100)이 되고, 이러한 정보를 추출하여 변수 값 테이블에 저장하여 관리한다.
도 15는 시맨틱 정보 추출부(321)가 실행 흐름 정보를 추출하는 과정을 설명하기 위한 것이다.
도시된 바와 같이, 시맨틱 정보 추출부(321)는 실행 흐름 정보를 나타내는 제어 흐름 그래프(control flow graph)를 생성하여 저장하는데, 입력 코드에서 분기가 발생하는 경우 노드(node)가 생성되고 이어진다.
취약 코드 탐지부(322)는, 상기한 바와 같은 과정을 통해 시맨틱 정보 추출부(321)에 의해 생성된 시맨틱 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 수단이다.
도 16은 취약 코드 탐지부(322)의 동작을 설명하기 위한 도면이다.
취약 코드 탐지부(322)는 시맨틱 정보 추출부(321)에 의해 생성된 변수 트래킹 정보와 실행 흐름 정보에 의해 취약 코드 및 룰 위반 사례를 탐지할 수 있다.
도 16의 (a)는 변수 트래킹 정보에 의해 미리 설정된 취약 코드 및 룰 위반 사례에 해당하는지를 판별하는 과정을 예시적으로 나타낸 것으로서, 예컨대 변수 값 정보가 정수형 오버플로우인지, 초기화되지 않은 변수인지에 해당하는 경우 취약 코드인 것으로 탐지할 수 있다. 입력 코드가 스마트 컨트랙트이므로, 예컨대 변수의 표현값이 block.timestamp값인지, balance가 0 이하인지 등의 여부를 판별하여 취약 코드를 탐지할 수 있다.
도 16의 (b)는 제어 흐름 그래프(Control Flow Graph, CFG)를 이용한 취약 코드 및 룰 위반 사례에 해당하는지를 판별하는 과정을 예시적으로 나타낸 것으로서, 예컨대, 제어 흐름 그래프에서 도달할 수 없는(unreachable) 노드가 존재하는 경우에는 취약 코드로 탐지할 수 있다. 또한, 입력 코드가 스마트 컨트랙트이므로, 제어 흐름 그래프에서 미리 설정된 값보다 많은 개수의 노드가 존재하는 경우에는 취약 코드로 판별할 수 있다. 이는 스마트 컨트랙트에서 너무 많은 노드가 존재하는 경우 블록체인 플랫폼 상에서 가스(gas) 소모가 많아지므로 서비스 거부(denial of service)와 같이 아예 동작하지 않는 경우가 발생할 수 있기 때문이다.
또한, 리프 노드(leaf node)가 아님에도 외부 스마트 컨트랙트를 호출(예컨대, .call, .delegate, .send 등)하는 경우에는 재진입성(reentrancy)에 해당하므로 취약 코드로 탐지할 수 있다.
취약 코드 탐지부(322)는 이와 같이 취약 코드 및 룰 위반 사례가 탐지될 때마다 시맨틱 취약점 테이블에 기록한다.
다시 도 1을 참조하여 취약성 검출부(40)에 대해 설명한다.
취약성 검출부(40)는, 상기 코드 분석부(30)에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 입력 코드에 대한 취약점을 최종적으로 검출하여 최종 취약점 모델을 생성하는 수단이다.
취약성 검출부(40)는 앞서 설명한 바와 같이 코드 분석부(30)의 코드 패턴 정보 기반 분석부(31)와 시맨틱 정보 기반 분석부(32)에 의해 탐지된 취약점 및 룰 위반 사례에 의해 검출된 취약점들에 대해 1) 일관된 취약 정보 스키마로 수정하여 취약점 모델을 생성하고, 2) 중복을 제거하고, 3) 우선 순위를 조정하는 작업을 수행하여 최종 취약점 모델을 생성한다.
도 17 및 도 18은 취약성 검출부(40)의 동작을 설명하기 위한 도면이다.
취약성 검출부(40)는 앞서 설명한 코드 패턴 정보 기반 분석부(31)의 취약 코드 탐지부(312)에서 생성된 코드 패턴 취약점 테이블에 기록된 어레이 형태의 각각의 취약점 정보를 순회하면서 구문 취약점 모델(syntactic vulnerability model)을 생성한다. 또한, 취약성 검출부(40)는 시맨틱 정보 기반 분석부(32)의 취약 코드 탐지부(322)에서 생성된 시맨틱 취약점 테이블에 기록된 어레이 형태의 각각의 취약점 정보를 순회하면서 시맨틱 취약점 모델(semantic vulnerability model)을 생성하고, 이들 2 모델을 병합하여 모든 취약점 결과가 포함된 취약점 모델을 생성한다.
그리고, 취약성 검출부(40)는 취약점 모델에 대해 부가 정보를 추가하고, 중복을 제거한 후 우선 순위로 정렬함으로써 최종 취약점 모델을 생성한다.
여기에서, 추가되는 정보로서는 심각도(severity) 정보, 참조 정보(references), 패치 정보(patch information) 등과 같은 정보를 포함할 수 있다.
도 18은 최종 취약점 모델을 생성하는 과정을 설명하기 위한 도면이다.
취약성 검출부(40)는 전술한 바와 같이 생성된 취약점 모델에서 도 18과 같이 부가 정보를 추가할 수 있다.
도 18을 참조하면, 부가 정보는, 심각도(severity) 정보, 참조 정보(references), 패치 정보(patch information)를 포함할 수 있다.
심각도 정보는 취약점이 얼마나 심각한지를 나타내는 정보로서, 심각도에 따라 "Critical, High, Medium" 중 어느 하나로 분류되고, 기본(default)으로는 "Note"로 기록해 둔다. 참조 정보는 CVE(Common Vulnerabilities and Exposures), SWC 등과 같은 취약점 정보를 제공하는 외부의 취약점 데이터베이스 참고 정보이다. 또한, 패치 정보는 해당 취약점을 보완하기 위한 정보(패치 방법, 패치 파일 등)를 포함할 수 있다.
이외에도, 도 18과 같이 취약점을 구별하기 위한 취약점 이름, CWE 기준 취약점 분류 ID, SWC 기준 취약점 분류 ID, 취약점 관련 코드의 시작 라인, 끝 라인 등과 같은 정보에 의해 취약점 모델을 생성한다.
이와 같은 과정을 통해 취약성 검출부(40)는, 일관된 취약 정보 스키마를 갖는 취약점 모델을 생성할 수 있다.
다음으로, 취약성 검출부(40)는, 취약점 모델에 대해 중복 제거를 수행하는데 이는 다음과 같은 방법을 사용할 수 있다.
즉, 취약점으로 탐지된 결과 입력 코드의 부분 A와 B가 존재할 때 다음의 경우 중복으로 판단하여 제거할 수 있다.
1) A와 B가 같은 타입의 취약점이고, 입력 코드 기준으로 A가 B에 포함되는 관계인 경우
Figure pat00003
이 경우 입력 코드의 부분 A를 제거할 수 있다.
2) A와 B의 패치 정보가 같은 경우
Figure pat00004
이 경우 입력 코드의 부분 A, B 중 어느 하나를 제거할 수 있다.
3) A와 B가 패치 정보만이 다른 경우(이 경우에는 어레이 인덱스(array index)가 더 큰 쪽의 패치 정보를 낮은 쪽의 패치에 추가(append)해 준다).
다음으로, 취약성 검출부(40)는 우선 순위 정렬을 수행하는데, 이는 다음과 같은 규칙을 사용할 수 있다.
즉, 심각도(severity) 정보가 가장 위험한 단계인 "Critical"로 분류된 취약점들에 대해 패치 정보가 존재하는 경우를 가장 높은 순위로 정렬하고 패치 정보가 존재하지 않는 경우를 그 다음 순서로 정렬한다.
다음으로, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬한다. 이는 패치 정보가 존재하는 경우 심각도 정보의 위험한 순서대로 정렬하는 것을 의미한다.
그리고, 패치 정보가 존재하지 않으면서 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬한다. 그리고, 패치 정보가 존재하면서 심각도 정보가 "Note"인 경우, 패치 정보가 존재하지 않으면서 심각도 정보가 "Note"인 경우를 다음 순서로 정렬한다.
이와 같은 과정을 통해, 취약성 검출부(40)는, 상기 코드 분석부(30)의 코드 패턴 정보 기반 분석부(31)와 시맨틱 정보 기반 분석부(32)에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 입력 코드에 대한 취약점을 나타내는 취약점 모델을 생성하고, 여기에 취약점과 관련된 부가 정보로서 패치 정보, 심각도 정보, 레퍼런스 정보를 포함하는 최종 취약점 모델을 생성한 후, 중복 제거 및 우선 순위 정렬을 통해 최종적인 취약점 결과 정보를 제공할 수 있다.
도 19는 도 1 내지 도 18을 참조하여 설명한 본 발명에 의한 분석 장치(100)에 의해 수행되는 스마트 컨트랙트 코드 취약점 분석 방법의 일실시예를 나타낸 흐름도이다.
도 19을 참조하면, 메타 정보 추출부(10)는 앞서 설명한 바와 같이 입력 코드에 대한 메타 정보를 추출한다(S100).
그리고, 중간 표현 언어 변환부(20)의 변환 가능 판단부(21)는 메타 정보 추출부(10)에서 추출된 메타 정보를 바탕으로 입력 코드를 중간 표현 언어로 변환할 수 있는지의 여부를 판단한다(S110).
변환 가능한 것으로 판단되면, 중간 표현 언어 변환부(20)의 변환 수행부(22)는 앞서 설명한 바와 같은 방법에 의해 입력 코드를 중간 표현 언어로 변환한다(S120).
다음으로, 중간 표현 언어 변환부(20)는 중간 표현 언어로 변환된 입력 코드를 코드 분석부(30)의 코드 패턴 정보 기반 분석부(31) 및 시맨틱 정보 기반 분석부(32)로 전달한다(S130).
코드 패턴 정보 기반 분석부(31)는 앞서 설명한 바와 같이 코드 패턴 정보를 추출하고, 이에 기반하여 취약 코드 및 룰 위반 사례를 탐지한다(S140, S150). 또한, 시맨틱 정보 기반 분석부(32)는 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나인 시맨틱 정보에 기반하여 취약 코드 및 룰 위반 사례를 탐지한다(S160, S170).
그리고, 취약성 검출부(40)는, 앞서 설명한 바와 같이, 코드 패턴 정보 기반 분석부(31)와 시맨틱 정보 기반 분석부(32)에 의해 검출된 취약점에 대한 코드 패턴 취약점 테이블과 시맨틱 취약점 테이블에 기초하여 최종 취약점 모델을 생성한다(S180).
이상에서, 본 발명에 의한 바람직한 실시예를 참조하여 본 발명을 설명하였으나 본 발명은 상기 실시예에 한정되는 것이 아니며 다양한 수정 및 변형 실시가 가능함은 물론이다.
100...스마트 컨트랙트 코드 취약점 분석 장치
10...메타 정보 추출부
20...중간 표현 언어 변환부
30...코드 분석부
40...취약성 검출부

Claims (21)

  1. 스마트 컨트랙트 코드 취약점 분석 장치로서,
    스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 메타 정보 추출부;
    상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 중간 표현 언어 변환부;
    상기 중간 표현 언어 변환부에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 코드 분석부; 및
    상기 코드 분석부에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 취약성 검출부
    를 포함하는 스마트 컨트랙트 코드 취약점 분석 장치.
  2. 청구항 1에 있어서,
    상기 메타 정보는 블록체인 플랫폼 정보, 프로그래밍 언어 정보 및 버전 정보 중 적어도 어느 하나를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  3. 청구항 1에 있어서,
    상기 중간 표현 언어 변환부는,
    상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환할 수 있는지의 여부를 판단하는 변환 가능 판단부; 및
    상기 변환 가능 판단부에서 입력 코드를 중간 표현 언어로 변환 가능한 것으로 판단된 경우, 입력 코드를 중간 표현 언어로 변환하는 변환 수행부
    를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  4. 청구항 3에 있어서,
    상기 변환 수행부는,
    입력 코드를 파싱하여 추상 구문 트리를 생성하는 추상 구문 트리 생성부; 및
    상기 추상 구문 트리 생성부에서 생성된 추상 구문 트리를 방문자(visitor)를 통해 순회함으로써 입력 코드에 대한 중간 표현 언어를 생성하는 중간 표현 언어 생성부
    를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  5. 청구항 1에 있어서,
    상기 코드 분석부는, 상기 메타 정보 추출부에서 추출된 메타 정보에 상응하는 복수개로 구성되는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  6. 청구항 1에 있어서,
    상기 코드 분석부는,
    중간 표현 언어로 변환된 입력 코드의 코드 패턴 정보에 기반하여 취약 코드 및 룰 위반 사례를 탐지하는 코드 패턴 정보 기반 분석부; 및
    중간 표현 언어로 변환된 입력 코드의 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나에 기반하여 취약 코드 및 룰 위반 사례를 탐지하는 시맨틱 정보 기반 분석부
    를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  7. 청구항 6에 있어서,
    상기 코드 패턴 정보 기반 분석부는,
    중간 표현 언어로 표현된 입력 코드의 패턴 정보를 추출하는 코드 패턴 정보 추출부; 및
    상기 코드 패턴 정보 추출부에서 추출된 코드 패턴 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 취약 코드 탐지부
    를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  8. 청구항 7에 있어서,
    상기 코드 패턴 정보 추출부는, 중간 표현 언어로 변환되어 표현된 입력 코드에 대해, 라인 단위, 함수 단위, 블록 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 추출된 구문과, 상기 추출된 구문의 해시값, 시작 라인 정보 및 끝 라인 정보를 포함하는 코드 패턴 정보를 추출하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  9. 청구항 7에 있어서,
    상기 취약 코드 탐지부는, 상기 코드 패턴 정보 추출부에서 추출된 코드 패턴 정보에 대해 취약점 데이터베이스에 구축되어 있는 취약 코드 및 룰 데이터와 동일한 데이터가 존재하는지를 탐지하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  10. 청구항 9에 있어서,
    상기 취약점 데이터베이스는, 취약 코드와 취약 코드의 라인 정보를 입력으로 하여 메타 정보를 추출한 후, 추출된 메타 정보에 기초하여 입력된 취약 코드를 중간 표현 언어로 변환한 후, 취약 코드의 라인 정보에 기초하여 코드 패턴 정보를 추출함으로써 생성된 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  11. 청구항 4에 있어서,
    상기 시맨틱 정보 기반 분석부는,
    중간 표현 언어로 표현된 입력 코드로부터 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나를 포함하는 시맨틱(semantic) 정보를 추출하는 시맨틱 정보 추출부; 및
    상기 시맨틱 정보 추출부에 의해 생성된 시맨틱 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 취약 코드 탐지부
    를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  12. 청구항 11에 있어서,
    상기 시맨틱 정보 추출부는, 중간 표현 언어로 변환된 입력 코드에서 각각의 변수가 선언된 경우 각각의 변수들을 변수 관리 테이블에 추가하고, 각 변수에 대해 변수가 표현할 수 있는 값의 범위를 변수 값 테이블에 저장하여 변수 트래킹 정보를 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  13. 청구항 12에 있어서,
    상기 취약 코드 탐지부는, 상기 변수 트래킹 정보에 포함된 변수 값 정보가 정수형 오버플로우이거나, 초기화되지 않은 변수이거나, 변수의 표현값이 block.timestamp값이거나, balance가 0 이하인 경우 취약 코드 및 룰 위반 사례로 탐지하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  14. 청구항 11에 있어서,
    상기 시맨틱 정보 추출부는, 실행 흐름 정보를 나타내는 제어 흐름 그래프를 생성하여 저장하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  15. 청구항 14에 있어서,
    상기 취약 코드 탐지부는 제어 흐름 그래프에서 도달할 수 없는 노드가 존재하거나, 미리 설정된 값보다 많은 개수의 노드가 존재하거나, 리프 노드가 아님에도 외부 스마트 컨트랙트를 호출하는 경우, 취약 코드 및 룰 위반 사례로 탐지하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  16. 청구항 1에 있어서,
    상기 취약성 검출부는, 상기 코드 분석부에서 탐지된 코드 취약점 및 룰 위반 사례에 기초하여 검출된 취약점에 대해 취약점 모델을 생성하고, 중복을 제거하고, 우선 순위에 따라 정렬하여 최종 취약점 모델을 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  17. 청구항 16에 있어서,
    상기 취약성 검출부는, 코드 패턴 정보 기반 분석부의 취약 코드 탐지부에서 생성된 코드 패턴 취약점 테이블에 기록된 취약점 정보로부터 구문 취약점 모델(syntactic vulnerability model)을 생성하고, 시맨틱 정보 기반 분석부의 취약 코드 탐지부에서 생성된 시맨틱 취약점 테이블에 기록된 취약점 정보로부터 시맨틱 취약점 모델(semantic vulnerability model)을 생성하고, 이들 2 모델에 의해 취약점 모델을 표혐하고, 여기에 심각도(severity) 정보, 참조 정보(references), 패치 정보(patch information)를 포함하는 부가 정보를 추가함으로써 취약점 모델을 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  18. 청구항 17에 있어서,
    상기 취약성 검출부는, 취약점으로 탐지된 입력 코드의 부분들이 서로 같은 종류의 취약점을 가지고 어느 하나가 다른 하나에 포함되는 관계인 경우 포함되는 입력 코드의 부분을 중복으로 판단하여 제거하고, 패치 정보가 동일한 입력 코드의 부분들이 존재하는 경우 이들 중 어느 하나를 중복으로 판단하여 제거하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  19. 청구항 18에 있어서,
    상기 취약성 검출부는, 심각도(severity) 정보가 가장 위험한 단계인 "Critical"로 분류된 취약점들에 대해 패치 정보가 존재하는 경우를 가장 높은 순위로 정렬하고 패치 정보가 존재하지 않는 경우를 그 다음 순서로 정렬하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  20. 청구항 19에 있어서,
    상기 취약성 검출부는, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬하고, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬하고, 패치 정보가 존재하지 않으면서 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬함으로써 최종 취약점 모델을 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
  21. 청구항 1 내지 청구항 20 중 어느 한 항에 의한 스마트 컨트랙트 코드 취약점 분석 장치에서 수행되는 스마트 컨트랙트 코드 취약점 분석 방법으로서,
    스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 제1 단계;
    상기 제1 단계에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 제2 단계;
    상기 제2 단계에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 제3 단계; 및
    상기 제3 단계에서 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 제4 단계
    를 포함하는 스마트 컨트랙트 코드 취약점 분석 방법.
KR1020210158436A 2020-11-17 2021-11-17 스마트 컨트랙트 코드 취약점 분석 장치 및 방법 KR102550596B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
KR1020200153793 2020-11-17
KR20200153793 2020-11-17

Publications (2)

Publication Number Publication Date
KR20220067521A true KR20220067521A (ko) 2022-05-24
KR102550596B1 KR102550596B1 (ko) 2023-07-03

Family

ID=81709417

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020210158436A KR102550596B1 (ko) 2020-11-17 2021-11-17 스마트 컨트랙트 코드 취약점 분석 장치 및 방법

Country Status (3)

Country Link
US (1) US20230418951A1 (ko)
KR (1) KR102550596B1 (ko)
WO (1) WO2022108318A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116260637A (zh) * 2023-02-15 2023-06-13 中国电子技术标准化研究院 渗透测试的路径规划方法、装置、电子设备及存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20230177167A1 (en) * 2021-12-08 2023-06-08 Paypal, Inc. Automatic verification of decentrailized protocols

Family Cites Families (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20190303541A1 (en) * 2018-04-02 2019-10-03 Ca, Inc. Auditing smart contracts configured to manage and document software audits
KR101947760B1 (ko) * 2018-09-04 2019-02-13 김종현 스마트콘트랙트의 보안 인증 서버
KR102157208B1 (ko) * 2018-11-05 2020-09-18 충남대학교산학협력단 스마트 컨트랙트 실행 장치 및 그 장치에서 취약점 탐지 방법
KR20200094618A (ko) * 2019-01-30 2020-08-07 주식회사 린아레나 스마트 컨트랙트 유사도 분석을 이용한 소스 코드 감사 방법 및 그 장치
CN110659494A (zh) * 2019-09-27 2020-01-07 重庆邮电大学 一种可扩展的智能合约漏洞检测方法

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Josselin Feist et al., "Slither: A Static Analysis Framework For Smart Contracts"(2019.08.)* *
Sangsoo Kim et al., "A Study on Chaincode Security Weakness Detector in Hyperledger Fabric Blockchain Framework for IT Development"(2020.10.)* *

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN116260637A (zh) * 2023-02-15 2023-06-13 中国电子技术标准化研究院 渗透测试的路径规划方法、装置、电子设备及存储介质
CN116260637B (zh) * 2023-02-15 2023-11-07 中国电子技术标准化研究院 渗透测试的路径规划方法、装置、电子设备及存储介质

Also Published As

Publication number Publication date
KR102550596B1 (ko) 2023-07-03
US20230418951A1 (en) 2023-12-28
WO2022108318A1 (ko) 2022-05-27

Similar Documents

Publication Publication Date Title
Fröwis et al. In code we trust? Measuring the control flow immutability of all smart contracts deployed on Ethereum
US7854002B2 (en) Pattern matching for spyware detection
CN109992970B (zh) Java反序列化漏洞检测系统和方法
US20040205411A1 (en) Method of detecting malicious scripts using code insertion technique
Cui et al. Code comparison system based on abstract syntax tree
CN102054149B (zh) 一种恶意代码行为特征提取方法
CN109684838B (zh) 一种针对以太坊智能合约的静态代码审计系统及方法
KR20200021993A (ko) 블록체인 컴파일러
KR102550596B1 (ko) 스마트 컨트랙트 코드 취약점 분석 장치 및 방법
KR20120071834A (ko) 악성코드 그룹 및 변종 자동 관리 시스템
Wu et al. Mutation testing for ethereum smart contract
Nichols et al. Syntax-based improvements to plagiarism detectors and their evaluations
Linoy et al. Exploring Ethereum’s blockchain anonymity using smart contract code attribution
Solanki et al. Comparative study of software clone detection techniques
US9600644B2 (en) Method, a computer program and apparatus for analyzing symbols in a computer
Taymouri et al. Computing alignments of well-formed process models using local search
CN111045670B (zh) 一种二进制代码与源代码间复用关系的识别方法与装置
Ognawala et al. Compositional fuzzing aided by targeted symbolic execution
Zhang et al. Flow Chart Generation‐Based Source Code Similarity Detection Using Process Mining
CN114048227A (zh) Sql语句异常检测方法、装置、设备及存储介质
CN104603791A (zh) 签名验证装置及签名验证方法和程序
CN117940894A (zh) 用于检测代码克隆的系统和方法
Greenan Method-level code clone detection on transformed abstract syntax trees using sequence matching algorithms
US10789067B2 (en) System and method for identifying open source usage
Dong et al. SolChecker: A Practical Static Analysis Framework for Ethereum Smart Contract

Legal Events

Date Code Title Description
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant