Криптовалютам уже больше 10 лет. За это время мы наблюдали добрую сотню крупных взломов криптобирж и других сервисов, связанных с криптовалютой. Очень часто детали взлома остаются неясны. Мы знаем, кого взломали, когда, что украли, но вот как конкретно это произошло, остается за кадром. Журналистов больше интересует сумма похищенного, а организация-жертва не спешит раскрыть детали своего позора.
Мы расскажем о некоторых взломах простыми словами. Не с целью научить, а с целью предотвратить повторение.
Типичный взлом биржи
Для начала коротко опишем типичный взлом. Снаружи это обычно выглядит так: глава биржи выходит к прессе и говорит: «Нас взломали, ваших биткойнов у нас нет». Но что же в действительности произошло? С большой долей вероятности следующее.
Работает себе криптобиржа. Известно, что она хранит много криптовалюты и много обычных денег пользователей на банковских счетах. Связываться с обычными деньгами опасно — ведь злоумышленникам нужно очень быстро и организованно обналичить их до того, как банк заморозит счета, а это задача крайне непростая. Другое дело, криптовалюта.
Злоумышленники узнают список сотрудников, изучают их интересы (в том числе и по социальным сетям), посылают некоторым целевые фишинговые письма. Например, они узнают, что бухгалтер биржи любит бейсбол и болеет за определенную команду, значит, ему можно послать письмо «Поздравляем, вы выиграли билеты на сегодняшний матч!» и прикрепить вредоносный документ. Если открыть его при помощи Microsoft Word без установленных патчей — происходит заражение компьютера вредоносом. А шансы, что активный болельщик откроет такой документ, — велики. Так злоумышленники попадают в сеть биржи.
Затем они изучают изнутри, как на бирже все устроено, как часто бухгалтер общается с директором, что ему при этом пересылает, какова архитектура внутренней сети, где хранятся кошельки криптовалют и как они защищены. Этот этап может занять довольно много времени, но если злоумышленник не совершает ошибок, то, как правило, он достигает желаемого — ему удается добраться до машины сотрудника, у которого есть доступ к критическим системам.
Дальше, если автоматическая система биржи умеет отправлять криптовалюту, то, обладая правами обслуживающего ее персонала, можно отправить криптовалюту себе.
Примерно по такому сценарию предположительно развивалась атака на биржу Binance.
Взлом Binance
Дата: 7 Мая 2019 года
Ущерб: 40 000 000$
Украдено криптовалюты: 7000 BTC
Источник
Как защититься
Если вы — криптобиржа, то ваша задача сделать так, чтобы стоимость атаки превосходила потенциальный выигрыш, умноженный на вероятность успеха. Отсюда вывод:
- Обучайте сотрудников киберграмотности (как вы думаете, можно ли открыть резюме, которое вам прислали в формате doc?)
- Используйте решение по защите от целевых атак (оно не просто защищает от угроз на каждом конкретном узле, но еще и ищет аномалии во всей организации в целом)
- Закажите Penetration Test (это когда исследователи пытаются проникнуть в вашу организацию или распространиться в ней, а потом рассказывают, где слабые места)
Обворовать банкомат
В Канаде одна фирма поставила банкоматы для купли-продажи биткойнов. Всего 45 штук.
Устроены они просто. Если кто-то хочет продать биткойны, то все, что ему нужно, это установить на телефон какой-нибудь биткойн-кошелек и идти к банкомату. На экране машины появляется QR-код, который нужно сосканировать, подтвердить на телефоне отправление биткойнов обслуживающей банкоматы фирме и получить наличные.
Через некоторое время оказалось, что из банкоматов украли 200 000$. Мошенники отправляли биткойны, получали деньги, а потом на телефоне отменяли транзакцию. Да, вот так просто.
Как же такое могло произойти? Как вы знаете, в блокчейне информация хранится в блоках. Транзакция вида «Я отправляю Васе 1 биткойн» не сразу записывается в блок, а сначала попадает в лист ожидания. Блоки создаются примерно раз в 10 минут. Создатели блоков выгребают из очереди эти неподтвержденные транзакции. Надо сказать, что в блоке мало места, все транзакции не влезают, поэтому приоритет имеют те из них, у которых комиссия повыше (ее себе забирает создатель блока).
В это трудно поверить, но разработчики логики работы этих банкоматов не стали дожидаться, пока транзакция действительно будет записана в блокчейн, а сразу выдавали наличные. Ведь это так удобно для пользователей.
В этой истории есть лишь одна дополнительная непринципиальная деталь: изначально «Биткойн» не позволял отменять транзакцию, попавшую в лист ожидания. Это часто приводило к «зависанию» денег: если комиссия слишком маленькая, то транзакция висела несколько дней и только потом выкидывалась. Поэтому со временем в «Биткойн» добавили механизм replace-by-fee — он позволяет заменить транзакцию в очереди на другую. Обычно это делают, чтобы увеличить комиссию и «протолкнуть» перевод. Но, как видите, при помощи этого же механизма можно заменить в транзакции получателя и направить биткойны обратно себе.
В описанном случае это и уязвимостью назвать язык не поворачивается. Обычное головотяпство. И вот его результаты:
Bitcoin ATM hack
Дата: September 2018
Ущерб: 200 000$
Источник
Как защититься
Когда деньги уже были украдены, фирма изменила банкоматы. Теперь пользователю надо получить QR-код, отправить биткойны, подождать сутки, убедиться, что биткойны дошли, а потом вернуться к банкомату и получить наличные. Это вдвое снижает пользу от такого вот банкомата, но что делать, так уж работает блокчейн.
Но если отмотать время назад, то, чтобы не допустить столь глупой потери денег, разработчикам нужно было заказать услугу Application Security Assessment. Ее суть заключается в том, что сторонние специалисты изучают архитектуру вашего сервиса, смотрят на код, ищут уязвимости.
Овладеть блокчейном
Вы наверняка слышали постулат: «Что записано в блокчейн, то уже не изменить». В ряде случаев это неправда и злоумышленники могут нагреть на этом руки. Поподробнее разобраться в том, как работает блокчейн, вы можете, прочитав статью «О биткойне очень просто«, а в майнинге — в статье «Что такое майнинг простыми словами«.
Если же говорить коротко, то для того, чтобы блокчейн был единым для всех пользователей, надо назначать одного конкретного автора очередного блока. Вероятность стать счастливчиком и получить награду за майнинг напрямую зависит от затраченных усилий — чем больше майнингового оборудования вы содержите, тем выше ваши шансы.
При этом пользователи считают «каноном» самую длинную цепочку блоков. Если кто-то предъявит общественности свою версию блокчейна, которую он строил в одиночку, то ее все отвергнут, потому что она короче и усилий он затратил меньше всех остальных.
Но ситуация меняется, если этот кто-то использовал больше 50% всех майнинговых мощностей. Пока все майнеры будут создавать, скажем, 9 блоков, он успеет создать 10. Если он делал это втихаря, а потом предъявил свои блоки, то выходит, что он изменил финансовую историю. И если в старой ее версии он потратил средства, то в новой они вновь оказываются на его счетах. Значит, их можно потратить еще раз!
Именно это и произошло с биржей Gate.io в начале 2019 года. Злоумышленник отправил на биржу свою криптовалюту (записал этот факт в общий блокчейн), а попутно начал создавать свой блокчейн. Когда биржа получила перевод и зачислила на баланс злоумышленника сумму, он предъявил свой блокчейн (вернул криптовалюту в карман) и попросил биржу осуществить вывод своего баланса. В результате у биржи осталось меньше денег.
Теперь давайте разберемся, почему такого не происходит каждый день и сколько ресурсов потратил на это злоумышленник.
Возьмем для примера «Биткойн». За час майнеры создают 6 блоков. За каждый блок выдается награда в 12,5 биткойна. 75 биткойнов по курсу на 6 октября 2019 года — это 600 000$. Примерно столько стоит арендовать все майнинговые мощности «Биткойна» на час. Есть специальные рынки, на которых такие сделки заключаются.
И есть даже специальный сайт, на котором такие расчеты проводятся, — https://www.crypto51.app/:
В последней колонке указано, сколько мощностей можно арендовать прямо сейчас. Как видите, для того чтобы завладеть блокчейном Ethereum Classic, как это сделал злоумышленник, нужно всего порядка 10 000$/час, при этом «заработал» он 200 000$ за 4 часа.
Надо отметить, что это не первая атака такого типа. Различные криптовалюты в прошлом сталкивались с успешными «Атаками 51%».
ETC 51% Gate.io Attack
Дата: 7 января 2019
Ущерб: 200 000$
Украдено криптовалюты: 40 000 ETC
Источник
Как защититься
Вообще, возможность переписать блокчейн и извлечь выгоду из «Атаки 51%» — врожденная его особенность. Чтобы сделать атаку как можно более дорогой, биржи стараются ждать как можно дольше после транзакции, прежде чем внести изменения в баланс пользователя. Ведь чем больше блоков было создано с момента включения требуемой транзакции в блокчейн, тем меньше вероятность, что произойдет «реорганизация» блокчейна и все откатится. Но это же ведет и к значительному неудобству: сложно пользоваться платежным средством, в котором переводы идут часами.
Как бы то ни было, мы наверняка увидим эту атаку в действии еще не раз.
Проверка правописания пароля
Для того чтобы распорядиться криптовалютой, нужно знать секретный ключ. Именно он хранится в криптовалютном кошельке, а баланс пользователя хранится в блокчейне.
Если вы меняете криптокошелек одной фирмы на другой, вам придется скопировать ключ из старого и вставить его в новый кошелек. Для удобства восприятия этот ключ представляют в виде фразы из 12 простых слов, например «witch collapse practice feed shame open despair creek road again ice least».
Оказалось, разработчики одного из криптокошельков случайно отправляли эту фразу в Интернет для проверки правописания. Эта особенность была обнаружена криптоинвестором после того, как у него украли 70 000$. Мы сомневаемся, что деньги действительно были украдены именно по описываемой причине, но сама история в любом случае поучительная.
Все произошло из-за того, что нынче приложения чаще всего не пишут с нуля, а собирают из компонентов, в том числе и от сторонних разработчиков. Так и поступили разработчики криптокошелька Coinomi. Для отрисовки формочки для вставки секретной фразы они использовали компонент jxBrowser. Сюрпризом для разработчиков оказалось то, что по умолчанию этот компонент проверяет правописание текста, введенного в формочку. А чтобы не таскать с собой словари для всех языков и прочее, он делает запрос на проверку в облаке, отсылая весь текст на адрес googleapis.com.
Для обычных форм ввода такая забота может быть нелишней, но только не для полей ввода паролей и суперсекретных фраз.
В свое оправдание разработчики кошелька заявили, что секретная фраза передавалась только в Google, что передавалась она в зашифрованном виде и, вообще, Google присылал в ответ сообщение об ошибке. Как бы то ни было, жертва уверена, что именно по этой причине пользователь лишился своих средств.
Coinomi Wallet vulnerability
Дата: 22 февраля 2019
Ущерб: 70 000$
Источник.
Как защититься
С одной стороны, причиной проблемы стала обычная невнимательность. Функция проверки правописания была задокументирована, в инструкции к используемому компоненту было описано, как ее отключить. Обычное тестирование, вероятно, не выявило бы проблему, но ее точно обнаружили бы исследователи в рамках Application Security Assesment.
С другой стороны, проблема глубже, чем кажется. Использование сторонних библиотек открывает риск обнаружения уязвимостей в этих библиотеках или их новых версиях, а также риск атаки через цепочку поставок. Это означает, что злоумышленнику для заражения криптовалютного кошелька и его распространения среди криптоинвесторов необязательно взламывать непосредственного разработчика инструмента. Достаточно взломать одного из его «подрядчиков». Зачастую подрядчики хуже защищены и даже не имеют ни малейшего понятия, в каких важных проектах будет использоваться их код.
Порой диву даешься, насколько беспечно ведут себя ответственные люди, а порой сочувствуешь их беспомощности. На этом взломы не заканчиваются, следите за новостями.