The DAO 해킹 그리고 사망
The DAO는 전 세계에서 약 2천억원 가량(투자당시 가치 기준)의 투자금을 성공적으로 모집한 탈중앙화자율조직이며, 크라우드 펀딩 역사상 가장 큰 금액을 모은 것으로 기록되었다.
다오를 간단히 설명하자면, 일단의 개발자들이 이더리움이라는 블록체인 환경 위에서 스마트 컨트랙트(Smart Contract) 코드를 짰고, 이를 통해 일종의 조직을 만들어냈다고 이해할 수 있다. 이 조직의 경영에 참여할 수 있는 권한을 주는 토큰(DAO Token)을 발행해서 크라우드 세일로 판매하였고, 이를 통해 조직운영에 필요한 자금(Ether)을 마련하였다. 투자가 종료되면, 다오가 작동을 시작하고 참여자들은 다오에 몰린 자금을 어떤 식으로 사용할지 제안을 하고 투표에 붙일 수 있다. 결국 이 조직은 특정한 운영주체가 없고, 이곳에 투자를 한 개인들이 투표를 통해 운영을 해나가는 방식을 취한다.
다오에서 사용할 수 있는 기능 중 하나는, 투자자들이 크라우드 세일에 참여해서 다오 토큰 구매를 위해 지불했던 이더(Ether)를 환불받는 기능이었다. 이것은 컴퓨터 코딩의 방식으로 작동(*다오의 모든 기능은 결국 코드로 작동)하는데, 이러한 코딩의 논리 자체에 결함이 있었던 것이다. 해커는 이러한 결함을 찾아내었고, 이더를 환불신청(split)해서 이더를 먼저 받고, 자신의 다오 토큰을 되돌려주기 전에 다시 이더를 환불받는 재귀 call 코드(Recursive calling vulnerability)를 통해 일종의 무한 환불 공격을 만들어낸 것이다. <이곳에 공격 방식이 잘 설명되어 있다.>
해당 공격이 성공적으로 이루어졌고, 2016년 6월 17일 오후 총 243만 이더 이상이 해커가 생성한 차일드 다오 지갑으로 옮겨가게 된다. 당시 가치로 약 750억원 가량이 해킹당한 것인데, 이 사건 직후 단 1시간만에 이더와 다오토큰의 가격은 절반이 되어버린다.
<가격폭락 그래프의 기울기가 당시 상황의 심각성을 잘 설명해준다>
이 사건 이후, 이더리움 EVM과 Mist 등의 지갑에 대한 근본적인 부실이 조명되었고 제대로 DAO를 검증하지 못하고 투자금도 안전하게 보관하지 않은 다오의 개발자들에 대한 책임론과 비난이 폭주하였다.
이 사건으로 DAO프로젝트를 진행한 개발자들 중 한 명인 Slock.it의 공동설립자인 크리스토프가 공식 사과문을 쓴다. 또한 다오 1.0 프로젝트는 사실상 해체되는 것으로 보인다. 크리스토프는 사태진정을 위한 몇 가지 방안을 제안한다.
이러한 해체를 기정사실화 하고, 다오프로젝트에 막대한 이더를 투자한 사람들을 어떻게 보상해줄 수 있을 것인가에 대한 여러 가지 방안이 논의되고 있다.
기본적으로는 4가지로 압축해볼 수 있다.
1. 소프트포크(Soft fork)로 해커의 차일드 다오 계정을 동결시켜서 인출을 막는다.
이 경우, 해커가 생태계 내 전체 이더의 15%가량을 차지하는 이더를 인출해서 사용하지 못하게 막게 된다. 그러나 이 이더를 원주인에게는 돌려줄 수 없기 때문에 원주인들은 일부의 손해를 감수하여야 한다. - 현재 이 방안은 소프트포크시 발생하는 Attack vector때문에 사실상 불가능해졌다.
2. 하드포크(Hard fork)로 Rollback한다.
해커의 계정에서 다시 이더를 빼오는 것이다. 그러나 제3자가 소유자의 동의 없이 강제로 환수를 집행하는 것은 결국 블록체인의 탄생기조인 탈중앙화에서는 일어날 수 없는 일이다. 따라서 이러한 부분에 대한 뜨거운 토론들이 진행되고 있다.
3. 아무것도 하지 않는다.
해커의 공격은 다오의 기능을 이용한 공격이었고, 이러한 공격을 받을 때마다 강제로 해커의 계정에서 돈을 빼오는 것은 또 다른 제3의 권력을 창출하는 선례를 남길 수 있으므로, 블록체인을 p2p가 아니라 제3자의 권력 아래 놓이게 만드는 일이 생길 수 있다. 따라서 자체적으로 블록체인 외부에서 해커를 추적하거나 해커와 접촉을 해서 일부를 돌려받는 협상을 타결하는 등의 방법을 생각할 수 있다.
4. 다오 내에서 스스로 해결한다.
이더리움 블록체인에서 해킹이 발생한 것이 아니고, 다오라는 이더리움 어플리케이션에서 일어난 해킹이기 때문에, 다오 내에서 스스로 코드 변경 등의 방법으로 해결책을 모색한다. 이 방법이 현재로써는 가장 좋은 방법이다. 이더리움의 창시자인 비탈릭을 포함한 많은 사람들이 현재 이 방법을 가장 집중적으로 고민하고 있다.
다오 1.0은 너무나 많은 사람들의 희생을 동반한 대중실험이었다. 이러한 일이 다시는 일어나지 않도록 앞으로 보안 부면에서 많은 전문가들의 영입과 관리가 필요할 것이다. 사실상 이더리움 재단의 개발진의 전문성에 의문을 가지는 시선이 적지 않다. 애초에 이더리움 자체는 오픈소스 형식으로 상대적으로 창업이나 유수의 기업에 스카우트되지 못한 2군들이 주체가 되어 참여를 한 것으로 알려져 있다. 물론 일부 뛰어난 실력자들이 있긴 했지만, 금융을 다루는 상용프로그램에서 필수적인 '보안전문가'가 전무했음을 인정하지 않을 수 없다. 앞으로도 금융을 다루는 시스템은 혁신보다는 보안에 더욱 중점을 두고 보수적으로 접근해야 많은 사람들의 참여를 이루어낼 수 있을 것이다.
벌써부터 다오 2.0이 곳곳에서 언급되고 있다. 다오 2.0은 다오 자체를 다시 코딩하는 것뿐 아니라, 이더리움의 코드베이스나 사용언어인 Solidity자체를 그 구조부터 안정성을 확보하는 방식으로 코딩하는 것을 의미한다. 사실상 이더리움의 탄생모토인 '튜링완전성(Turing Completeness)'을 유지하면서 동시에 보안성을 확보하는 것은 대단히 어려운 일이다. 튜링완전언어 자체가 보안적인 불완전성을 지니고 있기 때문이다. 그러한 의미에서 이더리움 진영이 굳이 튜링완전성을 고수해야 하는지, 반드시 고수해야 한다면 굳이 EVM을 사용해야 될 이유가 있는지에 대한 근본적인 물음이 필요하다. 이미 검증된 언어들 그리고 관련 전문가가 널리 포진해있는 JVM과 같은 툴을 이용하는 것도 고려해볼 수 있을 것이다.
이더리움 설립인 중 한 명인 Anthony Di Iorio도 마찬가지로 DAPP, 컨트랙트, DAO 등과 같은 제3자 내용보다, 이더리움 자체의 본질과 기능에 대해 집중해보자는 제안을 한다. 이에 많은 커뮤니티원들이 호응으로 화답하고 있다.
앞으로도 다양한 형태의 해킹은 계속해서 일어날 것이다. 이번 사건을 계기로 앞으로 탈중앙화계와 블록체인 산업 전반에 걸쳐 근본성에 관련된 논의와 발전적인 대안들이 다루어져야 할 것이다.