Crypto Offensive
1.2K subscribers
2 photos
72 links
Чат: https://t.me/cryptooffensive_chat

Чтобы понять, как что-то работает, выясните, как это сломать (С) Талеб

Изучаем безопасность крипты, исследуя реальные атаки и уязвимости
Download Telegram
#challenge

23 уязвимых смартконтракта, которые надо взломать:

https://ethernaut.openzeppelin.com/
#hack #DAOMaker

Взлом DAOMaker - в функции инициализации не было проверки, кто ее вызывает - поменяли овнера контракта на себя и потом вывели средства функцией экстренного вывода

https://slowmist.medium.com/intelligence-of-slowmist-zone-dao-makers-vesting-system-was-hacked-5825e4828969
Crypto Offensive pinned «#challenge 23 уязвимых смартконтракта, которые надо взломать: https://ethernaut.openzeppelin.com/»
#logic #TIDAL #vuln

Tidal Finance исправили критический баг в логике контракта (31.07.2021), который позволял атакующему вывести средства из пула

https://medium.com/immunefi/tidal-finance-logic-error-bug-fix-postmortem-3607d8b7ed1f
#vuln #FEI

Подробный анализ упомянутой в предыдущем посте уязвимости в Fei Protocol (2.05.2021), которая была найдена в ходе аудита и позволяла вывести 60,000 ETH через #flashloan атаку

1) https://medium.com/immunefi/fei-protocol-flashloan-vulnerability-postmortem-7c5dc001affb

2) https://medium.com/fei-protocol/fei-bonding-curve-bug-post-mortem-98d2c6f271e9
#hack

Перечень взломов #defi проектов в 2021 году с детальным анализом и эксплойтами 🔥🔥🔥

https://github.com/openblocksec/blocksec-incidents/blob/main/defi/2021.md
#hack

Ресёрчер умудрился высосать ликвидность с кастодиальных Lightning Network сервисов (Bitfinex, LNMarkets, Southxchange). Суть в следующем: атакующий сначала пополняет свой аккаунт через #LN, потом выводит со своего аккаунта монеты через LN в канал, к которому ведет один единственный маршрут, проходящий через специальную подставную LN-ноду, которая берет большую комиссию за маршрутизацию платежей. Если сервис не сильно заморачивается о комиссиях в Lightning Network (LN это же дешево, да?), то при многократном проведении платежей он может растерять на комиссиях все биткоины. Так, ресерчеру удалось автоматизировать процесс и высасывать ликвидность со скоростью до 0.04 #BTC в час.

LNMarkets залатали дырку. Bitfinex и Southxchange до сих пор уязвимы

https://www.reddit.com/r/Bitcoin/comments/pqjcvo/stealing_sats_from_the_lightning_network/
#xmr #privacy

Кольцевая подпись в Monero смешивает 1 настоящий тратящийся юзером выход транзакции с 10 другими случайно выбранными выходами транзакций ("примеси"). При чем для стороннего наблюдателя должно быть непонятно, какой 1 из 11 выходов настоящий, а какие являются примесями.
Изначально в Monero примеси выбирались с одинаковой вероятностью, но в транзакциях чаще встречались свежие выходы, чем старые, из-за того что юзеры Monero значительно чаще тратят свежие монеты, чем старые. Поэтому атакующий приватность мог с большой вероятностью отделить настоящий txo от примесей.
В 2018 алгоритм выбора примесей подкрутили и вместо равномерного распределения стали использовать гамма-распределение, которое позволило чаще выбирать свежие txo в качестве примесей. Если случайный выбор примесей падал на txo из свежайших 10 блоков, они просто отбрасывались, потому что как известно в Monero нельзя тратить монеты возрастом менее 10 блоков. Это снова приводило к искажению, поэтому в 2019 алгоритм подкрутили, чтобы распределение считалось не с верхушки блокчейна, а начиная с 10го блока с конца.
Наконец в последнем апгрейде 0.17.2.3 от 31.08.2021 решили опять считать распределение с начала блокчейна, но если случайный выбор падает на txo из свежайших 10 блоков, то не просто отбрасывать их, а перераспределять выбор на txo из следующих 50 блоков. Логика здесь такова, что если юзер решил потратить монеты из свежих 10 блоков, которые тратить запрещено протоколом, то он подождет и все равно потратит их скоро. Таким образом, теперь выбор примесей соответствует естественному поведению юзеров и настоящие txo органично теряются среди примесей

https://www.getmonero.org/2021/09/20/post-mortem-of-decoy-selection-bugs.html
Forwarded from DEFI Scam Check
Баг в Compound привел к ошибочному начислению ревордов 240K $COMP

Роберт Лешнер уточнил, что баг произошел вследствии принятого предложения от сообщества, содержал в себе ошибку в 1 строке кода, но т к апгрейд протокол требует около недели, 240к монет COMP ($70М) были извлечены эксплоитерами.

Около 40К $COMP ($13M) еще лежат на баг-контракте и будут извлечены далее в ближайшее время.

Согласно твиттер ресерчеру Mudit Gupta:

«Ошибка возникает, когда кто-то предоставляет займ протоколу Compound токены с нулевым вознаграждением от Compound, например cSUSHI и cTUSD.

Функция`supplyIndex` для таких токенов остается равным` compInitialIndex`, что означает, что блок if на L1217 не запускается.

Проверка должна была быть> =, а не>. Поскольку блок if не запускается, «supplierIndex» остается равным 0, а «supplyIndex» равно 1e36. Дельта индексов становится равной 1e36, и протокол выплачивает вознаграждение за индексы 1e36, а не предполагаемое нулевое вознаграждение».

По факту, часть из токенов взята вайтхакером, остальные эксплоитеры имеют KYC c биржами Okex, Huobi и будут идентифицированы.

Код = закон, однако можно предположить и такой вариант: если у инкассаторской машины во время езды выпадет мешок с деньгами на проезжую часть, это является по прежнему собственностью банка, так и здесь в случае с багом эмиссии, продажа одного из эксплоитеров 9 тысяч токенов на Okex и Huobi - была фактом ограбления Compound.

https://twitter.com/Mudit__Gupta/status/1443454935639609345

Дополнение по токенам COMP, украденным из протокола:

- $20M to rawiz.eth (по сообщению - вайт хакер)
- $27M to 0xf4bf (дампит и переместил на другой адрес)
- $9M to 0x2e4a (держит)
- $9M to 0x3af01 (держит)
- $6M to 0xf3f5 (продал все)

https://twitter.com/0xngmi/status/1443442885618278407
#hack #bsc.

В продолжение темы #Reentrancy: разбор взлома #SURGE 16.08.2021 на русском. Контракт токена принимает BNB и делает выплаты. В контракте есть защита от reentrancy, но она недостаточно полная, что позволило атакующему повлиять на вычисление цены токена и вывести все BNB на сумму 4M$

https://cryptooffensive.com/инцидент-с-surgedefi-reentrancy/
#vuln

Блокчейн Zilliqa #ZIL известен первой реализацией шардинга.
Сегодня на hackerone опубликовали репорт о забавном критикал баге.
Ноды в шарде обмениваются между собой сообщениями по gossip-протоколу. Для подтверждения достоверности сообщения подписываются ключами нод.
Атакующий мог отправить в сеть по gossip-протоколу сообщение с транзакцией, переводящей все деньги с кошелька любой ноды на свой кошелек, и эта нода передала бы сообщение дальше со своей подписью. Транзакция получается полностью валидная, подписанная

https://hackerone.com/reports/1058879
#tools

Декомпиляторы Solidity:

https://ethervm.io/decompile - онлайн-декомпилятор solidity

https://contract-library.com/ - библиотека контрактов с исходниками и декомпилятором

UPD (thnx @deepcode):
https://eveem.org/ - декомпиляция в псевдокод, похожий на Python

https://www.trustlook.com/services/smart.html (скроллить до раздела "Online tool") - декомпиляция в помесь Solidity и ассемблера

https://oko.palkeo.com/
"Oko contract explorer" Когда контракт верифицирован на Etherscan - берёт код оттуда, а если нет - декомпилирует через Panoramix (как на eveem.org)
👍1
#cryptography #schnorr #vuln

В ноябре в Биткоине начнут работать подписи Шнорра. Кошельки, биржи и другие сервисы постепенно будут их внедрять. Разработчикам нужно помнить о такой ошибке, как повторное использование nonce, которая иногда встречается в реализациях ECDSA и позволяет восстановить секретный ключ. Со Шнорром точно такая же история: https://ecc2017.cs.ru.nl/slides/ecc2017-tibouchi.pdf

Эта бага ранее была много где от Playstation3 до blockchain·com, и живет до сих пор в многих блокчейнах.

Пример уязвимого #BTC-адреса: 1CUSKYar1yGBAg3MHWhC3sYhTfBQqc2sTN

В подписях в его двух транзакциях траты ca8f3a25744ae2859f4a5d219274d9e3ae97c23c201a618c543de76640a97ba6
и
378eb2c5b7dadbba35c79c5a370b48db052a80d44b0e0361b39a9c129c86120e

присутствует одинаковое R:
436c023f2e07cdf9a51e884c35037594c930caf7c2c0d0008ac35d10d4de99fc

что позволяет из остальных данных из транзакций вычислить K:
K = (H1-H2)/(S1-S2)

и секретный ключ:
Sk = (S1*K-H1)/R = KypfcAANPUhYdxAzwNvHvHu1gcV4Bh6KVhkCNnVGVjHh1Hq11LzR

который соответствует адресу 1CUSKYar1yGBAg3MHWhC3sYhTfBQqc2sTN
#hack

43 eth в токенах вознаграждения вывели из контракта стейкинга NFT StackedToads - в массиве id в запросе передали один id много раз, и контракт для каждого раза посчитал "да, токены выдать"

https://twitter.com/0xwave/status/1448752767917453314?s=21
#cryptography

Неразличимая обфускация кода - следующая крутая тема в криптографии.

Обфускация - известная тема в инфосеке, это включает в себя например протекторы проприетарного софта и "крипторы" малвары, которые используются для скрытия алгоритма и усложнения жизни реверсерам. Быстро или медленно, но все эти штуки взламываются опытными реверсерами. Более того, строго математически доказана невозможность создания идеального обфускатора, превращающего любую программу в "черный ящик", который непонятно как работает, но выдает те же результаты, что и изначальная программа. Казалось бы, эта тема закрыта навсегда.

Однако, в 2013 году вышла бумага https://eprint.iacr.org/2013/451 об успешном создании неразличимого обфускатора. Представьте, что есть две различные программы A и B, которые выдают один и тот же результат. Обфускатор O генерирует программы X=O(A) и Y=O(B). O является неразличимым обфускатором, если имея программы X и Y невозможно различить, какая из них получена из A, а какая из B.

Пускай программа A содержит в себе пароль, рассчитывает и выдает хеш пароля, а программа B содержит только готовый хеш и выдает его. Прогнав A и B через неразличимый обфускатор O, мы получаем программы O(A) и O(B).
Можно ли (за адекватное время) вытащить пароль из O(A)? Пойдем от противного - допустим, что мы можем извлечь пароль из O(A), но тогда в силу свойства неразличимости мы также можем извлечь пароль из O(B). Но ни в B ни тем более в O(B) никогда и не было пароля, а только его хеш. А значит допущение неверно, и из O(A) невозможно вытащить пароль.

Это открывает огромные возможности! Представьте, что private переменная в solidity в полном смысле является private, то есть ее невозможно прочесть из блокчейна. Мы сможем создавать обфусцированные смарт-контракты, которые содержат конфиденциальную информацию, такую как приватные ключи от других блокчейнов (что позволит строить trustless-мосты), данные для доступа к фиатным банковским счетам или даже SSH-ключи для доступа к серверам. Для взаимодействия с внешней средой больше не нужны будут подходы с мультисигами, имеющие огромную дыру в виде необходимости доверия к держателям ключей. Посредники останутся нужны только для пересылки сетевых пакетов во внешний мир, но никак не смогут вмешаться в процессы аутентификации.

P.S. на сегодняшний день это далеко от готовности к коммерческому применению. Имеющиеся техники превращают короткие простые программы в гигантские громоздкие полотна