솔리디티에 도전장 던지는 블록체인 개발 언어들

By 강민승   Posted: 2020-06-25

해킹 취약점 보완 앞다퉈


이더리움에서 주로 사용되는 솔리디티 언어로 구현한 여러 디앱과 분산금융(디파이) 컨트랙트에서 해킹 등 보안 사고가 빈번히 발생하면서 업계에선 보안성을 강화한 독자적인 ‘블록체인 전용 언어’를 직접 개발하는 사례가 늘고 있다. 페이스북은 자사의 블록체인 플랫폼인 리브라에서 작동하는 무브 언어를 개발했고 알고랜드 프로젝트도 클래리티 언어를 출시할 계획이다. 

*솔리디티 : (이더리움 블록체인에서) 가빈 우드 이더리움 공동창립자가 제안해 이더리움 코어 개발자들이 개발한 블록체인 개발 언어. 블록체인의 비즈니스 로직을 구현하는데 주로 사용된다. 자바스크립트, 파이썬과 유사한 스타일을 지닌 객체지향형 언어다. 현 스마트 컨트랙트 대다수는 솔리디티 언어에 기반해 작성됐다.

솔리디티 취약점 노린 ‘블록체인 해킹’ 막대한 손실 초래

솔리디티 언어의 취약점에서 발생한 블록체인의 보안 사고는 한 두번이 아니다. 그중에서 현재까지 규모가 가장 컸던 블록체인 보안사고는 2017년 11월 패리티 지갑에서 51만ETH(한화 약 3500억원)이 분실된 사건으로 해커가 컨트랙트 내에서 다른 컨트랙트를 실행하는 ‘델리게이트콜’을 악용한 공격으로 발생했다. 최근 디파이 프로젝트 렌드에프닷미에서도 재진입 공격이 발생해 약 2500만 달러(한화 약 300억원)를 도난당한 바 있다. 재진입 공격은 이더리움의 탈중앙화자율조직 ‘더다오’가 모집한 펀딩금액 1270만ETH(한화 약 1800억원)중 상당금액을 빼내는데 사용된 공격으로도 유명하다. 

*재진입 공격 : 컨트랙트가 상대방으로부터 토큰을 전송받을 때 상대방의 악성코드도 같이 실행되는 공격을 말한다. 컨트랙트에서 ‘토큰을 받았음’ 등 수신 확인을 위해 사용하는 폴백 함수가 공격자의 악성 컨트랙트에 담긴 코드를 실행시키고 피해자의 컨트랙트에 재진입해 코인을 무제한 출금하는 공격 방식. 컨트랙트가 외부 컨트랙트를 호출하는 경우 발생할 수 있다.

이밖에도 초기의 이더리움 컨트랙트에선 해커가 컨트랙트에 최소값을 요청한 뒤 그 수를 1만큼 감소시키며 컨트랙트에 저장된 변수값을 최대치로 바꿔버리는 ‘언더플로우, 오버플로우 공격’도 수차례 발생했다. 이들 모두는 솔리디티 소스 코드의 취약점을 타겟으로 하는 공격이다. 코드 리뷰나 보안 감사를 통해 이 같은 사고를 상당수 방지할 수도 있지만 쉽게 간과되는 경우도 많아 보안 사고가 끊이지 않고 있다.

무브 언어 “엄격한 사전 검사, 비정상 코드의 실행을 원천봉쇄”

페이스북은 블록체인에서 발생하는 대규모 보안 사고를 처음부터 예방하고자 전용 언어인 무브를 자체적으로 개발했다. 무브는 러스트 언어를 토대로 하는데 프로그래밍 언어 전문가가 처음부터 다수 참여해 개발한 언어로도 유명하다. 무브 언어로 구현한 디앱은 프로그래밍 언어 수준에서 특정 비정상행동을 자동적으로 방지하기 때문에 보안성도 높은 특징이 있다. 

무브의 백서에 따르면 솔리디티 언어는 블록체인만의 특징을 고려하지 못하는 부분이 많고 토큰 전송시 재진입 공격 등 새로운 버그를 발생시킨다고 지적한다. 반면 무브는 블록체인 토큰에 특화한 리소스 자료형 등 블록체인 전용 자료 타입을 내재하고 있어 상대적으로 안전하다는 설명이다. 개발자가 블록체인에 사용될 데이터 타입을 새롭게 정의할 수 있기에 언어 자체의 표현력을 끌어올린 효과도 있다.

무브 언어는 코드가 실행되면서 발생하는 결함이나 보안취약점을 방지하기 위해 사전 검사를 강력하게 수행하는 특징이 있다. 실제로 리브라 블록체인은 스마트 컨트랙트를 실행하기 전에 각 타입을 검사해 타입이 잘못된 코드를 애초에 실행하지 못하도록 차단하고 있다. 벤 모러 페이스북 블록체인 기술책임자는 무브 언어의 개발 배경을 밝히며 “무브 언어를 만든 가장 핵심적인 원칙은 보안이다. 개발자는 무브 언어를 통해 시큐어 코딩을 더욱 쉽게 할 수 있을 것”이라고 강조한 바 있다.

클래리티, 표현력 제한해 안정성 끌어올린 언어

알고랜드는 블록체인 개발회사 블록스택과 협력해 클래리티 언어를 개발중에 있다. 페이스북의 무브가 언어의 표현력을 높이고 코드 검사를 엄격하게 실시하는 반면 알고랜드는 보안성을 높이기 위해 언어 자체의 표현력을 애초에 제한하는 방식을 택했다. 튜링 완전한 언어를 지향하는 솔리디티와 달리 클래리티 언어에선 기초적인 기능을 제외하면 코드로 구현할 수 있는 부가적인 기능은 많지 않다. 때문에 실행 중에 에러를 발생시키는 경우도 상대적으로 적다. 이를 ‘결정형 언어’ 라고 부른다. 특히 클래리티는 코드를 한 줄씩 실행시키는 방식으로 동작해 컴파일 과정도 필요하지 않는다.

블록스택에 따르면 클래리티는 기본 기능에 충실하도록 개발됐기 때문에 이식성이 좋아 여러 블록체인 플랫폼에 사용할 수도 있다는 설명이다. 클래리티는 알고랜드에 탑재돼 접근 제어, NFT토큰, 스테이블 코인, 구독 경제 모델, 앱에 특화한 스마트 컨트랙트, 탈중앙화자율조직(DAO) 등을 구현하는데 사용될 예정이다. 실비오 미칼리 알고랜드 창립자는 “현재 블록체인 개발 언어보다 높은 수준의 보안성과 신뢰성을 지닌 프로그래밍 언어를 개발해 대기업, 정부 등 대규모 블록체인 서비스를 위한 솔루션을 구현할 것”이라고 최근 말한 바 있다.

전문가 “블록체인 전용언어 꼭 필요, 솔리디티 최신버전 사용 권장” 

컨센시스, 오픈제플린 등 이더리움 개발회사에서도 솔리디티 언어의 보안 취약점을 인지하고 있으며 컨트랙트를 설계할 땐 각별히 주의할 것을 당부하고 있다. 특히 이더리움 코어개발자 팀은 솔리디티의 보안성을 향상시키는 패치를 활발히 배포하고 있다. 솔리디티는 2017년 3월 배포된 0.4버전을 시작으로 새로운 버전이 매주 업데이트 되고 있다. 솔리디티 언어는 지금까지 약 750개의 버전이 존재한다. 반면 개발자들은 최신 버전의 솔리디티를 사용하지 않고 기존 버전을 고수하며 코드를 유지보수 하는 경우가 많다. 업데이트를 시행하면 이전에 구현한 기능이 실행되지 않는 회귀 오류 등이 발생할 가능성도 높기 때문이다. 류석영, 황성재 카이스트 연구팀은 현 98%의 이더리움 스마트 컨트랙트 개발자는 솔리디티 언어의 보안성이 향상된 최신 패치를 적용하지 않고 기존 버전을 그대로 사용하고 있어 현 25%가량의 컨트랙트가 보안 사고에 취약한 것으로 분석했다.

류석영 한국과학기술원(KAIST) 전산학부 교수는 “기존에 가장 널리 사용되던 이더리움의 솔리디티 언어는 자바스크립트, 파이썬 등 여러 언어의 기능을 적당히 취합해 제작한 언어로 취약점이 상당히 많이 존재한다”고 지적했다. 이더리움 블록체인에서 발생한 상당수의 해킹 등 보안사고가 솔리디티 언어 자체의 취약점에서 발생했다는 설명이다. 그는 “솔리디티의 파이썬 버전인 바이퍼도 최근 사용되고 있지만 보안성이 높다고는 할 수 없다. 오히려 솔리디티보다 개발이나 사용이 덜 됐기 때문에 상대적으로 더 취약할 수도 있어 주의가 필요하다”고 덧붙였다.

류 교수는 “(블록체인 업계에선) 안전성과 보안성이 매우 중요한 경우에는 무브처럼 실행 전에 검사를 엄격히 하는 방식을 사용하고, 개발언어의 표현력이 그다지 중요하지 않은 곳에서는 클래리티처럼 언어의 기능을 줄이는 시도가 앞으로 블록체인 시스템의 안전성을 높이는 데 중요한 역할을 할 것”이라고 내다봤다. 또 솔리디티 언어를 사용해 스마트 컨트랙트를 개발할 경우 가급적 최신 버전을 사용할 것을 조언했다.

[강민승 기자]