닫기

코인정보 읽기

읽기

이오스크롬팀의 EosBet 해킹 사건 전격해부! Part2 [5]

작성자:     작성일시: 작성일2018-12-06 16:03:23    조회: 8,848회    댓글: 5
 

이오스코인 해킹 Issue 분석! EOSBet 2차 해킹 Part 2



0.png



 

 

안녕하세요. 오늘은 EOSBet 2차 해킹파트에 대해서 포스팅 할 예정입니다. 이오스인 해킹 이슈와 함께 이오스코인 전망에 대해서 많은 분들이 궁금해하시는 만큼 이번 포스팅에서는 EOSBet 해킹에 대해 조금 더 기술적인, 개발자 분들께 도움이 될만한 포스팅을 작성해봤습니다. 물론 비 개발자분들도 이해하기 쉽도록 노력해서 포스팅해봤으니 꼼꼼히 읽어주시면 좋겠습니다. 아래의 링크를 통해 이오스코인 해킹 분석, 이오스코인 이슈에 대한 모든 파트와 이오스크롬 팀의 최근 소식을 만나볼 수있으니 이오스크롬 미디엄에 방문해주시길 바랍니다!



=============================================================================================================






[EOSBet이 공개한 해킹에 대한 기술적인 설명]


eosio.token의 핵심 코드는 들어오는(incoming) EOS 토큰이 있을 경우 그 토큰의 수신인과 발신인 모두에게 ‘공지’를 하도록 설계되어 있다.











1-20181206-153140.png



EOSBet의 다이스 컨트랙트도 마찬가지로 이 공지 기능을 탑재하고 있다. 다이스 컨트랙트의 경우 스마트 토큰 컨트랙트를 시행할 시 제일 처음으로 본인들이 EOS 토큰의 발신인인지에 관해 확인한다. 이 때, EOSBet이 발신인인 것이 확인 되면 컨트랙트는 별다른 변수 없이 작성된 코드 그대로 진행되는 것이 예상된 행동이다 (왜냐하면 EOSBet이 승자에게 상금을 지급중에 있는 발신인이 맞으므로).


만일 EOS 토큰의 발신인이 EOSBet이 아닌 경우는 두가지로 나뉠 수 있는데 1. EOSBet이 수신인인 경우 와 2. EOSBet이 발신인, 수신인도 아닌 다른 유저들이 발신인인 경우이다. 그러나 EOSBet은 이 과정에서 치명적인 컨트랙트상 실수를 범한다 — 2번의 경우를 간과하고 1번의 경우에 해당하는 컨트랙트만을 작성했기 때문이다.


그들이 작성한 코드대로 스마트 컨트랙트가 진행될 시, 다이스 컨트랙트는 EOSBet이 발신인이 아닌 모든 토큰들은 자신의 컨트랙트 내로 보내진다고 가정한다 (EOSBet이 전송되는 모든 토큰들의 수신인). 즉, 완전히 별개의 두 유저 A와 B가 서로 토큰을 전송하고 전송받을 시에도 다이스 컨트랙트에게로 토큰 전송이 진행되고 있다고 ‘공지’가 갈 수 있게 되는 것이다.


이번 해킹 사례에서 해커들은 EOSBet이 간과한 이 ‘뜻밖의 인터랙션’을 이용해 컨트랙트의 취약성을 악용한 것이라 보여진다.








2-20181206-153140.png


예를 들어, 해커 A와 B가 EOSBet 유저라는 전제 하에 해커 A가 B에게 100 EOS를 전송한다고 가정해보자. 이 때, 실상 다이스 컨트랙트 내로 보내진 EOS 토큰은 아무것도 없으나 다이스 컨트랙트의 결함으로 인해 EOSBet은 자신의 컨트랙트로 100 EOS가 들어왔다고 ‘공지’를 받는다.


이 공지에 따라 다이스 컨트랙트는 상금을 지급하게 되는데, 지급할 시에는 EOSBet의 Operational Wallet으로부터 실효성이 있는 EOS 토큰을 지급하게 된다. 이런 식으로 해커들은 자기들끼리 반복적으로 트랜잭션을 만들며 EOSBet의 자금을 빼돌린 것이다.








3-20181206-153140.png



EOSBet 측에 따르면, 그들은 자신의 컨트랙트가 토큰의 수신인 이라는 것을 확실하게 검토하지 않았기 때문에 이러한 사태가 일어나게 된 것이라 주장한다. 따라서 이러한 이슈로부터 공격받지 않기 위해 EOSBet은 다음의 라인을 토큰 트랜스퍼에 관련되는 펑션에 추가할 것을 권유한다:


eosio_assert(transfer_data.from == _self || transfer_data.to == _self, “Must be incoming or outgoing transfer”);


만일 토큰을 전송’받기’만을 원하고 (incoming) 전혀 보내지 않을 것이라면 아래의 라인만 추가하면 된다:


eosio_assert(transfer_data.to == _self, “Must be incoming transfer);


EOSBet은 다른 dApp들이 같은 피해를 입지 않게 하기 위해 EOSBet측은 해킹에 쓰인 코드를 공개하지 않 기로 했다. 하지만 EOS 스마트 컨트랙트 개발자들에게 악성 컨트랙트가 EOS 컨트랙트 어플라이 펑션에 “코드” 패러미터를 전달할 수 있음을 반드시 알아둬야 한다고 전했다. 따라서 require_recipient() handler를 통해 액션 아규먼트에 명확한 검토가 필요하다고 강조했다.

 

 

 

 

[취약점 패치]




EOSBet이 2차 해킹 피해를 겪은 후 EOS BP중 하나인 EOS Cafe Block은 EOS 컨트랙트 상 ‘알림’을 사용하는 컨트랙트 들의 취약성을 발견해 그에 대한 대응 방법을 공유했다. 그에 따르면, 이 알림으로 부터 오는 모든 패러미터들이 명확하게 체크되어야 하며 컨트랙트 네임과 액션 네임만을 체킹하는 것은 불충분하다고 전했다.


따라서 EOS Cafe Block은 트랜스퍼 알림 기능을 사용하는 모든 컨트랙트에 다음과 같은 체크 구문을 추가할 것을 권유한다:


if (transfer.to != _self) return;


만일 들어오는(incoming) 트랜스퍼에 관해  서만 로직을 적용하되, 이 트랜스퍼 액션을 들어오고 나가는 트랜스퍼 둘 다에 재사용하기 위해서는 다음의 구문을 이용하면 된다:


if (transfer.from == _self || transfer.to != _self ) return;


EOS Cafe Block은 이는 컨트랙트상 취약점이고 시스템의 취약점이 아님을 명시했으며 이 취약점 패치를 적용한 많은 컨트랙트들 외에 아직 인지하지 못한 다른 개발자 들에게도 이 패치를 공유할 것을 당부했다.






[마치며…]



2차 해킹이 발생한지 약 한달 전, 첫 해킹이 있기 며칠 앞서서 EOSBet은 본인이 겜블링 dApp중 가장 안전한 게임이라 자부하며 공공연하게 선언했었다. 뿐만 아니라 사건이 있은 후에도 EOSBet은 자체 개발팀과 여러 제3의 기관들을 통해 강도 높게 회계 감사를 해오고 있으며 따라서 보안성이 한층 더 강화되었다고 주장했었다.


그러나 불과 한달만에 또 다른 취약성을 공격한 해킹이 발생하게 되었다. 이는 유저들 사이에 EOS 스 마트 컨트랙트가 아직까지 얼마나 치명적인 버그들을 갖고 있는지 경각심을 일깨워주는 계기로 작용했다. 뿐만 아니라 반복되는 기술적 결함과 미숙하고 안일한 게임 운영 정책들 때문에 많은 유저들이 EOSBet에게 등을 돌리고 있으며 반대로 그의 짝퉁이라 여겨져온 Betdice의 승승장구가 이어지고 있는 상황이다. 



긴 글 읽어주셔서 감사합니다! 오늘 분석 포스팅이 블록체인 생태계 참여자 모두에게 큰 도움이 되어서 앞으로도 블록체인이 승승장구 했으면 좋겠네요! 이로써 EOSBet 해킹 분석 글을 마치겠습니다. 감사합니다!!


 

  추천 0   비추천 0
  • 페이스북으로 보내기
  • 트위터로 보내기
  • 구글플러스로 보내기
  • 밴드로 보내기

댓글목록

 

전체: 3,895개 (1/112페이지)
코인정보 목록
제목 글쓴이 조회 추천 비추천 날짜
  [필독] 불법홍보글 / 회원간 분란 발생 시 엄중하게 처리하겠습니다. (수정) [15] 4623 10 0 11-28
  ICO List 게시판이 신설되었습니다. [1] 2906 0 1 03-12
HINTCHAIN 내년이 더욱 기대되는 프로젝트 new 80 0 0 12-18
"코인하는 내 남자친구에게"_12/18 new 191 0 0 12-18
최초의 익명 거래소 레지스탕스(한국 투자자 한정 프라이빗세일 진행 중) new 445 0 0 12-18
12.18일 비코 분석. new 481 0 0 12-18
오후 암호화폐 시황 new 600 0 0 12-18
12.18 오후 암호화폐 시황 new 630 0 0 12-18
비코 차트분석 ^^ new 625 0 0 12-18
[한줄시황] 지지선 딛고 반등하는 시장…리플 11% '껑충' new 632 0 0 12-18
암호화폐 시황 new 717 0 0 12-18
12.18 오전 암호화폐 시황 new 747 0 0 12-18
떠나가라는 비트코인 좐문가들 (Feat. 잔반 처리 투자자들) new 1037 0 0 12-18
블록체인 플랫폼을 꿈꾸는 베잔트 블록체인, 웹 서비스처럼 이용할 수 있어야 [5] 1776 0 0 12-17
17일 차트 분석합니다. [4] 2334 0 0 12-17
12-17 암호화폐 오후 시황 [3] 2403 0 0 12-17
가상화폐거래소 코인원 "가상화폐 98%는 시한폭탄" [5] 2474 0 0 12-17
[한줄시황] 시장 소폭 상승세…비트코인 거래량은 '침울' [5] 2466 0 0 12-17
12-17 오전 암호화폐 시황 [5] 2543 0 0 12-17
이오스크롬(CR), 추가 에어드랍 이벤트 참여 방법은? [5] 2663 0 0 12-17
신규 마이닝 거래소 ZBIT 소개 드립니다. [6] 3483 0 0 12-17
지금 상황에서 좋은 소식은 아닐수있는데 신규거래소 오픈했대요 6551 0 0 12-14
[공지] 힌트체인(HINT) 코인세일 안내 6627 0 0 12-14
블록체인 프로젝트 MIND AI 자산관리 플랫폼 개발 위해 코인페이먼트와 제휴 체결 6666 0 0 12-14
리플이 잘될 이런저런이유 6738 0 0 12-14
12월 14일 볼륨증가&가격 미상승 코인 6724 0 0 12-14
코인기상청에서 알려주는 일일 코인시황_코인웨더_UNBLOCKED ! 6671 0 0 12-14
12-14 암호화폐 시황 6761 0 0 12-14
EOS CHROME(CR), 연말 서프라이즈 에어드랍 이벤트 실시 6930 0 0 12-14
센터코인정보 [1] 7061 1 0 12-14
비트코인 대량 물량이동 원인은? [4] 8141 0 0 12-13
12-13 비트코인 시황 [3] 8117 0 0 12-13
모든 거래소들의 만행 [5] 8181 0 0 12-13
UNBLOCKED BLOCK_코인웨더 [5] 8192 0 0 12-13
월스트리트 ‘심리 차트’로 비트코인 가격을 살펴보자 [5] 8229 0 0 12-13