미어캣 파이낸스(Meerkat Finance) - BSC - REKT



뒤돌아 생각해보면, 막을 수 없는 것이었습니다.

BSC의 첫 번째 사건인 미어캣 파이낸스 사건은 리더보드 3위를 차지하는 인상적인 데뷔를 하게 되었습니다.

운영한 지 하루 만에, 미어캣 파이낸스는 1300만 BUSD와 73,000 BNB를 러그풀했고, 총금액은 약 3100만 달러였습니다.

저희는 바이낸스 스마트 체인이 이더리움의 DeFi 여름 시즌을 스피드 런(게임을 최단시간에 클리어하는 기록 경쟁 - 번역자 주)하는 것을 지켜보았습니다. 그들의 복사한 코드들은 이제 충분한 자금을 모았고, 러그 풀 단계에 다다른 것으로 보입니다.

그 여파는 흥미로운 상황을 만들어냈습니다.

CZ와 팀은 기업 체인을 롤백할까요?

미어캣속 스캠의 도둑들은 숨을 곳이 없어졌습니다.

소규모의 체인에서 그들이 도망칠 수 있는 곳이 어디가 있을까요? 바이낸스는 브릿지들을 닫아버렸고, 심지어 bscscan.com도 일시적으로 다운되었었습니다. 트래픽이 너무 많아서 그랬을까요? 아니면 일종의 연막작전일까요?

미어캣 파이낸스는 처음에는 해킹을 당했다고 주장했지만, BSC 사용자들을 내버려 둔 채 비난할 대상을 바이낸스 만을 남겨두고 그들의 계정을 지웠습니다.

0xdeadf4ce님께 감사드립니다

  • 미어캣 파이낸스 디플로이어는 프로젝트의 2개의 볼트를 업그레이드했습니다.
  • 공격자 주소는 볼트 프록시를 통해 승인이 필요 없는 시작 기능(permissionless initialization function)을 호출하여, 누구나 볼트의 소유자가 될 수 있도록 만들었습니다[2]
  • 그다음에, 공격자는 토큰 주소를 인풋으로 받는 0x70fcb0a7 서명을 포함하는 기능을 호출하여 볼트의 자금을 뽑아갔습니다. 업그레이드된 스마트 컨트랙트를 디컴파일해보면, 업그레이드는 단지 소유자가 자신의 이익을 위해 자금을 빼낼 수 있도록 하는 기능만을 추가하기 위함이었습니다.

일반적으로, 전략/볼트에서 소유자가 액티브하게 자금을 뺄 수 있는 기능이 있는 컨트랙트에 자금을 넣는다면, 자금뿐만 아니라 프로젝트팀에 대한 신뢰까지도 같이 넣는다고 생각하셔야 합니다.

그들은 언제든 돈을 빼갈 수 있기 때문입니다.

그러므로 연과 같은 프로젝트들은 아래의 그림과 같은 추가 확인을 통해, 팀은 전략/볼트에서 액티브되어있지 않은 자금만 구할 수 있도록 만들어놨습니다.

영향을 받은 볼트들 모두 볼트 프록시 레벨에서 upgradeTo(address newImplementation) 기능을 호출하는 것만으로 볼트의 로직을 새로운 로직으로 바꿀 수 있는 OpenZeppelin의 투명 프록시 업그레이드 패턴을 사용하고 있었습니다.

BUSD 볼트의 최초 구현은 0x49509a31898452529a69a64156ab66167e755dfb에 되어있고, WBNB 볼트의 최초 구현은 0x3586a7d9904e9f350bb7828dff05bf46a18bb271에 되어있었는데, 둘 다 눈에 잘 띄지 않고 인증된 컨트랙트였습니다.

미어캣 파이낸스 디플로이어는 upgradeTo()를 두 번 호출하였습니다:

이 호출은 볼트의 로직을 바꾸어, 초기 구현 시 포함되지 않았던 두 개의 주목해야 할 기능을 추가하였습니다.

  • init(address owner)
  • 바이트코드 디컴파일을 통해 확인해보면, 이 기능은 스토리지 슬롯의 주소였던 0을 기능에서 제공하는 주소로 변환하는 역할을 했습니다.

인증을 확인하는 것도 없이, 이 새롭게 추가된 기능은 결과적으로 볼트들의 백도어가 되었습니다.

투명 프록시들에서는 특정한 Initializer 패턴을 쓰는 것이 제일 나은 방법이고, 최초 볼트 구현 시 이미 잘 사용하였었기 때문에, 새롭게 추가한 init() 메소드는 볼트의 자금을 훔치는 계획된 범죄에 사용하려는 것 외에 어떤 의도로 추가했는지 상당한 의문이 드는 부분입니다.

  • 0x70fcb0a7(address _param1)

소스 코드를 직접 확인하는 것이 불가능했기 때문에 디컴파일 소스로 알아본 결과, init() 메소드를 호출한 사람과, 볼트 주소를 쿼리 목표로 사용하여 _param1로 공급된 토큰들을 토큰 컨트랙트의 balanceOf()를 사용하여 출금해간 사람이 같다는 사실을 알아보는 것까지가 한계였습니다. 두 개의 기능 모두 초기 볼트 구현에서는 포함되지 않았던 것들이었습니다.

이전 구현과 새로운 구현의 바이트코드 크기를 비교해보면, 새로운 구현이 기존의 로직의 1/4 크기밖에 되지 않았습니다.

업그레이드는 미어캣 파이낸스 디블로이어에 의해 진행되었기 때문에 온체인 데이터와 주어진 상황들을 고려해보자면 높은 확률로 고의적인 "러그풀"로 보이며, 아주 작은 확률로 프라이빗 키 유출 때문에 발생한 사건일 수 있습니다.

이 글을 작성할 당시, 자금들은 여러 주소로 나뉘어 바이낸스 거래소가 주관하는 바이낸스 브릿지로 보내진 것 같습니다.

Binance.org 브릿지는 현재 닫혔고, 이는 아마도 다른 체인으로 자금이 쉽게 이동하는 것을 막으려는 조치로 보입니다.

타임라인 (2021.04.03)

2021년 5월 4일 08:53:10 AM +UTC 미어캣 파이낸스 디플로이어가 WBNB Vault를 컨트랙트 0x9d3a4c3acee56dce2392fb75dd274a249aee7d57로 업그레이드합니다

Mar-04-2021 08:53:31 AM +UTC 미어캣 파이낸스 디플로이어가 BUSD Vault를 컨트랙트 0xb2603fc47331e3500eaf053bd7a971b57e613d36로 업그레이드합니다

Mar-04-2021 08:54:31 AM +UTC 공격자가 BUSD 볼트에서 메소드 0x70fcb0a7를 호출하여 13,968,039 BUSD를 빼갑니다

Mar-04-2021 08:54:55 AM +UTC 공격자가 WBNB 볼트에서 메소드 0x70fcb0a7를 호출하여 73,635 WBNB를 빼갑니다

다른 체인에서도 같은 방식으로 사건이 발생했었지만, 이번 사건에서의 힘의 균형은 완전히 다릅니다. CZ가 지켜보고 있고 브릿지가 불타면서, 도둑들은 숨을 곳이 없어졌습니다.

미어캣_러그풀 텔레그램 그룹에서도 바이낸스가 이번 사건을 어떻게 해결하는 게 좋을지에 대한 합의를 이루지 못했습니다.

과연 바이낸스가 체인을 롤백해서 사용자들에게 자금을 되돌려줄 수 있을까요?

답은 확실하지는 않습니다 - 미스테리한 21 검증자들이 이론적으로는 환불이 가능하도록 할 수는 있지만, 그렇게 될 것 같지는 않습니다. CeDeFi 이슈들에 기름만 붓는 격이 될 것이며 (이미 스트레스를 받고있을) BSC 변호사들에게 더 많은 일을 주는 것이 될 것이기 때문입니다.

바이낸스는 이러한 시나리오에서 어떻게 대응할지 미리 계획해둔 것이 있을 것입니다. 그들이 이번 사건을 어떻게 다루냐에 따라 선례가 생기게 될 것입니다.

이번 사건이 BSC에서 첫 번째 수백만 달러 러그풀은 아니지만, 팬케이크스왑이 유명해지면서 사용자들의 숫자가 늘어난 이후에 발생한 첫 번째 사건이었습니다.

바이낸스 내부의 어떤 사람이 나서서 머클 분배자를 어레인지하고 자금을 되돌려주는, 아마도 발생하지 않을 일을 무시한다면, 자금은 사실상 없어졌다고 볼 수 있습니다.

우리는 BSC의 프로토콜들이 이더리움보다 더 보안이 뛰어나지는 않다는 사실을 깨닫게 되었습니다.

CZ는 당신을 살려주지 않을 것입니다. 그들의 트랜잭션은 훨씬 싸지만, 오리지널 개발도 없습니다.

Eth L2가 생기면 이 기업 체인은 어떻게 될까요?


기사 공유하기

REKT는 익명 작성자들에 의한 공공 플랫폼이며, REKT에 작성된 관점이나 내용에 대해서 그 어떤 책임도 지지 않습니다.

기부 (ETH / ERC20): 0x3C5c2F4bCeC51a36494682f91Dbc6cA7c63B514C

disclaimer:

REKT는 당사 웹 사이트의 익명의 작성자 또는 REKT에 의해 게시되거나 관련된 서비스에서 게시되는 콘텐츠에 대해 어떠한 책임도 지지 않습니다. 당사는 익명 작성자들의 행동 및 게시물에 대한 규칙을 제공하지만, 익명의 작성자가 웹 사이트 또는 서비스에 게시, 전송 혹은 공유한 내용을 통제하거나 책임지지 않으며, 귀하가 웹 사이트 또는 서비스에서 직면할 수 있는 불쾌함, 부적절함, 음란함, 불법 또는 기타 해로운 콘텐츠에 대해서도 책임을 지지 않습니다. REKT는 당사 웹 사이트 또는 서비스 사용자의 온라인 또는 오프라인 행위에 대한 책임을 지지 않습니다.