KR20190105774A - 스마트 계약 언어에서 함수 호출의 안전성 향상 방법 - Google Patents

스마트 계약 언어에서 함수 호출의 안전성 향상 방법 Download PDF

Info

Publication number
KR20190105774A
KR20190105774A KR1020180026286A KR20180026286A KR20190105774A KR 20190105774 A KR20190105774 A KR 20190105774A KR 1020180026286 A KR1020180026286 A KR 1020180026286A KR 20180026286 A KR20180026286 A KR 20180026286A KR 20190105774 A KR20190105774 A KR 20190105774A
Authority
KR
South Korea
Prior art keywords
function
code
call
fallback
contract
Prior art date
Application number
KR1020180026286A
Other languages
English (en)
Inventor
조은선
이수연
정형근
Original Assignee
충남대학교산학협력단
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 충남대학교산학협력단 filed Critical 충남대학교산학협력단
Priority to KR1020180026286A priority Critical patent/KR20190105774A/ko
Publication of KR20190105774A publication Critical patent/KR20190105774A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Stored Programmes (AREA)

Abstract

본 발명은 스마트 계약 언어에서 함수 호출의 안전성 향상 방법에 관한 것으로, 스마트 계약 언어에서 함수 호출의 안전성 향상 방법은 전처리기에서 솔리디티 언어로 프로그래밍된 코드에 대하여 앤틀러 파서로 함수 호출코드를 식별하는 단계, 상기 식별된 함수 호출코드에 조건문을 추가하여 폴 백(fallback) 함수가 호출되었는지 검출하는 단계, 및 상기 폴 백 함수의 호출이 검출된 경우, 개발자에게 알림을 제공하는 단계를 포함한다. 본 발명에 의하면, 폴 백 함수의 실행에 따른 위험성을 줄일 수 있고, 폴 백 함수가 호출된 경우, 오류를 해결하여 적합한 계약이 실행되도록 하는 자동화할 수 있다.

Description

스마트 계약 언어에서 함수 호출의 안전성 향상 방법{METHOD FOR IMPROVING SAFTY OF CALLING FUNCTION IN SMART CONTRACTS}
본 발명은 솔리디티(Solidity)라는 암호 화폐 중 하나인 이더리움(Ethereum)의 스마트 계약(smart contract) 언어를 사용하는 프로그래밍 기술에 관한 것이다.
이더리움 사용자는 솔리디티(Solidity)를 이용해서 계약(contract)을 작성하여 거래에 이용할 수 있다. 그러나, 솔리디티(Solidity)는 여러 가지 취약점을 가지고 있다.
솔리디티가 가진 취약점 중 대표적인 것은 다른 계약의 함수를 호출하는 코드를 작성한 후 계약이 실행될 때 해당 함수(계약)가 제대로 실행되지 않는 오류가 발생하는 것이다. 예를 들어, 변수의 형식이 맞지 않거나, 호출하는 함수가 존재하지 않는 경우 등을 의미한다. 이러한 오류 발생 상황에서 폴 백(fallback) 함수가 호출되는데, 다른 계약의 함수를 호출한 계약(Caller)은 폴 백 함수가 호출되었는지 알지 못하고, 어떠한 동작을 수행하는지도 알지 못해 공격에 사용될 수 있는 문제가 있다.
솔리디티의 이러한 위험성을 줄이기 위해 프로그램을 미리 분석하거나 타입을 지원하는 새로운 언어를 제시하는 방법, 암호적인 기법을 써서 개인정보 보호를 향상시키는 방법 등이 있다. 그러나, 이러한 방법들은 분산 수행되는 스마트 계약의 속성을 충분히 반영하기 어렵고 새로운 언어를 도입해야 하는 부담이 있다.
본 발명은 전처리기에서 폴 백 함수가 호출된 것을 감지하여 개발자에게 미리 알림을 제공하여 함수 호출의 안전성을 향상시키는 스마트 계약 언어에서 함수 호출의 안전성 향상 방법을 제공하는데 그 목적이 있다.
상기의 목적을 달성하기 위해 본 발명의 일 실시예에 따른 스마트 계약 언어에서 함수 호출의 안전성 향상 방법은 전처리기에서 솔리디티 언어로 프로그래밍된 코드에 대하여 앤틀러 파서로 함수 호출코드를 식별하는 단계, 상기 식별된 함수 호출코드에 조건문을 추가하여 폴 백(fallback) 함수가 호출되었는지 검출하는 단계, 및 상기 폴 백 함수의 호출이 검출된 경우, 개발자에게 알림을 제공하는 단계를 포함한다.
본 발명에 의하면, 폴 백 함수의 실행에 따른 위험성을 줄일 수 있고, 폴 백 함수가 호출된 경우, 오류를 해결하여 적합한 계약이 실행되도록 하는 자동화하는 효과가 있다.
도 1은 본 발명의 일 실시예에 따른 스마트 계약 언어에서 함수 호출의 안정성 향상 방법의 개략적인 흐름도이다.
도 2는 스마트 계약 언어에서 함수 호출의 안전성 향상 방법의 call 함수를 이용해 다른 계약(contract)의 함수를 호출하는 예시이다.
도 3 내지 도 4는 본 발명의 일 실시예에 따른 스마트 계약 언어에서 함수 호출의 안전성 향상 방법을 설명하기 위한 예시이다.
본 발명은 다양한 변경을 가할 수 있고 여러 가지 실시예를 가질 수 있는 바, 특정 실시예들을 도면을 참조하여 상세하게 설명하도록 한다. 그러나, 이는 본 발명을 특정한 실시 형태에 대해 한정하려는 것이 아니며, 본 발명의 사상 및 기술 범위에 포함되는 모든 변경, 균등물 내지 대체물을 포함하는 것으로 이해되어야 한다. 각 도면을 설명하면서 유사한 참조부호를 유사한 구성요소에 대해 사용하였다.
제1, 제2, A, B 등의 용어는 다양한 구성요소들을 설명하는데 사용될 수 있지만, 상기 구성요소들은 상기 용어들에 의해 한정되어서는 안된다. 상기 용어들은 하나의 구성요소를 다른 구성요소로부터 구별하는 목적으로만 사용된다. 예를 들어, 본 발명의 권리범위를 벗어나지 않으면서 제1 구성요소는 제2 구성요소로 명명될 수 있고, 유사하게 제2 구성요소도 제1 구성요소로 명명될 수 있다. 및/또는 이라는 용어는 복수의 관련된 기재 항목들의 조합 또는 복수의 관련된 기재 항목들 중의 어느 항목을 포함한다.
어떤 구성요소가 다른 구성요소에 "연결되어" 있다거나 "접속되어" 있다고 언급될 때에는 그 다른 구성요소에 직접적으로 연결되어 있거나 또는 접속되어 있을 수도 있지만, 중간에 다른 구성요소가 존재할 수도 있다고 이해되어야 할 것이다. 반면에, 어떤 구성요소가 다른 구성요소에 "직접 연결되어" 있다거나 "직접 접속되어" 있다고 언급된 때에는, 중간에 다른 구성요소가 존재하지 않는 것으로 이해되어야 할 것이다.
본 출원에서 사용한 용어는 단지 특정한 실시예를 설명하기 위해 사용된 것으로, 본 발명을 한정하려는 의도가 아니다. 단수의 표현은 문맥상 명백하게 다르게 뜻하지 않는 한, 복수의 표현을 포함한다. 본 출원에서, "포함하다" 또는 "가지다" 등의 용어는 명세서상에 기재된 특징, 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것이 존재함을 지정하려는 것이지, 하나 또는 그 이상의 다른 특징들이나 숫자, 단계, 동작, 구성요소, 부품 또는 이들을 조합한 것들의 존재 또는 부가 가능성을 미리 배제하지 않는 것으로 이해되어야 한다.
다르게 정의되지 않는 한, 기술적이거나 과학적인 용어를 포함해서 여기서 사용되는 모든 용어들은 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 자에 의해 일반적으로 이해되는 것과 동일한 의미를 가지고 있다. 일반적으로 사용되는 사전에 정의되어 있는 것과 같은 용어들은 관련 기술의 문맥 상 가지는 의미와 일치하는 의미를 가지는 것으로 해석되어야 하며, 본 출원에서 명백하게 정의하지 않는 한, 이상적이거나 과도하게 형식적인 의미로 해석되지 않는다.
명세서 및 청구범위 전체에서, 어떤 부분이 어떤 구성 요소를 포함한다고 할때, 이는 특별히 반대되는 기재가 없는 한 다른 구성 요소를 제외하는 것이 아니라 다른 구성 요소를 더 포함할 수 있다는 것을 의미한다.
이하, 본 발명에 따른 바람직한 실시예를 첨부된 도면을 참조하여 상세하게 설명한다.
도 1은 본 발명의 일 실시예에 따른 스마트 계약 언어에서 함수 호출의 안정성 향상 방법의 개략적인 흐름도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 스마트 계약 언어에서 함수 호출의 안정성 향상 방법은 앤틀러 파서로 함수 호출코드를 식별하고(S110), 폴 백 함수가 호출되었는지 검출하고(S120), 폴 백 함수가 호출된 경우 개발자에게 알림을 제공할 수 있다(S130).
구체적으로, 전처리기는 솔리디티 언어로 프로그래밍된 코드에 대하여 앤틀러 파서로 함수 호출코드를 식별할 수 있다. 또한, 전처리기는 식별된 함수 호출코드에 조건문을 추가하여 폴 백(fallback) 함수가 호출되었는지 검출할 수 있다. 이때, 전처리기는 함수를 호출하는 코드에 'if (c.getfb()==FALLBACK) then error'와 같은 조건문을 추가하여 fallback 함수가 호출되었는지 확인하게 된다. 조건문을 활용하기 위해 Solidity 코드에 전처리기를 이용해서 fallback 함수의 구현에 특정상태변수 fb를 set하는 코드를 추가할 수 있다.
마지막으로, 전처리기는 폴 백 함수의 호출이 검출된 경우, 개발자에게 알림을 제공할 수 있다. 이 과정에서, 전처리기는 폴 백 함수의 호출이 검출된 경우 개발자에게 알리는 코드를 삽입하여 코드를 재작성할 수 있다.
이하, 솔리디티 언어로 프로그래밍된 코드에 대하여 스마트 계약 언어에서 함수 호출의 안정성 향상 방법을 프로그램 코드를 예로 들어 구체적으로 설명하도록 한다.
솔리디티에서는 적절한 조건 아래서 다른 계약의 함수를 호출할 수 있도록 해준다. 이때, 컴파일러는 해당 함수의 시그니처 등을 가지고 처리하는 코드로 바꾼다.
솔리디티의 로우 레벨(low-level) 함수 호출을 살펴보면 호출(call), 호출 코드(call code), 대표호출(delegate call)을 활용한 호출방식이 있다. 이중 'Call' 방식은 다른 계약자의 함수를 실행할 때 주로 쓰이는 방식이고, 'Delegatecall' 방식은 'call' 방식처럼 다른 계약의 코드를 실행할 때 쓰이는데, 다만 계약이 실행될 때 계약을 실행시킨 계약의 컨텍스트(context)를 사용한다.
도 2는 스마트 계약 언어에서 함수 호출의 안전성 향상 방법의 call 함수를 이용해 다른 계약(contract)의 함수를 호출하는 예시이다.
도 2를 참조하면, Call을 이용하면 호출하는 계약이 호출된 계약의 저장소 또는 변수에 접근하여 값을 조작할 수 있다. 이는 Java의 reflection의 메소드 invoke와 유사한 방식으로써 주어진 주소값을 통해서 호출하게 된다.
하지만, 이러한 방식으로 계약에 대한 기능을 호출하면 계약에 대한 보안 위험성을 수반한다. 따라서, call, delegatecall, callcode 등의 호출방식은 Solidity가 의도한 것과 달리 타입 안정성(type-safety)을 위배할 수 있기 때문에 세심한 주의가 요구된다.
Fallback 함수는 솔리디티의 계약 내에 이름과 인자 없이 임의로 작성될 수 있는 함수이다. 계약 실행 중 특정 함수를 호출했을 때 해당 함수와 일치하는 signature가 없을 때 대신 실행되는 함수이다. 이외에도 계약 실행 중 gas가 부족해 실행이 불가능하거나, 함수호출 시 타입 또는 인자가 맞지 않을 때도 실행된다.
도 3 내지 도 4는 본 발명의 일 실시예에 따른 스마트 계약 언어에서 함수 호출의 안전성 향상 방법을 설명하기 위한 예시이다.
도 3을 참조하면, call 함수를 이용하지 않고 직접 다른 계약을 주소를 이용해 객체로 선언해서 다른 계약의 함수를 호출하는 예를 보여준다. 여기서, c는 Alice의 주소를 의미한다.
이 예시에서, 'c.ping(42);'는 잘못된 참조이기 때문에 Alice의 ping 함수를 사용할 수 없다. 따라서, 'c.ping(42);'가 실행될 때 이 함수와 signature가 일치하지 않는 함수가 없는 상태가 되므로 fallback 함수가 자동 실행된다. 이때, Bob은 앞서 언급한대로 fallback 함수가 호출되었는지 여부와 fallback 함수의 동작을 알수 없어 위험하다.
또한, 만약 악의적인 목적을 가진 사용자가 위와 같은 계약을 작성하고 fallback 함수자리에 악성코드를 넣어둔 후에 계약이 실행된다면 본래의 fallback 대신 악성코드가 실행될 가능성이 있다.
이러한 문제에 대한 해결 방법으로 call 방식을 이용해 다른 계약에 접근하는 코드의 존재 여부를 확인하는 방법을 제안한다. 이것은 안전한 코드로 수정하는 것과 fallback 함수의 호출 여부를 개발자에게 알려 수정을 권고하는 것이다.
도 4를 참조하면, 전처리기는 솔리디티 언어로 프로그래밍된 코드에 대하여, 앤틀러(ANTLR)를 이용하여 solidity.g4 파일을 기반으로 계약을 재작성할 수 있다.
구체적으로, 전처리기는 함수 호출코드를 ANTLR 파서로 식별한 후 폴 백 함수가 검출된 경우, 개발자에게 알리는 코드를 삽입하는 형태로 재작성한다. 그로 인해 개발자가 코드가 올바르게 사용되었는지 확인할 수 있도록 유도한다.
이를 위해 전처리기는 함수를 호출하는 코드에 'if (c.getfb()==FALLBACK) then error'와 같은 조건문을 추가하여 fallback 함수가 호출되었는지 확인하게 된다. 조건문을 활용하기 위해 Solidity 코드에 전처리기를 이용해서 fallback 함수의 구현에 특정상태변수 fb를 set하는 코드를 추가할 수 있다.
이러한 방식으로 코드를 재작성하고 나면 실행시 fallback 함수가 실행되면 상태변수 fb가 설정되고, if 조건문에서 fb가 설정된 것을 확인한 후 개발자에게 알려주게 된다. 따라서, 개발자는 자신의 코드 수정이 없이 전처리기를 사용함으로써 오류가 발생한 코드를 자동으로 검출할 수 있다.
또한, 전처리기는 위와 같은 방법으로 fallback 함수가 검출된 코드를 스킵하거나 변수를 수정하여 코드를 정정할 수 있다.
이상의 설명은 본 발명의 기술 사상을 예시적으로 설명한 것에 불과한 것으로, 본 발명이 속하는 기술 분야에서 통상의 지식을 가진 사람이라면 본 발명의 본질적인 특성에서 벗어나지 않는 범위에서 다양한 수정 및 변형이 가능할 것이다. 따라서, 본 발명에 개시된 실시예들은 본 발명의 기술 사상을 한정하기 위한 것이 아니라 설명하기 위한 것이고, 이러한 실시예에 의하여 본 발명의 기술 사상의 범위가 한정되는 것은 아니다. 본 발명의 보호 범위는 아래의 청구범위에 의하여 해석되어야 하며, 그와 동등한 범위 내에 있는 모든 기술 사상은 본 발명의 권리범위에 포함되는 것으로 해석되어야 할 것이다.

Claims (1)

  1. 전처리기에서 솔리디티 언어로 프로그래밍된 코드에 대하여 앤틀러 파서로 함수 호출코드를 식별하는 단계;
    상기 식별된 함수 호출코드에 조건문을 추가하여 폴 백(fallback) 함수가 호출되었는지 검출하는 단계; 및
    상기 폴 백 함수의 호출이 검출된 경우, 개발자에게 알림을 제공하는 단계;
    를 포함하는, 스마트 계약 언어에서 함수 호출의 안전성 향상 방법.
KR1020180026286A 2018-03-06 2018-03-06 스마트 계약 언어에서 함수 호출의 안전성 향상 방법 KR20190105774A (ko)

Priority Applications (1)

Application Number Priority Date Filing Date Title
KR1020180026286A KR20190105774A (ko) 2018-03-06 2018-03-06 스마트 계약 언어에서 함수 호출의 안전성 향상 방법

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
KR1020180026286A KR20190105774A (ko) 2018-03-06 2018-03-06 스마트 계약 언어에서 함수 호출의 안전성 향상 방법

Publications (1)

Publication Number Publication Date
KR20190105774A true KR20190105774A (ko) 2019-09-18

Family

ID=68070623

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020180026286A KR20190105774A (ko) 2018-03-06 2018-03-06 스마트 계약 언어에서 함수 호출의 안전성 향상 방법

Country Status (1)

Country Link
KR (1) KR20190105774A (ko)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102263692B1 (ko) 2019-12-30 2021-06-14 충남대학교 산학협력단 이더리움 스마트계약 가상머신 바이트코드 보안성 향상 방법
CN113486357A (zh) * 2021-07-07 2021-10-08 东北大学 一种基于静态分析和深度学习的智能合约安全检测方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR102263692B1 (ko) 2019-12-30 2021-06-14 충남대학교 산학협력단 이더리움 스마트계약 가상머신 바이트코드 보안성 향상 방법
CN113486357A (zh) * 2021-07-07 2021-10-08 东北大学 一种基于静态分析和深度学习的智能合约安全检测方法
CN113486357B (zh) * 2021-07-07 2024-02-13 东北大学 一种基于静态分析和深度学习的智能合约安全检测方法

Similar Documents

Publication Publication Date Title
EP3906488B1 (en) Method and contract rewriting framework system for supporting smart contracts in a blockchain network
Magazinius et al. Safe wrappers and sane policies for self protecting JavaScript
Schoepe et al. Explicit secrecy: A policy for taint tracking
US20070271617A1 (en) Vulnerability check program, vulnerability check apparatus, and vulnerability check method
Kern Securing the tangled web
US10867050B2 (en) Method and apparatus for generating dynamic security module
US20150222620A1 (en) System and method for providing application security in a cloud computing environment
WO2023035751A1 (zh) 移动端应用的智能混淆
Van Ginkel et al. A server-side JavaScript security architecture for secure integration of third-party libraries
KR20190105774A (ko) 스마트 계약 언어에서 함수 호출의 안전성 향상 방법
CN110333872B (zh) 一种应用的处理方法、装置、设备和介质
Kim et al. {FuzzOrigin}: Detecting {UXSS} vulnerabilities in browsers through origin fuzzing
US11977872B2 (en) Method and system for code maintenance
Wang et al. Adopting Trusted Types in ProductionWeb Frameworks to Prevent DOM-Based Cross-Site Scripting: A Case Study
Tran et al. Security issues in android application development and plug-in for android studio to support secure programming
CN104699618A (zh) 指定用户对高权限进程自动化测试的方法及装置
Willocx et al. Security analysis of cordova applications in Google play
Titze et al. Preventing library spoofing on android
CN103824020B (zh) 自动实现软件程序免杀的方法
Kern Securing the Tangled Web: Preventing script injection vulnerabilities through software design
Pieczul et al. The evolution of a security control
KR102432775B1 (ko) 개인정보보호를 지원하는 스마트 컨트랙트 프로그래밍 시스템 및 방법
Lee et al. A modified smart contract execution enviroment for safe function calls
Loch Juturna: Lightweight, Pluggable and Selective Taint Tracking for Java
KR102026959B1 (ko) 보안 시스템 및 그 동작 방법