Ссылка на оригинал: https://rekt.news/singularitynet-rekt
Источник данных: SingularityNET, SlowMist, Bitquery, PeckShield, ASI Alliance, Blockaid, Uniswap, Baltex, AMLBot, NuNet, Fetch.ai.
Заявление: эта статья является перепечаткой. Читатели могут получить больше информации по ссылке на первоисточник. Если автор перепечатки имеет возражения по форме размещения, пожалуйста, свяжитесь с нами — мы внесём изменения по требованию автора. Перепечатка предназначена только для обмена информацией и не является инвестиционным советом; не отражает взгляды и позицию команды «吴说» (Wū Shuō).
SingularityNET годами занимается продвижением рынка для автономных AI-умных агентов.
Однако ближе к вечеру 19 сентября самым «занятым» «агентом» в сети стала некая часть кода/скрипт, который не писала команда SingularityNET.
Злоумышленник, взломав облачную инфраструктуру этого проекта, получил раскрытые полномочия на подпись. Всего одной подписью он осушил ликвидность FET в обменном контракте на Ethereum, а затем в течение девяти часов «с нуля» отчеканил в общей сложности 2.3 млрд токенов AGIX, NTX, WMTX и CGV. Некоторые публикации указывали украденную сумму в 16.77 млн долларов. Но восстановление по отдельным транзакциям показывает, что фактически реализованные атакующим средства составляют около 2.29 млн долларов, и большая часть эмитированных токенов не была продана. Все ключи, использованные для подписания, были реальными и действительными. Каждый контракт, исполнявший команды, работал по заданной логике.
Но влияние этой атаки выходит далеко за пределы потерь средств. Спустя несколько дней соответствующие стороны всё ещё не опубликовали полный пост-аналитический отчёт.
Когда ключи всего альянса AI-проектов хранятся в одном и том же облачном инфраструктурном наборе, кто на самом деле контролирует эту «машину»?
Источник данных: SingularityNET, SlowMist, Bitquery, PeckShield, ASI Alliance, Blockaid, Uniswap, Baltex, AMLBot, NuNet, Fetch.ai.
Первая зафиксированная потеря активов — FET, но атака на этом не остановилась.
20 сентября в 20:21 злоумышленник завершил перевод FET. Спустя всего 2 минуты 24 секунды все примерно 8.7 млн FET, выведенные из обращения, были полностью обменены на 522.78 ETH. В 21:40 Blockaid выпустил предупреждение об оттоке средств FET и отметил, что тот же кошелёк также получил много NTX, отчеканенных адресом деплойера NuNet. Сначала Blockaid назвал это событие атакой на Fetch.ai, но затем SingularityNET подтвердила, что скомпрометирована была собственная инфраструктура компании. Инцидент, который изначально казался затрагивающим только Fetch.ai, имел более широкий масштаб влияния, чем предполагалось.
К 20 сентября 02:47 SlowMist уже определила механизм атаки: достаточно контролировать ключ авторизатора, чтобы осушить кроссчейн-мост. История с одной утёкшей ключевой подписью и контрактом, который доверял ей, уже повторялась снова и снова.
Вывод FET — это не конечная точка атаки. Через 29 минут, то есть в 19 сентября 20:50, злоумышленник использовал права минтера NuNet и напрямую создал на контракте токена примерно 408.5 млн NTX. Более масштабная эмиссия началась на следующий день с 03:13: злоумышленник незаконно отчеканивал AGIX партиями по 10 млн; в 03:38 началась незаконная чеканка WMTX. Чеканка AGIX продолжалась до 04:21, после чего CGV прошло между 04:34 и 04:38 через 50 вызовов чеканки.
К наступлению рассвета публичное предупреждение расширило рамки инцидента: вместо того чтобы ограничиваться выводом средств из кроссчейн-моста, стало ясно, что был взломан доступ/полномочия по нескольким токенам. Ранние снимки кошельков оценивали номинальную стоимость позиций атакующего примерно в 16.77 млн долларов, но эта оценка предполагала, что только что отчеканенные и недостаточно ликвидные токены можно продать по рыночным котировкам.
Атака не прекратилась с наступлением ночи. 20 сентября в 13:10 платёжный контракт SingularityNET перевёл весь баланс 289,575.10 USDC в кошелёк, который ранее во время взлома был очищен. Через 12 секунд эти деньги попали во второй аккумулирующий кошелёк злоумышленника.
Украденная подпись — почему она смогла осушить кроссчейн-мост всего за один вызов? И почему в ончейне вообще не было никаких механизмов, которые бы помешали этому?
Ключи, которые никогда не инициировали транзакции
Токены, поддерживаемые кроссчейн-мостом SingularityNET, охватывают две цепочки. Для поддерживаемого маршрута Cardano→Ethereum токен сначала уничтожается на Cardano, а затем на стороне Ethereum кроссчейн-мост чеканит/выпускает соответствующий токен. Однако контракт со стороны Ethereum не проверяет самостоятельно, действительно ли уничтожение на Cardano произошло: он воспринимает заранее предоставленные подписи от заранее заданных авторизаторов как доказательство завершённого уничтожения.
Bitquery в затронутых кроссчейн-мостах насчитала пять адресов авторизаторов. Ранее эти адреса никогда не отправляли on-chain транзакции. Этот шаблон соответствует использованию офчейн-ключей подписи для утверждения высвобождения активов кроссчейн-моста, а не для прямого инициирования сделок. SingularityNET позже заявила, что неавторизованная третья сторона «получила доступ к части нашей облачной инфраструктуры», но не пояснила, как именно был получен доступ.
Такой дизайн концентрирует доверие каждой кроссчейн-мостовой операции в руках той стороны, которая владеет полномочиями на подпись.
Кроссчейн-обменный контракт, из которого вывели весь баланс FET: 0xab424a430cc09864fa1277a38193111705adf3a3
Обменный авторизатор, который подписал разрешение на вывод этих средств: 0x69e5446b07b23de0a76730062c3252152216c85c
Атакующая транзакция по высвобождению 8,721,530.40 FET: 0xfe12c63b322d52727c615f3342222138d1563400a9880cebb516a9a162ac69e2
Криминалистический отчёт Athena для ASI Alliance: из подписей зафиксированного вывода были восстановлены адреса подписантов и подтверждено, что они совпадают с авторизатором, который был настроен в контракте на текущий момент. В отчёте сказано, что с момента развёртывания этого обменного контракта в сентябре 2024 года этот авторизатор не менялся.
Два дизайнерских решения усилили влияние компрометации прав авторизации. Во-первых, conversionIn() использует подпись одного внешнего аккаунта (EOA) как единственную проверку авторизации; во-вторых, функция не применяет ограничительную проверку checkLimits(amount), которая используется в conversionOut(). Поэтому настроенный лимит в 100–1,000,000 FET не ограничивает conversionIn(): контракт в конечном итоге принял запрос на выпуск/освобождение примерно 8.72 млн FET, что примерно в 8.7 раза больше обозначенного максимального лимита.
В отчёте по криминалистике от Athena также обнаружилось, что все 100 нормальных событий ConversionIn используют UUID-формат идентификаторов, сгенерированный бэкендом SingularityNET. Идентификатор, использованный в этой атаке, — это строка сырых не-ASCII байтов, единственное исключение. Эта транзакция не соответствует признакам обычной работы межсетевого моста.
Атака на часть NuNet затрагивала более прямые полномочия. Около 408.5 млн NTX вообще не проходили через обменный контракт: их генерировал адрес, обладавший on-chain ролью минтера на NuNet, напрямую вызывая функцию mint() в контракте токена.
Транзакция по чеканке 408,532,878.13 NTX: 0xe14442f6171d8a652e79d44336e58c00cdab271bdb69c668493d420e03ee13ab
Массовая чеканка AGIX выполнялась через адрес деплойера SingularityNET: 0xA7A31d206042B8A3E81aa4cf8c68c1B76856eE48
Вызовы обменных контрактов для AGIX, WMTX и CGV завершались операцией чеканки (mint), отличной от обычной пакетной величины. Этот шаблон соответствует режиму автоматической чеканки, продолжающейся до достижения какого-то ограничения по операции.
Обменный контракт WMTX World Mobile действительно устанавливает лимит на одно обращение, но он не остановил атаку: он лишь вынудил злоумышленника разбить чеканку на 503 вызова. Большинство вызовов как раз чеканили по 1,000,000 WMTX, и максимум десять таких вызовов появлялись в рамках одного блока.
Bitquery заявила, что прежде чем любой из токенов был отчеканен, 16 кошельков были очищены в течение 21 минуты, а в тот же период появились связанные активности в BNB Chain. Согласно их каталогу адресов, четыре кошелька содержали метки сотрудников SingularityNET или NuNet, включая аккаунт, который в 2022 году развернул связанные обменные контракты. Это указывает на то, что инцидент связан с несколькими цепочками авторизации затронутых проектов.
Один адрес для восстановления изменил настройки авторизатора в обменных контрактах NuNet, Cogito и Rejuve, а затем заморозил NTX. По данным Bitquery, обменные контракты AGIX и WMTX не были своевременно обработаны таким же образом, потому что их владельцами были соответственно мультиподписной кошелёк Gnosis Safe и мультиподписной кошелёк Safe, где для одобрения требуются подписи трёх из четырёх участников. В период передачи полномочий чеканка AGIX и WMTX продолжалась ещё примерно час.
SingularityNET написала: «Наша система регулярно проходит аудиты и соответствует отраслевым стандартам безопасности». Аудиты могут оценить код смарт-контрактов, но только одного аудита недостаточно, чтобы доказать, что офчейн-системы и приватные ключи, используемые для генерации подписей или для осуществления прав подписания, безопасны. Действительные подписи были предоставлены ключами авторизаторов, относящимися к затронутым проектам, что позволило сгенерировать большое количество дополнительных токенов.
Итак, какова величина этих крупных потерь из сообщения в действительности превратившаяся в ликвидные активы, и какая часть — это новые токены, которые рынок, возможно, вообще не сможет переварить?
Сотни тысяч долларов на бумаге
Разные цифры в этой статье измеряют разные вещи. Неавторизованный вывод токенов из контракта — это прямой ущерб активам; несанкционированная эмиссия токенов — это подрыв объёма предложения токенов. ETH и стейблкоины, которые получили адреса, принадлежащие атакующему, посредством продажи токенов или прямого изъятия активов, — это уже реализованная прибыль. Баланс кошелька, посчитанный по биржевым ценам токена, не равен автоматически ни наличным деньгам, ни автоматически возвращаемой стоимости. Ранние публикации неоднократно путали эти понятия.
Отчеканить 2.3 млрд токенов легко, а вот найти покупателя — не так просто. FET, выведенные из кроссчейн-моста, составляют крупнейшую из выявленных разовых операций конвертации в деньги. Одна из сделок, выполненная через маршрут MetaMask, после вычета комиссий, видимых по этому пути, обменяла эти FET на 522.78 ETH.
Сделка по обмену примерно 8.72 млн FET на 522.78 ETH: 0x98f6e59b54fd4d2c086cc7cab4e7070edff6410210a1bf1fbaffd62da3b76d1c
Два адреса получили большую часть выявленных доходов и эмитированных токенов. Основной аккумулирующий адрес атакующего получил выведенные FET и вновь отчеканированные NTX. Согласно восстановлению этой транзакции, он также был получателем первых 26 из 90 вызовов чеканки AGIX и первых 54 из 503 вызовов чеканки WMTX.
Основной аккумулирующий адрес злоумышленника: 0x2dcc1085fdcf418b421e45e86e4e54637cc21dfe
Второй кошелёк получил токены, которые образовались в результате оставшихся 64 вызовов чеканки AGIX, 449 вызовов чеканки WMTX и всех 50 вызовов чеканки CGV, а также USDC из платежного контракта.
Адрес второго кошелька: 0x83f4424a401a9bb75f90314f21adaea6a9ce09c5
Bitquery проследила ранний источник средств основного аккумулирующего адреса до ChangeNOW.
Транзакция, в которой ChangeNOW предоставляет средства: 0xa99a8b71bd90d295db305639fc976339a057812c2693f3e44ae9288e5c13ebe1
История Ethereum по этому аккумулирующему адресу также показывает, что 1 сентября была выполнена доставка через кроссчейн-мост Across.
Транзакция кроссчейн-доставки Across от 1 сентября: 0xb56d3b900b5ac694d56d6efb9552a89fc0a14641eceefa7e16107cb8ccb0ea6d
20 сентября в 04:04 второй кошелёк получил ETH для оплаты Gas, и примерно через минуту начал продавать токены.
Транзакция получения Gas- средств вторым кошельком: 0x4e8894823caaf8fefaf0849cf69b30148ae5ddcee9e7f9bd0c1be0dae0c720c2
Транзакция, в которой второй кошелёк авторизовал MetaMask Swap Router для использования 100,000 WMTX: 0x8fcaa005da0c1a5ab138898571e2974ba8aa8f0b9864381e5b2b98b81e702da9
Транзакция при первом выпуске второго кошелька с продажей WMTX: 100,000 WMTX после вычета отображаемых комиссий MetaMask были обменяны на 0.832455441 ETH: 0xcf4b119f38d0da10dccac787234e05c6cabe3440dfe303f4f407daa92ab8829e
Активы были распределены по двум кошелькам, из-за чего статистика в отчётах усложнилась. Раннее оповещение PeckShield оценило принадлежащие атакующему активы в 16.77 млн долларов и включало 198.3 млн AGIX, 649 ETH и 33.538 млн WMTX.
Фактический результат продаж выявил расхождение между балансовой оценкой и способностью конвертироваться в деньги. Сделка, маршрутизированная через MetaMask и выполненная через Mayan, обменяла 10 миллионов NTX на 940.39 USDT. Параллельно второй кошелёк использовал ордера UniswapX: ETH в качестве встречного обеспечения предоставлял сторонний исполнитель ордеров. Запись о расчётах не поясняет, как эти исполнители добывали средства, как они проводили хеджирование или как в итоге распорядились полученными WMTX.
Сделка по обмену NTX через путь MetaMask/Mayan: вложено 10,000,000 NTX, 940.5087 USDT поступили на исходный смарт-контракт Mayan в сети Ethereum для расчётов в BNB Chain: 0xb6ecca4deeb2a616507a3f5779cb12db4fd986e5ee37c1832237fae2a1f1258f
CGV — самый крайний пример: 246.2 млн CGV были проданы в пул Uniswap Cogito, при этом обратно вернулось лишь 0.0123 ETH.
Транзакция, в которой 246,200,000 CGV обменяли на 0.0123 ETH: 0x69a28fb152b2b1b4158ec3db17f7baf565b644859a5150c38729bbb2d198bfad
Кроме того, 289,575.10 USDC, выведенные из платежного контракта, в итоге попали во второй кошелёк, став ещё одним крупным поступлением стейблкоина. Эти средства не требовали продажи эмитированных токенов.
Транзакция, в которой платежный контракт переслал на адрес для промежуточного хранения 289,575.1047 USDC: 0x869343d87a137a52aebce119c8c35e2fc3500205bf7a8c574ec2e8f4ab677c18
Транзакция, в которой промежуточный адрес перевёл 289,575.1047 USDC во второй кошелёк: 0xca9facda3f3629fa72ff98b4c8e663d3b415011979d749fab96ed9eda287e66f
По состоянию на 22 сентября в результате восстановления покадровых сделок выяснилось, что два основных адреса получили активы в эквиваленте примерно 742.7 ETH, а также стейблкоины на сумму 362,075 долларов. Этот подсчёт не включает AGIX, WMTX, CGV и NTX, которые ещё не были проданы. WETH и ETH учитываются по курсу 1∶1; учитывается общий доход, а не чистая прибыль.
Значительная часть ликвидных активов не осталась в этих двух основных кошельках. Самое позднее к 21 сентября 00:00 три разных кошелька внесли на Chainflip по 75,000 USDC каждый, на Baltex — по 75,000 USDC, а на Chainflip — ещё 118,015.16 USDC.
Baltex описывает свои услуги как не требующие KYC и продвигает «приватный» маршрут обмена с участием монеты Monero. Кроме того, согласно раскрытию AMLBot, один брокер Chainflip отклонил депозит ETH, а AMLBot связал этот депозит с тем же злоумышленником.
Транзакция на перевод 75,000 USDC в Chainflip: 0x3c8b12fedf147d82c8a5506edf3fcad4b7e25c8b96e4fb13b10cf2915aba0076
Транзакция на перевод 75,000 USDC в Baltex: 0x05d6d42c75356900e523116d34892b480e9f9134ba195db698d7b1448e0b0696
Последняя транзакция на перевод 118,015.16 USDC в Chainflip: 0xea254b148da1a6d028050f3a59f87845e3dc177ca37ef6441c7eb6cff47eb8ed
Ближе к полуночи по UTC второй кошелёк отправил на адрес-получатель 93.70 ETH. Публичные источники, на которые ссылается эта статья, не подтвердили владельца этого адреса. Примерно через 40 минут основной аккумулирующий кошелёк атакующего инициировал ещё две передачи: каждая — ровно по 100 ETH.
Транзакция вывода 93.70 ETH из второго кошелька: 0x605d803890ae4eddc684f82f6de1a82c49a6a3f5646295c1a01fd897fa2a7577
Получающий кошелёк: 0x2fD3285C93437077EF5FA6cecc367FD24d0fF726
Основная аккумулирующая транзакция злоумышленника по выводу первой партии 100 ETH: 0xa8511628388c330db78fcdcfe7af5577e1f300adee795b578508fb21203b4756
Транзакция, где злоумышленник в основном аккумулировал вторую передачу из 100 ETH: 0x14399c61687de491461f76e961a91d2c0dcda4c6bb00ba332ec18b19d394822f
Далее AMLBot описал две независимые передачи средств по 100 ETH каждая. Он указал, что одну из них обменяли примерно на 266,000 USDC, затем через CCTP, Arbitrum и Hyperliquid эти средства завели в «FXMR»; а вторую, как утверждается, после того как брокер Chainflip отказался, обменяли через THORChain на примерно 3.28 BTC. AMLBot не опубликовал адреса-источники этих средств.
В обоих кошельках также появились небольшие переводы «пыли» и записи о поддельных переводах токенов: адрес отправки намеренно имитировал адреса контрагентов из предыдущих транзакций, что соответствует признакам атаки с «отравлением адреса». Если это действительно была их цель, то кто-то пытался украсть деньги атакующего ещё раз.
По состоянию на 25 сентября у основного аккумулирующего кошелька злоумышленника — примерно 433 ETH, 15.94 WETH и 52,395 mUSD, что соответствует балансу около 433 ETH, о котором AMLBot сообщил на день раньше. Кроме того, этот кошелёк также держит около 198.3 млн AGIX и 33.54 млн WMTX. Второй кошелёк содержит примерно 18,109 USDC, 625.86 млн AGIX, 166.49 млн WMTX и 246 млн CGV.
Показанная стоимость этих токенов не равна фактической стоимости, которую можно продать. При таком масштабе позиций продажа может столкнуться с нехваткой ликвидности и серьёзным ценовым ударом. Настоящий вопрос не в том, сколько показывает интерфейс баланса, а в том, сколько в итоге можно продать, не разрушив рынок.
Согласно восстановлению по этой сделке, общий объём уже реализованных ликвидных активов, возникший в результате атаки, — около 2.29 млн долларов. Реализованные средства можно перевести, а оставшиеся примерно 1.27 млрд токенов трудно конвертировать так же. Если в итоге эти позиции будут проданы, кто понесёт издержки?
Семьдесят процентов токенов — результат незаконной эмиссии
Цену можно восстановить, но структуру поставок нельзя так же легко возвратить.
Bitquery при кроссчейн-проверке подсчитала около 1.28 млрд AGIX, из которых примерно 895.96 млн были отчеканены во время атаки — 70.1% от общего объёма; оставшиеся примерно 382.65 млн токенов можно проследить до поставок до атаки. Этот же анализ показывает, что несанкционированная эмиссия по отдельности составляет 81.1% от предложения CGV, 32.4% от предложения WMTX и 29.0% от предложения NTX.
В результате этой дополнительной эмиссии NTX общий кроссчейн-объём предложения, попавший в статистику, достиг примерно 1.41 млрд токенов, что выше задокументированного NuNet лимита в 1 млрд. Около 40.10 млн незаконно отчеканенных NTX ушли по кроссчейну в Cardano, причём примерно 40 млн поступили в обычный пул ликвидности. Транзакции позволяют отследить путь этих токенов, но когда они попадают в пул, пул не может отличить их от легитимно выпущенных NTX.
Проблема с FET — не незаконная эмиссия, а то, может ли кроссчейн-мост рассчитаться. Ответственный за выпуск с Cardano в виде FET обменный контракт на стороне Ethereum был осушен, в то время как на Cardano всё ещё остаётся около 870 млн FET. Согласно этому анализу, с момента вывода средств никто не пытался отправить FET с Cardano в Ethereum, поэтому ещё не появилось ситуаций, когда пользователи ждут выплаты из-за исчерпания баланса обменного контракта.
Для NTX проблема была иной: около 40 млн незаконно отчеканенных токенов уже поступили в обычные пулы ликвидности Cardano. Несмотря на то что источник был несанкционированным, пул всё равно будет обрабатывать их так же, как и другие NTX.
SingularityNET заявила, что она отозвала скомпрометированный доступ, отключила затронутые кроссчейн-мосты и обменные контракты и приостановила перевод AGIX и NTX в сети Ethereum. Со стороны проекта сказано, что связанные кроссчейн-мосты продолжат оставаться оффлайн до тех пор, пока независимая безопасностная проверка не подтвердит возможность безопасного восстановления. Bitquery, в свою очередь, обнаружила, что по состоянию на 20 сентября из пяти ключей авторизаторов три всё ещё не были заменены. При закрытом мосте, можно ли ещё использовать эти ключи, — будет проверено на практике лишь после возобновления работы.
Для держателей AGIX SingularityNET изначально заявляла, что разрабатывает «легальный, проверенный последующий маршрут обработки» для соответствующих держателей. Затем проект объявил об отключении исходных токенов AGIX и о выпуске альтернативных токенов для затронутых держателей, но до сих пор не объяснил, кто именно соответствует критериям, и не уточнил, как будут распределены альтернативные токены. Переводы AGIX в сети Ethereum всё ещё приостановлены.
В учтённых AGIX примерно семь из десяти токенов были отчеканены во время атаки, поэтому вопрос определения «права/квалификации» остаётся самым сложным. Любая альтернатива должна решить, как поступить с теми позициями, которые после незаконной эмиссии были перемещены в оборот через обычные рыночные сделки.
Fetch.ai заявила, что её контракты не пострадали. ASI Alliance подтвердила, что в обменном контракте была выведена FET на сумму 1.56 млн долларов, и пообещала опубликовать полный отчёт. Однако к моменту публикации оригинальной статьи этот отчёт так и не появился; также не было опубликовано решений/компенсаций для держателей или для исполнителей ордеров и провайдеров ликвидности, которые оплатили реальные средства за покупку незаконно отчеканенных токенов.
Подписи, принимаемые контрактом кроссчейн-моста, являются реальными и действительными. Контракт проверил подпись и выполнил команды, но не проверил, произошло ли заявленное подписью кроссчейн-событие на самом деле. Чеканка NTX в NuNet пошла по другому пути: злоумышленник напрямую использовал собственные права минтера токена.
Альянс с видением децентрализованного AI, который всё же оставил уязвимыми права на чеканку четырёх видов токенов и права на выпуск FET из обменных контрактов — в пределах досягаемости одной компрометации базовой инфраструктуры.
Если будущее, описываемое этими проектами, — это автономно работащее ПО, то кто будет контролировать ПО, которое хранит ключи?
Межсетевой мост и обменный контракт приняли подписи назначенных авторизаторов. Во время кроссчейн-чеканки контракт рассматривает эти подписи как доказательство того, что на другой цепочке соответствующее событие уже произошло, не проводя самостоятельную проверку. Чеканка NTX устроена иначе: злоумышленник использовал свои права минтера и напрямую вызвал функцию mint() в контракте токена.
SingularityNET заявила, что неавторизованная третья сторона получила доступ к части её облачной инфраструктуры и тем самым отчеканила токены через инфраструктуру кроссчейн-моста и вывела активы. Fetch.ai, в свою очередь, заявила, что её собственные контракты не пострадали. Но публичные заявления не объяснили, как именно злоумышленник получил доступ, и не уточнили точно, как именно раскрылись те или иные полномочия.
On-chain записи позволяют отслеживать транзакции, которые были разрешены этими полномочиями, но не доказывают, как злоумышленник получил доступ, и не позволяют определить, кто принял соответствующие безопасностные решения. Bitquery выяснила, что пять адресов авторизаторов кроссчейн-моста ранее никогда не инициировали транзакции — это соответствует их назначению для офчейн-подписания сообщений. Контракт проверял подписи.
Когда подпись используют как доказательство — кто проверит, что именно она доказывает, является правдой?
