The DAO 해킹 사건 리서치

Wed, 02 Apr 2025 12:32:15 GMT

**_이동원(Dongwon Lee) | 개발 부서_**

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/201452_nc71q39fXOXVHlpYNw?q=80&s=1280x180&t=outside&f=webp)

> **면책조항** : 본 글은 일반적인 정보 제공을 목적으로 작성되었으며, 법률, 사업, 투자 또는 세금 관련 조언을 제공하지 않습니다. 본 글을 기반으로 투자 결정을 내리거나 이를 회계, 법률, 세무 지침으로 사용해서는 안됩니다. 특정 자산이나 증권에 대한 언급은 정보 제공의 목적일 뿐, 투자에 대한 추천이 아님을 밝힙니다. 본 글에서 표현된 의견은 저자의 개인적인 의견이며, 관련된 기관, 조직 또는 개인의 견해를 반영하지 않을 수 있습니다. 본 글에 반영된 의견은 사전고지 없이 변경될 수 있음을 유의하십시오.

## **_Comment._**

---

- DAO : 이더리움 기반 분산 투자 펀드

- 핵심 기능 : 투표와 포크를 통한 자금 분배 구조

- The DAO : 스마트 록을 기반으로 한 공유경제 시스템을 탈중앙화된 방식으로 구현하고자 했다. 2016년 5월, 약 1억 5천만 달러를 모금하여 세계 최대 크라우드 펀딩 사례 중 하나로 기록

## **_Unit1. 탈중앙화 자율조직(DAO)_**

---

### _Unit1.1. DAO의 개념_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/201722_Hla0hfAWKCfT6b8Unc?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/201739_2AcZ5yaAARYv62T91o?q=80&s=1280x180&t=outside&f=webp)

DAO(Decentralized Autonomous Organization)는 블록체인 기술을 기반으로 구성원 간의 신뢰와 중개자 없이도 조직을 운영할 수 있도록 설계된 탈중앙화된 자율조직이다.

DAO는 사전에 정의된 스마트 컨트랙트 규칙에 따라 자율적으로 운영되며, 이를 통해 투자, 기부, 차입 등의 활동이 가능하다. 이와 같은 DAO의 대표적인 예로는 “The DAO”가 있으며, 이는 DAO라는 조직 형태 중 하나일 뿐이며 전체 개념과 혼동해서는 안 된다.

### _Unit1.2. DAO 관리 모델에 대한 발상 배경_

---

DAO라는 개념은 비트코인이 금융 거래에서 중개인을 제거하며 성공한 이후부터 블록체인 커뮤니티에서 지속적으로 논의되어 왔다.

비트코인의 경우 사전 정의된 규칙, 자율적 기능, 분산 합의 프로토콜을 갖춘 최초의 DAO로 여겨졌고, 이후 이더리움의 스마트 컨트랙트 기능이 대중화되며 DAO의 실현 가능성이 높아졌다.

### _Unit1.3. DAO의 주된 아이디어_

---

DAO는 전통적인 계층 구조 없이도 기능할 수 있는 자율적 조직을 구축하는 것을 목표로 한다. 구성원들은 토큰을 통해 제안 및 투표에 참여하며, 모든 의사결정은 코드화된 스마트 컨트랙트를 통해 처리된다. 이는 조직 내 권력 분산과 투명한 운영을 가능케 한다.

### _Unit1.4. DAO의 역할_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/201927_zh5v0rK3JnZ5xILytp?q=80&s=1280x180&t=outside&f=webp)

DAO 토큰을 받은 사용자들은 자금 활용 및 의결권, 배당권의 역할들을 가진다.

이렇게 역할들을 나누는 이유는 영역별로 세분화하여 분업화를 실현하고 효율을 높이기 위해서이다.

하나의 토큰을 가지고 여러 분야에 적용하기 보다는 하나의 토큰의 역할을 부여하여 효율을 높이는 것이 주된 역할이다.

## **_Unit2. DAO의 작동 방식_**

---

DAO는 사전에 정의된 규칙이 스마트 컨트랙트로 구현되어야 하며, 다음과 같은 과정을 통해 작동한다:

1. **규칙 설정 및 인코딩**: DAO의 운영 규칙은 스마트 컨트랙트 형태로 블록체인에 기록된다.

2. **자금 조달 단계**: 참여자는 토큰을 구매하여 자금을 조달하고, 이 토큰은 향후 투표권으로 사용된다.

3. **자율 운영**: DAO는 개발자나 제3자의 개입 없이 자율적으로 운영되며, 모든 거래 내역은 블록체인에 기록된다.

4. **제안 및 투표 시스템**: 구성원은 제안을 등록하고, 일정 조건을 충족하면 투표를 통해 실행 여부가 결정된다.

5. **투명성과 불변성**: DAO는 오픈소스로 누구나 코드를 확인할 수 있으며, 모든 의사결정이 기록되고 변경 불가능하다.

### _Unit2.1. DAO 내부에서의 투표 기능_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/204314_zrjCJA0DBzPEqW0lxp?q=80&s=1280x180&t=outside&f=webp)

DAO의 특성에 따라 다른 업체에 투자하는 활동을 하는데 이 활동을 할 때 적절한지, 해당 업체의 신원과 소속이 무엇인지를 확인하는 사람이 필요하다. 이를 “큐레이터”라고 부른다.

DAO 내에는 투표 기능이 존재했습니다. 먼저, 계약자의 제안서를 승인하는 용도로 사용이 되고 큐레이터의 변경 여부 투표도 있었다. 큐레이터를 바꿀 것인지, 어떠한 투표결과를 확정할지 여부에 대한 투표 및 DAO 분할 투표를 실행한다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/204403_Vq4wUC3EywCVqlbYQp?q=80&s=1280x180&t=outside&f=webp)

여기서 DAO 분할할 때 원래 있던 DAO 안에 있는 이더를 child DAO (포크된 DAO)로 이동한다. The DAO 해킹 사건에서는 이 과정에서 문제가 발생한다.

## **_Unit3. DAO의 장단점_**

---

### _Unit3.1. DAO의 장점_

---

- **개방성과 평등성**: 누구나 조직 구성에 참여할 수 있고, 계층 없는 구조 덕분에 혁신적인 아이디어 제안이 활발하다.

- **사전 규칙 및 분쟁 예방**: 모든 참여자가 규칙을 사전에 인지하고 있으며, 투표 제도로 인해 갈등이 최소화된다.

- **책임 있는 참여 유도**: 투표를 위한 일정 금액의 스테이킹 요구는 참여자의 책임감을 높인다.

- **투명성**: 모든 거래 및 규칙이 블록체인에 기록되므로 조작이 어렵고 신뢰성이 높다.

- **자금 흐름 추적 가능**: 모든 참여자가 자금 사용 내역을 확인할 수 있다.

### _Unit3.2. DAO의 단점_

---

- **보안 취약성**: The DAO 해킹 사례처럼, 코드에 결함이 있을 경우 심각한 피해로 이어질 수 있다.

- **법적 불확실성**: DAO는 기존 법체계와의 접점이 부족해 외부와의 계약이나 책임 이행에 문제가 발생할 수 있다.

- **코드 변경의 어려움**: 오류가 있어도 과반수 투표 전에는 코드 수정을 할 수 없다는 구조적 제약이 존재한다.

## **_Unit4. DAO의 사례_**

---

### _Unit4.1 Dash_

---

Dash는 익명성과 속도에 초점을 둔 오픈소스 암호화폐이다.

Dash는 이중 구조 네트워크(채굴자 + 마스터 노드)를 통해 빠르고 유연한 거래를 제공한다. 분산 거버넌스를 실현한 최초의 DAO 중 하나로 평가된다.

### _Unit4.2. DigixDAO(DGD)_

---

DigixDAO는 PoA(Proof of Asset) 프로토콜을 사용하여 실물 자산의 토큰화를 시도한 DAO이다.

DigixDAO는 이더리움 최초의 온체인 크라우드세일로 기록되며, IPFS와 이더리움을 기반으로 자산의 존재를 추적하고 검증하는 기능을 제공한다.

### _Unit4.3. BitShares_

---

BitShares는 탈중앙화된 암호화폐 거래소로서, 블록체인을 활용해 법정 화폐의 안정성과 암호화폐의 자유를 동시에 제공하는 것을 목표로 한다. 빠른 속도와 유연성을 강점으로 갖는다.

## **_Unit5. Dapp(Decentralized Applications)_**

---

### _Unit5.1 일반 앱과의 차이점_

---

Dapp은 블록체인 상에서 작동하는 제지 불가능한 앱으로, 중개자 없이 자율적으로 실행된다. 사용자는 자신의 데이터를 직접 통제할 수 있으며, 검열의 영향 없이 자유로운 사용이 가능하다.

### _Unit5.2 Dapp의 유형_

---

- **자금 관리 애플리케이션**

- **보험, 자산 관리 등 복합적 요소를 포함한 애플리케이션**

## **_Unit6. The DAO 해킹 사건_**

---

### _Unit6.1. The DAO_

---

The DAO는 독일 스타트업 slock.it이 개발한 DAO 프로젝트이다.

The DAO는 스마트 록을 기반으로 한 공유경제 시스템을 탈중앙화된 방식으로 구현하고자 했다. 2016년 5월, 약 1억 5천만 달러를 모금하여 세계 최대 크라우드 펀딩 사례 중 하나로 기록되었다.

### _Unit6.2. The DAO의 구성 요소_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/204903_BHJrbhskB5urfqn5cz?q=80&s=1280x180&t=outside&f=webp)

- **Developers**: DAO 시스템 설계자

- **Proposal 시스템**: 다양한 제안을 제출하고, 토큰 수에 비례한 투표로 실행 여부 결정

- **Voting 구조**: 과반수 원칙, 최소 투표 기간, 의결정족수 규정 등

- **Tokenholders**: 투자자이자 투표권 보유자

- **Contractors**: 제안을 수행하는 집행자

- **Curators**: 계약자 등록, 제안 검토 등 실행 감독 역할 수행

### _Unit6.3. The DAO의 취약점_

---

The DAO의 경우 투자자가 DAO 토큰을 받고, 투표로 투자 방향을 결정한다. 이때 반대자는 splitDAO를 통해 새로운 DAO 생성이 가능하다.

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205537_EnW8neYR87blL6lzO7?q=80&s=1280x180&t=outside&f=webp)

하지만 splitDAO 내부에 있는 잔고 초기화 코드가 함수 끝에 위치하고 있었기 때문에 공격자는 이 점을 이용해 재귀 호출을 통해 잔고를 반복 인출하는 작업을 통해 해킹을 시도했다. 즉, The DAO는 Checks-Effects-Interactions 패턴을 미준수하고 있었기 때문에 해킹에 대한 취약점을 보유하고 있었다.

### _Unit6.4. The DAO의 실제 컨트랙트_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205622_x3ha24iKthLZXwOSoE?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205628_5O5Xv8cIu04VvIQXuq?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205635_dM9JTgKFcXwjejbnmo?q=80&s=1280x180&t=outside&f=webp)

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205642_SpxBEPiQYdvaIBnJel?q=80&s=1280x180&t=outside&f=webp)

### _Unit6.5. The DAO의 주요 트랜잭션_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205750_1hxPIog8R52cOA6Jj6?q=80&s=1280x180&t=outside&f=webp)

The DAO 해킹 사건 당시 공격 주소 : 0xF35E...1A77D

### _Unit6.6. The DAO 해킹 사건의 발생_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205823_peMY9VIBvxwart1H3R?q=80&s=1280x180&t=outside&f=webp)

2016년 6월 17일, The DAO의 스마트 컨트랙트에 존재하던 보안 취약점을 악용한 해커가 자식 DAO를 생성하여 약 5천만 달러 상당의 이더를 유출했다.

The DAO의 코드는 오픈소스였기 때문에 누구나 취약점을 확인할 수 있었고, 해킹은 실시간으로 진행되었지만 이를 막을 수단은 없었다.

### _Unit6.7. The DAO 해킹 방식_

---

The DAO를 해킹한 공격자는 splitDAO 함수를 호출 후 재귀적으로 함수를 다시 호출하는 방식으로 해킹을 시도했다.

즉, 상태 변경 전에 외부 호출이 먼저 일어나기 때문에 반복적으로 인출이 가능하다는 취약점을 이용해 많은 이더를 유출해내는데 성공했다.

### _Unit6.8. The DAO 해킹 과정_

---

![Image](https://upload.cafenono.com/image/slashpagePost/20250402/205901_CX3S0EjOe7HlX0NY0V?q=80&s=1280x180&t=outside&f=webp)

먼저 해당 그림에 대해 기본 개념을 알아보자.

- Proxy Account는 공격자가 DAO 토큰을 별도로 저장하는 계정

- Main Attacker Account는 공격자가 직접 제어하는 계정

- Reward Account는 DAO에서 발생한 이익을 저장하는 저장소 역할

- Parent DAO는 포크되기 전 DAO토큰을 의미

- Child DAO는 포크된 DAO 토큰을 의미

원래 DAO에서 Child DAO로 분할을 수행한다. 이때 하나의 스마트 컨트랙트가 생성되는데 이 안에 함수가 두가지가 있다. 바로 splitDAO와 withDrawRewardFor 함수가 있는데 이 두 함수가 해킹 문제의 원인이 되었다.특히, splitDAO함수가 Checks-Effects-Interactions 패턴을 준수하지 않은 점이 공격의 핵심이다.

Checks-Effects-Interactions 패턴이란 스마트 컨트랙트에서 상태 변경 및 외부 호출을 수행하는 순서를 정하는 원칙아더, Checks는 입력 값과 조건을 검증하고 Effects는 상태변수를 변경하며 Interactions는 외부 컨트랙트나 계정과의 상호작용을 수행한다.

```
// Burn DAO Tokens
Transfer(msg.sender, 0, balances[msg.sender]);
withdrawRewardFor(msg.sender); // be nice, and get his rewards
totalSupply -= balances[msg.sender];
balances[msg.sender] = 0;
paidOut[msg.sender] = 0;
return true;
```

위 코드는 splitDAO 중 일부를 가져왔다. 여기서 사용자의 잔고를 0으로 만들고 ETH를 다음 계정에 이양해야하지만, 먼저 다음 계정에 이양하고 그 다음 사용자의 잔고를 0으로 만들어버린다.

이 부분은 같은 함수를 재귀적으로 호출하여 잔고가 차감되지 않은 상태에서 반복적으로 ETH를 인출할 수 있다. 이 점을 가지고 공격자는 해킹을 시작하게 된다.

하지만 이는 개발자들도 알고 있었다. 개발자들은 이렇게 해킹을 당해도 RewardAccount에 돈이 없으면 출금이 불가능하다는 점을 생각하고 있었다. 그래서 돈을 빼내는 함수인 withdrawRewardFor를 생성하였다. 이 함수는 사용자가 해킹을 해도 Reward Account에 돈이 없으면 돈을 빼낼 수 없다는 것을 의미한다. 즉, 이는 결국 이익이 발생해야지 컨트랙트가 실행되게 만든다.

```
function withdrawRewardFor(address _account) noEther internal returns (bool _success) {
// 이 부분이 문제
if ((balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply < paidOut[_account])
throw;

uint reward =
(balanceOf(_account) * rewardAccount.accumulatedInput()) / totalSupply - paidOut[_account];

reward = rewardAccount.balance < reward ? rewardAccount.balance : reward;

paidOut[_account] += reward;
if (!rewardAccount.payOut(_account, reward))
throw;

return true;
}
```

여기서 공격자는 RewardAccount 에 조금의 ETH가 있으면 컨트랙트를 실행할 수 있다고 생각했다. 따라서 공격자는 RewardAccount에 0.0001 ETH를 넣어 컨트랙트를 실행하여 공격을 하였다.

이렇게 되면 Parent DAO가 Child DAO로 ETH가 이양이 되어 Parent DAO가 0이 되면 공격을 못하게 된다. 하지만 공격자는 여러 번 공격을 수행하게 된다. 공격자가 택한 방법은 공격자의 잔고를 0으로 만들기 전에 본인의 Proxy 계정에 토큰을 보내놓은 뒤 다시 원래 계정으로 보내면 공격자가 계속 공격할 수 있게 만든다.

하지만 공격자는 ETH를 빼기 위한 대기기간인 28일동안 개발자들이 이를 눈치채 대부분의 돈을 빼내지못했다고 한다. 이후 다른 사용자들은 대응방안으로 하드포크와 소프트 포크로 논의하였고 결과적으로 ETH와 ETC로 체인이 분리되었다.

### _Unit6.9. The DAO 해킹 사건에 대한 대응_

---

The DAO 해킹 사건 발생 당시 피해 복구를 하기 위해서 하드 포크를 진행해야 된다는 입장과 블록체인의 불변성을 유지하기 위해 하드 포크를 반대하는 입장으로 커뮤니티 내부에서 갈등이 발생했다.

논쟁의 중심은 “Code is law”, 즉 코드는 법이기 때문에 따라야 한다는 입장과 법에는 결함이 존재할 수 있기 때문에 바로잡아야 한다는 입장으로 나뉘었다.

결과적으로 2016년 7월 하드 포크를 단행해 ETH는 해킹을 되돌리고 ETC의 경우 해킹을 인정하고 원래 체인을 유지하게 되었다.

### _Unit6.10. The DAO 해킹 사건의 영향_

---

The DAO 해킹 사건의 여파로 DAO의 신뢰성과 이더리움 플랫폼의 평판에 심각한 타격이 발생했다. 결국 이더리움 커뮤니티는 하드포크를 통해 이더리움(ETH)과 이더리움 클래식(ETC)으로 분리되었으며, DAO의 개념과 구조적 약점에 대한 반성과 개선 논의가 이어지게 되었다. 이는 이후 DAO 설계에 있어 보안성과 거버넌스 구조를 강화하는 계기가 되었다.

## **_Reference._**

---

### 웹페이지(**Format: 저자명. (게시일). 웹페이지 제목.사이트명. URL)**

- GUNEET KAUR.2024/2/21.DAO란 무엇이며 어떻게 작동하는가?.COINTELEGRAPH.[https://kr.cointelegraph.com/learn/articles/what-is-a-decentralized-autonomous-organization-and-how-does-a-dao-work](https://kr.cointelegraph.com/learn/articles/what-is-a-decentralized-autonomous-organization-and-how-does-a-dao-work)

- 대시-대시 시세.Investing.[https://kr.investing.com/crypto/dash](https://kr.investing.com/crypto/dash)

- 레퍼럴마케터.2022/9/8.DigixDao(DGD)란?.[https://coinrich.tistory.com/61](https://coinrich.tistory.com/61)

- Ash Han 한승환.2016/12/24.The DAO 다오란 무엇인가?.[https://brunch.co.kr/@ashhan/25](https://brunch.co.kr/@ashhan/25)

- Ash Han 한승환.2016/12/24.The DAO 해킹 그리고 사망.[https://brunch.co.kr/@ashhan/26](https://brunch.co.kr/@ashhan/26)

- Ehterscan.[https://etherscan.io/address/0xf35e2cc8e6523d683ed44870f5b7cc785051a77d](https://etherscan.io/address/0xf35e2cc8e6523d683ed44870f5b7cc785051a77d)

- Seungmin Jeon.2022/9/29.The DAO 해킹 사건(2016) 분석.Medium.[https://medium.com/@organmo/the-dao-해킹-사건-2016-분석-bcd5348b203c](https://medium.com/@organmo/the-dao-%25ED%2595%25B4%25ED%2582%25B9-%25EC%2582%25AC%25EA%25B1%25B4-2016-%25EB%25B6%2584%25EC%2584%259D-bcd5348b203c)

- 쪼하.2023/8/17.DAO, 어떤 공격에 노출될 수 있을까?.brunchstory.[https://brunch.co.kr/@god100412345/68](https://brunch.co.kr/@god100412345/68)

- 인사이트.2023/1/20.블록체인 스마트 컨트랙트 한계와 취약점 및 사건,사고 사례.CODEBLOG.[https://www.codestates.com/blog/content/블록체인-스마트-컨트랙트-한계와취약점-사건사고](https://www.codestates.com/blog/content/%25EB%25B8%2594%25EB%25A1%259D%25EC%25B2%25B4%25EC%259D%25B8-%25EC%258A%25A4%25EB%25A7%2588%25ED%258A%25B8-%25EC%25BB%25A8%25ED%258A%25B8%25EB%259E%2599%25ED%258A%25B8-%25ED%2595%259C%25EA%25B3%2584%25EC%2599%2580%25EC%25B7%25A8%25EC%2595%25BD%25EC%25A0%2590-%25EC%2582%25AC%25EA%25B1%25B4%25EC%2582%25AC%25EA%25B3%25A0)