[EOS 해킹 ISSUE 분석] EOSCast 해킹

김태섭
EOS Chrome
Published in
8 min readNov 27, 2018

--

안녕하세요. Sam Kim 입니다! 지난번 EOSBet 2차 해킹사건에 이어서 이번시간에는 EOSCast 해킹사건에 대해서 포스팅 하려고 합니다. 이번 포스팅 외에도 앞으로 작성할 저희 포스팅이나 저희가 진행했던 포스팅들이 궁금하시다면 아래 링크를 통해 접속하시면 EOS CHROME에 대한 다양한 포스팅들을 보실 수 있습니다.

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

[ 펙쉴드 “EOSCast, 네트워크 공격 피해…7만 여 EOS 도난”]

중국 블록체인 전문 네트워크 보안업체 펙쉴드(PeckShield)가 “EOS 기반 게임 DApp(EOSCast)이 31일(현지 시간) 해커의 공격에 의해 7만 여 EOS를 도난당했다”고 밝혔습니다.

펙쉴드에 따르면, “31일 새벽 01:15 해커로 추정되는 ‘refundwallet’ 이용자는 EOSCast의 스마트 컨트랙트 ‘eoscastdmgb1’에 ‘Fake EOS 변형 공격’ 방식을 통해 9번의 공격을 진행했으며, 마지막 공격에서 네트워크 이상을 감지한 EOSCast 측이 ‘보상풀’에 남아있던 8,000 EOS를 즉시 회수한 것으로 나타났다.”고 하였습니다. 해커가 네트워크 공격을 통해 편취한 EOS는 현재까지 총 72,912 개로 확인됐다는 게 펙쉴드 측의 설명입니다.

현재 EOSCast는 댑 출시 10시간 만에 운영을 잠정 중단 하였습니다. 이와 관련해 또 다른 블록체인 전문 보안업체 슬로우미스트(SlowMist)에 팩트 체크를 요청한 결과, “오늘 EOSCast에 공격이 가해졌으며, 일부 자산이 유실됐다”며 “단 새로운 허점이 아닌 지난 9월 EOS 기반 게임 댑 EOSBet에서 발생한 스마트 컨트랙트 결함과 같은 원인에서 기인한 것”이라는 답변이 돌아왔습니다.

출처 : https://kr.coinness.com/news/143074

[“Fake EOS 공격”]

“Fake EOS 공격”은 EOS 해킹사건에서 여러차례 사용된 해킹 수단입니다. “Fake EOS 공격”은 EOS 생태계에서 토큰을 발행할 때 이름을 마음대로 정할 수 있는 기능을 이용한 것입니다.

해커들은 토큰을 발행할 때 토큰의 이름을 ‘EOS’로 발행한 후에 많은 양의 토큰을 컨트랙트로 전송하게 됩니다.이 토큰을 전송받은 컨트랙트에서는 토큰의 발행자를 확인하지 않아 이 가짜 EOS 토큰을 진짜 EOS로 인식하게 되고, 컨트랙트에서 ‘transfer’ 기능을 호출하여 게임의 규칙에 따라 해커에게 보상을 하게 됩니다.

참고 : https://steemit.com/dexeos/@dexeosio/9-14-eos

[“변형 Fake EOS 공격”이란?]

“refundwallet” 또한 EOSCast 컨트랙트에 위와 같은 “Fake EOS 공격”을 진행했습니다. 처음에 트랜잭션당 100개의 토큰을 게임 컨트랙트인 “eoscastdmgb1” 컨트랙트에 전송했으나, EOSCast 컨트랙트는 EOS System Contract인 EOSIO.TOKEN 컨트랙트에 제한이 있어 공격이 실패했습니다.

“Fake EOS 공격”이 실패하자 해커들은 공격방법을 변형시켰습니다. 바로 게임 컨트랙트의 “전송” 함수를 직접 호출하는 방법입니다. “eoscastdmgb1” 컨트랙트는 전송 함수의 호출자를 검사하지 않기 때문에 전송 통지를 보낸 대상에 대해 확인 절차를 거치지 않고 전송을 진행하였습니다.

<EOSCAST 해킹 트랜잭션>

위와 같이 “refundwallet” 계정에서 전송 함수를 호출했으나 “eoscastdmgb1” 컨트랙트에서 호출자를 확인하지 않으므로 함수를 호출한 “refundwallet” 계정으로 EOS 토큰을 전송하게 되는 것입니다. 해커는 가짜 매개변수를 이용하여 전송 함수 호출을 통해 게임 컨트랙트에 EOS 전송통지를 보내고 실제 EOS 토큰의 전송 없이 보상을 받게 됩니다. 이 과정에서 매개변수의 암호화를 통해 EOS 브라우저의 추적을 방지했습니다.

<해킹 모식도>

Peckshield의 제안한 해결방법 : 함수 호출을 수신 한 후 먼저 EOS 전송 컨트랙트가 “eosio.token”인지 확인하고 피호출자가 “전송”함수인지 확인하십시오.

function: if((code == N(eosio.token) && action == N(transfer)) || ((code == self && action != N(transfer))

원문 : https://blog.peckshield.com/2018/11/02/eos/

[ECAF, EOSCAST 해커 계정 공개, 계정 관계도 분석]

IMEOS에 따르면, 오늘(31일) EOS 기반 게임 댑(EOSCast)이 해커의 공격에 의해 7만 여 EOS를 도난당한 후, EOS 커뮤니티 중재 기구인 ECAF가 이번 사건과 관계된 모든 해커 의심 계정를 블랙리스트에 올렸습니다. ECAF에 의해 블랙리스트에 올라간 계정은 다음과 같습니다. ‘refundwallet’, ‘jhonnywalker’, ‘alibabaioeos’, ‘whitegroupes’, ‘24cryptoshop’, ‘minedtradeos’

<EOSCast 해킹 사건 관계도>

1.검은색 화살표는 전송 흐름을 나타낸다.

2.화살표의 숫자는 전송된 EOS 양이다.

3.비어있는 화살표는 생성된 계정간의 관계를 나타낸다.

4.검은색 계정명은 블랙리스트에 오른 계정명이다.

5.다른 색의 계정명은 다른 그룹임을 나타낸다.

출처 : https://steemit.com/eos/@eospark.com/eoscast-been-attacked-where-have-70-000-eos-flowed

[EOSCast 해킹 사건 이후…]

지난 10월 31일에 발생한 EOSCast 해킹은 이전에 발생한 EOSBet 2차 해킹에서의 해킹 수단과 유사한 방법을 통해 해킹을 당했습니다. EOSCast 컨트랙트 또한 전송 함수 호출자에 대한 확인 과정을 진행하지 않아 해커의 함수 호출에 응답하여 해킹을 당하게 되었습니다. ECAF에서는 위에서 언급한 해킹 사건에 연관된 6개의 계정들을 동결 시켰습니다.

하지만 EOS BP EOSLaoMao는 “EOSCast는 이번 해킹 사건의 피해에 대한 보상을 받지 못할 것이라고 생각한다.”고 하였습니다. 보상을 받지 못할 것이라고 생각하는 이유에 대해서는 “ EOSCast는 코드 작성시에 EOS 헌법을 지키지 않았다. EOSCast는 본인들이 작성한 소스코드에 대한 공개를 하지 않았을 뿐더러, 리카르디안 컨트랙트 또한 작성하지 않았기 때문에 보상을 받지 못할 것이다.”라고 말했습니다.

또한 EOSLaoMao는 “ EOS 헌법을 지키지 않는 것은 장기적으로 볼 때 EOS 생태계를 긍정적인 방향으로 이끌어가지는 않을 것이다. 향후 이러한 일이 다시 발생할 경우 EOS 헌법을 준수 하지 않았다면 우리 또한 헌법에 따른 집행을 하지 않을 것이다”라고 하였습니다.

원문 : https://steemit.com/eos/@eoslaomao/statement-regarding-to-the-eos-cast-hack-from-eoslaomao

이번 포스팅은 여기서 마치겠습니다. 긴글 읽어주셔서 감사합니다! EOSCast 해킹 사건 외에 다른 EOS DApp 해킹 사건에 대해 자세히 알고 싶은 분은 아래의 링크를 통해 이전 저희 포스팅을 참고하시면 됩니다!

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

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

--

--