디지털 자산 보안 인사이트
2016년 6월, 이더리움 생태계는 충격에 빠졌다. 당시 가장 성공적인 크라우드펀딩 프로젝트로 평가받던 The DAO가 해킹당해 약 360만 ETH, 당시 가치로 5천만 달러가 탈취된 것이다. 공격자는 스마트 컨트랙트의 재진입(Reentrancy) 취약점을 이용했고, 이 사건은 블록체인 역사상 가장 유명한 보안 사고 중 하나로 기록됐다. 그로부터 8년이 지난 지금도 DeFi 프로토콜은 여전히 스마트 컨트랙트 취약점으로 인한 공격에 노출되어 있다. 2023년 한 해에만 DeFi 해킹으로 인한 피해액이 10억 달러를 넘어섰고, 그 대부분이 스마트 컨트랙트의 설계 결함에서 비롯됐다.
스마트 컨트랙트는 블록체인 위에서 자동으로 실행되는 프로그램이다. 중개인 없이 조건이 충족되면 계약이 자동으로 이행되는 구조 덕분에 DeFi는 빠르게 성장할 수 있었다. 하지만 코드로 작성된 계약은 수정이 거의 불가능하고, 한 번 배포되면 영구적으로 블록체인에 남는다는 특성 때문에 작은 실수도 치명적인 결과로 이어질 수 있다. 전통 금융에서는 보안 사고가 발생하면 거래를 되돌리거나 계좌를 동결할 수 있지만, 블록체인에서는 그게 불가능하다. 코드에 취약점이 있다면 공격자는 합법적으로 그 허점을 이용할 수 있고, 탈취된 자산을 되찾기란 사실상 불가능에 가깝다.
가장 대표적인 취약점이 재진입 공격이다. The DAO 사건이 바로 이 공격 방식으로 발생했다. 재진입 공격은 스마트 컨트랙트가 외부 컨트랙트를 호출할 때, 상태 업데이트를 완료하기 전에 다시 호출되는 상황을 악용하는 것이다.
예를 들어 사용자가 자금을 인출하려 할 때, 컨트랙트는 먼저 자금을 전송하고 나중에 잔액을 업데이트한다. 공격자는 자금을 받는 순간 다시 인출 함수를 호출해 잔액이 업데이트되기 전에 여러 번 자금을 빼낼 수 있다. 마치 은행 ATM이 잔액을 확인하기 전에 돈을 먼저 내주는 것과 같은 상황이다.
또 다른 심각한 취약점은 접근 제어 오류다. 스마트 컨트랙트에는 특정 함수를 특정 사용자만 실행할 수 있도록 제한하는 권한 관리 로직이 필요하다. 하지만 개발 과정에서 이 부분을 제대로 구현하지 않으면 누구나 관리자 권한이 필요한 함수를 실행할 수 있게 된다. 2017년 Parity 지갑 해킹 사건이 대표적이다. 공격자는 지갑 컨트랙트의 소유권 변경 함수에 접근 제어가 없다는 점을 발견하고, 자신을 소유자로 만든 뒤 지갑을 파괴해 3천만 달러 상당의 이더리움을 영구적으로 동결시켰다.
정수 오버플로우와 언더플로우도 자주 발생하는 취약점이다. 프로그래밍에서 숫자는 저장 공간의 한계가 있어, 최댓값을 넘어서면 0으로 돌아가거나 최솟값 아래로 내려가면 최댓값으로 순환하는 현상이 발생한다. 토큰 잔액이 0인 상태에서 1을 빼면 갑자기 엄청난 양의 토큰을 보유한 것처럼 보이게 되는 것이다. 2018년 BEC 토큰은 이 취약점으로 인해 공격자가 무한에 가까운 토큰을 생성해 시장에 풀었고, 토큰 가치는 순식간에 폭락했다.
오라클 조작 공격은 DeFi만의 독특한 취약점이다. 블록체인은 외부 세계의 정보를 직접 가져올 수 없기 때문에 오라클이라는 외부 데이터 제공자를 통해 가격 정보를 받아온다. 문제는 일부 프로토콜이 단일 거래소의 가격만을 참조하거나, 조작하기 쉬운 가격 피드를 사용한다는 점이다. 공격자는 플래시론을 이용해 순간적으로 거래소의 가격을 왜곡시킨 뒤, 그 가격을 기준으로 대출을 받거나 청산을 실행해 부당한 이익을 챙길 수 있다. 2020년 Harvest Finance 공격이 대표적인 사례로, 공격자는 플래시론으로 가격을 조작해 3천만 달러를 탈취했다.
스마트 컨트랙트 보안은 단순히 기술적 문제가 아니라 DeFi 생태계 전체의 신뢰와 직결된다. 한 번의 해킹 사건은 프로젝트를 무너뜨릴 수 있고, 투자자들의 자산을 순식간에 증발시킬 수 있다.
최근에는 디지털 자산 리스크 관리를 위한 프로토콜 차원의 보험 시스템도 등장했다. Nexus Mutual이나 InsurAce 같은 DeFi 보험 프로토콜은 스마트 컨트랙트 해킹으로 인한 손실을 보상해준다. 사용자는 일정 금액의 보험료를 내고, 실제 해킹이 발생하면 보험금을 청구할 수 있다. 물론 완벽한 해결책은 아니지만, 투자자 보호를 위한 안전망으로 작용한다.
The DAO 사건 이후 이더리움 커뮤니티는 하드포크라는 극단적 선택을 통해 피해를 되돌렸지만, 이는 블록체인의 불변성 원칙을 깨뜨렸다는 비판을 받았고, 이더리움 클래식이 분리되는 결과로 이어졌다.
이후 DeFi 프로젝트들은 코드 한 줄 한 줄에 더욱 신중해졌고, 보안 감사와 형식 검증을 필수 과정으로 받아들이게 됐다.
높은 수익률을 약속하는 프로토콜이 실제로는 검증되지 않은 코드로 운영되고 있을 수 있다. 감사 리포트가 있는지, 어떤 보안 업체가 검토했는지, 버그 바운티 프로그램이 운영되는지 확인하는 것만으로도 위험을 크게 줄일 수 있다. 또한 프로토콜의 TVL(Total Value Locked)이나 운영 기간도 참고할 만하다. 오랜 기간 큰 자금을 안전하게 관리해온 프로토콜은 그만큼 많은 공격 시도를 견뎌냈다는 의미이기 때문이다.
DeFi는 여전히 진화하고 있다. 새로운 프로토콜과 혁신적인 금융 상품이 계속 등장하면서 새로운 형태의 취약점도 함께 발견되고 있다. 하지만 생태계 전체가 보안의 중요성을 깊이 인식하고, 더 안전한 코드를 작성하고, 철저한 검증 과정을 거치며 발전하고 있다는 점은 희망적이다. 스마트 컨트랙트는 여전히 완벽하지 않지만, 우리가 이 기술의 한계를 이해하고 지속적으로 개선해 나간다면 더 안전하고 신뢰할 수 있는 탈중앙화 금융 시스템을 만들어갈 수 있을 것이다.