DAO 해킹: 이더리움 클래식의 역사
2016년 DAO 해킹 사건의 전말과 커뮤니티의 대응이 어떻게 이더리움 클래식이라는 별도의 체인 생성으로 이어졌는지에 대한 이야기입니다.
Date published: 2021년 12월 15일
Junion이 설명하는 2016년 DAO 해킹 사건은 암호화폐 역사상 가장 큰 디지털 탈취 사건 중 하나이며, 블록체인을 포크하기로 한 이더리움 커뮤니티의 논란이 된 결정이 어떻게 이더리움 클래식의 탄생으로 이어졌는지에 대한 이야기입니다.
이 대본은 Junion이 게시한 원본 동영상 대본 (opens in a new tab)의 접근성 향상 버전입니다. 가독성을 위해 약간의 편집을 거쳤습니다.
발견 (0:00)
2016년 6월 13일 월요일입니다. 코넬 대학교의 한 컴퓨터 과학 교수가 암호화폐 분야에서 가장 야심 찬 프로젝트 중 하나인 DAO의 코드를 검토하고 있습니다. 그는 프로젝트 전체를 위험에 빠뜨릴 수 있는 특정 결함이 있다고 믿었기 때문에 몇 달 동안 프로젝트를 보류해야 한다고 주장해 왔습니다. 하지만 오늘 그는 심각한 취약점, 즉 666번째 줄에서 버그를 발견합니다.
그는 이 버그로 인해 해커가 ATM에서 무제한으로 돈을 인출하는 것과 같은 일을 벌일 수 있다고 우려합니다. 공격자의 계정에 10달러밖에 없더라도 모든 돈이 사라질 때까지 계속해서 인출할 수 있게 되는 것입니다. DAO에는 2억 5천만 달러가 투자되어 있었고, 모든 자금이 위험에 처했습니다.
DAO의 배후에 있는 회사인 Slock.it은 잠재적인 익스플로잇(취약점 공격)을 인정하지만, 실제 공격은 불가능하므로 모든 자금은 여전히 안전하다고 선언합니다. 그들은 두 줄의 코드를 교체하여 GitHub에 커밋하며, 이 수정 사항은 DAO 프레임워크 버전 1.1의 일부로 포함될 예정이었습니다.
하지만 팀이 승리를 장담하고 있을 때, 한 해커가 비밀리에 그들의 뒤를 쫓으며 바로 이 버그를 이용하는 익스플로잇을 개발하고 있었습니다. 4일 후인 금요일, DAO는 5,500만 달러에 달하는 금액을 해킹당했습니다.
8,100만 달러 규모의 SWIFT 해킹이 중앙화된 은행 산업의 허점을 알리고, 워너크라이(WannaCry) 랜섬웨어 공격이 컴퓨터 운영 체제의 치명적인 취약점을 드러낸 것처럼, DAO 해킹은 코드가 모든 것을 지배하는 세상에서 스마트 컨트랙트 보안의 초기 취약성을 노출시켰습니다. 이더리움 커뮤니티는 블록체인의 통제권을 되찾기 위해 고군분투하며 큰 충격에 빠졌습니다.
이것은 역사상 가장 큰 디지털 탈취 사건 중 하나이자, 이 사건이 아예 일어나지 않은 것처럼 역사를 다시 쓰려 했던 대담한 시도에 대한 이야기입니다.
DAO란 무엇이었을까요? (2:00)
탈중앙화 자율 조직(decentralized autonomous organization, DAO)의 등장입니다. 이 아이디어는 크라우드펀딩에서 영감을 받았습니다. 여러 프로젝트를 위한 여러 개의 펀드 대신 모든 것을 관리하는 단일 펀드를 두는 것이었으며, 이를 위해 DAO보다 더 나은 방법은 없었습니다.
출시 당시 투자자들은 예치한 1 이더당 100개의 DAO 토큰을 받았습니다. 이 토큰은 프로토콜에 대한 거버넌스를 부여하고 DAO에서의 지분을 나타냈습니다. 토큰 보유자는 제안을 제출할 수 있었습니다. 예를 들어, XYZ 회사의 지분 10%를 대가로 100만 달러를 투자하자는 제안을 할 수 있었습니다.
제안이 초기 검증을 통과하면 다른 모든 투자자들의 투표에 부쳐졌습니다. 이 기간 동안 토큰 보유자는 투자가 긍정적인 기대 가치를 창출한다고 믿으면 찬성 투표를, 부정적인 기대 가치를 창출한다고 믿으면 반대 투표를 할 수 있었습니다. 또한 포럼을 사용하여 자신의 의견을 밝히고 다른 사람의 의견을 읽을 수도 있었습니다.
투표 기간이 끝나고 전체 토큰의 20%라는 정족수가 충족되면, DAO는 지정된 이더를 해당 제안을 나타내는 스마트 컨트랙트로 자동 전송했습니다. 이러한 제안에서 생성된 모든 이더는 트레저리로 반환되었습니다. 이는 수익을 창출하도록 설계된 하나의 거대한 탈중앙화된 헤지펀드와 같았습니다. 대중의 지혜가 최고의 투자 기회를 창출하는 데 도움이 될 것이라는 아이디어였습니다.
하지만 소수가 다수에게 억압받지 않도록 보호할 방법이 여전히 필요했습니다. 소수 그룹이 표결로 이길 수 없는 제안에 강력히 반대하는 경우, 반대 투표를 하는 대신 분할(split) 함수를 호출하여 메인 DAO에서 하위 DAO로 이더를 이동시켜 본질적으로 DAO를 두 개로 나눌 수 있었습니다. 이 분할 함수는 나중에 매우 중요해집니다.
크라우드펀드 (4:01)
DAO는 당시 1억 5천만 달러의 가치에 달하는 1,270만 이더를 모금한 사상 최대 규모의 크라우드펀딩 프로젝트였습니다. 이 프로젝트는 이더리움의 초기 시대에 진행되었으며, 엄청난 과대광고와 투자자들의 포모(FOMO) 현상을 불러일으켰습니다.
이전에 이더리움 프로젝트들은 주로 임의의 개념 증명(PoC) 수준이었지만, 이것은 엄청난 잠재력을 가진 완전히 작동하는 프로젝트였습니다. 전 세계 수백만 명의 채굴자들에 의해 보호되어 어떠한 해킹으로부터도 완전히 안전했으며, 탈중앙화된 구조를 가졌습니다. 프로젝트 전체가 이더리움 상의 일련의 스마트 컨트랙트로 구성되어 있었습니다.
이것은 세계에서 가장 안전한 컴퓨터에 호스팅된 불변의 코드였으며, 완전히 탈중앙화된 자율 조직이라는 DAO의 핵심 속성을 보장했습니다. 4월 30일에 컨트랙트가 배포된 후에는 Slock.it을 포함한 그 어떤 단일 주체도 프로토콜을 변경하거나 그 존재를 중단시킬 수 없었습니다. 그 코드는 다양한 이더리움 개발자들에 의해 수없이 감사를 받았고 누구나 검토할 수 있도록 공개되어 있었습니다.
해킹 (5:02)
"외롭다, 너무 외롭다(Lonely, so lonely)" — DAO 제안 #59의 이름입니다. 평범한 분할 제안에 불과하지만, 사실 여기서부터 해킹이 시작됩니다. 해커가 제안을 제출한 후, 누구나 자유롭게 참여할 수 있는 표준 7일간의 토론 기간이 주어집니다. 하지만 아무도 이 분할에 참여하지 않습니다.
누군가 혼자서 분할을 호출하여 하위 DAO를 만든 다음, 모든 이더를 자신의 지갑으로 다시 보내는 제안을 만드는 것은 표준 절차입니다. 이를 통해 사용자는 DAO 토큰으로 뒷받침되는 자신의 돈을 되찾을 수 있습니다. 이제 7일이 지났고, 해커는 분할 함수를 호출할 수 있게 되었습니다. 아무도 의심하지 않습니다.
하지만 분할 함수가 호출되자 커뮤니티는 놀라운 사실을 깨닫게 됩니다. 시간당 800만 달러의 속도로 DAO에서 이더가 빠져나가고 있었던 것입니다. 커뮤니티는 무슨 일이 일어나고 있는지 파악하기 위해 허둥지둥 움직입니다. 공격자가 분할 함수를 재귀적으로 수백 번씩 계속해서 호출하고 있는 것으로 보였습니다.
4일 전에 있었던 버그 수정을 기억하시나요? 배포된 후에는 스마트 컨트랙트의 코드를 수정할 방법이 없다는 것이 안타까운 점입니다. 따라서 이 수정 사항은 제작 중이던 완전히 다른 DAO인 The DAO 1.1의 일부로 GitHub에만 존재했습니다. 이 작은 수정이 모든 것을 막을 수 있었습니다. 실제 지급이 이루어지기 전에 잔액이 업데이트되도록 두 줄의 코드를 바꾸는 것뿐이었습니다.
하지만 이 수정 사항이 없었기 때문에, 컨트랙트가 잔액을 업데이트하기 전에 누구나 반복적으로 함수를 호출하여 이더를 인출할 수 있었습니다. 이는 돈을 주기 전까지는 잔액을 변경하지 않는 ATM과 같습니다. "10달러 인출할 수 있나요? 잠깐, 그 전에 10달러 인출할 수 있나요? 잠깐, 그 전에..."
로빈 후드 그룹 (6:55)
DAO 토큰 보유자들은 자신들의 투자금이 메인 DAO에서 다크 DAO(dark DAO)라고도 불리는 하위 DAO로 서서히 빠져나가는 것을 지켜보았습니다. 게다가 이 소식에 이더리움 가격은 20달러에서 15달러로 폭락했습니다. 무언가 조치를 취해야 했고, 유일한 방법은 해커보다 먼저 남은 자금을 빼내는 것뿐이었습니다. 그렇게 자금을 비우기 위한 경주가 시작되었습니다.
지구 반대편, 리우데자네이루 코파카바나 지역의 아파트에서 알렉스 반 데 산데(Alex Van de Sande)는 스카이프 메시지로 전화기가 터질 듯이 울리는 소리에 잠에서 깹니다. 그는 아내를 돌아보며 말합니다. "내가 해킹 불가능한 엄청난 돈더미에 대해 이야기했던 거 기억나? 해킹당했어."
알렉스는 신원이 밝혀지지 않은 다른 개발자들과 연락을 취했고, 그들은 남은 자금을 빼내어 정당한 소유자에게 돌려줄 화이트햇 해커 그룹인 로빈 후드(Robin Hood)를 결성했습니다. 하지만 새로운 분할을 제안할 시간이 없었습니다. 7일간의 투표 기간이 필요했기 때문입니다.
대신 그들은 몇 시간 후에 종료될 예정이었던 제안 #71에 시선을 돌렸습니다. 그들은 그 분할에 참여하여 동일한 해킹 방법을 사용해 남은 모든 자금을 이 하위 DAO로 빼돌릴 계획이었습니다. 공격이 시작된 지 6시간이 지났고, 도둑은 DAO 이더의 30%를 훔치는 데 성공했습니다. 하지만 알 수 없는 이유로 공격이 작동을 멈췄습니다. 트랜잭션이 실패했고 모든 것이 끝났습니다.
한편, 알렉스는 남은 70%의 자금을 확보하기 위해 화이트햇 공격을 시작할 준비를 하고 있었습니다. 하지만 갑자기 인터넷 연결이 끊어졌습니다. 30분밖에 남지 않은 상황에서 그는 브라질의 인터넷 서비스 제공업체인 NET에 미친 듯이 전화를 걸었지만, "고객님 동네에 인터넷 문제가 있는 것으로 확인됩니다"라는 기계적인 음성 답변만 돌아왔습니다. 분할 제안이 종료되었고, 그는 로빈 후드 공격을 실행할 기회를 놓치고 말았습니다.
다음 날 아침, 알렉스는 다른 분할 제안에 침투하기 위해 그룹을 다시 소집하려 했지만 다른 사람들은 바빴습니다. "우리는 역사상 최악의 해커가 된 기분이었습니다. 인터넷 장애와 가족 행사 때문에 실패했으니까요."
자금 비우기 경주 (9:10)
첫 번째 공격이 있은 지 4일 후, DAO는 다시 공격을 받았습니다. 라운드당 몇 이더씩 천천히 빠져나가고 있었지만, 이미 수천 달러가 모인 상태였습니다. 공격자가 상황을 테스트해 보는 것 같았습니다. 이 시점에서 로빈 후드는 무언가 조치를 취해야 했습니다.
그들은 제안의 큐레이터를 확인했고 곧 종료될 예정이었기 때문에 분할 #78에 침투하기로 결정했습니다. 그들은 기꺼이 DAO 토큰을 기부할 의향이 있는 고래들과 연락하여 600만 개의 토큰을 확보할 수 있었습니다. 로빈 컨트랙트가 더 많은 토큰을 가질수록 이더를 더 빨리 빼낼 수 있었습니다. 공격자는 속도를 높였고 다른 공격자들도 합류했습니다. 하지만 기부 덕분에 로빈 후드는 그들을 앞지를 수 있었습니다. 이를 통해 그들은 DAO의 55%에 해당하는 720만 이더를 확보할 수 있었습니다.
포크 (10:08)
이제 메인 DAO는 텅 비었고 모든 자금은 여러 하위 DAO에 분배되었습니다. 그중 두 개의 주요 DAO는 화이트햇 DAO와 다크 DAO였습니다. 하지만 모든 돈은 시간 잠금(time-lock) 상태였습니다. 27일의 대기 기간이 끝날 때까지는 하위 DAO에서 어떤 제안도 제출할 수 없었습니다. 그리고 그 이후에도 외부 주소로 자금을 보내려면 제안을 제출하고 2주를 기다려야 했습니다. 본질적으로 해커가 이더리움 총 공급량의 5%에 해당하는 금액을 현금화할 수 있을 때까지는 아직 41일이 남아 있었습니다.
하지만 해커는 결코 그 이더리움을 만질 수 없었습니다. 다음에 일어난 일은 블록체 역사상 가장 대담하고 논란이 많은 사건 중 하나입니다. 커뮤니티는 해커가 승리하도록 내버려 두지 않기로 결정했습니다. 그들은 해킹과 관련된 모든 트랜잭션을 취소하고 모든 사람이 돈을 돌려받을 수 있도록 역사를 다시 쓰기를 원했습니다. 그들은 이더리움을 포크하기로 결정했습니다.
블록체인은 블록이 채굴될 때마다 계속 늘어나는 트랜잭션 목록과 같습니다. 모든 트랜잭션은 블록체인에 영원히 새겨집니다. 하지만 50% 이상의 채굴자가 담합하면 블록체인을 거짓으로 변경하여 원하는 대로 역사를 다시 쓸 수 있습니다. 보통 이를 51% 공격이라고 부릅니다. 하지만 이 포크에는 악의적인 의도가 전혀 없었습니다. 커뮤니티는 단지 도난당한 돈을 되찾으려 했을 뿐입니다.
코드가 법이다 (11:48)
그럼에도 불구하고 모든 사람이 제안된 포크에 찬성한 것은 아니었습니다. 그들은 코드가 법이라고 주장했습니다. 이 관점에서 볼 때, 공격자는 해커라기보다는 컨트랙트의 조건을 주의 깊게 읽은 똑똑한 변호사에 가까웠습니다. 따라서 실제로 도난당한 자금은 없으며, 그들은 다크 DAO의 이더에 대한 정당한 권리를 가져야 한다는 것이었습니다.
이더리움 자체가 해킹당한 적은 없으며, 단지 잘못 작성된 스마트 컨트랙트가 악용되었을 뿐이라는 점에 유의하는 것이 중요합니다. 이 둘은 서로 다른 문제입니다. 또한 그들은 블록체인에서 일어나는 일은 불변이며 상황에 관계없이 절대 조작되어서는 안 된다고 믿었습니다.
첫 번째 공격이 있은 지 하루 뒤, 공격자는 자신의 개인 키로 서명한 공개 서한을 DAO의 슬랙(Slack) 그룹 채팅에 보냈습니다.
"DAO와 이더리움 커뮤니티에게: 저는 The DAO의 코드를 주의 깊게 검토하여 300만 이더를 정당하게 청구했으며, 이 보상에 대해 DAO에 감사를 표하고 싶습니다. 저는 이 의도적인 기능의 사용을 '절도'로 규정하는 사람들에게 실망했습니다. 저는 스마트 컨트랙트 조건에 따라 명시적으로 코딩된 이 기능을 사용하고 있을 뿐입니다. 소프트 포크나 하드 포크는 저의 합법적이고 정당한 이더를 압류하는 것과 같습니다. 그러한 포크는 이더리움뿐만 아니라 스마트 컨트랙트 및 블록체인 기술 분야에 대한 모든 신뢰를 영구적이고 돌이킬 수 없게 파괴할 것입니다. 착각하지 마십시오. 소프트 포크든 하드 포크든 어떠한 포크도 이더리움에 더 큰 피해를 입히고 그 명성과 매력을 파괴할 것입니다."
추가 조사를 통해 사람들은 서명이 유효하지 않다는 것을 깨달았고, 따라서 이 편지는 공격자라고 주장하는 누군가가 작성한 것에 불과했습니다.
반면 찬성론자들은 "코드가 법이다"라는 말은 너무 극단적인 주장이며, 사회적 합의를 통해 인간이 최종 결정권을 가져야 한다고 주장했습니다. 해커가 익스플로잇으로 이익을 얻도록 내버려 두어서는 안 되며, 이는 윤리적으로 잘못되었고 불법일 가능성이 높기 때문입니다. 하지만 가장 중요한 것은 DAO가 실패하기에는 너무 컸다는 점입니다. DAO는 이더 총 공급량의 약 15%를 보유하고 있었습니다.
이더리움 클래식 (14:34)
2008년 금융 위기를 연상시키는 사건 속에서 이더리움 개발자들은 DAO를 구제했습니다. 이더리움의 창시자이자 수석 개발자인 비탈릭 부테린(Vitalik Buterin)은 포크를 추진하는 것에 대해 당당했습니다. 그는 나중에 한 인터뷰에서 "일부 비트코인 사용자들은 하드 포크가 어떤 면에서는 그들의 가장 근본적인 가치를 위반하는 것으로 봅니다. 개인적으로 저는 그러한 근본적인 가치를 그렇게 극단으로 밀어붙이는 것은 어리석다고 생각합니다."라고 말했습니다.
이러한 견해가 이더리움 커뮤니티의 다수를 지배했습니다. 1 이더가 1표와 같은 논란의 여지가 있는 커뮤니티 투표에서 87%가 포크를 지지하는 것으로 나타났습니다. 그래서 1,920,000번째 블록에서 전 세계의 컴퓨터 노드들은 소프트웨어를 업데이트하고 포크를 수용했습니다. DAO와 하위 DAO의 모든 이더는 환불 컨트랙트로 이동되었습니다.
하지만 여기서 끝이 아닙니다. DAO 해킹이 발생했던 원래의 이더리움 블록체인은 계속 이어졌습니다. 사실, 그것은 성장하고 있었습니다. 포크에 반대하는 채굴자들은 계속해서 블록을 채굴했고 트랜잭션도 여전히 이루어지고 있었습니다. 다음 날, 폴로닉스(Poloniex)는 이 코인을 상장했고 개당 2달러에 거래되기 시작했습니다. 이 체인은 변경되지 않은 원래의 블록체인인 이더리움 클래식으로 알려지게 되었습니다.
포크 이전에 이더를 보유하고 있었다면, 이제 1 이더리움과 1 이더리움 클래식을 갖게 됩니다. DAO에 1 이더를 보유하고 있었다면, 환불 컨트랙트에서 1 이더리움을 인출할 수 있게 됩니다. 그리고 만약 당신이 DAO를 해킹했다면, 이더리움 클래식으로 약 700만 달러라는 상당한 재산을 모았을 것입니다.
DAO의 유산 (16:14)
초기에 이더리움 클래식은 구제 금융에 동의하지 않는 블록체인 근본주의자들의 강력한 커뮤니티를 바탕으로 대안으로서 추진력을 얻었습니다. 하지만 그 이후로 이더리움 클래식은 관심을 끄는 데 실패했고, 실용성이 거의 없는 아이디어로만 존재하고 있습니다. 이더리움에는 수천 개의 프로토콜이 있는 반면, 이더리움 클래식에는 몇 가지 기본적인 프로토콜만 있습니다. 포크가 승리했다는 것은 분명합니다.
두 달 후, 로빈 후드는 가격을 폭락시키기 위해 290만 개의 이더리움 클래식을 폴로닉스로 이체하고 모두 이더리움으로 매각했습니다. 14%는 성공적으로 변환되었지만, 86%는 폴로닉스에 의해 동결되어 그룹에 반환되었습니다. 로빈 후드는 DAO 해킹으로 피해를 입은 사용자를 위해 이더리움 클래식 네트워크에 환불 컨트랙트를 설정했습니다.
해커의 경우, 오늘날 1억 5천만 달러의 가치에 달하는 360만 개의 이더리움 클래식을 챙겨 떠났습니다. 하지만 포크가 없었다면 그 360만 이더리움은 오늘날 70억 달러 이상의 가치가 있었을 것입니다.
DAO가 남긴 지속적인 영향 (17:26)
혼동을 피하기 위해 DAO는 이제 흔히 제네시스 DAO(Genesis DAO)라고 불린다는 점에 유의하는 것이 중요합니다. 왜냐하면 그것은 최초의 DAO였지만 결코 마지막은 아니었기 때문입니다. 초기의 좌절에도 불구하고 DAO는 점점 더 인기를 얻고 있습니다. 메이커다오(MakerDAO)는 스테이블코인 DAI를 관리하며, UNI 토큰을 사용하는 유니스왑과 같은 탈중앙화 금융(DeFi) 프로토콜은 일반적으로 거버넌스 DAO를 가지고 있습니다. 이러한 DAO들은 모두 이전 프로젝트의 경험을 바탕으로 구축되어 훨씬 더 다재다능하고 성공적인 조직을 만들었습니다.
하지만 제네시스 DAO는 그 종류 중 최초였으며, 정점일 때 2억 5천만 달러, 즉 이더리움 총 공급량의 15%를 통제하는 값비싼 실험으로 만들어졌습니다. 수석 개발자인 크리스토프 옌츠(Christoph Jentzsch)는 500만 달러만 모금될 것으로 예상했으며, 나중에 한도를 정하지 않은 것을 후회한다고 말했습니다. 그렇게 큰 실험을 하기에는 너무 일렀고, 실패하기에는 확실히 너무 컸습니다.
스마트 컨트랙트를 만드는 것은 자율주행차를 개발하는 것과 같습니다. 사고를 피하기 위해 광범위한 테스트가 필요한 큰 책임이 따릅니다. 이러한 새로운 주의에도 불구하고, DeFi 프로토콜은 여전히 5천만 달러 이상 해킹당하기도 하며, 일부는 전문 감사 회사의 감사를 받은 후에도 해킹을 당합니다. 하지만 DAO 해킹 이후 더 이상의 구제 금융은 없었습니다. 이더리움 커뮤니티는 이제 더 강력해졌으며, 차세대 디지털 애플리케이션을 구축하는 훨씬 더 크고 야심 찬 프로젝트로 나아갈 준비가 되었습니다.