Maison  >  Article  >  Revue : Analyse du piratage MOBOX

Revue : Analyse du piratage MOBOX

王林
王林avant
2024-03-21 09:46:191117parcourir

Contexte

Le 14 mars 2024, selon une alerte précoce du système de surveillance de sécurité SlowMist MistEye, le protocole de prêt décentralisé MOBOX sur la chaîne Optimism a été attaqué, entraînant une perte d'environ 750 000 $ US. L'équipe de sécurité de SlowMist a analysé l'incident de l'attaque et a partagé les résultats comme suit :

Attaquant address:

复盘:MOBOX 被黑分析

0x4e2c6096985e0b2825d06c16f1c8cdc559c1d6f80x96f004c81d2c7b907f92c45922d38ab870a53945

Attacked contract address:

0xae7b6514af26bcb2332fea53 b8dd57bc13a7838e

Attacking transaction:

0x4ec3061724ca9 f0b8d400866dd83b92647ad8c943a1c0ae9ae6c9bd1ef789417

Attack the core

Cette attaque comporte deux points principaux. Le premier est que l'attaquant exploite la vulnérabilité de la fonction Bore() dans le contrat. Chaque fois que cette fonction est appelée, la distribution de la récompense à l'adresse du recommandateur sera déclenchée. Étant donné que le calcul de la récompense est basé sur le nombre de jetons transférés, l'attaquant peut augmenter le montant du prochain emprunt en transférant à nouveau la récompense au référent vers le contrat attaqué. La seconde est que chaque fois que la fonction Bore() est appelée, une partie des jetons MO du pool sera brûlée, de sorte que le prix des jetons MO augmente continuellement. En fin de compte, l'attaquant peut réaliser des bénéfices en empruntant et en continu. superposer les récompenses.

Analyse des transactions

Nous pouvons constater que l'ensemble du processus d'attaque passe principalement par la boucle appelant la fonction Bore() avec des failles, puis appelant immédiatement Redemption() pour le rachat, puis attribuant les jetons au recommandataire. Revenir au contrat d'attaque.

En suivant la fonction Bore() pour analyse, nous pouvons constater qu'à chaque fois que cette fonction est appelée, une partie des jetons MO du pool sera brûlée.

Cependant, le montant de l'USDT prêté est calculé en fonction du prix des jetons MO dans le pool. Étant donné que le prix des jetons MO continue d'augmenter en raison de la gravure, l'attaquant peut éventuellement emprunter une petite quantité de jetons MO. un certain nombre de jetons USDT ont été émis.

复盘:MOBOX 被黑分析

De plus, chaque emprunt donnera à une adresse de référence une récompense en dividendes, et la fonction est calculée en fonction du nombre de jetons MO transmis.

复盘:MOBOX 被黑分析

Cependant, puisque l'adresse du référent est également contrôlée par l'attaquant (0x96f004c81d2c7b907f92c45922d38ab870a53945), l'attaquant peut retransférer cette partie de la récompense après avoir terminé l'opération de prêt, superposant ainsi le montant du prochain prêt et le dividende. récompense .

复盘:MOBOX 被黑分析

Après l'opération de cycle ci-dessus, l'attaquant a augmenté le prix des jetons MO et a finalement pu utiliser une très petite quantité de jetons MO pour prêter une grande quantité d'USDT dans le contrat, et déséquilibrer directement l'échange. USDT hors du pool et repartez avec un profit.

复盘:MOBOX 被黑分析

Résumé

Le cœur de cette attaque est que l'attaquant utilise la fonction emprunter() pour brûler certains jetons du pool, emprunter continuellement des actifs, augmenter le prix des jetons dans le pool, et obtenir des recommandations. Les gens récompensent les gens, puis transfèrent les jetons et les empruntent à nouveau, ajoutant ainsi continuellement des récompenses et manipulant les prix. L'équipe de sécurité de SlowMist recommande aux parties au projet d'ajouter des délais de blocage à des fonctions similaires et de prendre en compte plusieurs facteurs lors de la conception du modèle de prix des prêts afin d'éviter que des incidents similaires ne se reproduisent.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer