KR102550596B1 - 스마트 컨트랙트 코드 취약점 분석 장치 및 방법 - Google Patents
스마트 컨트랙트 코드 취약점 분석 장치 및 방법 Download PDFInfo
- Publication number
- KR102550596B1 KR102550596B1 KR1020210158436A KR20210158436A KR102550596B1 KR 102550596 B1 KR102550596 B1 KR 102550596B1 KR 1020210158436 A KR1020210158436 A KR 1020210158436A KR 20210158436 A KR20210158436 A KR 20210158436A KR 102550596 B1 KR102550596 B1 KR 102550596B1
- Authority
- KR
- South Korea
- Prior art keywords
- code
- information
- vulnerability
- unit
- expression language
- Prior art date
Links
- 238000000034 method Methods 0.000 title claims description 48
- 238000004458 analytical method Methods 0.000 claims abstract description 55
- 238000001514 detection method Methods 0.000 claims abstract description 46
- 238000006243 chemical reaction Methods 0.000 claims abstract description 44
- 238000000605 extraction Methods 0.000 claims abstract description 42
- 238000012038 vulnerability analysis Methods 0.000 claims description 32
- 239000000284 extract Substances 0.000 claims description 17
- 230000006870 function Effects 0.000 claims description 16
- 238000010586 diagram Methods 0.000 description 23
- 238000005516 engineering process Methods 0.000 description 3
- 239000004744 fabric Substances 0.000 description 2
- 230000008030 elimination Effects 0.000 description 1
- 238000003379 elimination reaction Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
- 230000003068 static effect Effects 0.000 description 1
- 230000001502 supplementing effect Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
- G06F21/562—Static detection
- G06F21/563—Static detection by source code analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/55—Detecting local intrusion or implementing counter-measures
- G06F21/56—Computer malware detection or handling, e.g. anti-virus arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F21/00—Security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F21/50—Monitoring users, programs or devices to maintain the integrity of platforms, e.g. of processors, firmware or operating systems
- G06F21/57—Certifying or maintaining trusted computer platforms, e.g. secure boots or power-downs, version controls, system software checks, secure updates or assessing vulnerabilities
- G06F21/577—Assessing vulnerabilities and evaluating computer system security
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F40/00—Handling natural language data
- G06F40/10—Text processing
- G06F40/12—Use of codes for handling textual entities
- G06F40/151—Transformation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/42—Syntactic analysis
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/40—Transformation of program code
- G06F8/41—Compilation
- G06F8/44—Encoding
- G06F8/447—Target code generation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/70—Software maintenance or management
- G06F8/75—Structural analysis for program understanding
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2221/00—Indexing scheme relating to security arrangements for protecting computers, components thereof, programs or data against unauthorised activity
- G06F2221/03—Indexing scheme relating to G06F21/50, monitoring users, programs or devices to maintain the integrity of platforms
- G06F2221/033—Test 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)
- General Physics & Mathematics (AREA)
- Physics & Mathematics (AREA)
- Health & Medical Sciences (AREA)
- General 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
본 발명은 스마트 컨트랙트 코드 취약점 분석 장치 및 방법에 관한 것으로서, 보다 상세하게는 블록체인 상에서 동작하는 스마트 컨트랙트 기반 소프트웨어에서 발생할 수 있는 취약점을 간편하고 효율적으로 분석할 수 있는 스마트 컨트랙트 코드 취약점 분석 장치 및 방법에 관한 것이다.
주지된 바와 같이, 블록체인(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)에 의해 수행되는 스마트 컨트랙트 코드 취약점 분석 방법의 일실시예를 나타낸 흐름도이다.
도 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가 임의의 값이 가능할 경우 로 표현되고, 만약 0 이상일 경우 , -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에 포함되는 관계인 경우
이 경우 입력 코드의 부분 A를 제거할 수 있다.
2) A와 B의 패치 정보가 같은 경우
이 경우 입력 코드의 부분 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...취약성 검출부
10...메타 정보 추출부
20...중간 표현 언어 변환부
30...코드 분석부
40...취약성 검출부
Claims (21)
- 스마트 컨트랙트 코드 취약점 분석 장치로서,
스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 메타 정보 추출부;
상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 중간 표현 언어 변환부;
상기 중간 표현 언어 변환부에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 코드 분석부; 및
상기 코드 분석부에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 취약성 검출부
를 포함하고,
상기 취약성 검출부는, 상기 코드 분석부에서 탐지된 코드 취약점 및 룰 위반 사례에 기초하여 검출된 취약점에 대해 취약점 모델을 생성하고, 중복을 제거하고, 우선 순위에 따라 정렬하여 최종 취약점 모델을 생성하되,
상기 취약성 검출부는, 상기 코드 분석부에서 생성된 코드 패턴 취약점 테이블에 기록된 취약점 정보로부터 구문 취약점 모델(syntactic vulnerability model)을 생성하고, 상기 코드 분석부에서 생성된 시맨틱 취약점 테이블에 기록된 취약점 정보로부터 시맨틱 취약점 모델(semantic vulnerability model)을 생성하고, 이들 2 모델에 의해 취약점 모델을 표현하고, 여기에 심각도(severity) 정보, 참조 정보(references), 패치 정보(patch information)를 포함하는 부가 정보를 추가함으로써 취약점 모델을 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 1에 있어서,
상기 메타 정보는 블록체인 플랫폼 정보, 프로그래밍 언어 정보 및 버전 정보 중 적어도 어느 하나를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 1에 있어서,
상기 중간 표현 언어 변환부는,
상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환할 수 있는지의 여부를 판단하는 변환 가능 판단부; 및
상기 변환 가능 판단부에서 입력 코드를 중간 표현 언어로 변환 가능한 것으로 판단된 경우, 입력 코드를 중간 표현 언어로 변환하는 변환 수행부
를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 3에 있어서,
상기 변환 수행부는,
입력 코드를 파싱하여 추상 구문 트리를 생성하는 추상 구문 트리 생성부; 및
상기 추상 구문 트리 생성부에서 생성된 추상 구문 트리를 방문자(visitor)를 통해 순회함으로써 입력 코드에 대한 중간 표현 언어를 생성하는 중간 표현 언어 생성부
를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 1에 있어서,
상기 코드 분석부는, 상기 메타 정보 추출부에서 추출된 메타 정보에 상응하는 복수개로 구성되는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 스마트 컨트랙트 코드 취약점 분석 장치로서,
스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 메타 정보 추출부;
상기 메타 정보 추출부에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 중간 표현 언어 변환부;
상기 중간 표현 언어 변환부에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 코드 분석부; 및
상기 코드 분석부에 의해 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 취약성 검출부
를 포함하고,
상기 코드 분석부는,
중간 표현 언어로 변환된 입력 코드의 코드 패턴 정보에 기반하여 취약 코드 및 룰 위반 사례를 탐지하는 코드 패턴 정보 기반 분석부; 및
중간 표현 언어로 변환된 입력 코드의 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나에 기반하여 취약 코드 및 룰 위반 사례를 탐지하는 시맨틱 정보 기반 분석부
를 포함하고,
상기 시맨틱 정보 기반 분석부는, 중간 표현 언어로 표현된 입력 코드로부터 변수 트래킹 정보, 실행 흐름 정보 및 조건식 정보 중 적어도 어느 하나를 포함하는 시맨틱(semantic) 정보를 추출하는 시맨틱 정보 추출부; 및 상기 시맨틱 정보 추출부에 의해 생성된 시맨틱 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 취약 코드 탐지부를 포함하고,
상기 시맨틱 정보 추출부는, 실행 흐름 정보를 나타내는 제어 흐름 그래프를 생성하여 저장하고, 상기 취약 코드 탐지부는 제어 흐름 그래프에서 도달할 수 없는 노드가 존재하거나, 미리 설정된 값보다 많은 개수의 노드가 존재하거나, 리프 노드가 아님에도 외부 스마트 컨트랙트를 호출하는 경우, 취약 코드 및 룰 위반 사례로 탐지하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 6에 있어서,
상기 코드 패턴 정보 기반 분석부는,
중간 표현 언어로 표현된 입력 코드의 패턴 정보를 추출하는 코드 패턴 정보 추출부; 및
상기 코드 패턴 정보 추출부에서 추출된 코드 패턴 정보에 기초하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 취약 코드 탐지부
를 포함하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 7에 있어서,
상기 코드 패턴 정보 추출부는, 중간 표현 언어로 변환되어 표현된 입력 코드에 대해, 라인 단위, 함수 단위, 블록 단위 및 토큰 단위 중 적어도 어느 하나의 단위로 추출된 구문과, 상기 추출된 구문의 해시값, 시작 라인 정보 및 끝 라인 정보를 포함하는 코드 패턴 정보를 추출하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 7에 있어서,
상기 취약 코드 탐지부는, 상기 코드 패턴 정보 추출부에서 추출된 코드 패턴 정보에 대해 취약점 데이터베이스에 구축되어 있는 취약 코드 및 룰 데이터와 동일한 데이터가 존재하는지를 탐지하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 9에 있어서,
상기 취약점 데이터베이스는, 취약 코드와 취약 코드의 라인 정보를 입력으로 하여 메타 정보를 추출한 후, 추출된 메타 정보에 기초하여 입력된 취약 코드를 중간 표현 언어로 변환한 후, 취약 코드의 라인 정보에 기초하여 코드 패턴 정보를 추출함으로써 생성된 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 삭제
- 청구항 6에 있어서,
상기 시맨틱 정보 추출부는, 중간 표현 언어로 변환된 입력 코드에서 각각의 변수가 선언된 경우 각각의 변수들을 변수 관리 테이블에 추가하고, 각 변수에 대해 변수가 표현할 수 있는 값의 범위를 변수 값 테이블에 저장하여 변수 트래킹 정보를 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 12에 있어서,
상기 취약 코드 탐지부는, 상기 변수 트래킹 정보에 포함된 변수 값 정보가 정수형 오버플로우이거나, 초기화되지 않은 변수이거나, 변수의 표현값이 block.timestamp값이거나, balance가 0 이하인 경우 취약 코드 및 룰 위반 사례로 탐지하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 삭제
- 삭제
- 삭제
- 삭제
- 청구항 1에 있어서,
상기 취약성 검출부는, 취약점으로 탐지된 입력 코드의 부분들이 서로 같은 종류의 취약점을 가지고 어느 하나가 다른 하나에 포함되는 관계인 경우 포함되는 입력 코드의 부분을 중복으로 판단하여 제거하고, 패치 정보가 동일한 입력 코드의 부분들이 존재하는 경우 이들 중 어느 하나를 중복으로 판단하여 제거하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 18에 있어서,
상기 취약성 검출부는, 심각도(severity) 정보가 가장 위험한 단계인 "Critical"로 분류된 취약점들에 대해 패치 정보가 존재하는 경우를 가장 높은 순위로 정렬하고 패치 정보가 존재하지 않는 경우를 그 다음 순서로 정렬하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 19에 있어서,
상기 취약성 검출부는, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬하고, 패치 정보가 존재하면서, 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬하고, 패치 정보가 존재하지 않으면서 심각도 정보가 "High", "Medium", "Low"인 경우를 그 다음 순서로 정렬함으로써 최종 취약점 모델을 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 장치.
- 청구항 1에 의한 스마트 컨트랙트 코드 취약점 분석 장치에서 수행되는 스마트 컨트랙트 코드 취약점 분석 방법으로서,
스마트 컨트랙트의 소스 코드인 입력 코드에 대한 메타 정보를 추출하는 제1 단계;
상기 제1 단계에서 추출된 메타 정보에 기초하여 입력 코드를 중간 표현 언어로 변환하는 제2 단계;
상기 제2 단계에서 중간 표현 언어로 변환된 입력 코드를 분석하여 취약 코드 및 룰 위반 사례가 있는지를 탐지하는 제3 단계; 및
상기 제3 단계에서 탐지된 취약 코드 및 룰 위반 사례에 기초하여 취약점을 검출하여 최종 취약점 모델을 생성하는 제4 단계
를 포함하고,
상기 제4 단계는,
상기 제3 단계에서 탐지된 코드 취약점 및 룰 위반 사례에 기초하여 검출된 취약점에 대해 취약점 모델을 생성하고, 중복을 제거하고, 우선 순위에 따라 정렬하여 최종 취약점 모델을 생성하되,
상기 제3 단계에서 생성된 코드 패턴 취약점 테이블에 기록된 취약점 정보로부터 구문 취약점 모델(syntactic vulnerability model)을 생성하고, 상기 제3 단계에서 생성된 시맨틱 취약점 테이블에 기록된 취약점 정보로부터 시맨틱 취약점 모델(semantic vulnerability model)을 생성하고, 이들 2 모델에 의해 취약점 모델을 표현하고, 여기에 심각도(severity) 정보, 참조 정보(references), 패치 정보(patch information)를 포함하는 부가 정보를 추가함으로써 취약점 모델을 생성하는 것을 특징으로 하는 스마트 컨트랙트 코드 취약점 분석 방법.
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR20200153793 | 2020-11-17 | ||
KR1020200153793 | 2020-11-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20220067521A KR20220067521A (ko) | 2022-05-24 |
KR102550596B1 true 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) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115828264A (zh) * | 2022-12-19 | 2023-03-21 | 杭州云象网络技术有限公司 | 智能合约漏洞检测方法、系统及电子设备 |
CN116260637B (zh) * | 2023-02-15 | 2023-11-07 | 中国电子技术标准化研究院 | 渗透测试的路径规划方法、装置、电子设备及存储介质 |
CN116578988B (zh) * | 2023-05-23 | 2024-01-23 | 海南大学 | 一种智能合约的漏洞检测方法和装置、存储介质 |
Family Cites Families (5)
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 | 重庆邮电大学 | 一种可扩展的智能合约漏洞检测方法 |
-
2021
- 2021-11-17 US US18/253,152 patent/US20230418951A1/en active Pending
- 2021-11-17 WO PCT/KR2021/016833 patent/WO2022108318A1/ko active Application Filing
- 2021-11-17 KR KR1020210158436A patent/KR102550596B1/ko active IP Right Grant
Non-Patent Citations (2)
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.)* |
Also Published As
Publication number | Publication date |
---|---|
US20230418951A1 (en) | 2023-12-28 |
WO2022108318A1 (ko) | 2022-05-27 |
KR20220067521A (ko) | 2022-05-24 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR102550596B1 (ko) | 스마트 컨트랙트 코드 취약점 분석 장치 및 방법 | |
CN110506271B (zh) | 针对隐私敏感用户内容的可配置注释 | |
CN109992970B (zh) | Java反序列化漏洞检测系统和方法 | |
US20040205411A1 (en) | Method of detecting malicious scripts using code insertion technique | |
US9465942B1 (en) | Dictionary generation for identifying coded credentials | |
Cui et al. | Code comparison system based on abstract syntax tree | |
KR101260028B1 (ko) | 악성코드 그룹 및 변종 자동 관리 시스템 | |
CN110414261B (zh) | 一种数据脱敏方法、装置、设备及可读存储介质 | |
US20080271147A1 (en) | Pattern matching for spyware detection | |
US11888985B2 (en) | Blockchain system, registration terminal, approval terminal, smart contract registration method, and smart contract registration program | |
CN110225029A (zh) | 注入攻击检测方法、装置、服务器及存储介质 | |
CN101208690B (zh) | 计算环境中翻译表达式 | |
Nichols et al. | Syntax-based improvements to plagiarism detectors and their evaluations | |
CN104320312A (zh) | 网络应用安全测试工具及模糊测试用例生成方法和系统 | |
CN111930610B (zh) | 软件同源性检测方法、装置、设备及存储介质 | |
CN105760761A (zh) | 软件行为分析方法和装置 | |
CN117940894A (zh) | 用于检测代码克隆的系统和方法 | |
Ognawala et al. | Compositional fuzzing aided by targeted symbolic execution | |
US9600644B2 (en) | Method, a computer program and apparatus for analyzing symbols in a computer | |
Feichtner et al. | Obfuscation-resilient code recognition in Android apps | |
CN113885876A (zh) | 一种参数校验方法、装置、存储介质及计算机系统 | |
CN114879985B (zh) | 一种证书文件的安装方法、装置、设备及存储介质 | |
CN115599388A (zh) | 一种api接口文档生成方法、存储介质及电子设备 | |
US10789067B2 (en) | System and method for identifying open source usage | |
CN113420569A (zh) | 代码翻译方法、装置、设备及存储介质 |
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 |