SharkTeam: Prisma Finance 공격 분석
SharkTeam
2024-04-07 11:08
本文约1517字,阅读全文需要约6分钟
2024년 3월 28일, Prisma Finance는 플래시 대출 공격을 받아 프로젝트 당사자가 약 1,221만 달러의 손실을 입었습니다. SharkTeam은 이번 사건에 대한 기술적 분석을 실시하고 보안 예방 조치를 요약했으며, 후속 프로젝트가 이를 통해 교훈을 얻고 블록체인 업계의 보안 방어선을 공동으로 구축할 수 있기를 바랍니다.

2024년 3월 28일, Prisma Finance는 플래시 대출 공격을 받아 프로젝트에서 약 1,221만 달러의 손실을 입었습니다.

SharkTeam은 이번 사건에 대한 기술적 분석을 실시하고 보안 예방 조치를 요약했으며, 후속 프로젝트가 이를 통해 교훈을 얻고 블록체인 업계의 보안 방어선을 공동으로 구축할 수 있기를 바랍니다.

1. Prisma Finance 공격 거래 분석

공격자 1: 0x7e39e3b3ff7adef2613d5cc49558eab74b9a4202 (약어로 0x 7 e 39)

공격 계약 1: 0xd996073019c74b2fb94ead236e32032405bc027c (약어로 0x d 996)

공격자 2: 0x7fe83f45e0f53651b3ed9650d2a2c67d8855e385

공격 계약 2: 0x4148310fe4544e82f176570c6c7b649290a90e17

공격 대상 계약: 0x1cc79f3f47bfc060b6f761fcd1afc6d399a968b6

공격에는 16개의 트랜잭션이 포함되어 있으며 첫 번째 공격 트랜잭션을 예로 들어 보겠습니다.

0x00c503b595946bccaea3d58025b5f9b3726177bbdc9674e634244135282116c7

공격 과정은 다음과 같습니다.

1. 주소 0x56a201b872b50bbdee0021ed4d1bb36359d291ed(0x56a2로 약칭)에 있는 대상 계약의 모든 담보 및 부채를 읽습니다.

반환 결과는 다음과 같습니다.

주소 0x 56 a 2 대상 계약의 총 담보는 1,745wstETH이고 총 부채는 1,442,100mkUSD입니다.

2. 공격자 0x 7 e 39는 계약 0x d 996을 공격하여 mkUSD 부채 계약의 flashLoan 함수를 호출합니다.

파라미터 수신자는 MigrateTroveZap으로 설정되어 있으며 금액은 위에서 쿼리한 모든 부채입니다.

그런 다음 수신기(여기서는 MigrateTroveZap)의 onFlashLoan 함수가 flashLoan 함수에서 호출됩니다.

onFlashLoan 기능은 우선 플래시론을 통해 원래의 부채를 모두 상환하고, 수취인에게 담보를 인출한 후, 수취인은 일정 금액의 담보를 다시 담보로 받아 일정 금액의 부채를 빌리게 됩니다. 주로 다음과 같은 2가지 함수가 있습니다.

(1) closeTrove 기능, 부채를 상환하고 troverManager에서 수신자에게 모든 담보(1745.08 swtETH)를 추출합니다(여기서는 MigrateTroveZap 계약이 있습니다).

(2) openTrove 기능, 수신자는 463.18 wstETH를 troverManager에 다시 담보로 제공하고 1,443,598 mkUSD의 부채를 발생시킵니다.

위 데이터에서 볼 수 있듯이 flashLoan 기능이 실행된 후에도 수신자는 주소 0x56 a 2에 속하는 troverManager에서 추출된 담보를 계속 유지하며 금액은 약 1745.08 – 463.18 = 1281.90 wstETH입니다.

3. 공격자 0x 7 e 39는 계약 0x d 996을 공격하여 플래시 대출을 통해 Balancer로부터 1 wstETH를 빌렸습니다.

그런 다음 1 wstETH를 모기지하고 2000 mkUSD의 부채와 수수료를 추가하여 총 부채 2200 mkUSD를 빌리십시오.

4. 2단계와 유사하게 mkUSD 부채 계약에서 flashLoan 함수를 호출합니다. 여기서 매개변수 수신자는 여전히 MigrateTroveZap으로 설정되어 있으며 금액은 마지막 1 wstETH 담보 이후 전체 부채, 즉 2000 mkUSD입니다. FflashLoan 함수에서는 수신기의 onFlashLoan 함수가 호출된 후 closeTrove 및 openTrove 함수가 호출됩니다.

그러나 closeTrove 및 openTrove 함수의 매개변수 계정은 더 이상 위의 주소 0x56 a 2가 아니라 1 wstETH를 약속하는 공격 계약 0x d 996입니다.

(1) closeTrove 기능, 부채를 상환하고 troverManager에서 수신자에게 모든 담보(1swtETH)를 인출합니다(여기에는 여전히 MigrateTroveZap 계약이 있습니다). 이때 수신기에는 1281.90 + 1 = 1282.90 wstETH가 있습니다.

(2) openTrove 기능, 수신자는 1282.80 wstETH(거의 전부)를 troverManager에 다시 담보로 제공하고 2001.8 mkUSD의 부채를 발생시킵니다.

실제로 여기 담보에 있는 1281.80 wstETH는 공격 계약 0xd 996에 속하지 않고 위 주소 0x56 a 2에 속합니다.

5. 마지막으로 공격자 0x7e 39는 공격 컨트랙트 0xd 996을 통해 별도로 closeTrove 함수를 호출하여 저당권 1282.80 wstETH를 공격 컨트랙트 0xd 996으로 추출했다.

플래시 대출을 상환한 후에도 공격자는 여전히 1281.80 wstETH(미화 약 230만 달러)의 이익을 얻었습니다.

2. 취약점 분석

이 사건의 근본 원인은 프로젝트 계약에 공격자가 이 취약점을 이용하여 다른 계정 주소에서 약속된 자산을 얻을 수 있는 논리 및 권한 확인이 있다는 것입니다.

공격자가 최종적으로 획득한 wstETH는 troverManager 계약의 원래 주소 0x56 a 2의 담보이며, mkUSD 계약의 flashLoan 함수를 통해 MigrateTroveZap 계약의 onFlashLoan 함수의 매개변수를 맞춤화하고 MigrateTroveZap을 사용하여 이를 공격 계약의 담보로 변환한 후 추출합니다.

공격자는 mkUSD 계약의 flashLoan 기능과 MigrateTroveZap 계약의 onFlashLoan 기능을 통해 다른 계좌 주소의 담보 및 인출을 조작합니다.

(1) onFlashLoan 함수의 수신자는 계정의 모든 담보를 수신하므로 수신자가 신뢰할 수 있는지 확인해야 하기 때문에 flashLoan 함수에는 매개변수 수신자 주소에 대한 확인이 부족합니다.

(2) onFlashLoan 기능에는 closeTrove 및 openTrove 기능이 모두 운영 계정의 자산이기 때문에 계정 주소에 대한 확인이 부족하므로 계정에 권한 확인을 추가해야 합니다.

이 두 개의 주소 매개변수를 확인하는 것 외에도 flashLoan 기능의 수량 매개변수와 구현 로직을 확인하는 것도 필요할 수 있습니다.

3. 안전 제안

이 공격에 대응하여 우리는 개발 과정에서 다음과 같은 예방 조치를 따라야 합니다.

(1) 프로젝트의 설계 및 개발 과정에서 특히 자산 양도와 관련된 경우 논리의 무결성과 엄격함이 유지되어야 하며, 발신자가 기능 연구 권한에 대한 검증을 강화해야 합니다. , 호출 함수, 함수 매개변수, 전송 로직 등은 모두 안전하고 신뢰할 수 있습니다.

(2) 프로젝트가 온라인으로 진행되기 전에 계약 감사를 수행할 전문 제3자 감사팀을 찾아야 합니다.

About Us

SharkTeam의 비전은 Web3 세계를 보호하는 것입니다. 이 팀은 블록체인 및 스마트 계약의 기본 이론에 능숙한 전 세계의 숙련된 보안 전문가와 수석 연구원으로 구성되어 있습니다. 위험 식별 및 차단, 스마트 계약 감사, KYT/AML, 온체인 분석 등을 포함한 서비스를 제공하며 지능형 지속 위협(Advanced Persistant Threat, Advanced Persistant Threat)에 효과적으로 대처할 수 있는 온체인 지능형 위험 식별 및 차단 플랫폼 ChainAegis를 만들었습니다. 지속적인 위협) Web3 세계. , APT). Polkadot, Moonbeam, Polygon, Sui, OKX, imToken, Collab.Land 등 Web3 생태계의 다양한 분야의 주요 플레이어와 장기적인 협력 관계를 구축했습니다.

공식 홈페이지: https://www.sharkteam.org

Twitter:https://twitter.com/sharkteamorg

Telegram:https://t.me/sharkteamorg

Discord:https://discord.gg/jGH9xXCjDZ

SharkTeam
作者文库