Technical Analysis of the Poly Network Hack(rekt.news) |
Technical Analysis of the Poly Network Hack(rekt.news) |
The potential for messing up on the way is simply enormous. Remember Silk Road? Guy got v& because of a stackoverflow post.
Ulbricht messed up in a lot of different ways. That was just one of the many. It wasn't just one little slip-up; he had truly awful OPSEC. (And pretty poor technical skills in general, it seems, based on his SO question [1] and various other things.) Even if the SO question potentially may have been found through parallel construction (no way to ever know), there were so many different parallel paths investigators could've taken that his downfall was almost certainly inevitable.
But your overall point is definitely correct. The oft-quoted attacker's advantage in information (and other) security is that the defenders need to "win" every time and the attackers only need to "win" once. Try 100 different exploit attempts; if the defenders prevent 99 of them, they lose.
This gets flipped when it comes to OPSEC. The attacker needs to "win" every OPSEC battle and the investigators often only need to "win" once. If they find a single mistake, they may be able to tug on a thread that leads to the attacker's likely affiliation and identity. And the more sophisticated and complex the attack, the more surface area there is for mistakes, just like how more complex systems/organizations have larger surface areas for attackers to target.
[1] https://stackoverflow.com/questions/15445285/how-can-i-conne...
All the hacker would have had to do was do the hack from a secure connection (ie cantenna to free wifi + proxy chaining ..etc.)
https://tornado-cash.medium.com/how-to-stay-anonymous-with-t...
Instead, only by hash(<method name string> + "(bytes,bytes,uint64)").slice(0,10) which is brute-force-able.
Still, this sounds just like one of my worst nightmares. A code in production having bugs that will lose all my money to an untraceable environment (the tornado chain).
Quick background. Back in the pre Flashbot days, the competitive barrier to front running was winning priority gas auctions. Basically whoever was able to bid at the highest gas price would get their transaction mined with first, and would extract the MEV. (Kind of analogous to traditional HFTs fighting to shave off nanoseconds to win a latency-based priority race.)
So you had to make sure that your on-chain smart contract for the front-running bot is an insanely gas optimized as possible. You'd literally pay a thousand times per unit of gas as the average person. Every single byte matters. And one thing about the EVM is that zero bytes in the transaction data cost slightly less than non-zero bytes.
So anyway, in the hot-path of that front-running bot, you'd want to get as many zeros in the method hash as you could. So I'd literally run a GPU to brute force method names.
I wonder if Coinbase has flagged the USDC that was stolen. Are those currently less-fungible USDCs?
> After depositing, users should wait some amount of time before withdrawing to improve their privacy.
If you have 600 million dollars to launder, the probability of being caught is still massive. It simply is an enormous sum of money.
2. LE can still catch you on the way out. People are gonna start asking questions when you spend hundreds of millions in crypto.
The USDT will be burned and the USD released to the rightful owner after law/legal approval -- https://twitter.com/paoloardoino/status/1425188386034311168
I d propose every chain to have a blacklist mechanism, temporary if you want, with a voting mechanism to remove innocents. You cant facebook your way ("we re just a platform") out of financial rules or you ll just end up rewarding thieves while benefitting innocents very little.
That's why decentralized stable coins like DAI and others exist :)
You create a bunch of dummy contracts when gas is cheap. Then on your transaction where you're paying a 100x gas price to win the contract, you self-destruct as many contracts as you can to max the refund. However the self-destruct call itself costs gas, so you want to make the call as simple as possible. This is a pretty simple: 1) check caller address, invoke self-destruct. So you'd just write the entire contract directly in EVM byte code instead of using Solidity.
You don't have to leave solidity, it could all be done in the fallback/default function, no?
For the rest, you described gas tokens, but self destruct refunds were removed with London so they are all worthless now.
Yeah, for gas tokens you're right. This was all pre-Flashbots, so talking about February or March at the latest. Flashbots kind of wrecked the whole game. Now it's a whole lot simpler, just ship transactions to Flashbots and bid as close as possible to breakeven. Consequently 90%+ of the profits now go to the miners.
In this case all methods should be internal, so the preamble would have no methods at all to look for.