4 minute read

Introudction

Fulcrum had a $2.5m vulnerability over a month ago and still hasn’t told anyone

  • 단 하나의 트렌젝션(Flashloan)에 의해 2.5M정도 해킹당할 수 있었으나, 1inch팀에서 사전에 제보
  • 해당 문서에는 취약점에 대한 기술적인 내용은 없고, bZx팀과의 1inch팀간의 다툼만 기록되어 있음

Issues between 1inch and bZx

  • 첫번째 논란은 보상과 관련된 것, 무려 2.5M을 잃어 버릴 수 있는 취약점인데도 bZx 팀에서는 1.5k를 제안, 단순히 취약점을 패치하거나 공격하는데 코드가 몇 줄 안된다는게 이유, 결국 두 팀간의 논의 끝에 3.5k에 합의
  • 패치 이후에 bZx는 아무런 일이 없었던 것 처럼 행동하기를 원했음. 심지여 NDA를 서명하지 않았음에도 1inch팀이 입다불고 있기를 협박한 것으로 보임
  • 그리고 몇 주 후 아래의 2월15일에 Flashloan을 활용한 공격이 bZx에 있었고, bZx는 1inch팀을 해킹의 배후로 지목하면서, 모욕적인 언행을 보임, 1inch 팀으로봐서는 화가날 만한 것 같음

Vulnerability

  • 취약점 분석을 위해, 공식 github를 살펴보았지만 Fulcrum 서비스 관련 소스코드 레파지토리가 없음
  • 여전히 bZx사의 Fulcrum DeFi 서비스에서는 아래 그림과 같이 OpenSouce라고 광고하고 있음
Image Alt 텍스트
그림.1 bZx의 Fulcrum 서비스 Opensource라고 광고하지만, 실제 github에 아무것도 없음
  • 사고대응 부터 정직함까지 무엇하나 믿을 수 없는 회사이고, 절대 이 DeFi에는 돈을 예치하면 안 될 것으로 판단됨

Arbs Exploit DeFi to Make $900k in Seconds; Provoke Soul-Searching in the Process

  • bZx와 Fulcrum은 동일한 의미로 사용됨
  • Flashloan기능을 활용한 시세차익 공격에 대한 분석 글

Attack Scenario

공격 시나리오는 다음과 같습니다.

  • 해커가 10k ETH를 flashloan으로 dydx 거래소에서 빌림
  • 해커가 5.5k ETH를 112 WBTC(Wrapped Bitcoin)으로 Compound DeFi에서 교환함
  • bZx의 마진 거래 기능을 활용해서, 최대 레버리지 BTC기반 ETH를 숏포지션(매도하여 가격을 떨어뜨림)을 잡아서, 많은 양의 ETH를 BTC로 교환하도록 유도. 즉 ETH의 가치 하락을 의도했다라고 보며, 실제 공격에 1.3k ETH가 활용됨
  • 해커의 요청(5배 숏포지션)을 처리할려고, bZx는 5.6k ETH를 Kyberswap에서 51 WBTC로 교환 시도, Kyberswap는 이 요청을 처리하기 위해 Uniswap에 주문하고 이로 인해 Uniswap에서 WBTC 가격이 갑자기 상승함
  • 스와핑 서브시에서 최대한 좋은 교환비로 ETH와 BTC를 교환을 시도했지만, 원래 51 BTC의 적절한 가치는 2k ETH이며, BTC와 ETH 모두 총 공급량이 타토큰 대비 상대적으로 상당히 제안되게 공급이 이뤄지기 때문에 가격이 급상승하게 되었고, 51BTC에 대해 5.6k를 bZx가 지불하게 됨
  • bZx에서는 마진거래를 마감할 때가 되면 ETH 가격이 오르면, 해커의 예치금을 공제해 손실을 만회함. 하지만 해커의 예치금을 손실을 만회할 정도로 충분하지 않음(2k –> 5.6k, 약 3배 올랐음)
  • 현재 bZx의 실질적은 손실은 2.3k ETH 정도 됨 만약에 해커가 마진 거래를 살리지 않는다면…
  • Uniswap의 경우 스와핑 알고리즘이 CPMM임으로 현재 ETH의 가치가 BTC대비 떨어져 있음, 해커는 112 BTC를 Uniswap 풀에서 교환함, 약 6.8k ETH를 얻음, 이제는 BTC대비 ETH의 가치가 올라갔음
  • 담보로 잡힌 5.5k ETH를 해제하기 위해서 112 WBTC의 가치에 해당하는 4.2k ETH를 컴파운드에 상환함
  • 해커는 이제 12.5k ETH를 자산을 가지고 있고, 바로 10.0k ETH를 bZx에 상환하고, 쿨하게 1.3k ETH를 포기하고, 1.2k ETH의 이익을 취한다. bZx는 2.3k ETH의 영구적 손실을 입음
Image Alt 텍스트
그림.2 bZx대상 Flashloan기반 공격 시나리오 애니메이션

다양한 자료에 공격에 대한 그림이 존재하지만, 해커를 중심에두고 순차적으로 공격을 그림으로 표현했기 때문에, 아마 공격에 대한 이해가 가장 쉬울 것으로 판단된다.

Discussion

앞에서 공격에 대한 그림을 봤지만, Flashloan의 기능을 기반으로 하는 공격이며, 그렇지만 중요한 것은 왜 bZx인지를 알아내는 것이 블록체인 보안을 학습하는 입장에서는 중요하다. 과거 윈도우, 리눅스 보안에서의 표현을 빌리면 왜 수만은 Attack Surface중에 bZx라는 공격 벡터를 선택했느냐? 이것에 대해서 의견을 나눠볼 필요가 있고 이 것에 대한 토론 결과를 가지고 소스코드 분석을 통해 최대한 검증할 수 있는 것은 검증하는 것이 중요하다고 생각된다.

  • 왜 ETH/BTC 일까?
    • BTC, ETH 이 두 토큰은 매우 시장에서 희소성을 가지고 있음, 타 토큰 대비 발행량이 매우 적음(추정)
  • 해커는 공격 목표 DeFi를 어떤 기준으로 선택했을까?(왜 bZx인가?)
    • Flashloan 기능을 지원해야 한다.(Mandatory !!!)
    • Uniswap과 같은 CPMM기반의 Swapping 서비스를 활용해야 한다.
  • Compound에서 돈을 빌린 이유는?

Mitigation

bZx가 유사한 공격으로부터 자신들을 지키기위해 어떻게 패치했는지 그 내용을 분석해서, 이 섹션에 기술해야 하지만 b2x사는 Fulcrum 소스코드를 다 지워서 어떤 식으로 패치했는지 확인할 수 없음. 아마도 전부 비공개로 전환한 것으로 판단됨

Fulcrum iToken Duplication Incident

  • 20년 9월 15일에 발생한 bZx의 ibTokne인 iToken관련 취약점으로 약 8백만 달러 상당의 사고가 발생함
  • 자세한 내용은 모르겠지만, 해커를 식별했고, 검거해서 돈을 돌려 받음
  • 해커에 대한 법적 책임에 대한 부분은 노코멘트, 아마도 고소를 취하하던지 법적인 책임을 묻지 않는 선에서 해커와 합의를 한 것으로 추정됨
  • Marc Thalen이라는 Bitcoin.com의 엔진니어는 자기가 최초로 이 버그를 발견했다라고 주장, Marc의 경우 $4.5k를 bZx로 받았음. 다른 글을 확인해보니 공격이 시작되고, 종료되기 전 이 가운데 어디쯤에서 취약점에 대해서 제보한 것으로 보임. Marc Thalen이 제보하기 전까지 bZx는 무엇이 잘못되었는지도 모르고 있었음

Cause of Vulnerability(COV)

  • 문제가 되는 소스를 확인할 수는 없음. github 통채로 없어짐
  • 취약점은 너무나 간단한데, transfer 함수에서 from, to의 주소에 대한 검증이 없어서임
  • 즉 from과 to가 동일한 주소일때 벨란스가 0이 되었다가, 2배가 되는 기적이 일어남
  • 그림 3을 보면 공격자가 자기 계좌에 100개의 토큰이 있고, 전체를 자신의 주소로 전송하는 코드를 만들면
  • 그림 3의 balanceFrom도 100이고, balanceTo도 100이된다.
  • 이 상태에서 그림.3의 아래 코드를 수행하게 되면 balanceFormNew는 100에서 100을 빼게 됨으로 잠시 나의 계좌가 0이 되었다가 balanceNew는 200이므로 내 계좌는 200으로 업데이트 된다.
  • 이를 무한히 반복하면 내 계좌의 돈을 계속 늘일 수 있음
Image Alt 텍스트
Image Alt 텍스트
그림.3 bZx Fulcrum의 문제가 되는 코드 조각, from, to 주소에 대한 검증 부재로 발생하는 문제

Conclusion

  • 우리는 Flashload 기능을 활용한 bZx을 대상으로 한 공격을 살펴봤음. 이 공격의 핵심은 Flashloan 기능에도 있지만, 또한 Uniswap과 같은 CPMM 알고리즘을 기반으로 토큰간의 가치를 결정하는 변동성에도 있는 것으로 판단됨
  • 1inch사와 bZx사의 다툼을 보면 bZx사의 DeFi 프로토콜에 자산을 예치하는 것에 대해서 부정적인 생각이 들며 극도의 신중함이 필요해 보임

References