본문 바로가기

디파이(DeFi)/디파이 일반

[DeFi] 디파이의 보안 리스크 이해하기

안녕하세요, 디온입니다. 최근 들어서 바이낸스 스마트 체인(BSC) 기반의 디파이 프로젝트들에서 다양한 사건·사고가 벌어지고 있는데, 이와 관련하여 스마트 컨트랙트 보안 감사 전문 업체인 CertiK에서 "Understanding Security Risks In DeFi"라는 제목으로 지난 라이브 스트리밍의 내용을 잘 요약 정리해 준 포스팅이 있어 이를 소개드립니다.

본 포스팅에 요약된 내용은 Binance Smart Chain에서 CertiK팀을 연사로 초청하여 진행한 라이브 스트리밍 이벤트의 요약본이며 해당 라이브 스트리밍 영상은 https://www.pscp.tv/w/1BdGYYeYVREGX 에서 확인하실 수 있습니다.

DeFi는 9개월 전 바이낸스 스마트 체인(BSC)이 출시된 이후 BSC가 선도적인 DeFi 플랫폼 중 하나로 부상하면서 엄청나게 빠른 속도로 성장해왔습니다. 현재 BSC에서 매일 수천만 건의 트랜잭션을 생성하고 있는 600개 이상의 프로젝트가 있습니다.

그러나, 큰 성공에는 항상 큰 리스크가 따르며, 다양한 수준에서 노출된 취약점을 악용하는 해커의 공격으로 인한 문제가 더욱 심각해지고 있습니다. DeFi와 관련된 보안 리스크에 대해 크게 4가지 카테고리로 구분하여 살펴보겠습니다.

1. 관리자 키 탈취

예상 외로 꽤나 잘 알려진 유망 DeFi 프로젝트에서 관리자 키를 탈취당하여 발생한 공격 사례가 많습니다. 2021년 3월 5일에 PAID Network은 프라이빗 키의 잘못된 관리로 인해 "토큰 신규 발행" 공격을 당했으며, 공격자는 기존의 PAID 토큰을 소각한 후 다시 새로운 PAID 토큰을 발행하여 Uniswap에서 덤핑을 통해 2,040 ETH를 탈취한 적이 있습니다. 더불어 2021년 4월 19일 290만 개의 EASY 토큰이 EasyFi 지갑에서 알려지지 않은 여러 개의 지갑으로 전송되었으며 당시 탈취된 토큰의 가치는 약 7,500만 달러에 해당했습니다.

관리자 키는 일반적으로 컨트랙트의 구성을 수정하거나 스마트 컨트랙트가 보유된 자금을 관리하는데 사용되는 기능에 접근권한을 가지기 때문에 반드시 안전하게 보관을 해야 합니다. 하드웨어 지갑을 사용하여 Multisig를 생성하여 5명의 팀원 중 3명 이상이 트랜잭션에 서명하게끔 하는 등의 추가적인 보안 조치가 필요합니다.

2. 코딩 실수

때로는 스마트 컨트랙트의 작은 코딩 실수가 수백만 달러 몇 가지 일반적인 코딩 실수는 다음과 같습니다.

  • 기능 권한 (modifier)
  • 오타
  • 잘못된 자릿수
  • 누락 / 잘못된 변수 값 할당

가장 대표적인 사례는 보안 감사를 받지 않았던 우라늄 파이낸스(Uranium Finance)에서 5,700만 달러의 해킹 피해가 발생했던 사례입니다. 이는 스왑 전후의 풀에 있는 2개의 토큰 잔액의 곱을 비교할 때 사용된 불일치된 멀티플라이어로 인해 발생했습니다. 이를 통해 공격자는 1 Wei의 비용만으로 풀에서 대부분의 토큰을 교환할 수 있었습니다.

<Uranium Finance의 코드>

<올바른 코드>

또 다른 사례는 1,000만 달러 상당의 피해가 발생한 ValueDeFi의 피해 사례입니다. 컨트랙트의 초기화 기능이 "initialized = true"를 놓쳤고 이는 누구나 풀을 다시 초기화하고 스스로를 운영자로 설정할 수 있음을 의미합니다. 2021년 5월 5일 공격자는 풀을 초기화하고 운영자를 자신으로 설정한 다음 governanceRecoverUnsupported ()함수를 사용하여 스테이킹 된 토큰을 모두 빼낼 수 있었습니다.

<ValueDefi의 코드>

<올바른 코드>

위에서 언급한 2가지 사례는 단순한 코딩 실수로 인해 발생했으며 이로 인해 엄청난 자산 손실이 발생했습니다. 이러한 유형의 실수는 다른 동료 개발자들의 코드 리뷰, 유닛 테스트 및 보안 감사 등을 통해 얼마든지 예방이 가능한 오류입니다.

3. 플래시론 + 가격 조작

플래시론은 특정 수수료를 지불하고 Aave 또는 dYdX와 같은 프로토콜에서 순간적으로 많은 자금을 "별도 담보 없이" 대출 받는 것을 의미합니다. 이때

  1. 플래시론을 이용하여 많은 수량의 토큰 A 빌리기
  2. DEX에서 토큰 A를 토큰 B로 스왑 (토큰 A의 가격을 낮추고 토큰 B의 가격을 대폭 상승시킴)
  3. 토큰 A 또는 토큰 B의 가격에 의존하는 DeFi 프로젝트 활용하기
  4. 플래시론 상환하기

최근 팬케이크버니는 플래시론 공격을 받았고 공격자는 114k의 BNB와 697k의 BUNNY (약 4,000만 달러 상당)를 탈취할 수 있었습니다. 공격자는 팬케이크스왑 USDT-BNB v1 풀의 가격을 조작하기 위해 플래시론 대출을 사용하였고, 막대한 양의 BNB가 BNB-BUNNY 풀로 유입되어 가격이 부풀려진 BUNNY를 만들 수 있었습니다. 팬케이크버니는 다음 함수를 사용하여 BUNNY의 가격을 계산합니다.

BNB-BUNNY 풀로 유입된 BNB의 양이 엄청났기 때문에 변수 reserve0가 엄청나게 커졌고 잘못된 가격 계산으로 인해 공격자는 697k의 BUNNY를 받을 수 있었습니다.

팬케이크버니(40M), 하베스트파이낸스(25M), 연파이낸스(11M), 밸류디파이(7M), 아크로폴리스(2M), 치즈뱅크, XToken, bZx 등 디파이 생태계에서 유망한 프로젝트들의 플래시론 피해 사례는 굉장히 많습니다.

프로젝트의 가격 레퍼런스가 필요한 경우 플래시론이 해당 레퍼런스 가격을 조작할 수 있으므로 주의해야 합니다. 이를 방지하기 위해서는 기본적으로 TWAP(Time-Weighted Average Price)를 사용하는 것이 좋습니다. TWAP은 지정된 기간 동안 토큰의 평균가격을 나타냅니다. 공격자가 한 블록에서 가격을 조작하더라도 평균 가격에는 영향을 미칠 수 없습니다. 아니면 체인링크와 같이 신뢰할 수 있는 온체인 가격 오라클을 사용한 것을 권장합니다.

4. 타사 프로토콜의 무분별한 포크

2021년 5월 8일 ValueDeFi의 vSwap이라는 AMM의 50:50이 아닌 커스텀 풀에서 약 1,100만 달러 상당의 자산 손실이 발생했습니다. 일반적인 형식인 50:50의 풀이 아닌 커스텀 풀을 구현하기 위해 ValueDeFi는 뱅코르(Bancor) 프로콜의 BancorFormula.sol에서 power () 함수를 복사했습니다. power () 함수 설명에서 이 함수는 _baseN < _baseD인 경우를 지원하지 않는다고 명시가 되어있으나, 안타깝게도 ValueDeFi에서는 해당 함수를 그냥 가져다 사용했고 결국 공격자는 해당 취약점을 이용하여 토큰을 교환할 수 있었습니다.

이와 유사한 사례는 또 있습니다. 지난 2021년 5월 8일 공격자는 Rari Capital V2에 통합된 Alpha Homora V1의 ibETH 풀 기능을 활용하여 Rari Capital 이더리움 풀에서 약 2,600 ETH를 빼냈습니다. Bearn Finance의 BvaultStrategy 컨트랙트에서는 ibBUSD를 인출하여 공격자가 풀에서 10,859,319 BUSD를 제거할 수 있었습니다.

이러한 유형의 문제는 감지하기가 더 어렵고 특히나 써드파티 프로토콜과 커뮤니케이션하는 프로젝트를 사용할 때는 더욱 신중하게 진행할 필요가 있습니다. 개발자 스스로가 이해하지 못하는 코드를 맹목적으로 복사하여 사용하고 배포하는 것은 권장되지 않는 방법입니다. 개발자들은 타사 프로토콜과 포크된 프로젝트를 통합하고 배포하기 전에 어떻게 작동하지는 완벽하게 이해할 필요가 있습니다. 또한 개발자는 먼저 테스트넷에 프로젝트를 디플로이하고 테스트를 진행하여 트랜잭션 기록의 이상 유무를 확인하는 것이 좋습니다.

5. 개인적인 생각

최근 바이낸스 스마트 체인(BSC)이 해커들의 주 타깃이 되는 가장 큰 이유는 개발자들 스스로가 취약점을 정확히 파악하지 못한 상태에서 초기 버전의 이더리움 기반 DeFi들의 코드를 단순 포크해오는 프로젝트가 다수이기 때문인 것으로 보입니다.

이더리움은 작년 DeFi Summer에서 지속적인 해킹 피해가 발생하면서 버그 바운티를 운영하고 해킹 사고를 방지하기 위한 다양한 노력을 기울여왔으나, 이와는 대조적으로 바이낸스 스마트 체인에서는 "익명"에 기대어 단순 포크로 출시되는 저품질의 디파이 프로젝트들이 계속해서 등장하고, 해당 프로젝트에 꽤나 많은 자금들이 있기 때문에 공격 대상으로 타겟팅되기에 너무 좋은 조건이 아닌가 싶습니다.

지금은 높은 APR에 현혹되어 가급적 전문 보안감사 업체로부터의 감사가 진행되지 않은 곳, 개발진 및 운영진이 익명으로 잘 알려지지 않은 곳, 이제 막 시작되지만 딱히 기존 프로젝트와의 차이가 없는 곳에는 큰 자금을 넣지 않는 것이 좋아 보입니다.

 

[암호화폐(디지털자산) 거래소 거래수수료 할인 가입링크 안내]

① 바이낸스(Binance.com) 가입링크 (거래수수료20% 페이백) : 바로가기
② 바이낸스 선물 가입링크 (1달간 거래수수료 10% 페이백) : 바로가기
③ 고팍스(GOPAX) 거래소 가입링크 (가입즉시 5,000원 원화 또는 코인지급) : 바로가기
④ FTX파생상품 거래소 가입링크 (거래수수료 5% 페이백) : 바로가기
⑤ 코인원(Coinone) 거래소 가입링크 (거래수수료 10% 페이백) : 바로가기
⑥ 폴로닉스(PolonieX) 거래소 가입링크 (거래수수료 10% 페이백) : 바로가기
⑦ OKEx 거래소 가입링크 (110달러 리워드+40달러 수수료쿠폰) : 바로가기
⑧ 코인리스트(CoinList) 토큰세일 플랫폼 가입링크 (100달러 이상 거래시 10달러 상당의 BTC지급) : 바로가기
⑨ 후오비 글로벌 가입링크 : 바로가기
⑩ 후오비 코리아 가입링크 : 바로가기