느린 안개 기술: Cover 프로토콜 해킹 간략 분석
2020년 12월 29일, 느린 안개 지역 정보 Cover 프로토콜 가격 폭락에 따라, 느린 안개 보안 팀의 전체 공격 프로세스에 대한 간략한 분석은 다음과 같습니다.
- Cover 프로토콜의 Blacksmith 계약에서 사용자는 deposit 함수를 통해 BPT 토큰을 담보로 제공할 수 있습니다;
- 공격자는 첫 번째 deposit - withdraw 후 updatePool 함수를 통해 풀을 업데이트하고 accRewardsPerToken을 사용하여 누적 보상을 기록합니다;
- 이후 _claimCoverRewards 함수를 통해 보상을 분배하고 rewardWriteoff 매개변수를 사용하여 기록합니다;
- 공격자가 첫 번째 withdraw 후에도 소량의 BPT를 담보로 남겨둡니다;
- 이때 공격자는 두 번째 deposit을 진행하고 claimRewards를 통해 보상을 인출합니다;
- 문제는 rewardWriteoff의 구체적인 계산에서 발생하며, 공격자가 두 번째 deposit - claimRewards를 진행할 때 Pool 값이 memory로 정의됩니다. 이때 memory에서 가져온 Pool은 공격자가 첫 번째 withdraw 시 updatePool로 업데이트한 값입니다;
- memory에서 가져온 Pool 값이 오래된 값이므로, 그에 해당하는 accRewardsPerToken 기록도 오래된 값이 miner에 할당됩니다;
- 이후 새로운 updatePool을 진행할 때, 공격자가 첫 번째 withdraw 후 풀의 lpTotal이 줄어들었기 때문에, 마지막으로 얻는 accRewardsPerToken은 커지게 됩니다;
- 이때 공격자에게 할당된 accRewardsPerToken은 오래된 작은 값이며, rewardWriteoff 계산 시 얻는 값도 작게 나오지만, 공격자가 claimRewards를 진행할 때 사용하는 것은 풀 업데이트 후의 accRewardsPerToken 값입니다;
- 따라서 구체적인 보상 계산 시 이 새로운 구형 매개변수 간의 차이로 인해, 큰 값이 계산될 수 있습니다;
- 그래서 마지막으로 계산 결과에 따라 공격자에게 보상을 주기 위해 추가로 더 많은 COVER 토큰이 발행되어 COVER 토큰이 증가하게 됩니다.
구체적인 accRewardsPerToken 매개변수 차이 변화는 아래 그림과 같습니다:
관련 태그
체인캐처(ChainCatcher)는 독자들에게 블록체인을 이성적으로 바라보고, 리스크 인식을 실제로 향상시키며, 다양한 가상 토큰 발행 및 조작에 경계해야 함을 상기시킵니다. 사이트 내 모든 콘텐츠는 시장 정보나 관련 당사자의 의견일 뿐이며 어떠한 형태의 투자 조언도 제공하지 않습니다. 만약 사이트 내에서 민감한 정보를 발견하면 “신고하기”를 클릭하여 신속하게 처리할 것입니다.
관련 태그