SmartMesh(ERC20) 스마트 컨트랙트 취약점 분석

Jason Kim
HAECHI AUDIT
Published in
5 min readApr 25, 2018

Apr-24–2018 07:16:19 PM +UTC 에 SmartMesh 에서 발행한 토큰의 수보다 큰 규모의 토큰 전송이 발생했다.

위의 링크를 보면 누군가가 SmartMesh 의 transferProxy 함수를 호출했고 transferProxy 에 잠재되어있던 버그로 인해서 대량의 토큰 전송이 성공했다. 들리는 소문에 의하면 이미 해당 토큰을 거래소를 통해 팔았다고 한다. 후오비 프로에서는 SMT/BTC, SMT/ETH, SMT/USDT 에 대한 거래를 일시 중단했다. 이러한 문제점을 인식한 SmartMesh 개발사는 현재 토큰 전송이 안되게 transfer 을 막아두는 트랜잭션을 발생시켰다.

해당 글에서는 SmartMesh 스마트 컨트랙트가 어떤 문제점을 가지고 있었는지 분석해보려고한다. SmartMesh 의 코드는 etherscan.io 에 공개되어 있으므로 찾아볼 수 있다.

문제가 발생한 SmartMesh 스마트 컨트랙트의 transferProxy 에 대해 살펴보자. _from 주소가 가지고 있는 토큰중 _value 만큼의 토큰은 _to 주소로 보내고 _feeSmt 만큼의 토큰은 함수를 호출한 사람에게 주는 함수이다.

하지만 이 함수는 uint256 덧셈에 대한 Overflow 처리가 안되어 있다. uint256 은 256자리 bit 를 이용해서 숫자를 표현하는데 256 bit 가 처리할 수 있는 숫자가 넘어가면 표현하지 못한다. 256 bit 가 표현할 수 있는 최대값은2²⁵⁶-1이다. 이 숫자에서 1을 더하면 우리가 기대하는 값은 2²⁵⁶ 인데 실제로 uint256 의 값은 0 이 되어버린다. 그렇기 때문에 solidity 코드를 짤 때 이러한 점에 주의해서 짜야되고 대표적인 해결책으로는 Zeppelin 사에서 만든 SafeMath.sol 을 사용하는 방법이 있다. 하지만 SmartMesh 는 이러한 라이브러리를 사용하지 않고서 자체적으로 Overflow 를 피하기 위한 코드를 짰지만 실수가 존재했고 이를 악용한 해커에 의해 발행량 이상의 토큰을 특정 주소에 전송하였다.

SmartMesh 가 작성한 코드에서 4번째 줄을 살펴보면 _from 주소가 가지고 있는 토큰의 양보다 전송하려는 _value, _feeSmt 가 크면 전송을 실패하게 되어있다. 하지만 _value, _feeSmt 의 값이 매우 커서 _value + _feeSmt 에 Overflow 가 일어난다면 실제 결과값은 우리가 기대하는 값이 아닌 작은 숫자가 될 수 있다.

해커가 발생시킨 트랜잭션 etherscan.io

위의 사진은 etherscan.io 에서 해커가 발생시킨 트랜잭션이다. 사진에서 [2] 에 해당하는 값이 _value 이고 [3] 에 해당하는 값이 _feeSmt 이다. 해커는 처음에 해당 토큰을 0개 가지고 있었고 [2] 에 해당하는 값과 [3] 에 해당하는 값을 더하면 실제로 Overflow 가 일어나서 _value + _feeSmt = 0 이 된다. 그렇기 때문에 transferProxy 함수의 4번째 줄에 해당하는 조건에 걸리지 않게 된다. 결과적으로 해커는 자신이 원하는 _to 주소와 함수를 호출한 자신에게 엄청난 양의 토큰을 성공적을 전송할 수 있었다. 이렇게 발행한 토큰을 거래소로 옮겨서 판매한 것으로 보인다.

이는 이더리움 자체의 버그는 아니고 토큰을 발행한 SmartMesh 스마트 컨트랙트의 버그이다. 직접적인 돈과 연관되는 기술이기 때문에 스마트 컨트랙트를 짤 때 무조건 코드를 검증하는 테스트 코드를 작성해야 한다고 생각한다. 그리고 테스트넷에서 충분한 테스트를 통해서 실제 메인넷에 배포해야된다고 생각한다. 그럼에도 불구하고 사람이 만드는 코드이기 때문에 실수가 발생할 수 는 있다. 하지만 스마트 컨트랙트 Audit 같은 과정을 통해서 버그를 최소화 할 수 있다고 생각한다. 현재 무분별한 ICO들이 상당히 많이 존재하고 어떤 ICO 들은 코드를 공개하지도 않는다. 코드를 공개해도 충분히 문제가 생기는데 코드를 공개하지도 않는 ICO들은 더 많은 문제가 존재할 수 있다고 생각한다. 이미 우리가 사용하는 스마트 컨트랙트들에도 문제가 많이 존재한다고 생각한다. 물론 SmartMesh 처럼 금전적인 문제가 발생하지 않기 때문에 위험성에 대해 무감각한 것 같다. 이런 사건들을 통해서 많은 사람들이 기술에 대한 중요성과 경각심을 가졌으면 좋겠다.

앞으로도 다양한 스마트 컨트랙트에 대한 분석을 진행하려고 합니다. 안전한 스마트 컨트랙트 연구에 관심있는 분들은 “스마트 컨트랙트 연구 모임(Smart Contract Research Group)”에서 이야기 나누면 좋을거 같습니다.

--

--

Jason Kim
HAECHI AUDIT

Haechi Labs CEO, Haechi Labs provides Henesis & Haechi Audit.