실전 보안 - 실제 해킹, 그리고 DAO가 되찾은 방법

June 9, 2026
실전 보안 - 실제 해킹, 그리고 DAO가 되찾은 방법

어제 DAO는 단순한 테스트보다 훨씬 무거운 사안에 투표했습니다.

우리 사용자 한 명이 해킹을 당했습니다. 그 사람의 사업 전체, NFT와 파트너 구조까지, 도난당했습니다. 그리고 어제 커뮤니티 투표로 정당한 소유자에게 돌아갔습니다.

많은 분들이 전말을 물었습니다. 그래서 공개적으로 정리합니다. 무슨 일이 있었는지, 어떻게 해결됐는지, 이 일이 이 프로토콜의 설계에 대해 무엇을 증명하는지, 그리고 그 때문에 우리가 추가하는 새 보안 계층은 무엇인지.


무슨 일이 있었나

참여자 한 명의 지갑이 침해됐습니다. 공격자는 그 지갑의 seed phrase, 안에 든 모든 것의 마스터키를 손에 넣었습니다.

한 가지는 정확히 짚고 갑시다. 이건 플랫폼이나 smart contracts의 침해가 아니었습니다. 프로토콜 자체는 한 번도 뚫리지 않았습니다. 공격자는 오래된 방식으로 사용자의 지갑에 들어갔습니다. 키를 훔친 겁니다.

그 순간 Business Sale 기능은 일시적으로 켜져 있었습니다. 우리는 DAO governance 테스트의 일부로 앞서 이 기능을 활성화했고, 공개적으로 공지했습니다. 공격자는 그 열린 틈을 이용했습니다. 침해된 지갑을 장악한 상태에서 business transfer를 실행해 피해자의 계정 전체, NFT와 전체 partner-tree structure를, 자기 주소로 옮겼습니다.

몇 달에 걸쳐 만든 사업이, 거래 한 번으로 사라졌습니다.


무엇보다 먼저, 가장 중요한 것

이 일이 어떻게 해결됐는지 이해하려면, 먼저 절대 일어날 수 없었던 일을 알아야 합니다.

팀은 여러분의 사업에 접근할 수 없습니다. 전혀요.

우리는 여러분의 NFT를 옮길 수 없습니다. 여러분의 구조를 건드릴 수 없습니다. 계정 안의 어떤 것도 동결하거나, 압류하거나, 이전할 수 없습니다. 이건 내일 몰래 바꿀 수 있는 정책이 아닙니다. smart contracts가 그렇게 만들어져 있고, CertiK audit에서 확인됐으며, blockchain 자체가 강제하는 방식입니다.

이게 decentralization이 실제로 뜻하는 바입니다. 우리가 계정 안으로 손을 뻗어 마음대로 ‘수정’할 수 있다면, 여러분의 자산 안전은 결국 우리의 선의만큼만 안전하다는 뜻이 됩니다. 그리고 여러분은 은행을 믿듯 우리를 믿어야 하겠죠. 바로 그 모델을 대체하려고 이 프로토콜은 만들어졌습니다.

그래서 해킹이 일어났을 때, 누를 수 있는 admin button은 없었습니다. 있을 수도 없었습니다. 그리고 그건 의도된 설계입니다.


실제로 어떻게 해결됐나

있는 것은 DAO입니다.

피해자는 support에 연락했습니다. 그들의 upline leader, 즉 처음 그들을 ecosystem으로 데려온 사람이 함께 나서 상황을 확인했습니다. 팀은 소유자의 신원과 새롭고 안전한 지갑에 대한 독점적 통제권을 검증했습니다. 그리고 행동할 권한을 가진 유일한 장치가 작동에 들어갔습니다. 커뮤니티 투표입니다.

두 개의 제안이 on-chain에 올라갔습니다.

1. Business Sale 비활성화. governance 테스트 단계는 어차피 완료된 상태였고, 열린 전송 경로가 바로 공격자가 이용한 표면이었습니다. DAO는 프로토콜 전체에서 이 기능을 끄기로 투표했습니다. 향후 투표가 달리 결정하기 전까지 이 기능은 꺼진 채로 유지됩니다.

2. 도난당한 계정 복구. DAO는 도난당한 포지션, NFT와 구조, 거기에 붙은 모든 것을 공격자의 주소에서 검증된 소유자만 통제하는 새 지갑으로 이전하는 것을 승인했습니다. 원래 지갑으로 되돌리는 게 아닙니다. 그 지갑은 여전히 침해된 상태이고, 그곳으로 사업을 돌려보내면 같은 공격자에게 그대로 다시 넘겨주는 셈이니까요.

두 제안 모두 통과됐습니다. 둘 다 on-chain에서 실행됐습니다. 모든 세부 내용을 보고 싶은 분을 위해 전체 제안문은 DAO page에 공개돼 있습니다.

결과는 이렇습니다. 소유자는 안전한 지갑에서 다시 사업을 운영하게 됐습니다. 공격자의 주소에는 아무것도 남지 않았습니다.

기록을 위해 덧붙이면, DAO는 악의적 계정을 완전히 동결할 권한도 갖고 있습니다. 이번 경우엔 그조차 필요 없었습니다. 이전 자체가 공격자가 가진 모든 포지션을 빼앗았기 때문입니다.


이 일이 증명한 것

우리는 proposals, voting, execution을 검증하기 위해 governance test를 계획했습니다. 그런데 실제로 받은 것은 전체 보안 모델을 현실의 압박 아래 놓은 live incident였습니다.

모델은 버텼습니다.

  • 팀 혼자서는 아무것도 할 수 없었습니다. 설계상 그렇습니다.

  • 커뮤니티는 DAO를 통해 필요한 모든 일을 할 수 있었습니다. 공격 표면을 닫고, 공격자를 떼어내고, 소유자를 복구했습니다.

이 조합이 핵심입니다. 단일 주체, 팀도 어떤 개인도, 여러분의 자산을 건드릴 수 없습니다. 하지만 커뮤니티가 공개 on-chain vote를 통해 함께 행동하면, 문제가 생겼을 때 정의를 회복할 수 있습니다.

중앙화 플랫폼은 앞의 안전장치 없이 뒤의 복구만 줍니다. 대부분의 DeFi는 복구 없이 앞의 비수탁성만 줍니다. 이 프로토콜은 둘 다 갖고 있습니다.


지금 여러분이 해야 할 일

프로토콜의 방어는 작동했습니다. 하지만 이번 사건은 대부분의 사건이 시작되는 곳에서 시작됐습니다. 침해된 지갑입니다. 가장 강한 보안 계층은 여러분이 직접 설정하는 계층입니다.

오늘 할 세 가지:

1. financial password를 설정하세요. 자금을 이동할 때 필요한 별도 비밀번호로, 로그인과는 독립되어 있습니다. 사기꾼이 이것 없이 계정에 들어와도 벽에 부딪힙니다.

2. 플랫폼이 제공하는 모든 보안 계층을 켜세요. 거래용 TAN codes, 2FA, 그리고 action verification을 위한 공식 Telegram bot입니다. 각 계층은 공격자가 뚫어야 할 것을 하나 더 늘립니다.

3. seed phrase를 사업 그 자체처럼 보호하세요. 실제로 그렇습니다. 어떤 웹사이트에도 입력하지 말고, 누구와도 공유하지 말고, 클라우드 메모나 스크린샷에 저장하지 마세요.

이 계층들이 설정돼 있지 않으면, 안으로 들어온 공격자는 빠르게 움직일 수 있습니다. 여러분이 켜는 계층 하나하나가 그들을 늦추거나 완전히 멈춰 세웁니다.


새로운 기능: Secret Code

이번 사례는 계층 하나를 더 두는 것이 타당한 지점을 보여줬습니다. 그래서 우리는 추가합니다.

다음 주 안에 우리는 Secret Code를 출시합니다. 계정 보안 시스템의 새로운 요소입니다.

작동 방식:

  • financial password를 생성하면, 시스템은 Secret Code를 만듭니다. 한 번만 보여주는 무작위 단어 하나입니다.

  • 이미 financial password가 있다면, 여러분의 코드도 표시됩니다.

  • 그것을 적어 두고 오프라인에 보관하세요. seed phrase를 다루듯 다루세요.

  • 그때부터 support에 요청하는 모든 보안 민감 작업, financial password 재설정, 복구 조치, 그 범주의 모든 요청에는 Secret Code를 말해야 합니다.

코드가 없으면 변경도 없습니다. 공격자가 여러분의 이메일이나 메시지를 장악하더라도, 그 단어 없이는 support 앞에서 여러분인 척할 수 없습니다.


어제의 투표는 한 계정을 고친 것 이상의 일을 했습니다. 실제 운영 환경에서, 실제 이해관계가 걸린 상태로, 이 프로토콜이 사용자 위에 중앙화된 권력을 쥔 사람 없이도 사용자를 보호할 수 있음을 보여줬습니다.

공격당한 사용자는 사업을 되찾았습니다. 공격자는 아무것도 얻지 못하고 물러났습니다. 커뮤니티가 해냈습니다. 공개적으로, on-chain에서, 투표로.

정의가 이겼습니다. 시스템이 설계된 그대로 작동한 겁니다.