Перейти к содержанию
  • записей
    14
  • комментариев
    28
  • просмотров
    43 936

"Скрытый" майнер Monero.


TheFuzzStone

8 839 просмотров

blog-0181932001493026283.png

Предисловие

Как то на Биткойнтолке я увидел достаточно конструктивный спор между двумя юзерами об инстамайне одной криптовалюты. Один из участников спора упомянул о “специальной версии майнера Монеро”...

 

Мне стало интересно, пошел гуглить. Но все что мне удалось нагуглить -- какие то “скрытые и оптимизированные майнеры” от школо-хацкеров.

 

Решил обратится к dEBRUYNE (один из главных контрибьюторов Монеро), он любезно поделился ссылкой. Ниже перевод на русский язык.

 

 

 

 

Эмиссия Monero... и вектор встроенных функций процессора

 

Я проснулся 28 мая 2014, в отпуске с моей семьёй в середине пустыни, обнаружив копию моих приватных исходников на форуме bitcointalk.

 

Объявленными "новой оптимизированной версией" майнера для криптовалюты Monero, которая была принята майнерами с энтузиазмом по всему миру. И в этом процессе, моя ежедневная выручка с майнинга упала более чем на 5000 долларов.

 

Но давайте начнём с начала, когда я начал углубленное сотрудничество с тремя людьми, которых я никогда не встречал (а имя одного так и осталось для меня неизвестным) - на кону была новая криптовалюта суммой сотни тысяч долларов.

Всё началось с загадочной заметки от кого-то, с кем я общался в сети, со ссылкой на форум bitcointalk на тему новой валюты под названием "bitmonero". В его заметке было написано лишь:

 

Выглядит интересно

 

Из прошлых сотрудничеств с ним я знал, что у него хорошая чуйка на возможности в криптовалютах. В течение часа или двух, он дополнил:

 

Касательно bitmonero - это профитно, если использовать aws с майнером в кошельке. Похоже, что некоторые люди пользуются оптимизированной версией, которая в несколько раз быстрее стандартной, так что однозначно есть возможности для совершенствования...

 

AWS, конечно же, был рынком Amazon Web Services, который позволял дешево арендовать умопомрачительные вычислительные мощи на короткие (1 час) сроки. Выгодность AWS - ключевой фактор в майнинге криптовалюты из-за масштабируемости: ты можешь арендовать одну или 10,000 машин, и единственная вещь, о которой останется позаботиться - это цена, начинающая расти, если арендовать слишком много.

Я был занят в конце семестра и не смог быстро ответить. На следующий день я получил от него email, где он предлагал 1 Биткоин (примерно $600) за разработку майнера, который был бы в 5 раз быстрее, и потом в чате мы обсудили разделение выручки 50/50. Я всё ещё чувствовал себя подавленным из-за объёма работы, но когда я бегло осмотрел код, мне почему-то показалось, что в дальнейшем мне будет весело. Настолько весело, что когда я вернулся домой, то не мог выкинуть из головы эти мысли, 6 часов провозился с кодом, и получил ускорение в 3 раза.

 

На следующий день я оставил весточку моему контакту:

 

Я попробую переписать весь SSE ради прикола. Я наконец-то понял - они взяли scrypt за свою модель, но превратили его в большую длинную зависимую цепочку. Трудно урезать память, за счет замедления верификации.

 

Спустя день я добился ускорения в 5 раз, затем в 8, в течение недели до 11... Довольно примечательно, учитывая то, что разработчик уже начал внедрять некие оптимизации в код.

 

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

 

Сейчас стоит ввести вас в краткую историю "Bitmonero" (сейчас называется Monero). В феврале 2014 анонимная группа разработчиков выпустила монету, называющуюся Bytecoin, основанную на полностью новой реализации биткоина как криптовалюты, названной Cryptonote, но с гораздо большей анонимностью, благодаря использованию умного механизма, подобного Диффи-Хеллману, для шифрования адресов назначения и кольцевых подписей Ривеста для обеспечения использования сети на уровне транзакций, без нужды в миксинге в реальном времени. Это не было превосходным, но было умным, и самой важной вещью стало то, что это было новым, фундаментально отличающимся от Bitcoin решением. Оно привлекло много внимания.

 

Когда Bytecoin был выпущен, он был представлен как уже использовавшийся 2 года продукт в дарквебе (сайты Tor и т.д.), и в течение этого времени было намайнено 80% от всей криптовалюты. Приём в криптовалютном сообществе был сильно скептичен.

 

Я глубоко убеждён в том, что скептицизм был оправдан: Вот оригинальный slow-hash из Bytecoin, который был скопирован в Bitmonero. У него есть некоторые неприятные моменты. Например, на строке 100 вы можете заметить, что для каждой итерации во внутреннем цикле, повторяющемся десятки тысяч раз, ключ AES реимпортируется в библиотеку. Цикл, начинающийся на строке 113, повторяется полмиллиона раз, и из-за тонны "memcpys" и манипуляций с указателями сложно сказать, что всё, что делает этот код - всего лишь один раунд шифрования AES. Разыменование указателя на случайный блокнот, 64-битное умножение, другое разыменования указателя. Фух. Этот оригинальный код был примерно в 50 раз медленнее моего финального оптимизированного кода, который мог легко использоваться для подделки двухлетних записей в блокчейне с использованием одного компьютера или небольшого кластера. Я вполне уверен в том, что это произошло.

 

Bitmonero был форком Bytecoin, у которого не было бы 80% премайна. Но начальный разработчик то ли не знал, то ли не позаботился, то ли не захотел получить выгоду от деоптимизированного хеширования. Этот разработчик был прогнан сообществом, и на его место пришла соответствующая группа разработчиков, унаследовавшая его работу. А группа эта, насколько мне тогда показалось, вообще не знала о деоптимизации. Так всё и осталось на своих местах ещё на пару недель.

 

Когда я этим всем занимался, разработчик "NoodleDoodle" (эй, это же крипта, люди могут выбирать любые имена, которые они хотят. Да, Сатоши Накамото?) уже распутал первую "деоптимизацию" с ключом шифрования AES. Но все остальные проблемы оставались на своих местах. Самое важное в том, что полное использование AES во внутреннем цикле было одной инструкцией на современных x86 процессорах.

 

Это была великолепно созданная proof-of-work функция, нацеленная на использование мощи современных процессоров (нативного шифрования AES и быстрого 64-битного умножения), настроенная на использование блокнотов размером L3 кэша одного ядра процессора Intel (примерно 2 Мб), которую обернули в такую простыню дерьма до степени неузнаваемости, пока не начинаешь на неё прыгать, рвать её и собирать по кусочкам заново.

 

 

1493026596.png

 

 

Вот как это выглядит без всей этой дряни (диаграмма показывает один раунд): несколько начальных 128-битных значений определяются хешированием состояния блока алгоритмом Keccak (sha3) - назовём их A и B. Большая таблица подстановки также пополняется с использованием того же состояния и перемешивается с использованием AES. Затем 500,000 раз выполняются раунды перемешивания: А используется для определения псевдослучайного места в блокноте, добавляется туда, шифруется одним раундом AES, результат используется для определения второго места, выполняется 64-битное умножение, результат сохраняется, операция повторяется. Элегантно просто.

 

У меня не было ни аккаунта AWS (и даже кредитной карты), чтобы всё сделать правильно, поэтому я отправил код моему контакту, и мы поехали в город.

 

К 14 мая мы составляли 45% всей вычислительной мощи монеты. Ситуация приобретала немного захватывающий оборот:

 

Думаю, за последние 24 часа я должен был получить почти 6 BTC. Отправлю тебе 3, если мне удастся продать намайненное.

 

$1500 в день были очень привлекательной прибылью от инвестиций. На некоторое время я забросил сон и упрашивал разрешение у своей семьи продолжать проект пару часов в день, пока мы были в отпуске. Разрешение получено.

 

Я понял, что мы сделали правильное решение, когда 21 мая мы получили 13 BTC (примерно $6500) и 17 BTC на следующий день. Думаю, в некоторых моментах наша вычислительная мощь составляла более чем 60% мощности всей сети. Этого было достаточно, чтобы начать играть в грязные игры, но мы не были заинтересованы в этом (да и чтобы это сделать, пришлось бы изучить код на ещё более глубоком уровне) и просто продавали монеты по мере их добычи.

 

Из-за новизны кодовой базы и актуальных, значительных технических преимуществ в плане анонимности, приличные деньги начали течь в монету. Более или менее известные мне люди, получившие свои миллионы на инвестировании в биткоин, начали присматриваться к Monero как к высокорисковому способу вложения малой части их биткоинов.

 

К 16 мая я выдавил примерно 90% всех оптимизаций, мы работали в 100 раз быстрее, чем оригинальный код при первоначальном релизе. Это не остановило меня от одержимости поиска твиков и на следующей неделе, но также дало небольшую передышку на то, чтобы обдумать следующий шаг.

 

Натуральная эволюция криптовалют начинается с их майнинга на процессорах, ведь это же просто. Потом кто-нибудь пишет майнер, оптимизированный под видеокарты. Крупные шишки переходят на FPGA, затем на ASIC. Хотя, насколько нам всем известно, только монеты с алгоритмом SHA256d (Bitcoin и его семейство) и Scrypt (Litecoin, Dogecoin, и т.д.) получили реализацию майнинга на ASIC.

 

Так почему бы не сделать очередной скачок? Нам нужен был GPU-майнер, чтобы быть впереди неизбежных оптимизаций, выпускаемых другими людьми. По факту, NoodleDoodle уже выпустил другое обновление, ускоряющее майнинг в 2 раза, и говорил о ещё более сильном ускорении на подходе. Это было лишь вопросом времени, пока некоторых из опасных криптоэкспертов не приняли своё участие, и yvg1900 уже говорил о разработке своего майнера для Monero. Мир майнинга альткоинов достаточно мал, и людей, которые смогли бы преодолеть мои оптимизации, было очень мало, и yvg1900 был одним из них. Я знал, что когда он войдёт в игру, все будут использовать его код.

 

(И история показала, что я был прав - его последний релиз был на 10% быстрее моего, и он был достаточно добр, чтобы поделиться со мной несколькими микро оптимизациями x86/Haswell.)

 

Я разработал GPU-майнер, о котором я писал в свой блог ранее, но он не был идеальным. К счастью, в процессе разработки я встретил самых лучших. Я разослал им сообщения, объяснил возможность, и они присоединились. Достаточно скоро, в нашем арсенале был не только супер-быстрый CPU-майнер, но и отличный небольшой GPU-майнер.

 

Наличие обеих майнеров снизило наши ежедневные затраты в два раза. GPU-майнер не был сильно быстрее CPU-майнера, но из-за ценообразования на рынке было выгоднее взять машину с хорошей видеокартой, нежели чем с процессором. Так, в течение нескольких недель мы смогли заниматься майнингом одновременно на видеокартах и процессорах.

 

Что было хорошо, так это то, что инцидент 28 мая произошёл быстрее, чем мы предполагали.

 

Из того, что я могу вспомнить, мой контакт разговаривал с другим разработчиком насчёт произведения дальнейших оптимизаций кода по контракту. Я не знаю деталей этой беседы, и я не буду спекулировать, но что-то где-то пошло совсем не так, и другой разработчик оформил мои оптимизации в релиз с открытым исходным кодом. Ночью наша доля начала стремительно снижаться.

 

Я снова не спал следующей ночью и добавил последнюю 5% оптимизацию в мой код, но сейчас мы реально зависели от быстрого GPU-кода и минимизации затрат на майнинг. Мы потратили немного времени на оценку производительности и анализ цен на машины, которые предлагал Amazon. Так нам удалось немного снизить затраты. Но когда нам удалось закончить GPU-майнер, мы снова вернулись в дело!

 

Всё шло хорошо в течение недели-двух, пока 4 июля, другой GPU-разработчик, Claymore, не выпустил свой собственный GPU-майнер, но он был предназначен только для AMD видеокарт, а у Amazon были Nvidia. Майнер также был примерно в 2 раза медленнее нашего - троекратное "ура" быстрому коду. Мы задерживали наше дыхание в ожидании волны новых майнеров, но она никогда не пришла. Моя лучшая догадка состоит в том, что новизна ПО Cryptonote, а также проблемы с его запуском ввиду множества зависимостей от Boost и других библиотек, напугала много людей и держала порог вхождения на высоком уровне.

 

В конце концов наша игра продолжилась в июле -- почти 2 месяца майнинга с достаточным преимуществом, чтобы получить прибыль на Amazon. Мы потратили более четверти миллиона долларов, арендуя облачную вычислительную мощность до такой степени, что один раз мы провели отличный телефонный разговор с менеджером Amazon, который пытался выяснить, как они могут улучшить сервис для чудаков типа нас.

 

Был получен дикий опыт, и хотя слив кода доставил некоторые финансовыые неудобства, я всё же очень рад, что проделанные оптимизации оказались на публике (я бы всё равно постепенно их публиковал, но не планировал делать это так рано). Это информативно, что через все пути, которые я повидал, получать оплату за улучшение состояния криптовалютного программного обеспечения, самым выгодным оказался жадный подход, при котором модифицированное ПО остаётся приватным. Это то, над чем должны поразмышлять разработчики будущих валют - заплатить или нет кому-то за релиз оптимизированных CPU и GPU-майнеров для вашей монеты.

 

25 строк С, одна инструкция встроенного ассемблера и немного внутренней структуры AVX создали один из самых забавных, радостных и выгодных проектов, в которые я когда-либо был вовлечен. Как и всё в криптовалюте, он двигался со скоростью света - это было похоже на запуск и сворачивание небольшого стартапа за 2 месяца. И вот почему теперь у меня в подвале стоят 6 high-end GPU-майнеров, которые согревают мой дом зимой, и есть забавные истории на тему важности защиты и уделения внимания низкоуровневому программированию.

 


 

После перевода статьи я опять списался с dEBRUYNE, попросил его дать комментарий для РУ-сообщества (в спойлере скрин + перевод):

 

 

1493026968.png

 

Весьма прискорбно. Что касается изуродованного майнера, я в значительной степени согласен с тем, что было задокументировано в этом блогпосте.

 

 

 


Большое спасибо xProphet за помощь с переводом h_1488743908_5282585_d7a89b1191.png

Если материал оказался для вас полезным, пожалуйста, поддержите нас,чтобы мы могли перевести ещё больше интересных статей.

1493027772.png48asCffTPEMeqbxAf2XkP16qeuRTh7vxkQDhfXfbG5LgJ8YJeJEaUsrQ86dKyuyot2KfthhPuzFFRRqL7cFi2TCV1gBSLiF

 

bitcoin.png12RLLRLZ8B8nV4EaC2dMMSCQD8935FCJBz

2 Комментария


Рекомендуемые комментарии

Занятная история. В очередной раз с ухмылкой тыкающая меня перед самим собой в то, что жизнь моя - это череда упущенных возможностей... Ведь в своё время в студенчестве мне подарили даже книгу на ДР (ЕМНИП), по C++, с приложенно дискетой (Sic!) с образцами кода... Я даже пытался что-то ваять... Но не увлекло, не увидел перспектив (тот самый прикуп, который остро необходимо знать!..), чтобы заставить себя изучить язык... Чтобы дать себе как программисту (пусть и не очень талантливому даже, хотя как знать, куда бы вывела кривая?) старт...

А потом и вовсе отмахнулся от самой идеи Bitcoin, когда сообщество distributed.ru начало переползать на майнинг Bitcoin видеокартами ATI. Да и не было у меня ATI, а nVidia, как говорили, малопригодны для майнинга...

Но и это меня не научило ничему - ни уму, ни дальновидности, и потом майнеры, стоя на бесплатной розетке, майнили на Slush's... Словив три блока за год, и это до уполовинивания...

 

А скоро ещё и "кризис среднего возраста" подкрадётся...

Ссылка на комментарий

 

Ботнет BondNet успешно майнит криптовалюту Monero, заражая Windows-серверы

 

Исследователи компании GuardiCore обнаружили ботнет, состоящий из 15 000 серверов, которые в настоящее время используются для майнинга криптовалюты и приносят своему оператору около $1000 в день (примерно $25 000 в месяц).

 

Аналитики пишут, что ботнет появился в декабре 2016 года, но быстро разросся до 15 000 машин, работающих под управлением Windows Server, из которых примерно 2000 активны ежедневно. Специалисты GuardiCore полагают, что оператор ботнета находится на территории Китая, и, судя по обнаруженным в коде комментариям, он скрывается под псевдонимом Bond007.01. Именно поэтому ботнет получил название BondNet.

 

В настоящее время BondNet используется для майнинга криптовалюты. В основном Bond007.01 интересует Monero, но также зараженные серверы майнили ByteCoin, RieCoin и ZCash.

 

Быстрый рост ботнета эксперты объясняют тем, что злоумышленник не жалеет сил и времени на «развитие» BondNet. Известно, что Bond007.01 полагается на разные техники, комбинирует различные эксплоиты и брутфорс-атаки, взламывая как системы с ненадежными учетными данными RDP, так и более защищенные машины. В последнем случае злоумышленник эксплуатирует различные уязвимости в phpMyAdmin, JBoss, Oracle Web Application Testing Suite, ElasticSearch, MSSQL, Apache Tomcat, Oracle Weblogic и так далее.

 

Если взлом удался, Bond007.01 устанавливает на сервер RAT с функциональностью Windows Management Interface (WMI) бэкдора и криптовалютный майнер, чтобы сервер приносил прибыль. Кроме того, зараженные серверы используют WinEggDrop (сканер TCP портов) для поиска новых жертв.

 

Исследователи сообщают, что все пострадавшие машины работали под управлением Windows Server, и более половины под управлением Windows Server 2008 R2.

 

К своему отчету специалисты GuardiCore также приложили специальный инструмент, который призван помочь администраторам обнаружить заражение и удалить ботов Bondnet из своих систем

 

Ссылка на комментарий

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...