[EOS 해킹 Issue 분석] EOSBet 2차 해킹 Part 1

OZ
EOS Chrome
Published in
7 min readNov 21, 2018

--

안녕하세요 여러분! OZ입니다 :)

이전에는 EOS CHROME 계정을 통해 포스팅을 해왔었는데 여러분들께 더 좋은 정보를 많이, 자주 공유해드리고 싶은 마음에 Publication 을 개설하게 되었어요. 이제 모든 EOS CHROME 팀원 분들께서 각자 양질의 컨텐츠를 제공해 주실 예정이니까요, 저희 Publication 페이지 방문 및 팔로우 놓치지 말아주세요! 저도 Publication을 통해 자주 찾아뵙겠습니다.

EOS CHROME Publication site link:
https://medium.com/eoschrome

오늘 포스팅 에서는 지난 10월 15일 EOS Gambling Dapp중 1순위를 차지했던 EOSBet에게 발생한 스마트 컨트랙트 해킹사건에 대한 분석을 다뤄보려고 합니다. 총 두편에 걸쳐 설명 드릴 예정이며, 이번 편에서는 사건 소개와 EOS 스마트 컨트랙트의 취약성에 대해 얘기해보려 합니다. 좀 더 기술적인 분석 및 설명은 다음 편에 이어지니 관심있게 지켜봐주시면 감사하겠습니다! :)

[EOSBet의 2차 해킹]

“EOSBet, 약 한달만에 해커들로부터 재공격”

10월 15일, EOSBet은 해커들의 Dice 스마트 컨트랙트 해킹으로 인해서 142,845 EOS ($338k)의 손실을 입었다 (from hot wallet). 이는 9월 14일 있었던 첫 해킹에 이어 약 한달만에 발생한 두번째 공격으로 다시 한번 플랫폼 안전의 취약성이 화두가 되고 있다. 훔쳐진 자금은 Bitfinex와 Poloniex로 전송되었고 빠르게 동결되었다. 잃은 자금을 돌려받기 위하여 EOSBet이 현재 두 거래소와 조율중인 것으로 알려지고 있다.

EOSBet 측은 이번 해킹에 대해 “EOS 코드 내에서 불규칙적이고 예상치 못한 동태와 본인들의 스마트 컨트랙트를 점검하지 않아서” 생긴 결과라고 밝혔다. 그러나 그들은 또한 이번 해킹에 의한 피해는 본인들이 앞서 시행했던 보안 업그레이드 덕분에 자금의 대부분을 cold storage로 옮기는 등의 행동을 통해 줄어들 수 있었으며, 앞으로도 자동화된 뱅크롤 관리 시스템을 시행하고 추가적인 테스팅들(by Hacken, Trail of Bits, etc.)을 통해 보안 강화에 더 힘쓸 것이란 의견을 전했다.

  • 뱅크롤 (BankRoll): 겜블링 시설 또는 카지노에서 게임의 자금. 게임자의 착수금 또는 테이블 딜러의 바로 앞 트레이에 있는 카지노 머니 또한 포함한다. 보통 게임자가 게임을 하기 위해 투자하는 비용을 뜻하는데 이는 하룻밤에 해당할 수도 있고 더 전문적인 플레이어의 경우 게임을 하기 위해 투자할 수 있는 전재산을 뜻하기도 한다.

“악성코드 이용한 스마트 컨트랙트 취약성 공격”

이번 공격은 EOS 스마트 컨트랙트 플랫폼이 그들의 계좌에 토큰을 넣도록 조작하는 악성 코드를 이용해서 이루어졌다. “ilovedice123”라는 해커는 기존의 EOS 어카운트에 악성 코드를 탑재시켜서 스마트 컨트랙트로 작동되는 플랫폼이 실수로 해커들의 어카운트에 65,000EOS 토큰을 지급하게 한 뒤 주요 암호화폐 거래소로 넘겼다.

<해킹된 EOS가 주요 암호 화폐 거래소 poloniex로 전송된 레코드>

그들은 자신들의 EOS Wallet에 악성 코드를 삽입한 후 게임을 진행하여 그들끼리 트랜잭션을 만들때 마다 지정된 account가 암호화폐를 지급하게 만들었다. 그 후 이 코드는 EOSBet의 “transfer” 기능을 활성화 시켜서 operational wallet으로부터 해커들 사이에서 전송된 EOS 양과 같은 양을 자동으로 매치 시키도록 했다.

출처: https://thenextweb.com/hardfork/2018/10/15/eos-dapp-hacked/

<해커들끼리 서로 EOS를 주고받은 흔적>

[EOS 스마트 컨트랙트, 보안 취약?]

“EOS 스마트 컨트랙트의 WASM”

EOS 스마트 컨트랙트는 WebAssembly (WASM) 라는 저레벨의 어셈블리와 같은 language를 사용한다. 이는 마이크로 소프트, 구글, 애플에 의해 지원을 받으며 첨단 업계의 표준으로 자리 잡고있다.

  • WebAssembly (웹어셈블리) : 웹 페이지에서 실행할 코드에 대해 이진 포맷과 어셈블리와 유사한 텍스트 포맷을 정의한 웹 표준. 특정 언어로 작성된 소스코드를 웹 어셈블리로 변환하면 웹 응용 프로그램 개발에 재활용이 가능하다. 또한 기계어에 가까운 포맷 표준 덕에 웹 응용프로그램의 실행 성능과 하드웨어 이식성이 높은 특징을 갖는다.

WASM을 이용하는 덕분에 어떠한 언어를 사용하여 EOS 스마트 컨트랙트를 작성해도 무방하지만 (WASM으로 컴파일) 가장 유명하고 공식적으로 지원받는 언어는 C++이다. 그러나 C++의 도입은 EOS 네트워크를 잠재적 취약성에 노출시킨다. 실상 해커들이 네트워크를 손상시키기 위해서 그저 C언어나 C++로 쓰인 취약한 코드를 WASM으로 변환하고 EOS 네트워크에서 작동시키면 끝이기 때문이다.

“EOS와 Ethereum 의 스마트 컨트랙트 차이점”

여러 기술적인 차이점 외에 이더리움과 이오스는 설계상으로도 차이점을 갖는데 그 중 가장 큰 차이는 ‘변경 가능성’에 있다. 이는 즉 스마트 컨트랙트를 배포한 이후 수정 가능 여부를 말하는 것인데 EOS는 이를 허용하고 Ethereum에서는 (원칙적으로) 불가능하다.

변경 가능성의 초점은 옳고 그름의 문제 보다는 어떤 가치를 우선시 할 것인가에 맞춰져 있다. 이에 있어서 EOS는 사용자의 편의에 포커스를 둠으로써 작성된 스마트 컨트랙트의 업그레이드를 허용하는 반면 Ethereum은 신뢰를 가장 중시하며 불변성 (immutability)을 통해 한번 배포한 컨트랙트는 수정이 불가하고 최초 배포한 내용 있는 그대로 실행될 것을 약속한다.

Ethereum의 경우 ‘code is law,’ 즉 ‘코드는 법’ 이란 입장을 가지고 있다. 반면, EOS의 경우 스마트 컨트랙트가 업데이트 가능하기 때문에 ‘intent of code is law,’ 즉 ‘최초에 코드를 작성한 의도가 법’이란 입장을 갖고있다. 쉽게 말하면, EOS의 스마트 컨트랙트는 기존 코드가 작성된 의도에 따라 코드 수정이 가능하다. 때문에, EOS에는 코드가 작성된 의도를 기록하는 리카르디언 계약이 존재한다 — 스마트 계약 코드 작성도 결국 인간에 의해 행해지는 것이므로 스마트 계약 코드에는 늘 실수가 존재할 수 있기 때문에, 리카르디안 컨트랙트를 기준으로 최초의 의도에 부합하는 방향으로 새로운 코드를 업데이트 할 수 있다.

Ethereum의 경우 프록시 패턴 등 스마트 컨트랙트 내용을 우회적으로 변경하기 위한 연구를 진행중에 있다.

이러한 점에 미루어 EOS는 사용자가 목적에 따라 다양한 기능을 직접 구현하여 사용할 수 있게 한다는 것이 가장 큰 장점이지만 그로 인해 EOSBet의 해킹 사건들과 같이 악성 코드로 인한 오작동으로 막대한 피해를 입힐 수 있는 취약성또한 갖게 되는 것이다.

이로써 오늘의 포스팅을 마치겠습니다. 다음 편에서는 해킹에 대한 본격적이고 더 기술적인 분석에 관한 정보를 공유해 드리도록 하겠습니다. 안녕~

--

--