DeFi 프로토콜이 Ethereum 생태계 내에서 계속 가열됨에 따라 CipherTrace는 점점 더 많은 익스플로잇과 공격 벡터가 드러나고 있습니다. 지난주 28 년 2020 월 4.4 일 Cover Protocol의 방패 채굴 계약 인 Blacksmith가 악용되었습니다. 해커는 채굴 계약의 버그를 사용하여 무한한 양의 COVER 토큰을 발행하고 프로젝트에서 XNUMX 만 달러 이상을 빼 냈습니다.
커버 프로토콜 출시 그들의 Post-Mortem은 어제 Devs에게 알려지지 않았지만 Blacksmith 계약의 초기 배포 이후 버그가 존재했다고 말하면서 철저한 보안 감사와 침투 테스트의 중요성을 강조했습니다. 현명한 계약스마트 계약이란 무엇입니까? 현명한 계약은 컴퓨터 전문가입니다. 더 보기.
무한 주조의 타임 라인
초기 공격자의 타임 라인
- 뉴 밸런서 유동성 풀은 추가 Blacksmith.sol 계약에.
- 공격자 매장 Blacksmith.sol 계약에 1,326,879.99 BPT 토큰.
- 그때 같은 공격자 실행 계약에서 자금을 인출하여 악용.
- 공격자는 계속 약 4.4 만 달러에 달하는 채굴 보상 및 자금 인출.
흥미로운 사건의 전환에서 Grap Finance에 연결된 "백인 해커"는 버그를 악용하여 약 4 백만 달러 상당의 COVER 토큰을 발행했습니다. Grap Finance는 결국 자금을 Cover Protocol에 반환했습니다.
Grap Finance Deployer 외부 소유 계정 (EOA) 타임 라인
- 새로운 유동성 풀은 인가 된 유동성 채굴을 위해.
- Grap Finance 배포자 EOA 기탁 된 15,255.55 BPT (DAI / Basis)는 Blacksmith.sol 계약을 통해 Cover의 풀에 들어갑니다.
- 약 XNUMX 분 후 자금은 빼는 Grap Finance Deployer의 EOA 잔액에 1 Wei를 남겨두고 커버합니다.
- 다른 외부 사용자 철수 한 Blacksmith.sol 계약의 DAI / Basis 풀에 대한 모든 유동성을 가진 Grap Finance를 이끌었던 같은시기에 Blacksmith.sol 계약에서 얻은 대부분의 잔액.
- Grap Finance 배포자 기탁 된 15,255.55 BPT (DAI / Basis)를 풀로 되돌립니다.
- 그런 다음 Grap Finance Deployer 주장 보상 및 익스플로잇으로 인해 민트 40,796,131,214,802,500,000.21 COVER.
- 발행 된 토큰을 소각 한 후 Grap Finance Deployer 전송 다시 Ether를 커버하기 위해 "다음에는 자신의 일을 처리하십시오."
무한 토큰 발행 방법 — 기술 분석
배경
이 익스플로잇은 Ethereum 내에서 스마트 계약을 구현하는 데 사용되는 Solidity 프로그래밍 언어의 기본으로 돌아갑니다. 이러한 계약이 컴파일되면 Ethereum Virtual Machine (EVM)은 다양한 기능을 실행하고 메모리 및 스토리지를 조작하는 데 사용되는 명령 (즉, opcode)을 이해할 수 있습니다. EVM에는 데이터를 저장할 수있는 세 가지 영역이 있습니다. 메모리, 스토리지 및 스택. 이러한 영역을 이해하는 것은 버그가 어떻게 악용되었는지 이해하는 데 중요합니다.
컴퓨팅 장치의 RAM (Random Access Memory)과 유사한 "기억”키워드는 특정 변수에 메모리를 할당합니다. 이 경우 해당 변수는 특정 기능으로 범위가 지정됩니다. 함수가 실행되면 메모리가 지워지지 만 함수가 반환되기 전에 해당 메모리의 내용이 스토리지로 푸시되면 남아있을 수 있습니다.
"저장”키워드를 사용하면 변수가 매핑 또는 데이터 구조의 데이터 저장소에 대한 포인터 역할을 할 수 있습니다. 스토리지 데이터는 함수 호출과 트랜잭션간에 지속적입니다. 내부적으로 저장소는 기본적으로 256 비트 단어를 256 비트 단어로 매핑하는 키-값 저장소입니다.
EVM은 레지스터 머신이 아니라 스택 머신입니다. 따라서 모든 계산은라는 데이터 영역에서 수행됩니다. 스택. 스택의 최대 용량은 1024 개 항목이지만 상위 16 개 항목 만 쉽게 액세스 할 수 있으므로 최상위 요소를 그 아래의 16 개 요소 중 하나로 교체하는 데 사용할 수 있습니다.
버그
해커는 Cover Protocol 내에서 CLAIM 및 NOCLAIM 토큰과 같은 특정 프로젝트 또는 풀의 토큰으로 스테이 커가 보상을받을 수 있도록하는 Shield Mining Contract 인 Cover Protocol의 Blacksmith.sol을 악용했습니다.
버그를 더 잘 이해하기 위해 먼저 대중을 살펴 보겠습니다. 풀 매핑 (즉, 데이터 저장) 인 변수 :
At 라인 118, 계약이 "memory"키워드를 통해 메모리에 풀 데이터를 캐시하는 것을 볼 수 있습니다.
그런 다음 라인 121, 계약은 스토리지의 풀을 updatePool (주소 _lpToken) 기능 ~을 사용하다 풀 스토리지 풀 변하기 쉬운.
그러나 더 아래로 보면 예금 (주소 _lpToken, uint256 _amount) 기능, 그것은 동일한 사용 풀 계산을 위해 함수 내의 메모리에 캐시 된 118 행의 변수 pool.accRewardsPerToken. 이 시점에서 풀 변수는 풀 매핑하고 메모리에 저장되었습니다.
결과적으로 풀 내 변수 예금 (주소 _lpToken, uint256 _amount) 기능은 변경하지 않습니다 풀 "memory"키워드를 사용하는 변수는 함수 자체 내에서만 범위가 지정되기 때문에 계약의 온 체인 저장소에 매핑됩니다. 거기에서 계약은 pool.accRewardsPerToken 이내 updatePool (주소 _lpToken) 저장을 사용하는 기능. 이제 updatePool (주소 _lpToken) 기능 pool.accRewardsPerToken 업데이트되는 것은 기술적으로 새로운 풀이었고 풀 메모리에.
이 취약점과 메모리와 스토리지 간의 오용에 따라 광부.보상상각 이내 예금 (주소 _lpToken, uint256 _amount) 함수가 잘못 계산되고 잘못된 pool.accRewardsPerToken, 우리는 여전히 메모리 캐시 인스턴스를 처리하는 deposit 함수 내에 있습니다. 풀.
입금 기능 외에도 Grap Finance와 같은 누구든지 실행시 엄청난 양의 발행 된 토큰을 얻을 수 있습니다. claimRewards (주소 _lpToken) 함수. 보상을받는 데 사용되는이 함수는 결국 _claimCoverRewards (풀 메모리 풀, 마이너 메모리 마이너) 참조하는 광부.보상상각 위에서 강조한 것입니다. 그 변수는 실제보다 훨씬 작기 때문에 pool.accRewardsPerToken, 계약으로 인해 풍부한 토큰이 발행됩니다.
주요 요점
CipherTrace는 악용 된 버그에 대한 이러한 배경이 철저한 보안 감사와 스마트 계약의 침투 테스트의 중요성을 밝혀주기를 바랍니다. blockchain블록 체인 — 비트 코인 및 기타 기술의 기반이되는 기술… 더 보기 하나는 배포하기로 선택합니다. Grap Finance는 익스플로잇을 통해받은 자금을 반환했지만 원래 해커는 여전히 DeFi 프로토콜에서 4 백만 달러 이상을 벌 수 있었고 COVER 토큰의 가치는 거의 99 %까지 떨어졌습니다.
출처 : https://ciphertrace.com/infinite-minting-exploit-nets-attacker-4-4m/