보안 / 블록체인

블록체인의 스마트 컨트랙트란 무엇인가, 그리고 보안

Dan Swinhoe | CSO 2018.10.17
스마트 컨트랙트(Smart Contract)은 블록체인의 핵심 구성요소다. 이런 작은 비즈니스 로직 조각들은 개발자가 블록체인 기반 애플리케이션을 구성하는 규칙과 프로세스를 작성할 수 있는 자기 실행 코드다. 비즈니스 프로세스를 자동화하고 간소화할 수 있는 잠재력은 있지만 이런 애플리케이션을 해킹하려는 범죄자들의 주요 표적이기도 하다.

올해 초 싱가포르국립대학교(National University of Singapore)와 런던대학교(University College London)의 연구를 통해 이더리움(Ethereum) 네트워크에서 3만 4,000개 이상의 취약한 스마트 컨트랙트가 발견됐다.

코드가 형편없는 컨트랙트가 관련된 공격은 블록체인 기반의 가위바위보 게임에서 속이는 능력만큼이나 사소할 수 있지만 DAO(Distributed Autonomous Organization) 해킹의 결과와 같이 수백만 달러어치의 암호화폐를 잃고 기본 플랫폼 전체에 영향을 끼치게 된다. 스마트 컨트랙트를 악용하는 방법은 무엇이며, 안전한 스마트 컨트랙트를 위해 어떤 우수 사례를 응용할 수 있을까.

공통적인 스마트 컨트랙트 취약점
스마트 컨트랙트는 비즈니스를 수행하고 비즈니스 프로세스를 관리하는 흥미로운 새로운 방식을 제공한다. 또한 잠재적인 악의적 활동의 새로운 장도 제공한다.
일부는 대부분의 애플리케이션에서 발견할 수 있는 전통적인 익스플로잇 공격 유형으로 액세스 제어 문제, 언더플로(Underflow) 및 오버플로(Overflow) 오류, 안전하지 못한 라이브러리, 비즈니스 로직 취약점 등이 있다. 개발자는 다음과 같은 여러 스마트 컨트랙트 별 취약점을 인지해야 한다.

- 리엔트란시(Re-entrancy): 이를 통해 공격자는 특정 기능을 악용해 반복적으로 진입하고 코드의 특정 시점 이전에 원하는 바를 실행할 수 있다. 잔고가 확인되기 전에 계정을 비울 때까지 암호화폐를 반복적으로 송금해 프로세스 실패를 유발하는 것이 그 예다. 이 방법이 DAO 해킹에서 사용되었지만 적절한 코드 작성 활동을 통해 방지할 수 있다.

- 정수 오버플로 및 언더플로(Integer overflow and underflows): 이는 스마트 컨트랙트에서 보편적으로 발견되는 문제다. 이 결함은 최근 특정 프로토콜을 사용하는 여러 이더리움 스마트 컨트랙트에서 보고됐다. 이런 것은 오픈제플린(OpenZeppelin)의 세이프매스(SafeMath) 라이브러리 같은 라이브러리로 수정할 수 있는 경우가 많다.

- 짧은 주소 공격(Short address attacks): 이 공격은 트랜잭션 내의 표적 주소가 짧을 때 발생할 수 있다. 이더리움 플랫폼은 트랜잭션을 무효화하는 대신에 해당 주소에 0을 추가한다. 이 지식을 이용해 범죄자는 정상보다 훨씬 큰 금액에 대해 완벽하게 정당한 송금을 실행해 토큰(Token) 지갑을 비울 수 있다.

- 기능에 대한 실수: 이더리움에서는 컨트랙트 내에서 실행 가능한 코드의 단위인 기능이 기본적으로 공개되어 있기 때문에 누구든 호출할 수 있다. 기능 문제로 인해 패리티 월렛(Parity Wallets) 해킹이 가능했으며 약 3,000만 달러의 암호화폐 손실이 발생했다.

- DoS(Denial of Service): DoS 공격을 통해 컨트랙트를 무력화시킬 수 있는 방법은 다양하다. 여기에는 트랜잭션 비용 부풀리기, 트랜잭션 승인을 위해 특정 권한 요구하기[소유자 운영], 컨트랙트를 무한한 루프(Loop)에 가두기 등이 포함된다.

시큐링(SecuRing)의 IT 보안 연구원 다미안 루시넥은 "스마트 컨트랙트는 가상 머신에 의해 바이트코드(Bytecode) 또는 중간 코드로 컴파일되고 실행되기 때문에 대부분의 취약성은 언어 독립적이다"고 말했다. 루시넥은 "하지만 언어는 같은 기능(액세스 관리 등)을 달성하기 위해 다른 코드 구조를 도입하며 경우에 따라 이행하기가 더 어려울 수 있다"고 말했다.

고려해야 할 또 다른 요소는 컨트랙트를 배치한 후에는 업데이트가 불가능하다는 점이다. 일단 활성화되면 비활성화거나 업데이트된 컨트랙트에 연계시킬 수 밖에 없다(복잡성과 위험이 증가할 수 있다). 컨트랙트를 비활성화하고 관련된 모든 당사자가 새로운 컨트랙트를 도입하도록 하는 것이 더 쉬운 사설 또는 컨소시엄 상황에서는 문제가 되지 않을 수 있지만 여전히 대비는 필요하다.

스트라티스(Stratis)의 스마트 컨트랙트 책임자 조단 앤드류스는 "스마트 컨트랙트는 다른 종류의 애플리케이션과 다르게 취급해야 한다"며, "코드의 정확한 기능에 대해 개발자가 확보해야 하는 신뢰도 등 전통적인 컴퓨팅 패러다임에 존재하지 않는 스마트 컨트랙트 실행과 관련된 고유한 문제들이 존재하며 이는 컨트랙트의 보안에 영향을 끼칠 수 있다"고 설명했다.

기업용 스마트 컨트랙트, 위험에 처하다
대부분의 잘 홍보된 스마트 컨트랙트 익스플로잇 공격에는 암호화폐가 관련되어 있으며 그 이유는 추적이 어려운 대량의 디지털 화폐가 매력적인 표적이면서도 기업 기반 상황에서 오용의 가능성이 높기 때문이다.

점차 보편화되는 공급망 사용사례에서 해킹된 스마트 컨트랙트로 인해 공격을 통해 인도 위치나 배송 크기 등의 세부사항이 변경될 수 있다. DoS형 공격은 공급망 전체를 오프라인화할 수 있다.

또 다른 예로 신원 관리에 사용되는 컨트랙트에서의 익스플로잇 공격을 들 수 있다. 통제권 확보 또는 누군가의 신원 조작을 위한 익스플로잇 공격은 누군가의 의료 치료와 관련된 경우 중대한 영향을 끼칠 수 있다.

프라이빗 블록체인에서의 스마트 컨트랙트, 여전히 취약
기업 공간은 이해관계가 더 큰 프라이빗/컨소시엄 블록체인이며 이런 상황에서 모든 독립체는 알려지고 신뢰받을 가능성이 더 높기 때문에 승인 배제보다는 분산화에 더욱 집중한다.

시큐링의 루시넥은 "기술적인 관점에서 프라이빗 블록체인도 문제는 같지만 사용자 그룹이 승인되면 위험이 크게 감소한다"며, "하지만 네트워크의 노드(Node)가 전적인 신뢰를 받는다고 가정하면 기업이 내부자 위협에 노출될 수 있다"고 경고했다.

보안 컨설팅 업체 트레일 오브 비츠(Trail of Bits) CEO 댄 기도는 "스마트 컨트랙트는 어려운 개발 플랫폼이며 프라이빗 환경에서는 1개의 개별적인 취약점이나 결함이 컨트랙트의 완전한 기능 또는 신뢰 상실로 귀결될 수 있다"고 주장했다. 기도는 "대부분의 개발자는 블록체인에서의 공유 컴퓨팅 환경, 그리고 악성 사용자가 자신의 이익을 위해 이 유리한 상황을 남용하는 방식 때문에 골머리를 썩고 있다"고 말했다.

이더리움 대신에 많은 기업이 리눅스 재단의 오픈소스 블록체인 플랫폼인 하이퍼레저 패브릭(Hyperledger Fabric)을 프라이빗/컨소시엄 블록체인 환경을 위한 플랫폼으로 활용하고 있다. IBM, 마이크로소프트, 아마존 등의 많은 기업이 이를 BaaS(Blockchain as a Service) 제공을 위한 기반으로 활용하고 있다.

IBM의 블록체인을 위한 글로벌 클라이언트 참여팀 소속 데이비드 고만은 "패브릭은 네트워크 내에서 체인코드(Chaincode, 하이퍼레저에서 스마트 컨트랙트를 일컫는 말)의 라이프 사이클을 관리하는 방식, 여러 조직에서 체인코드를 관리, 설치, 입증, 업그레이드하는 방식에 대해 생각하고 있다"고 말했다. 고만은 "어떤 조직과 어떤 노드에 체인코드의 사본이 있는지, 그리고 트랜잭션을 실행 또는 보증하기 위해 무엇을 호출할 수 있는지 구체적으로 지정할 수 있다"고 덧붙였다.

조직이 다른 버전의 체인코드 컨트랙트를 설치할 수 있지만 하이퍼레저의 디자인 때문에 체인코드를 실행한 모든 기업이 같은 결과를 얻은 것은 아니라는 사실을 쉽게 알아차리게 될 것이다. 또한 컨트랙트가 처음 공개될 때 네트워크의 여러 조직이 패키지를 사전 검증할 수 있도록 하는 보증 정책을 생성함으로써 이를 완화할 수 있다.

하이퍼레저 사용자가 "월드 스테이트(world state)"라는 시스템을 사용한다는 점도 악의적인 활동을 방지하는데 도움이 된다. 월드 스테이트는 조직 사이에서 공유되는 현재의 상태[은행 계좌 잔고 등]에 대한 "유일한 신뢰의 출처" 데이터베이스이며 "원장"은 트랜잭션 기록이다(두 당사자 사이의 자금 교환 등). 조직의 월드 스테이트 사본이 나머지와 다른 경우 제안된 트랜잭션은 검증 단계 중 실패하게 된다.

현재 하이퍼레저 패브릭과 관련해 알려진 공격이 없다. NCC그룹의 암호화 서비스 책임자 제이브드 사무엘은 "점차 많은 기업이 블록체인 기반 프로세서를 도입하고 통합하기 시작하면서 공격자들은 하이퍼레저 그리고 스마트 컨트랙트이 관련된 비즈니스 프로세스 해킹 등에 더욱 집중할 것이기 때문에 개발자도 대비해야 한다"고 말했다.

사무엘은 "그들이 따르는 보안 모델은 퍼블릭 또는 프라이빗 블록체인 두 경우 모두 같아야 한다. 무명성에 의한 보안 또는 신뢰받는 사용자에게만 스마트 컨트랙트가 표시될 것이라는 가정만으로는 부족하다"며, "보안의 관점에서 지금보다 더 많은 사람에게 스마트 컨트랙트가 표시될 것이라고 가정하는 것을 권장한다"고 설명했다.

또한 하이퍼레저 패브릭 환경에서 이더리움 기반 스마트 컨트랙트를 배치하는 것이 가능하기 때문에 이런 컨트랙트 내의 취약점을 자사의 환경에 추가할 수 있다.

스마트 컨트랙트 보안을 위한 7가지 우수사례
여러 블록체인 플랫폼을 위한 컨트랙트를 작성하는 것과 여러 언어 사이에는 차이가 있겠지만 모든 개발자가 주목하고 자신의 스마트 컨트랙트의 보안을 개선할 수 있는 우수사례가 있다.

1. 조사하라. 개발자는 컨트랙트을 실행하는 블록체인 플랫폼(프라이빗 환경에서는 환경에 대한 보안 아키텍처)뿐만 아니라 스마트 컨트랙트가 작동하는 방식과 이를 해킹할 수 있는 방식을 제대로 이해해야 한다.

트레일 오브 비츠의 기도는 "개발자는 코드를 작성하기 전에 언어, 컴파일러, 알려진 보안 위험을 심도 있게 검토해야 한다"며, "프로젝트의 사양을 구성하고 작성하고 싶은 대상과 상호 연결 방식을 알아야 한다"고 말했다.

2. 컨트랙트를 간소화하고 수정이 불가능하다는 사실을 기억하라. 컨트랙트가 복잡할수록 오류가 포함될 가능성이 높아진다. 마찬가지로 마이크로서비스는 모놀리스(Monolith)보다 낫고 큰 컨트랙트보다 작은 컨트랙트가 낫다. 조직은 향후 위험 발생을 방지하기 위해 여전히 배치하는 컨트랙트가 제대로 검증되고 컨트랙트 업그레이드 전략이 있는지 확인해야 한다.

블록체인 생산 스튜디오 컨센시스 딜리전스(ConsenSys Diligence)의 제품 엔지니어 버나드 뮬러는 "스마트 컨트랙트가 더 복잡해지면 로직 오류가 발생할 가능성이 높아진다"고 말했다. 뮬러는 "따라서 우리는 무엇보다도 간결성을 추구한다. 바람직하지 못한 상황에 진입하면 되돌릴 방법이 없다. 따라서 스마트 컨트랙트에 포함된 로직은 항상 최소화하고 컨트랙트의 거동에 대한 명확한 사양이 있어야 한다"고 덧붙였다.

3. 테스트와 감사가 중요하다. 안전하지 못한 컨트랙트의 보안은 어렵기 때문에 배치 전 가능한 보안을 확보하기 위해 포괄적인 단위 테스트 선택이 필요하다. 트러플(Truffle), 슬리터(Slither), 에키드나(Echidna), 오이엔트(Oyente), 스마트첵(SmartCheck), 미스릴(Mythril) 등의 여러 테스트 및 디버깅 도구와 서드파티 감사 서비스를 이용할 수 있다. 이를 활용해 컨트랙트의 건전성을 확보한다.

4. 서두르지 말라. 개발자에게 컨트랙트를 안전한 방식으로 개발하기 위한 충분한 시간과 자원을 제공하고 보안팀이 문제를 찾을 수 있는 시간을 제공해야 한다.

NCC의 사무엘은 "스마트 컨트랙트를 개발하고 기능을 활성화해 실행하는데만 집중하고 보안을 등한시하는 경우가 많다"며, "우리는 감사 그리고 스마트 컨트랙트의 적절한 보안을 확보하기 위해 충분한 시간과 자원이 있어야 한다"고 주장했다.

5. 다른 컨트랙트를 선택하는 것을 경계하라. 신뢰할 수 없는 컨트랙트를 선택하지 않도록 하자. 외부 호출은 해당 컨트랙트 또는 이에 의존하는 다른 컨트랙트에서 악성코드를 실행할 수 있다. 또한 사용할 라이브러리를 검증하자. 이더스캔(Etherscan)은 컨트랙트 검정기(檢定器)를 제공해 계획 중인 컨트랙트의 기능을 검증할 수 있는 인기 도구다.

6. 비밀 데이터를 평문으로 보관하지 말라. 비밀 데이터를 안전하게 보관하고 실행하는 방법을 파악하자. 그렇지 않으면 컨트랙트를 검사하는 사람이 컨트랙트 실행 방식의 핵심 등 잠재적으로 민감한 정보를 읽을 수 있다. 프라이빗/컨소시엄 환경에서는 암호화 키를 통해 가장 잘 달성할 수 있을 것이다.

7. 모든 기능이 태그(Tag) 처리되도록 하라. 플랫폼에 따라 컨트랙트 기능이 공개로 기본 설정되는 경우가 많다. 외부 상호작용이 필요하지 않는 한 기능을 개인 또는 내부적으로 유지하자. 이를 통해 외부 활동자의 컨트랙트 실행 간섭을 방지할 수 있다. 패리지 월렛 해킹은 기본 공개 기능의 결과였다.

"시인성 유형을 지정하지 않으면 기본적이기 때문에 누구든 실행할 수 있다."고 시큐링의 루시넥이 말했다. "사설 기능은 스마트 컨트랙트 내부에서 해당 스마트 컨트랙트의 다른 기능으로으로부터만 호출할 수 있다."

이더리움 및 솔리디티(Solidity) 사이트와 마찬가지로 NCC그룹의 DASP 및 블록체인 생산 스튜디오는 컨센시스 모두 스마트 컨트랙트 보안을 위한 보안 우수사례에 대한 추가 읽을거리를 제공한다. editor@itworld.co.kr 

회사명 : 한국IDG | 제호: ITWorld | 주소 : 서울시 중구 세종대로 23, 4층 우)04512
| 등록번호 : 서울 아00743 등록발행일자 : 2009년 01월 19일

발행인 : 박형미 | 편집인 : 박재곤 | 청소년보호책임자 : 한정규
| 사업자 등록번호 : 214-87-22467 Tel : 02-558-6950

Copyright © 2024 International Data Group. All rights reserved.