다오(DAO) 해킹 사건이란?
다오(DAO) 해킹 사건은 이더리움(ethereum) 블록체인 네트워크 상에서 발생한 사건으로 2016년 6월 17일에 일어났다. 이 사건에서는 약 360만 이더리움이 탈취되어 이더리움 생태계에 큰 충격을 주었다. 다오는 탈중앙화된 자율 조직(decentralized autonomous organization)으로 이더리움 블록체인 상에서 운영되는 스마트 컨트랙트이다. 이 스마트 컨트랙트의 공개된 소스 코드를 보고 해커는 이 코드 상의 취약점을 이용하여 다오에서 보유하고 있던 이더리움을 탈취하였다.
관련 기사
다오(DAO) 해킹 사건의 재발 방지를 위해서 - 블록체인투데이
[블록체인투데이 안혜정 기자] 해커들이 탈중앙화된 자율조직(DAO)에서 시스템 버그를 발견하고 시스템에서 4,100만 달러 가치의 ETH를 빼내간 적이 있다. 이 사건은 암호화폐 및 블록체인 산업 내
www.blockchaintoday.co.kr
'더 다오(The DAO)' 해킹, 6년 만에 범인 밝혀지나 By TokenPost
'더 다오(The DAO)' 해킹, 6년 만에 범인 밝혀지나
kr.investing.com
어떤 취약점이 있었을까?
해당 소스 코드 분석을 위해선 DAO의 스마트 컨트랙트 소스 코드를 살펴보아야 하지만 이는 상당히 방대한 양의 코드로 이루어져 있으며 DAO 해킹 사건 이후 많은 수정이 이루어졌기 때문에 이 사건 당시의 소스 코드와는 차이가 있을 수 있다.
취약점이 존재했던 해당 스마트 컨트랙트의 소스 코드를 간단히 살펴보면 splitDAO() 함수와 withdrawDAO() 함수에 취약점이 존재했음을 알 수 있다. splitDAO() 함수는 DAO의 토큰을 분리할 때 사용되는 함수이며 withdrawDAO() 함수는 DAO에서 이더리움을 인출할 때 사용되는 함수이다. 이 취약점은 splitDAO() 함수에서 호출된 DAO.transfer() 함수에서 발생했는데 이 함수는 msg.sender가 DAO의 토큰을 전송할 수 있는지를 확인하는 로직을 갖고 있습니다. 하지만 이 로직에서는 msg.sender를 재귀적으로 호출할 수 있기 때문에 해커는 DAO의 토큰을 무한정으로 분할하고 이를 인출할 수 있는 기회를 얻었다.
이더리움 클래식(Ethereum Classic)의 탄생
이더리움 클래식(Ethereum Classic)은 이더리움 블록체인 분기(branch) 중 하나이다. DAO 해킹 사건 이후 이더리움 개발자들의 의견 차이로 인해 생겨났다. DAO 해킹 사건 이후 이더리움 개발자들은 이전에 발견되지 않았던 취약점을 수정하기 위해 하드포크(hard fork)를 발표하였다. 하드포크란 블록체인 상에서 이전 버전의 노드와 호환되지 않는 새로운 노드 버전을 배포하는 것을 말한다. 이를 통해 DAO 해킹 사건 이후에 DAO에서 탈취된 이더리움을 회수하기 위한 대책이 이루어졌다. 하지만 일부 이더리움 사용자들은 이러한 하드포크를 거부하고 이전 버전의 블록체인을 계속 사용하고자 했다. 이들은 하드포크를 이전 버전과 호환되지 않는 변경으로 보았으며 블록체인의 탈중앙성이 규제되는 것이라고 주장했다. 그 결과, 하드포크 이전의 이더리움 블록체인을 계속해서 사용하기로 결정한 사용자들이 이더리움 클래식을 창시하였다. 이더리움 클래식은 하드포크 이전의 이더리움 블록체인에서 파생된 블록체인이기 때문에, 블록체인 상의 모든 거래 기록과 계약, 그리고 DAO 해킹 사건 이전의 이더리움 생태계에서 사용되던 모든 스마트 컨트랙트를 유지하고 있다.
이더리움의 모순일까? 철학적인 차이일까?
이더리움 클래식(Ethereum Classic)과 이더리움(Ethereum)은 기술적으로는 같은 블록체인 기술을 사용하고 있지만 철학적인 면에서는 차이가 있다. 이더리움 클래식은 블록체인의 탈중앙성과 무결성을 중요시하며 블록체인의 기본 원칙을 최우선 가치로 여기고 있다. 반면에 이더리움은 블록체인의 확장성과 발전을 중요시하며, 블록체인을 기반으로 한 다양한 분산 응용프로그램(DApp) 개발을 통해 실용적인 가치를 창출하는 것에 집중하고 있다. 이더리움은 블록체인을 기반으로 한 새로운 경제 시스템을 만들어 가는 것을 목표로 하고 있다. 이러한 철학적 차이로 인해 이더리움 클래식과 이더리움은 서로 다른 블록체인 생태계를 형성하고 있다. 이더리움 클래식은 블록체인의 기본 원칙을 중시하는 탈중앙화와 무결성을 중심으로 블록체인을 발전시키는 방식을 선호하고 있다. 이에 반해 이더리움은 블록체인의 확장성과 발전을 위해 다양한 기술적인 개선과 새로운 기능을 개발하는 것을 추구하고 있다. 이러한 모순점은 블록체인 생태계의 발전 방향성과 우선순위에 대한 차이로 이해할 수 있다. 이더리움 클래식 커뮤니티는 블록체인의 기본 원칙과 가치를 최우선으로 삼으며 이를 지키기 위해 블록체인 기술의 발전을 추구한다.
'Blockchain > Ethereum' 카테고리의 다른 글
[이더리움] TypeScript와 OpenZeppelin을 활용하여 나만의 ERC20 이더리움 토큰을 배포해보기 (0) | 2023.02.21 |
---|---|
[이더리움] 오픈제플린 라이브러리 ERC20 토큰 기능 정리 (0) | 2023.02.20 |
[이더리움] 이더리움 레이어 2 솔루션 L2 정리 (0) | 2023.02.14 |
[이더리움] 이더리움 개발자를 위한 도구 목록 (0) | 2023.02.13 |
[이더리움] 이더리움 계정 EOA와 CA의 차이는? (0) | 2023.02.13 |