Frontrunning un escroc ?
-
Frontrunning a Scammer
Alex Manuskin
A rather regular afternoon was interrupted by a message in the flashbots discord. I sometimes check out messages there and see if someone needs help recovering funds. This time the message seemed quite urgent. The victim was losing tens of thousands of dollars by the minute. What followed was an 8-hour hackathon to try and save as much of it as possible.The user u/happyguy007 wrote a detailed and excellent account, documenting in real-time how it feels to fall for a phishing scam.
This is the story of what it looks like from the other side. Before we begin, here’s a short introduction on how to get phished.
How to get scammed
If you would like to experience getting scammed by phishing sites firsthand, here is how you would go about it.Go to any public server of a known project, (e.g. Discord or Telegram), and ask basically any question where you request help with locked funds or a stuck transaction. Sketchy projects attract many scammers (if you want to improve your chances), as they often lurk in chats with high levels of FOMO. Telegram is much worse than discord in that regard, as it is much harder to organize and moderate.
Innocent request for help
Within minutes of asking a question an army of “tech supporters” will flok into your DMs offering help. Not sure how it works behind the scenes, but it seems there are actual farms of these scammers, employing personal to lurk and respond to these messagesEveryone and their bunny wants to help you!
Some of them are even smart enough to request that you delete the original message asking for help from the public chat. They know that there are dozens of other lurkers springing into action at once, and they don’t want anyone else to be able to “help” you.Please let me scam you exclusively
The tech supporter will usually ask a few questions, “describe the problem”, “what wallet are you using” etc.Regardless of what the issue is, the answer is always the same. “There is some problem in the database, and you have to sync your wallet”.
Of courses, there is no database, and there is no need to sync any wallets (this is what the blockchain is for). The truth is, dAPPs have bugs, and bugs have people asking questions, and people who are eager to not waste the opportunity to make 5000% APY before the rug pull, or who have just sent $10K to some farm and don’t immediately see the balance reflected, will naturally be concerned and want to talk to someone. This is the scammer’s bread and butter.
The representative will then (kindly, it’s always kindly) provide a link to a website that usually looks like a MetaMask or WalletConnect clone. The website URL will be some legitimate-looking word combination of “wallet” and “connect”. The website will have SSL encryption (easy with letsencrypt), and if you ask about it, they will assure you that everything is end-to-end encrypted and safe (lol). There are infinite domains they can use for the same scam and cycle through them every time one gets flagged or shut down.
Example of a phishing site impersonating WalletConnect
The website will have links to all the popular crypto wallets. No matter what wallet you use, or which one you click, you will get a page where you are requested to paste either a seed phrase or the private key (they give you options!)Example of a phishing site requesting a seed phrase
Once you do that, the game is over.At this point, nothing will really happen. No problem or issue will be resolved, and the representative will disappear or keep you engaged while they empty your wallet.
Sooner or later, it might dawn on you that this is exactly what they tell you not to do. NEVER GIVE YOUR SEED PHRASE OR PRIVATE KEY TO ANYONE.
But again, it is too late.
Here is a list of things that won’t help:
Unlinking your wallet from the dAPP
Logging out of your wallet
Changing the wallet’s password
Deleting your wallet and burning your PC/Phone
The seed phrase is the private key to your account. If you give it away, it’s not yours anymore. Whoever has it can connect from any other wallet, from any other computer, and from anywhere in the world.Back to our story
The experience of happyguy was probably something similar. According to their own account, they were approached by an impersonator on the SNX discord server and gave away the private key.Scammers come in different shapes and sizes. Unfortunately for happyguy, these were the slightly more sophisticated kind.
They immediately emptied the wallet from some tokens and almost all the ETH.
Transactions outgoing to the scammer’s wallet
These transactions were executed within a single block, suggesting the scammers had some automated script in place to grab as much as possible. They were also smart enough to use a fresh Ethereum address, as they didn’t need to get ETH from anywhere else. They had all the ETH they needed for gas from the compromised account. (Destination addresses of the scammers: address1, address2)After the initial sweep, the scammers returned to the crime scene to pick up the pieces.
Why didn’t they empty the entire wallet on the first block? Fortunately for happyguy, not all funds in his account were just ERC20 tokens and ETH. Some tokens were less well known (e.g. LP tokens) and some were locked up or staked in various protocols. These are the funds that might still be saved.
A punching fight
Reading the blockchain, it seems the scammers and happyguy himself were exchanging blows. The scammers sent some ETH back to the account, with the intention to begin withdrawing funds from other protocols where funds were locked up. They were quite successful at that.Happyguy was doing his best to try and remove the ETH they had sent but was always one step behind them. Whether it was just bad luck or since the scammers were running a script, happyguy was losing out in most battles. The scammers were successfully removing tokens from the account and leaving no ETH for happyguy to do anything about it.
Making any transaction such as sending out ETH or tokens is much harder to perform manually by simply pointing and clicking. If the scammers were indeed running a bot, it would be impossible to beat them manually.
Happyguy was able to remove some of the ETH and tokens, but most were going to the scammers. Trying to send ETH to the account and salvage some tokens would just cause more damage. The scammers used the received ETH to remove the tokens themselves. All hope seemed lost.
Serendipity
About 6 hours after the account got compromised, word of the event had reached the flashbots discord. It usually takes some time to go over the details of the case before anything can be done about it, but this case seemed urgent.As someone who had a chance to do this a few times, it is important to make sure that the account owner is indeed who they say they are. There were cases before where several people claimed ownership of the same account.
This usually happens because another popular scam is to try and sell compromised private keys on the “second-hand” market. These scammers try to sell an account that has already been compromised. The account might have some tokens, but ETH must be sent to it to move them out. The scammers then scoop up any incoming ETH for an easy profit. (example).
Some “victims” show up asking to replicate this behavior so they could profit themselves (rule of thumb, don’t engage with people you don’t know who call you “bro”)
I got hacked bro, please help bro
To validate the ownership of an account one can ask the owner to sign a message from an account they have access to. Naturally, it cannot be a message from the same account, as this could easily be the scammers.A decent approach is to find another address with which the account interacted. Obviously, it should be an address they have interacted with before they got phished, and the earlier the better. This service of MyCrypto can be used to sign and verify messages without paying for gas.
Once the account is verified — the tricky part starts. Having access to the account requires the private key. The number one rule (and the reason that this happens at all) is to never give anyone your private key or secret seed phrase.
There is no easy way around this. The scammers have access to the account and can reign rampage and do whatever they want. Getting the same level of access might be necessary, especially if time is of the essence, as was the case here. This time it was necessary for happyguy to share the private key (again), to have any chance of fighting back.
Fighting back
Once the private key is received, the first order of business is to stop the bleeding. This is done by running a “burner” script on the account, which does its best to remove all incoming ETH to the account.ETH is necessary to perform any operation on the network. It is used to pay the miner fees. Removing any ETH makes it a much harder job for the scammer to keep performing operations and emptying the account from tokens or interacting with protocols.
The burner was set up, and after a minute it had received the first payment from the scammers, looking to empty some additional tokens from the account.
Burning hurts
The burner works in a simple way. If ETH is detected in the account, try to spend as much as possible as a fee to the miner, and send the leftovers to some unrelated address. After the scammers’ deposit, all funds are paid to the miner, and the remainder is sent to the burn4Ever address (everyone will all be richer soon ). The burn Tx in this case paid 3000 Gwei to the miner, way above the average gas price at the time.What makes the burner effective, is the fact that it uses the entire ETH balance of the account to pay a fee to the miner.
The most basic Ethereum transaction is sending ETH, costing 21000 units of gas. More complicated transactions (such as a token transfer) require more gas, and thus, for a given amount of ETH in the account, an Ethereum transfer would pay the most per unit of gas, making it more preferable to the miner.
But what if the scammers run a script and broadcast their transaction super fast?
Here’s where another important feature comes in. An Ethereum transaction can be replaced after the broadcast, as long as they have the same nonce, and pay at least 10% more for gas than the transaction they are replacing.Since any valuable transaction of the scammers would likely require more than 21000 gas, it can be outbid by paying ALL the balance to the miners and sending the most basic transaction possible. As long as a burn transaction is sent, it is most likely to override and replace any transaction initiated by the scammer
Running the burner thus makes it quite hard for the scammers to make any transaction originating from the compromised account. Even if they run a script to steal the funds, their transaction would be front-run by the replacement burning transaction.
Back door extraction
Once the bleeding was stopped, it was time to try and extract what was still salvageable from the account. It is important to note here that whoever has the private key, has the same level of access to the account. It is not possible to make any remote operations that will hinder the scammer’s capability. So anything a white hat can do, the scammers can do. Success is not guaranteed.It thus becomes a race of who can extract the most, the fastest.
So how does one extract funds from an account where any ETH sent to it is burned? This is where flashbots come in.
Flashbots is a service that enables sending transactions directly to miners (via a relay). Importantly, it allows the creation of bundles of several transactions that can be executed atomically (sort of).
Normally, a transaction is the atomic unit on the Ethereum blockchain. A transaction can either succeed or revert. A reverted transaction does not change the state (but does pay for gas).
A transaction cannot be broadcast if the account it originates from does not have enough ETH to cover the gas costs. This is exactly why the burner is so effective.A bundle, however, can ensure a miner that they will be paid (generously) if and only if they execute a series of transactions exactly in the order you requested.
Let’s look at an example.
Funds are staked in a protocol. To remove them, we would like to remove them from the stake protocol and send the funds to a safe address, without giving the scammers a chance to remove the tokens.
An extraction bundle would look like this:
Unstake the funds
Transfer tokens to a safe address
Pay the miner
Steps 1 and 2 can be done with 0 gas paid to miners. In step 3, a contract call can be put in place, which checks a condition. If the condition is met, the miner gets paid. The appropriate condition, in this case, could be: “make sure the safe address has exactly X amount of tokens at the end of the bundle”.The bundle is sent directly to the miners via the flashbots relay and is only executed if all transactions take place.
Real-life example from the happyguy case:
Notice that all three steps pay 0 gasPrice, and the last transaction has a direct payment to the miner.
Direct payment to the miner
The fact that transactions in the bundle are private is a nice feature, but it is not what makes this work. When building a bundle, consider the fact that transactions might become public. What makes this work is the fact that even if transactions do become public, no miner would pick them up and execute them unless they execute them all at once.
Block space is quite valuable to waste on a non-paying transaction. The last transaction that actually makes the payment can only take place if the previous transactions were included before it. This creates (but does not guarantee) an atomic bundle to extract funds.Here comes the cavalry
Although we were ahead and had some tricks up our sleeve, the fight had just begun. As stated, the scammers have the exact same access to the account as we had, so there was still a question of being better than them.The plan was to start removing funds from the most to the least valuable protocols, starting with some funds locked in Curve stETH pool. Most remaining funds were in that pool (~40ETH), and it was slightly trickier to make the extraction.
Removing ETH from a protocol might be dangerous. Considering the burner script was running, if raw ETH would end up in the account, 40 ETH would have immediately been paid to the miner as a fee. Fortunately, in this case, removing the deposit as stETH is also possible, and thus preferred.
The pressure was on to write the extraction script as fast as possible before the scammers figured out what was going on. The fact that the scammers were actively sending funds to the account created some stress. The burner script is a good trick, but it might still fall short if there is some communication error and the incoming transaction is not picked up fast enough.
Furthermore, this was quite a lot of money. In many of these cases, there is no real-time pressure, the accounts might be long forgotten, or have funds locked in a way that is not immediately accessible. In this case, the scammers knew and were actively trying to remove the funds as well.
So time was of the essence, but a lot was at risk. Having ~$80K of someone else’s money on the line, depending on some script hacked in a half-hour is rather stressful, so you do what you can to make sure it will work.
Before sending the actual bundle, it is possible to simulate it to get an idea of the results and debug it. Once the simulation works as expected the bundle can be created and relayed to flashbots.
Luckily, the script did work. The funds were successfully transferred to a safe address, and we could continue to the next protocol. (Looking back, it was probably safer and easier to just move the CRV LP tokens)
Scammers might have noticed the activity on the account and tried sending in some more ETH. It was successfully burned as well.
Knowing the burner is holding its ground, and the bulk of the funds were safe, we could continue to recover the rest of the funds.
Overall we recovered funds from Curve, Sushi, Alchemix, Uniswap, Balancer, and others. Each requires a slightly different approach and some research.
Epilogue
After most of the funds were recovered, I discovered the entire process was “streamed” by Happyguy on a Reddit post. Perhaps some of the comments led them to the flashbots discord, where we could help. It was quite an intense few hours, working on recovering as much as we could. About ½ was lost, and ½ was recovered. Still a costly mistakeHow to avoid falling for a phishing scam
Many comments on the Reddit post scoff at the fact that the private key was compromised. Obviously, you should never give away the private key or seed. But this can happen to anyone. We had witnessed multiple cases, from first-time users and long veterans.Protocols and UIs can be confusing, and the scammers are there to feed off the user’s pain. Here are some best practices to avoid ending up in the flashobots discord (although you should definitely join).
DON’T PASTE YOUR SECRET SEED INTO ANYTHING ONLINE. It’s been said a million times, but still worth repeating
Use a hardware wallet. The keys are stored on the hardware wallet, so you should never even experience typing or pasting them onto a laptop/phone. The very experience should be daunting. Even if you are using a legitimate wallet, there are plenty of keyloggers/spam/malicious extensions that might get access to it. Just don’t do it.
Diversify your holdings. Having all the eggs in one basket is dangerous. Consider spreading it around between several accounts, and even several protocols. In this case, it helped slow the scammers down
Use different wallets. Some wallets such as ZenGo, Argent, and Gnosis do not use a seed phrase at all. Using less ubiquitous solutions makes it more difficult for scammers to attack.
If you do find yourself in the same situation as happyguy, reach out to the flashbots discord.Finally, providing this help would not have been possible without Alex, Scott, Santiago, and others from the flashbots crew.
Also thanks to Maor for the help writing and reviewing this post.
If you would like to donate gas money for future extractions, you can send some ETH here:
0xf3544bc8b85ead19352183c9f1f0a592634cb9c3Stay safe out there
TRADUCTION :
Un après-midi assez régulier a été interrompu par un message dans la discorde des flashbots. Il m’arrive de consulter des messages et de voir si quelqu’un a besoin d’aide pour récupérer des fonds. Cette fois, le message semblait assez urgent. La victime perdait des dizaines de milliers de dollars à la minute. Ce qui a suivi a été un hackathon de 8 heures pour essayer d’en sauver autant que possible.
L’utilisateur u / happyguy007 a écrit un comptedétaillé et excellent , documentant en temps réel comment il se sent de tomber pour une escroquerie de phishing.
C’est l’histoire de ce à quoi cela ressemble de l’autre côté. Avant de commencer, voici une brève introduction sur la façon de se faire hameçonnager.Comment se faire arnaquer
Si vous souhaitez faire l’expérience de se faire arnaquer par des sites de phishing de première main, voici comment vous vous y prendrez.
Accédez à n’importe quel serveur public d’un projet connu (par exemple Discord ou Telegram), et posez essentiellement n’importe quelle question où vous demandez de l’aide avec des fonds verrouillés ou une transaction bloquée. Les projets sommaires attirent de nombreux escrocs (si vous voulez améliorer vos chances), car ils se cachent souvent dans des discussions avec des niveaux élevés de FOMO. Telegram est bien pire que la discorde à cet égard, car il est beaucoup plus difficile à organiser et à modérer.Demande d’aide innocente
Dans les minutes qui ont suivant la pose d’une question, une armée de « partisans de la technologie » se mettra à votre DM en offrant de l’aide. Je ne sais pas comment cela fonctionne dans les coulisses, mais il semble qu’il existe de véritables fermes de ces escrocs, employant des personnels pour se cacher et répondre à ces messagesTout le monde et leur lapin veulent vous aider!
Certains d’entre eux sont même assez intelligents pour vous demander de supprimer le message d’origine demandant de l’aide du chat public. Ils savent qu’il y a des dizaines d’autres lurkers qui entrent en action à la fois, et ils ne veulent pas que quelqu’un d’autre puisse vous « aider ».S’il vous plaît laissez-moi vous arnaquer exclusivement
Le supporteur de la technologie posera généralement quelques questions, « décrire le problème », « quel portefeuille utilisez-vous », etc.
Quel que soit le problème, la réponse est toujours la même. « Il y a un problème dans la base de données, et vous devez synchroniser votre portefeuille ».
Bien sûr, il n’y a pas de base de données et il n’est pas nécessaire de synchroniser les portefeuilles (c’est à cela que sert la blockchain). La vérité est que les dAPPs ont des bugs, et les bugs ont des gens qui posent des questions, et les gens qui sont désireux de ne pas perdre l’occasion de faire 5000% APY avant le tapis, ou qui viennent d’envoyer 10K $ à une ferme et ne voient pas immédiatement l’équilibre reflété, seront naturellement préoccupés et voudront parler à quelqu’un. C’est le pain et le beurre de l’escroc.Le représentant fournira alors (gentiment, c’est toujours gentiment) un lien vers un site Web qui ressemble généralement à un clone MetaMask ou WalletConnect. L’URL du site Web sera une combinaison de mots d’apparence légitime de « portefeuille » et « se connecter ». Le site Web aura un cryptage SSL (facile avec letsencrypt), et si vous posez des questions à ce sujet, ils vous assureront que tout est crypté de bout en bout et sûr (lol). Il y a des domaines infinis qu’ils peuvent utiliser pour la même escroquerie et cycle à travers eux chaque fois que l’on est signalé ou arrêté.
Exemple d’un site de phishing usurpant l’identité de WalletConnect
Le site Web aura des liens vers tous les portefeuilles cryptographiques populaires. Quel que soit le portefeuille que vous utilisez, ou celui sur lequel vous cliquez, vous obtiendrez une page où il vous sera demandé de coller une phrase de départ ou la clé privée (ils vous donnent des options!)Exemple d’un site de phishing demandant une phrase de départ
Une fois que vous faites cela, le jeu est terminé.
À ce stade, rien ne se passera vraiment. Aucun problème ou problème ne sera résolu, et le représentant disparaîtra ou vous gardera engagé pendant qu’il videra votre portefeuille.
Tôt ou tard, vous pourriez vous rendre compte que c’est exactement ce qu’ils vous disent de ne pas faire. NE DONNEZ JAMAIS VOTRE PHRASE DE SEMENCE OU VOTRE CLÉ PRIVÉE À QUI QUE CE SOIT.
Mais encore une fois, il est trop tard.
Voici une liste de choses qui ne vous aideront pas:
Dissocier votre portefeuille du dAPP
Déconnexion de votre portefeuille
Modification du mot de passe du portefeuille
Suppression de votre portefeuille et gravure de votre PC / téléphone
L’expression de départ est la clé privée de votre compte. Si vous le donnez, ce n’est plus le vôtre. Quiconque l’a peut se connecter à partir de n’importe quel autre portefeuille, de n’importe quel autre ordinateur et de n’importe où dans le monde.
Retour à notre histoire
L’expérience de happyguy était probablement quelque chose de similaire. Selon leur propre compte, ils ont été approchés par un imitateur sur le serveur discord SNX et ont donné la clé privée.
Les escrocs se présentent sous différentes formes et tailles. Malheureusement pour happyguy, ce sont les genres légèrement plus sophistiqués.
Ils ont immédiatement vidé le portefeuille de certains jetons et de presque tous les ETH.Transactions sortantes dans le portefeuille de l’escroc
Ces transactions ont été exécutées dans un seul bloc, ce qui suggère que les escrocs avaient un script automatisé en place pour saisir autant que possible. Ils étaient également assez intelligents pour utiliser une nouvelle adresse Ethereum, car ils n’avaient pas besoin d’obtenir DES ETH de n’importe où ailleurs. Ils avaient tous les ETH dont ils avaient besoin pour le gaz du compte compromis. (Adresses de destination des escrocs : address1, address2)
Après le premier balayage, les escrocs sont retournés sur les lieux du crime pour ramasser les morceaux.
Pourquoi n’ont-ils pas vidé tout le portefeuille sur le premier bloc? Heureusement pour happyguy, tous les fonds de son compte n’étaient pas seulement des jetons ERC20 et des ETH. Certains jetons étaient moins connus (par exemple, les jetons LP) et certains étaient verrouillés ou jalonnés dans divers protocoles. Ce sont les fonds qui pourraient encore être économisés.
Un combat de coups de poing
En lisant la blockchain, il semble que les escrocs et happyguy lui-même échangeaient des coups. Les escrocs ont renvoyé des ESEE sur le compte, avec l’intention de commencer à retirer des fonds d’autres protocoles où les fonds étaient verrouillés. Ils ont eu beaucoup de succès.
Happyguy faisait de son mieux pour essayer de supprimer l’ETH qu’ils avaient envoyé, mais était toujours un pas derrière eux. Que ce soit juste de la malchance ou puisque les escrocs exécutaient un script, happyguy perdait dans la plupart des batailles. Les escrocs supprimaient avec succès les jetons du compte et ne laissaient aucun ETH pour happyguy de faire quoi que ce soit à ce sujet.
Effectuer toute transaction telle que l’envoi d’ETH ou de jetons est beaucoup plus difficile à effectuer manuellement en pointant et en cliquant simplement. Si les escrocs exécutaient en effet un bot, il serait impossible de les battre manuellement.
Happyguy a pu supprimer une partie de l’ETH et des jetons, mais la plupart allaient aux escrocs. Essayer d’envoyer DES ETH sur le compte et de récupérer des jetons ne ferait que causer plus de dégâts. Les escrocs ont utilisé l’ETH reçu pour supprimer les jetons eux-mêmes. Tout espoir semblait perdu.
sérendipité
Environ 6 heures après que le compte a été compromis, la nouvelle de l’événement avait atteint la discorde des flashbots. Il faut généralement un certain temps pour passer en revue les détails de l’affaire avant que quelque chose puisse être fait à ce sujet, mais cette affaire semblait urgente.
En tant que personne qui a eu la chance de le faire plusieurs fois, il est important de s’assurer que le propriétaire du compte est bien celui qu’il dit être. Il y a eu des cas auparavant où plusieurs personnes ont revendiqué la propriété du même compte.
Cela se produit généralement parce qu’une autre escroquerie populaire est d’essayer de vendre des clés privées compromises sur le marché « d’occasion ». Ces escrocs tentent de vendre un compte qui a déjà été compromis. Le compte peut avoir des jetons, mais ETH doit lui être envoyé pour les déplacer. Les escrocs assent ensuite n’importe quel ETH entrant pour un profit facile. (exemple).
Certaines « victimes » se présentent en demandant de reproduire ce comportement afin qu’elles puissent en tirer profit (règle de base, ne vous engagez pas avec des personnes que vous ne connaissez pas qui vous appellent « bro »)J’ai été piraté bro, s’il vous plaît aider bro
Pour valider la propriété d’un compte, on peut demander au propriétaire de signer un message à partir d’un compte auxquels il a accès. Naturellement, il ne peut pas être un message du même compte, car cela pourrait facilement être les escrocs.
Une approche décente consiste à trouver une autre adresse avec laquelle le compte a interagi. Évidemment, il devrait s’agir d’une adresse avec laquelle ils ont interagi avant d’être hameçonnés, et le plus tôt sera le mieux. Ce service de MyCrypto peut être utilisé pour signer et vérifier les messages sans payer d’essence.
Une fois le compte vérifié , la partie délicate commence. L’accès au compte nécessite la clé privée. La règle numéro un (et la raison pour laquelle cela se produit du tout) est de ne jamais donner à quiconque votre clé privée ou votre phrase de départ secrète.
Il n’y a pas de moyen facile de contourner cela. Les escrocs ont accès au compte et peuvent régner et faire ce qu’ils veulent. Il pourrait être nécessaire d’obtenir le même niveau d’accès, surtout si le temps presse, comme c’était le cas ici. Cette fois, il était nécessaire pour happyguy de partager la clé privée (encore une fois), d’avoir une chance de riposter.
Riposter
Une fois la clé privée reçue, le premier ordre du jour est d’arrêter l’hémorragie. Cela se fait en exécutant un script « burner » sur le compte, qui fait de son mieux pour supprimer tous les ETH entrants sur le compte.
ETH est nécessaire pour effectuer toute opération sur le réseau. Il est utilisé pour payer les frais de mineur. La suppression de tout ETH rend beaucoup plus difficile pour l’escroc de continuer à effectuer des opérations et à vider le compte des jetons ou à interagir avec les protocoles.
Le brûleur a été mis en place, et après une minute, il avait reçu le premier paiement des escrocs, cherchant à vider quelques jetons supplémentaires du compte.
Brûler fait mal
Le brûleur fonctionne de manière simple. Si ETH est détecté dans le compte, essayez de dépenser autant que possible des frais pour le mineur et envoyez les restes à une adresse non liée. Après le dépôt des escrocs, tous les fonds sont versés au mineur, et le reste est envoyé à l’adresse burn4Ever (tout le monde sera bientôt plus riche ). La brûlure Tx dans ce cas a payé 3000 Gwei au mineur, bien au-dessus du prix moyen du gaz à l’époque.
Ce qui rend le brûleur efficace, c’est le fait qu’il utilise l’intégralité du solde de l’ETH du compte pour payer des frais au mineur.
La transaction Ethereum la plus basique est l’envoi d’ETH, coûtant 21000 unités de gaz. Les transactions plus compliquées (telles qu’un transfert de jetons) nécessitent plus de gaz, et donc, pour une quantité donnée d’ETH dans le compte, un transfert Ethereum paierait le plus par unité de gaz, ce qui le rendrait plus préférable au mineur.
Mais que se passe-t-il si les escrocs exécutent un script et diffusent leur transaction super rapidement?
Voici où une autre fonctionnalité importante entre en jeu. Une transaction Ethereum peut être remplacée après la diffusion, tant qu’ils ont le même nonce, et payer au moins 10% de plus pour le gaz que la transaction qu’ils remplacent.
Étant donné que toute transaction précieuse des escrocs nécessiterait probablement plus de 21000 gaz, il peut être surenchéri en payant TOUT le solde aux mineurs et en envoyant la transaction la plus élémentaire possible. Tant qu’une transaction de gravure est envoyée, elle est plus susceptible de remplacer et de remplacer toute transaction initiée par l’escroc
L’exécution du brûleur rend donc assez difficile pour les escrocs d’effectuer toute transaction provenant du compte compromis. Même s’ils exécutent un script pour voler les fonds, leur transaction serait frontale par la transaction de gravure de remplacement.Extraction de porte dérobée
Une fois le saignement arrêté, il était temps d’essayer d’extraire ce qui était encore récupérable du compte. Il est important de noter ici que celui qui possède la clé privée a le même niveau d’accès au compte. Il n’est pas possible de faire des opérations à distance qui entraveront la capacité de l’escroc. Donc, tout ce qu’un chapeau blanc peut faire, les escrocs peuvent le faire. Le succès n’est pas garanti.
Il devient ainsi une course de qui peut extraire le plus, le plus rapide.
Alors, comment extrait-on des fonds d’un compte où tout ETH qui lui est envoyé est brûlé? C’est là qu’interviennent les flashbots.
Flashbots est un service qui permet d’envoyer des transactions directement aux mineurs (via un relais). Il est important de noter qu’il permet la création de paquets de plusieurs transactions qui peuvent être exécutées atomiquement (en quelque sorte).
Normalement, une transaction est l’unité atomique sur la blockchain Ethereum. Une transaction peut réussir ou revenir en arrière. Une transaction annulée ne change pas l’état (mais paie pour le gaz).
Une transaction ne peut pas être diffusée si le compte dont elle provient ne dispose pas d’un ETH suffisant pour couvrir les coûts du gaz. C’est exactement pourquoi le brûleur est si efficace.
Un paquet, cependant, peut assurer à un mineur qu’ils seront payés (généreusement) si et seulement s’ils exécutent une série de transactions exactement dans l’ordre que vous avez demandé.
Prenons un exemple.
Les fonds sont mis en jeu dans un protocole. Pour les supprimer, nous aimerions les retirer du protocole de mise et envoyer les fonds à une adresse sûre, sans donner aux escrocs une chance de supprimer les jetons.
Un paquet d’extraction ressemblerait à ceci :
Annuler la prise des fonds
Transférer des jetons vers une adresse sécurisée
Payer le mineur
Les étapes 1 et 2 peuvent être effectuées avec 0 gaz payé aux mineurs. À l’étape 3, un appel de contrat peut être mis en place, qui vérifie une condition. Si la condition est remplie, le mineur est payé. La condition appropriée, dans ce cas, pourrait être: « assurez-vous que l’adresse sécurisée a exactement X quantité de jetons à la fin du paquet ».
Le bundle est envoyé directement aux mineurs via le relais flashbots et n’est exécuté que si toutes les transactions ont lieu.
Exemple concret de l’affaire happyguy :
retirer
transfert
payer
Notez que les trois étapes paient 0 gasPrice, et la dernière transaction a un paiement direct au mineur.Paiement direct au mineur
Le fait que les transactions dans le bundle soient privées est une fonctionnalité intéressante, mais ce n’est pas ce qui fait que cela fonctionne. Lors de la création d’un ensemble, tenez compte du fait que les transactions peuvent devenir publiques. Ce qui fait que cela fonctionne, c’est le fait que même si les transactions deviennent publiques, aucun mineur ne les ramasserait et ne les exécuterait à moins qu’ils ne les exécutent toutes en même temps.
L’espace de bloc est très précieux à gaspiller sur une transaction non payante. La dernière transaction qui effectue réellement le paiement ne peut avoir lieu que si les transactions précédentes ont été incluses avant elle. Cela crée (mais ne garantit pas) un paquet atomique pour extraire des fonds.
Voici la cavalerie
Même si nous étions en avance et que nous avions quelques tours dans notre manche, le combat venait de commencer. Comme indiqué, les escrocs ont exactement le même accès au compte que nous avions, il était donc toujours question d’être meilleur qu’eux.
Le plan était de commencer à retirer des fonds des protocoles les plus précieux aux moins précieux, en commençant par certains fonds bloqués dans le pool Curve stETH. La plupart des fonds restants se trouvaient dans ce pool (~ 40ETH), et il était légèrement plus difficile de faire l’extraction.
Supprimer l’ETH d’un protocole peut être dangereux. Étant donné que le script du brûleur était en cours d’exécution, si l’ETH brut se retrouvait sur le compte, 40 ETH auraient immédiatement été payés au mineur à titre de frais. Heureusement, dans ce cas, la suppression du dépôt en tant que stETH est également possible, et donc préférée.
La pression était sur pour écrire le script d’extraction aussi vite que possible avant que les escrocs ont compris ce qui se passait. Le fait que les escrocs envoyaient activement des fonds sur le compte a créé un certain stress. Le script de gravure est une bonne astuce, mais il peut encore être insuffisant s’il y a une erreur de communication et que la transaction entrante n’est pas récupérée assez rapidement.
De plus, c’était beaucoup d’argent. Dans beaucoup de ces cas, il n’y a pas de pression en temps réel, les comptes peuvent être oubliés depuis longtemps ou avoir des fonds verrouillés d’une manière qui n’est pas immédiatement accessible. Dans ce cas, les escrocs savaient et essayaient activement de retirer les fonds ainsi.
Le temps presse donc, mais beaucoup de choses sont en danger. Avoir ~ 80K $ de l’argent de quelqu’un d’autre sur la ligne, en fonction d’un script piraté en une demi-heure est plutôt stressant, alors vous faites ce que vous pouvez pour vous assurer que cela fonctionnera.
Avant d’envoyer le bundle réel, il est possible de le simuler pour avoir une idée des résultats et le déboguer. Une fois que la simulation fonctionne comme prévu, le bundle peut être créé et relayé aux flashbots.
Heureusement, le script a fonctionné. Les fonds ont été transférés avec succès à une adresse sûre, et nous pourrions continuer jusqu’au protocole suivant. (Avec le recul, il était probablement plus sûr et plus facile de simplement déplacer les jetons CRV LP)Les escrocs ont peut-être remarqué l’activité sur le compte et ont essayé d’envoyer un peu plus d’ETH. Il a également été brûlé avec succès.
Sachant que le brûleur tient bon et que la majeure partie des fonds étaient en sécurité, nous pourrions continuer à récupérer le reste des fonds.
Dans l’ensemble, nous avons récupéré des fonds auprès de Curve, Sushi, Alchemix, Uniswap, Balancer et autres. Chacun nécessite une approche légèrement différente et quelques recherches.
épilogue
Après que la plupart des fonds ont été récupérés, j’ai découvert que l’ensemble du processus était « diffusé » par Happyguy sur un post Reddit. Peut-être que certains des commentaires les ont conduits à la discorde flashbots, où nous pourrions aider. C’était quelques heures assez intenses, travailler à récupérer autant que nous le pouvions. Environ 1/2 a été perdu, et 1/2 a été récupéré. Encore une erreur coûteuse
Comment éviter de tomber pour une escroquerie par hameçonnage
De nombreux commentaires sur le post Reddit se moquent du fait que la clé privée a été compromise. Évidemment, vous ne devriez jamais donner la clé privée ou la graine. Mais cela peut arriver à n’importe qui. Nous avions été témoins de plusieurs cas, de la part de nouveaux utilisateurs et d’anciens combattants de longue date.
Les protocoles et les interfaces utilisateur peuvent être déroutants, et les escrocs sont là pour se nourrir de la douleur de l’utilisateur. Voici quelques bonnes pratiques pour éviter de vous retrouver dans la discorde flashobots (bien que vous devriez certainement rejoindre).
NE COLLEZ PAS VOTRE GRAINE SECRÈTE DANS QUOI QUE CE SOIT EN LIGNE. Cela a été dit un million de fois, mais cela vaut toujours la peine d’être répété
Utilisez un portefeuille matériel. Les clés sont stockées sur le portefeuille matériel, vous ne devriez donc même jamais les taper ou les coller sur un ordinateur portable / téléphone. L’expérience même devrait être intimidante. Même si vous utilisez un portefeuille légitime, il existe de nombreux enregistreurs de frappe / spam / extensions malveillantes qui pourraient y accéder. Il suffit de ne pas le faire.
Diversifiez vos avoirs. Avoir tous les œufs dans le même panier est dangereux. Envisagez de le répartir entre plusieurs comptes, et même plusieurs protocoles. Dans ce cas, il a aidé à ralentir les escrocs vers le bas
Utilisez différents portefeuilles. Certains portefeuilles tels que ZenGo, Argent et Gnosis n’utilisent pas du tout de phrase de graine. L’utilisation de solutions moins omniprésentes rend plus difficile pour les escrocs d’attaquer.
Si vous vous trouvez dans la même situation que happyguy, tendez la main aux flashbots discorde.
Enfin, fournir cette aide n’aurait pas été possible sans Alex, Scott, Santiagoet d’autres de l’équipe de flashbots.
Merci également à Maor pour l’aide à la rédaction et à la révision de ce post. -
Un petit lien vers l’article original et la mention de son auteur me semblent être un absolu minimum…
https://amanusk.medium.com/frontrunning-a-scammer-95f34dd33cf8
-
Tout à fait, c’est involontaire, je pensais poster la traduc à la suite du texte en anglais sur une autre file.
Là, c’est une nouvelle file ?
-
@waza la tu es sur un nouveau topic que tu as toi même créé. Au pire édit ton premier message et commence le en précisant qu il s’agit de la traduction de tel truc avec le lien.
Édit : ou sinon tu écrit la ou tu voulais écrire et tu peux demander à un modo de supprimer ce topic
-
Merci
-
Comment avoir le courage de lire un message aussi long, au bout de 3 phrases j ai décroché. Vous pouvez pas faire clair et conscit ? Faire simple c’est mieux, raconter sa vie, je vois pas l’intérêt…
-
@ehpotsirk c’est vrai que la traduction n’aide vraiment pas !!
Sinon c’est assez intéressant sur la manière utilisée pour récupérer les fonds d’un portefeuille “volé”…
-
La traduction c est pas ouf c est du pavé mais je suis de l avis de herc ça reste intéressant/ captivant ^^
-
OK je vais lire jusqu’à la fin alors
-
@ehpotsirk ya un peu de longueur. Lit en diagonale ça passe creme ^^
-
non mais allez lire l’original, y’a des titres et de la mise en page…
-
J’en posterai plus, mais le contenu me paraissait digne d’être publié ici.
La prévention vaut mieux que des pleurs et des regrets.