Back to Blog

재보급 프로토콜 공격 사건에 대한 심층 분석 및 고찰

Phalcon
July 6, 2025
8 min read

2025년 6월 26일, 이더리움 메인넷에 배포된 Resupply 스테이블코인 프로토콜이 공격을 받아 약 1,000만 달러 규모의 자산 손실이 발생했습니다. 관련 컨트랙트의 가격 오라클 구현 방식에 문제가 있었으며, 이로 인해 새로 생성된 유동성이 낮은 마켓에서 공격자가 기부 공격(donation attack)을 통해 차입 자산(Resupply가 발행한 reUSD)과 담보 자산 간의 상대적 가격(즉, 교환 비율)을 0으로 조작할 수 있었습니다. 이를 통해 공격자는 자산 건전성 검사를 우회하고 대량의 reUSD를 차입하여 이익을 얻었습니다.

BlockSec이 네트워크 최초로 조기 경고를 공개 발표하고 예비 분석(Tweet1, Tweet2)을 제공한 이후, Resupply 측도 공식 발표를 공개했으나 많은 기술적 세부 사항은 다루지 않았습니다. 이 글에서는 보다 상세한 분석을 제공하고자 합니다. 한편, 공격 이후 프로젝트 측과 이해관계자들 사이에서도 커뮤니티 내 격렬한 논쟁이 벌어졌습니다. 이 글에서는 프로토콜 이면에 있는 복잡한 생태계 관계를 심층적으로 분석하여 독자들에게 참고 자료로 제공합니다.


1. 배경

1.1 Resupply 프로토콜 소개

Resupply는 Curve 생태계에 속하는 탈중앙화 스테이블코인 프로토콜입니다. Resupply가 발행하는 스테이블코인은 reUSD라고 불립니다. 이는 외부 플랫폼의 대출 마켓에서 이자를 적립하는 crvUSD 및 frxUSD를 포함한 다른 스테이블코인으로 뒷받침되는, 담보부채포지션(CDP) 기반의 탈중앙화 스테이블코인입니다. 사용자는 crvUSD와 frxUSD를 제공하여 reUSD를 차입함으로써 스테이블코인 자산의 재융자를 실현할 수 있습니다.

구체적으로, 사용자는 온체인에 배포된 Resupply 마켓에서 대출 관련 작업을 수행할 수 있습니다. 마켓의 생성 및 운영은 DAO를 통해 관리됩니다. 각 마켓은 담보 자산(collateral)으로 ERC-4626 Vault를 지정하며, 해당 Vault에 대응하는 자산을 기초 자산으로 사용합니다. 사용자는 마켓에 담보(Vault 또는 Vault의 기초 자산)를 예치하여 reUSD를 차입합니다.

이번 공격에 연루된 마켓 0x6e90과 Vault 0x0114를 예시로 들면, 관련 자산(토큰)은 다음과 같습니다:

  • 마켓 0x6e90

    • 기초 자산: crvUSD
    • 담보: cvcrvUSD (즉, Vault 0x0114)
    • 차입 자산: reUSD
  • Vault 0x0114

    • 자산: crvUSD (실제로는 Curve LlamaLend 컨트롤러에 저장되며, 이 또한 마켓임)
    • 담보: wstUSR
    • 차입 자산: crvUSD
    • 지분(share): cvcrvUSD (Vault가 발행하는 ERC-4626 토큰)

즉, 사용자는 이 마켓에 일정량의 cvcrvUSD(또는 crvUSD, 실제로는 Vault를 통해 cvcrvUSD로 전환됨)를 담보로 제공하여 reUSD를 차입할 수 있습니다.


1.2 시스템은 사용자가 자산을 차입할 자격이 있는지 어떻게 판단하는가?

일반적인 대출 프로토콜과 유사하게, Resupply 마켓도 사용자의 포지션에 대해 자산 건전성 검사를 수행합니다(modifier isSolvent를 통해).

isSolvent는 최종적으로 _isSolvent 함수를 호출하며, LTV(담보인정비율)를 검사합니다. 차입 자산과 담보 자산 간의 비율이 시스템이 설정한 최댓값을 초과해서는 안 됩니다(_ltv <= maxLTV).

LTV 계산은 교환 비율(_exchangeRate), 즉 담보 자산 대비 차입 자산의 가격(교환 비율)에 의존함을 알 수 있습니다.


2. 공격 분석

2.1 근본 원인 분석

컨트랙트 코드 관점에서, 공격의 핵심 원인은 Resupply 마켓의 가격 오라클 구현에 문제가 있었다는 것입니다. 새로 생성된 유동성이 낮은 마켓에서 공격자는 기부 공격을 통해 교환 비율을 조작함으로써 건전성 검사를 우회하고 대량의 reUSD를 차입하여 이익을 얻을 수 있었습니다.

교환 비율은 어떻게 계산되는가?

계산 공식은 다음과 같습니다:

명백히, getPrices1e36보다 큰 가격을 반환하면, 정수 나눗셈의 내림 반올림으로 인해 _exchangeRate = 0이 됩니다.

가격을 어떻게 조작하는가?

코드에 따르면, 가격은 다음과 같이 계산됩니다:

코드에서 precision = 1, DEAD_SHARES = 1000, shares = 1e18로 설정되어 있으므로:

최종적으로 변수를 대입하면 가격 계산 공식은 다음과 같습니다:

price 값을 증폭시키기 위한 핵심은 total_assetstotalSupply 사이의 격차를 벌리는 것, 즉 total_assets를 극도로 크게 만들면서 totalSupply는 매우 작게 유지하는 것임을 알 수 있습니다. Resupply 프로토콜의 실제 구현에서, 공식의 total_assets는 기초 자산(crvUSD)에 의존하며, totalSupply는 마켓의 전체 유동성에 해당하는 지분(cvcrvUSD)에 의존합니다. 이것이 바로 전형적인 기부 공격 시나리오입니다.

2.2 공격 트랜잭션 분석

공격 트랜잭션 [4]에 따르면, 공격자는 다음과 같은 핵심 단계를 수행한 것으로 분석됩니다:

  1. 플래시 론으로 4,000 USDC를 차입하여 3,999 crvUSD로 교환했습니다.

  2. 2,000 crvUSD를 컨트롤러 0x8970에 기부했습니다. 기부 전 컨트롤러 0x8970은 0 crvUSD를 보유하고 있었습니다. 기부 후 기록된 crvUSD 양은 2000000000000000000000(소수점 18자리)이 되었습니다.

  3. 약 2 crvUSD를 Vault 0x0114에 예치하고 1 지분(cvcrvUSD)을 받았습니다. 이 시점에 기록된 crvUSD 양은 2002000000000000000001(소수점 18자리)이었습니다.

  4. 마켓 0x6e90에 1단위(즉, Vault 0x0114의 1 지분)의 담보를 추가했습니다.

  5. 마켓 0x6e90에서 10,000,000 reUSD를 차입했습니다. 이 시점에 _exchangeRate = 0이 되어 _ltv = 0이 되었고, 따라서 _isSolvent 검사를 통과했습니다.

_exchangeRate가 0이 된 이유는? 앞선 단계들을 통해 공격자가 컨트랙트를 다음 상태로 조작했기 때문입니다:

교환 비율 계산 방법을 상기하면:

price > 1e36이므로 _exchangeRate = 0이 됩니다.

  1. 차입한 reUSD를 교환하여 이익을 실현했습니다.

3. 교훈

Resupply에서 공격받은 마켓은 Curve의 템플릿 컨트랙트와 유사한 가격 오라클 구현 방식을 사용했습니다.

그러나 Curve 공식 문서에는 이미 이 구현의 적용 범위가 명시되어 있었습니다 — 안타깝게도 Resupply는 배포 시 이 적용 범위 경고를 충분히 고려하지 않은 것으로 보입니다.

4. 관계 및 커뮤니티 논쟁

4.1 Curve 생태계 5대 프로젝트의 복잡한 관계망

Resupply 사건의 더 깊은 영향을 이해하기 위해서는 먼저 Curve 생태계 내 다섯 개 핵심 프로토콜 간의 복잡한 관계를 살펴봐야 합니다.

Curve Finance는 전체 생태계의 핵심으로, 유동성 풀, crvUSD, 그리고 LlamaLend 프로토콜을 제공하여 Resupply, Prisma, Convex, Yearn의 운영을 뒷받침합니다. Convex는 스테이킹과 거버넌스를 통해 Curve의 수익을 최적화하고 Prisma와 Resupply에 추가적인 보상 메커니즘을 제공합니다. Prisma는 Curve의 LP 토큰과 Convex의 수익 강화 기능에 의존하며, Resupply는 Curve의 LlamaLend를 직접 기반으로 reUSD를 발행하고 Convex와 Yearn이 공동 개발했습니다. Yearn은 Curve 풀의 수익을 최적화할 뿐만 아니라 Convex와의 협력을 통해 Resupply의 개발을 촉진했습니다.

Curve Finance: 핵심 플랫폼으로서, Curve의 유동성 풀(crvUSD 풀 등)과 LlamaLend 프로토콜은 Resupply의 reUSD 발행, Prisma의 LP 토큰 스테이킹, Yearn의 수익 최적화, Convex의 거버넌스 투표에 직접 활용됩니다.

Convex: Convex는 Curve의 수익 강화 프로토콜입니다. 사용자는 Curve LP 토큰을 스테이킹하여 더 높은 CRV 보상과 Convex의 CVX 토큰을 얻을 수 있습니다. Convex는 Curve 거버넌스 투표권의 약 50%를 장악하고 있으며, Prisma와 Resupply에 수익 강화 메커니즘을 제공합니다.

Prisma: Prisma는 Curve의 LP 토큰을 스테이킹하며, 사용자는 Convex를 통해 강화된 보상(cvxPRISMA)을 얻습니다. Prisma는 Curve의 유동성과 Convex의 수익 메커니즘에 의존합니다.

Yearn: Yearn은 수익 집계기로, Curve의 LP 토큰 수익(Convex를 통해 강화)을 최적화하여 사용자에게 높은 수익을 제공합니다. Yearn은 Convex와 협력하여 Resupply를 개발했으며, 수익 전략에서 Curve 풀을 광범위하게 활용합니다.

Resupply: Convex와 Yearn이 공동 개발했으며, 사용자가 crvUSD 등의 스테이블코인을 담보로 reUSD를 차입하고, 토큰을 자동으로 Convex에 스테이킹하여 CRV와 CVX 보상을 획득함으로써 수익 최적화 루프를 형성합니다.

4.2 논쟁과 영향

그러나 Resupply가 공격받았을 때, 이 복잡한 관계망은 즉시 논쟁의 초점이 되었습니다. Curve 창업자 Michael Egorov는 신속하게 Resupply와 거리를 두며 다음과 같이 강조했습니다:

"Curve에서 그 프로젝트에 참여한 사람은 단 한 명도 없습니다… Curve와 일반화하지 말아 주세요."

이러한 거리두기 발언은 DeFi 생태계 내 복잡한 협력 관계가 위기 상황에서 얼마나 취약해질 수 있는지를 반영했습니다.

상호 연결된 이 프로젝트들은 함께 고도로 결합된 생태계를 형성하고 있으며, 이러한 시스템에서 한 고리의 문제는 연쇄 반응을 일으킬 수 있습니다. 따라서 Resupply 공격 사건이 프로토콜 상호 의존성과 보안에 관한 광범위한 커뮤니티 토론을 촉발한 것은 놀라운 일이 아닙니다.


5. 추가 고찰

5.1 타임라인

  • 2025년 5월 17일: Resupply 공식 주소 0x1f84Curve의 OneWay Lending Factory를 통해 새로운 LlamaLend 마켓을 배포했습니다.

    • 해당 마켓은 crvUSD를 대출 자산으로, wstUSR을 담보 토큰으로 사용했습니다.
    • ERC-4626 Vault 컨트랙트는 0x0114였으며, 해당 컨트롤러는 0x8970이었습니다.
  • 2025년 5월 31일: Resupply 거버넌스 페이지에 새로운 제안 wstUSR-long LlamaLend Market이 게시되었습니다. 이 제안은 사용자가 LlamaLend 마켓을 통해 reUSD를 발행할 수 있도록 하는 것을 목표로 했습니다.

  • 2025년 6월 11일: 해당 제안이 온체인에 게시되었습니다.

  • 2025년 6월 26일 00:18:47 (UTC): 제안이 통과되었고, Resupply 공식 주소 0x0417이 새로운 ResupplyPair(즉, Resupply crvUSD/wstUSR 마켓) 0x6e90배포하여 Vault 0x0114와 컨트롤러 0x8970을 연결했습니다.

    • Vault 0x0114와 Controller 0x8970을 연결했습니다.
    • Vault의 담보부채포지션(즉, cvcrvUSD, 기초 자산은 crvUSD)을 담보로 사용했습니다.
  • 2025년 6월 26일 01:53:59 (UTC): 마켓 0x6e90 배포 약 1.5시간 후, 공격자가 익스플로잇을 성공적으로 실행했습니다. 동시에 BlockSec이 공격을 감지하고 프로젝트 팀에 연락을 시도했습니다.

  • 2025년 6월 26일 02:26 (UTC): 팀에 연락하지 못하고 추가 손실이 없음을 확인한 후, BlockSec이 공개 경고를 발표했습니다.

  • 2025년 6월 26일 02:53:23 (UTC): 프로젝트 팀이 프로토콜을 일시 중지했습니다.

5.2 Phalcon이 있었더라면, 이 비극은 예방할 수 있었습니다

BlockSec Phalcon Security는 DeFi 보안 보호의 최신 혁신을 대표합니다. 멤풀 단계에서 트랜잭션을 모니터링함으로써, Phalcon은 공격 트랜잭션이 멤풀에 진입하는 순간 비정상적인 패턴을 즉시 식별할 수 있습니다.

지능형 분석 엔진을 탑재한 이 시스템은 200개 이상의 전형적인 공격 시그니처를 통합하고 있습니다. 지난 6개월간 0.0001% 미만의 초저 오탐률을 유지하며 정밀한 위협 탐지를 실현했습니다.

시스템은 독자적인 가스 입찰 전략을 활용하여 방어 트랜잭션이 공격 트랜잭션보다 앞서도록 보장하며, 프로토콜의 긴급 일시 중지 기능을 자동으로 트리거합니다.

전체 대응 프로세스는 EOA 및 멀티시그 지갑을 포함한 다양한 권한 제어 모드를 지원하여 다양한 유형의 프로토콜에 유연한 보안 솔루션을 제공합니다.

Resupply가 마켓 배포 시 Phalcon 시스템을 통합했다면, 이번 공격은 완전히 예방할 수 있었습니다

마켓 0x6e90이 배포된 후 1.5시간 이내에, Phalcon 시스템은 새로운 마켓 배포를 자동으로 감지하고 구성 매개변수를 지능적으로 분석하여 기부 공격의 잠재적 위험을 식별했을 것입니다.

시스템은 즉시 프로젝트 팀에 위험 경고를 보내 초기 유동성 보호 추가 또는 관련 매개변수 조정을 제안했을 것입니다.

공격이 발생한 이후에도, Phalcon을 배포하는 것은 Resupply와 전체 Curve 생태계에 엄청난 가치를 제공할 것입니다

투명하고 실시간으로 작동하는 모니터링 시스템은 사용자와 커뮤니티에 프로젝트 팀의 확고한 보안 의지를 보여주며, 24/7 지속적인 보호 메커니즘은 유사한 사건이 다시 발생하지 않도록 보장합니다. 공개적인 보안 모니터링 데이터는 프로젝트의 투명성을 높이고 커뮤니티 신뢰를 회복하는 핵심 수단이 됩니다. 피해를 입은 프로젝트에게 있어, 최고 수준의 보안 솔루션을 능동적으로 채택하는 것은 사용자 자금 안전에 대한 책임감을 입증하며, BlockSec과 같은 업계 선도 기업과의 파트너십은 보안 분야에서 프로젝트의 명성을 강화하는 강력한 보증이 됩니다.

현재 500억 달러 이상의 자산이 Phalcon의 보호를 신뢰하고 있습니다. 우리는 20건 이상의 실제 해킹 공격을 성공적으로 차단하여 2,000만 달러 이상의 자산 손실을 방지했습니다. 지난 6개월간 시스템은 완벽한 탐지 정확도 기록을 유지하며 밀리초 단위의 응답 속도를 달성하여 항상 공격자보다 한 발 앞서 있습니다. Phalcon은 현재 이더리움, BSC, Arbitrum을 포함한 20개 이상의 주요 블록체인 네트워크를 지원하며 DeFi 생태계에 포괄적인 크로스체인 보안 보호를 제공합니다.

Resupply의 1,000만 달러 손실과 수많은 다른 공격 사건들은 DeFi 세계에서 보안은 선택이 아니라 생존의 필수 조건임을 말해줍니다.

다음 공격이 발생한 후 후회하지 마세요. 지금 바로 프로토콜에 가장 강력한 보안 보호를 배포하세요.

BlockSec의 전문가 팀이 귀하의 프로젝트를 위한 종합적인 보안 평가를 수행할 준비가 되어 있습니다.

🔗 Phalcon Security 앱:

https://blocksec.com/phalcon/security

🔗 데모 예약:

https://blocksec.com/book-demo