Back to Blog

Seal Finance 보안 사고

Code Auditing
January 3, 2021
4 min read

11월 30일, 저희 보안 인시던트 모니터링 시스템 ThunderForecast는 이더리움의 과거 트랜잭션을 스캔하던 중 Loopring 프로토콜에 대한 공격(블로그: 영문, 중문)을 발견했습니다. 결론적으로, 이 공격의 근본 원인은 sellTokenForLRC 함수에 대한 접근 제어 부재였습니다. 공격자는 당시 가격 기준으로 48,849.2 USD에 해당하는 80.97 ETH를 탈취했습니다.

2020년 12월 11일, 저희 모니터링 시스템 ThunderForecast는 비정상적인 거래 비율로 거래되는 일련의 트랜잭션을 보고했습니다. 이후 저희 연구팀이 개발한 EthScope 시스템을 사용하여 해당 트랜잭션을 분석한 결과, 이는 차익 거래를 목적으로 Seal Finance 프로토콜의 취약점을 악용한 공격임을 발견했습니다.

Seal이란 무엇인가?

Seal 백서에 언급된 바와 같이: "SEAL - 주요 DeFi 프로토콜 토큰 사이에서 중개자 역할을 하며, 그 사이에 더 깊은 유동성을 창출하는 실험적 프로토콜입니다." 현재까지 Seal을 UNI, YFI, USDT, SNX 등 다양한 유명 토큰과 연결하는 10개 이상의 유동성 풀이 존재합니다. 보너스를 얻기 위해 투자자는 LP 토큰을 SEAL 리워드 컨트랙트에 예치하고 Farm 컨트랙트의 breed() 함수를 실행하여 새로운 SEAL 토큰을 생산해야 합니다. Farm 컨트랙트는 모든 Seal 풀에 배포되며, 컨트랙트 내 breed() 함수는 새로운 Seal 토큰을 발행하는 데 사용됩니다. breed()의 설정에 따라 Seal Token의 1.6%가 추가 발행됩니다. 또한 발행된 Seal 토큰의 0.8%는 다른 토큰으로 교환되어 나머지 0.8%의 발행된 Seal 토큰과 함께 유동성으로 풀에 예치됩니다. 그러나 breed() 함수에 접근 제어가 설계되어 있지 않아 누구나 이 함수를 실행할 수 있으며, 이 원시적인 설계가 이번에 보고된 공격의 근본 원인이 되었습니다.

다음은 확인된 breed() 함수의 소스 코드입니다:

function breed() external {
	require(now / 1 days > today);
	today += 1;
 
	uint256 sealPairAmount = seal.balanceOf(address(cSeal));
	uint256 tokenPairAmount = token.balanceOf(address(cSeal));
	uint256 newSeal = sealPairAmount.mul(spawnRate).div(1e18);
	uint256 amount = UniswapV2Library.getAmountOut(newSeal, sealPairAmount, tokenPairAmount);
 
	seal.mint(address(cSeal), newSeal);
	if(address(seal) < address(token))
    	cSeal.swap(0, amount, address(this), "");
	else
    	cSeal.swap(amount, 0, address(this), "");
	token.transfer(address(cSeal), amount);
	seal.mint(address(cSeal), newSeal);
	cSeal.mint(address(this));
}

상세 내용

이제 하나의 공격 트랜잭션을 통해 이 공격의 더 많은 세부 사항을 공개합니다. 이 트랜잭션에서 공격자는 수익을 극대화하기 위해 10개의 Seal 풀에 대해 공격 로직을 반복했습니다. 다음 분석에서는 Seal-SNX 풀에서 실행된 공격에 초점을 맞춥니다.

세 가지 단계가 포함되어 있습니다:

  • 1단계: Seal-SNX 풀에서 1,084 Seal2,787 SNX로 스왑합니다. 거래 비율은 1 Seal = 2.57 SNX입니다.
  • 2단계: Farm 컨트랙트의 breed() 함수를 실행합니다. 이 함수는 13.08 Seal을 발행하고 이를 10.20 SNX로 스왑합니다. 현재 거래 비율은 1 SNX = 0.78 Seal입니다. 그 이유는 풀에 있는 SNX의 대부분이 Seal로 스왑되어 SNX와 Seal 간의 수량 차이가 크게 발생하기 때문입니다. 그런 다음 Uniswap의 가격 계산 알고리즘에 따라 SNX는 풀에서 극도로 높은 가치(가격이 3배 이상 상승)를 갖게 됩니다.
  • 3단계: Seal-SNX 풀에서 2787 SNX1100 Seal로 스왑합니다. 교환이 SNX의 가격을 더욱 높이기 때문에, 공격자는 더 많은 Seal 토큰(추가 16 Seal)을 차익으로 획득합니다.

손실을 더욱 정확하게 측정하고 확인하기 위해, 저희는 EthScope 시스템을 사용하여 공격 이전의 블록 상태에서 breed() 함수를 재실행했습니다. 그 결과, Farm은 정상적인 실행과 비교하여 18개의 추가 Seal 토큰을 발행했습니다. 공격자는 16 Seal을 탈취했고 풀에는 2 Seal만 남았습니다.

이득 및 손실

이 트랜잭션에서 공격자는 총 175 Seal을 획득했습니다.

공격 규모

2020년 12월 13일까지, 3개의 악성 컨트랙트(0x49f93e, 0x8b3710, 0x0f20b6)이 온체인에 배포되었으며 22개의 트랜잭션이 성공적으로 실행되어 4,247개의 Seal 토큰이 탈취되었습니다. 당시 가격 기준으로, 공격자는 Seal 프로토콜의 취약점을 악용하여 약 58,467 USD를 획득했습니다. Seal 프로토콜의 취약점은 여전히 공격받고 있다는 점을 언급할 가치가 있습니다!!!

또한, 획득한 Seal 토큰의 흐름을 분석한 결과, 약 900개의 Seal 토큰이 DEX에 예치되고 나머지는 6개의 서로 다른 주소로 분산되었음을 발견했습니다. 다음 그림에서 보여주듯이, 해당 주소들은 Seal Finance와 Uniswap V2의 유동성 풀을 제외한 Seal 토큰의 상위 보유자들입니다.

마무리

이더리움 DeFi 생태계의 발전과 함께, 다양한 보안 문제들이 점차 드러나고 있습니다. 실제로, 이 공격의 근본 원인인 접근 제어 문제는 2020년 12월 13일까지 22번의 트랜잭션 실행을 통해 Seal에 상당한 손실(58,467 USD)을 초래했습니다.

업데이트 (2021/01/04)

2020년 11/30의 첫 번째 공격 이후, 공격자는 세 번째 공격 컨트랙트를 배포하고 다섯 번의 공격을 실행했습니다. 마지막 공격은 2020년 12/24에 발생했으며 획득한 Seal 토큰을 해당 주소로 전송했습니다. 이 과정에서 공격자는 6,021개의 Seal 토큰을 획득했습니다.

타임라인:

  • 2020/12/11: 의심스러운 트랜잭션 발견
  • 2020/12/12: 분석 완료
  • 2020/12/13: Seal Finance에 보고
  • 2021/01/03: 세부 내용 공개
  • 2021/01/03: CVE-2021–3006 할당

BlockSec 소개

BlockSec은 2021년 세계적으로 著名한 보안 전문가 그룹에 의해 설립된 선구적인 블록체인 보안 회사입니다. 이 회사는 대중적 채택을 촉진하기 위해 새롭게 부상하는 Web3 세계의 보안과 사용성을 향상시키는 데 전념하고 있습니다. 이를 위해 BlockSec은 스마트 컨트랙트 및 EVM 체인 보안 감사 서비스, 보안 개발 및 위협을 선제적으로 차단하기 위한 Phalcon 플랫폼, 자금 추적 및 조사를 위한 MetaSleuth 플랫폼, 그리고 Web3 빌더들이 암호화폐 세계에서 효율적으로 활동할 수 있도록 지원하는 MetaSuites 확장 프로그램을 제공합니다.

현재까지 이 회사는 MetaMask, Uniswap Foundation, Compound, Forta, PancakeSwap 등 300개 이상의 저명한 고객사에 서비스를 제공했으며, Matrix Partners, Vitalbridge Capital, Fenbushi Capital을 포함한 저명한 투자자들로부터 두 차례의 투자 라운드에서 수천만 달러를 유치했습니다.

공식 웹사이트: https://blocksec.com/

공식 트위터 계정: https://twitter.com/BlockSecTeam

Sign up for the latest updates
~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리
Security Insights

~$410만 손실: Taiko, SecondFi 익스플로잇 | BlockSec 위클리

이 주간 블록체인 보안 리포트는 2026년 6월 22~28일 발생한 주요 사건 2건을 다루며, 이더리움과 카르다노에서 약 410만 달러의 피해가 확인됐습니다. Taiko 브릿지 공격은 노출된 SGX 서명 키와 디버그 엔클레이브를 거부하지 못한 증명 정책 결함을 이용해 악성 증명자를 등록하고 L2 상태 증명을 위조했습니다. SecondFi 지갑은 Ed25519 논스 도출 시 비밀 입력이 제거되는 결함으로 공개 트랜잭션 데이터만으로 개인 키 복구가 가능했습니다.

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리
Security Insights

~$18M 손실: jaredFromSubway, Aztec 등 | BlockSec 위클리

이 주간 블록체인 보안 보고서는 2026년 6월 15일~21일을 다루며, 이더리움과 BNB 체인에서 3건의 주요 사고가 발생해 약 $18.3M의 손실이 발생했습니다. jaredFromSubway 사건은 MEV 봇이 차익거래를 위해 신뢰할 수 없는 제3자 컨트랙트에 자산을 승인한 역방향 승인 공격으로, 가짜 래퍼 토큰과 스왑 풀을 이용해 약 $15M 손실이 발생했습니다. Aztec은 이스케이프 해치 ZK 회로의 제약 누락으로 공격자가 가짜 머클 트리로 온체인 검증을 통과했습니다.

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

Web3 컴패니언: 오픈소스 보안 에이전틱 지갑

BlockSec가 Web3 Companion을 오픈소스로 공개했습니다. 이 보안 중심의 에이전트 지갑은 자체 AI 에이전트를 신뢰하지 않는 방식으로 설계되었으며, 키 격리, 강력한 정책, Passkey를 활용해 온체인 자산을 보호합니다.

Best Security Auditor for Web3

Validate design, code, and business logic before launch. Aligned with the highest industry security standards.

BlockSec Audit