Javascript майнер: альтернатива рекламе или новая чума / Хабр

Содержание

standalone js miner monero | Java | JavaScript | Node.js | PHP | Архитектура ПО

необходимо написать майнер для работы с сторонними пулами.

скрипт должен быть полностью локальным, не тянуть с посторонних сайтов дополнительные js скрипты или библиотеки (если таковые необходимы, сделать так, чтобы работало локально со скриптом)

скрипт должен принимать в качестве параметров адрес пула, кошелек, имя воркера.

инстанс методы должны быть аналогичны coinhive

возможно самым простым будет адаптация существующего скрипта от coinhive

Навыки: Java, JavaScript, Node.js, PHP, Архитектура ПО

Показать больше: coinhive reddit, coinhive javascript, coin hive block, coin hive wiki, coin hive javascript, coin hive reddit, coinhive miner, coinhive malware, 3d модель земли онлайн, 3d моделлеры, 3d моделлер фриланс, 3d моделлер удаленно, 3d моделлер онлайн, 3d моделирование онлайн фриланс, 3d моделирование онлайн, 3d дизайнер фрилансер, 3d дизайн интерьера фриланс, 3d графика фриланс, 3d визуализатор фрилансер, 3d аниматор фриланс

( 2 отзыв(-а, -ов) ) Москва, Russian Federation

ID проекта: #15847060

Майнинг через браузер и как от этого защититься. Майнинг в браузере

Да, друзья, вы не ослышались, Майнинг через браузер!

Последнюю неделю в сети активно обсуждается такое явление, как майнинг в браузере. Принцип работы браузерного майнинга — далеко не новость, но до недавнего времени никто не пытался внедрять скрытые скрипты для майнинга прямо в код страницы сайта.

Что такое Майнинг?

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

Майнинг через браузер

Первым такой эксперимент запустил популярный торрент-трекер Piratebay. Вместо заработка на рекламе (как это делает большинство) ребята решили нажиться другим способом. Незаметно для посетителей сайта их браузер используя ресурсы компьютера майнил криптовалюту. Это и вызвало большой резонанс, так как пользователи начали замечать, что скрытый метод монетизации увеличивает загрузку процессора до 100%.

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

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

Проверка браузера на майнинг

Разработчики браузера Opera создали сайт, который поможет проверить ваш браузер. Для проверки браузера на скрытый майнинг необходимо перейти на сайт cryptojackingtest.com и нажать на кнопку запуска.

Сайт cryptojackingtest.com

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

  • Зеленая надпись YOU’RE PROTECTED — ваш браузер защищен.
  • Красная надпись YOU’RE NOT PROTECTED — ваш браузер уязвим.

Имейте ввиду, данная проверка не дает 100% результат. Несмотря на положительный результат теста, вам все-равно необходимо предпринять меры для защиты от майнинга в браузере.

Если вы пользователь браузера Google Chrome, вас может заинтересовать статья «Как обнаружить скрытый майнинг в браузере Chrome».

Домены браузерных майнеров

Для начала вот список всех известных на данный момент доменов:

  • azvjudwr.info
  • cnhv.co
  • coin-hive.com
  • gus.host
  • jroqvbvw.info
  • jsecoin.com
  • jyhfuqoh.info
  • kdowqlpt.info
  • listat.biz
  • lmodr.biz
  • mataharirama.xyz
  • minecrunch.co
  • minemytraffic.com
  • miner.pr0gramm.com
  • reasedoper.pw
  • xbasfbno.info

Как защититься от Майнинга в браузере

Есть несколько способов защиты от Майнинга в веб-браузере:

  • Редактирование файла hosts
  • Установка специальной утилиты
  • Отключения JavaScript в браузере
  • Установка специального дополнения для браузера
  • Добавление фильтра в uBlock и AdBlock

Каждый из них имеет свою плюсы и минусы. Начнем по порядку.

Защита от Майнинга с помощью файла hosts

Чтобы заблокировать майнинг пользователям Windows необходимо добавить домены майнинга в файл hosts. Для примера я добавлю домен уже известного майнера Monero coin-hive.com.

1. Откройте проводник или другой файловый менеджер и перейдите в папку:

C: \ Windows \ System32 \ drivers \ etc

2. Откройте файл hosts в текстовом редакторе, например «Блокнот». Добавьте строку 0.0.0.0 coin-hive.com в конец документа.

Файл hosts

3. Сохраните документ.

Это процедура блокирует запросы на домен coin-hive.com.

У данного метода есть один недостаток строка в файле hosts блокирует точный адрес домена. Т.е. при необходимости вам придется добавлять другие адреса самостоятельно. А адреса как вы понимаете со временем могут добавиться.

Готовый, актуальный список доменов для добавления в файл hosts. Просто копируете все адреса и вставляете.

Блокировка браузерного майнинга с помощью Anti-WebMiner

На днях появилась утилита Anti-WebMiner. Все что умеет делать программа — это блокировка майнеров путем перенаправления доменов.

Запускаем программу и нажимаем большую кнопку «Install» (Установка).

Anti-WebMiner

Также легко можете удалить, нажав на кнопку «Unintelligible».

Рекомендую использовать Anti-WebMiner только тем, кто не знает и знать не хочет что такое файл hosts, и тем, кто не хочет устанавливать браузерные дополнения.

Защита от Майнеров с помощью отключения JavaScript

Другой вариант — это отключить JavaScript на сайтах. Это может быть проблематично, так как сайтам для правильной работы может потребоваться JavaScript.

Для тех кто не в курсе. JavaScript можно отключить в самом браузере, но намного удобнее использовать расширение NoScript.

Защита от Майнинга с помощью дополнения NoCoin

Для блокировки скриптов и урлов вы также можете воспользоваться расширением NoCoin.  Дополнение доступно для пользователей браузеров: Chrome, Firefox и Opera. Этот блокировщик отлично блокирует майнинг через браузеры.

В uBlock это делается на вкладке «Мои Фильтры». Не буду показывать, там все и так ясно.

Недостатком  данного метода является то, что вам необходимо добавить новые домены и изменить существующие, если возникнет необходимость.

Выводы

Несмотря на то, что я противник лишних дополнений, новичкам (основываясь на репутации автора) все же рекомендовал бы установить расширение NoCoin. А вот продвинутый пользователь лучше пусть работает ручками!

Ну, вот вроде бы и все, что необходимо знать о Майнинге через браузер на данный момент. Я надеюсь, что применив эти способы вы никогда не увидите 100% загрузки процессора!

У браузера Opera недавно появилась встроенная функция защиты от браузерного майнинга. Подробнее о том как ее включить вы узнаете в статье «Opera анти-майнинг».

«Яндекс» найдет майнеров – Газета Коммерсантъ № 40 (6278) от 12.03.2018

«Яндекс.Браузер» внедрил защиту от использования для добычи криптовалют злоумышленниками. Для этого браузер будет анализировать нагрузку на процессор пользовательского устройства и блокировать майнинговые скрипты. В 2017 году атакам майнеров подверглись 2,7 млн пользователей в мире. Среди бесплатных программ от них также могут спасти блокировщики рекламы.

«Яндекс.Браузер» начал автоматически находить и блокировать майнинговые скрипты, которые встраиваются в сайты и позволяют тайно использовать вычислительные ресурсы посетителей для добычи криптовалют, рассказали “Ъ” в «Яндексе». Для этого браузер анализирует, насколько загружен процессор во время просмотра сайтов. Возросшая нагрузка — сигнал, что на сайт могли добавить майнинговый скрипт, объясняют в компании. Если проверка подтвердит наличие скрипта, браузер его заблокирует, при этом сайт продолжит работать, но майнеры не смогут использовать устройство посетителя. «Подобный майнинг зачастую влияет на систему пользователя крайне негативно, потенциально захватывая до 100% мощности каждого ядра процессора»,— отмечает руководитель десктопного «Яндекс.Браузера» Роман Иванов. Защита от майнинга работает на всех платформах, включая компьютеры и мобильные устройства на iOS и Android.

«Яндекс» запустил собственный браузер в 2012 году. По данным LiveInternet, в феврале 2018 года доля «Яндекс.Браузера» на рынке составила 10%, он занимает третью строчку по популярности в России, уступая Google Chrome (56,1%) и мобильной версии Safari (18,6%).

2,7 миллиона пользователей

по всему миру подверглись в 2017 году хакерским атакам с целью нелегального использования их компьютеров для майнинга криптовалют

По данным «Лаборатории Касперского», в 2017 году 2,7 млн пользователей в мире подверглись атакам майнеров, что почти на 50% больше, чем в 2016-м (1,9 млн). Они могли стать жертвами рекламного и пиратского ПО, а также контрафактных игр, которые используются преступниками для скрытого заражения компьютеров, сообщила «Лаборатория Касперского».

По ее данным, только во втором полугодии 2017 года преступники получили таким образом несколько миллионов долларов.

С майнинговыми скриптами уже борются не только антивирусные программы, подтверждают опрошенные “Ъ” эксперты. В частности, защита в браузерах для пользователей без качественного антивируса стала появляться еще с конца 2017 года, говорит антивирусный эксперт «Лаборатории Касперского» Алексей Маланов: в большинстве случаев для этого используется расширение для браузера. При этом использование загрузки процессора как индикатора может и не дать надежного результата, хотя в принципе использовать ее для информирования «вполне разумно», считает он. «Во-первых, майнинговые скрипты умеют ограничивать загрузку, чтобы вызывать меньше подозрений. Во-вторых, вероятны ложные срабатывания на сайтах, которые используют высокую загрузку в легальных целях,— перечисляет он.— Если компьютер старый, то даже воспроизведение потокового видео может дать ложный сигнал».

По мнению руководителя отдела технического сопровождения продуктов и сервисов Eset Russia Сергея Кузнецова, среди бесплатных инструментов для защиты от майнинга наиболее эффективны широко распространенные блокировщики рекламы. Наиболее эффективный, но платный способ обезвредить JavaScript-майнер — комплексный антивирусный софт, отмечает он. Эффективность блокировщиков рекламы для борьбы с майнингом подтверждают и в Microsoft. C выходом Windows 10 компания фокусируется на развитии собственного браузера Microsoft Edge. Для него доступны расширения, например AdBlock и AdBlock Plus, с помощью которых можно оградить себя от несанкционированного майнинга криптовалют, сообщил “Ъ” представитель Microsoft Артем Минаев.

Роман Рожков

Поиск серых майнеров в недрах Chrome и Opera ForkNews.io

Вы уже знаете как javascript-майнеры попадают на страницы интернет-ресурсов. Теперь попробуем разобраться как же выяснить какая именно из множества открытых вкладок использует Ваши ресурсы для добычи криптовалюты.

Как мы уже говорили ранее, основным симптомом появления серого майнера на Вашем устройстве является замедление его работы и очевидный перегрев даже при отсутствии какой-либо полезной нагрузки. Первым этапом Вам необходимо найти какой же процесс нагружает систему и самым простым вариантом является Диспетчер Задач. В большинстве ситуаций он покажет какой именно процесс потребляет Ваши ресурсы.

Итак, Диспетчер Задач показал, что Ваш браузер использует слишком много ресурсов. Это говорит о том, что какая-то открытая страница содержит либо javascript майнер, либо просто неоптимальный javascript или ошибку в нем, приводящую к повышенной нагрузке на систему. В любом случае, такую страницу необходимо обнаружить и остановить исполнение скрипта. При постоянном проявлении проблемы в разных браузерах, хорошим тоном является сообщить владельцу сайта о данной проблеме.

Найти конкретную прожорливую страницу или расширение позволяют популярные браузеры Google Chrome и Opera. Для этого у них есть собственный Диспетчер Задач, который отображает ресурсы (загрузку процессора, занимаемую память, объем сетевого траффика), используемые каждой страницей, фреймом или расширением в отдельности. Для того, чтобы вызвать диспетчер задач в Chrome под Mac OS откройте меню “Окно” (Window), а в нем выберите пункт “Диспетчер Задач” (Task Manager). В версии Google Chrome для Windows “Диспетчер Задач” (Task Manager) находится в меню «Дополнительные инструменты» (Tools).


С Opera под Mac Os все немного сложнее: сначала необходимо открыть доступ к меню “Разработчикам”, для чего откройте меню “Вид” (View), а в нем выберите нижний пункт “Показать меню разработчика” (Show Developers Menu). В меню появится новое подменю “Разработчик” (Developer). Для того, чтобы получить доступ к Диспетчеру Задач (Task Manager), просто воспользуйтесь соответствующим пунктом в меню “Разработчик” (Developer). В Opera для Windows меню «Разработка» (Developer) открыто по умолчанию, поэтому Вы сразу можете вызвать Диспетчер Задач (Task Manager) из этого меню.


Теперь, когда Вы нашли страницу или процесс, который мешает работе Вашего браузера, просто выделите необходимую строку и нажмите кнопку “Завершить процесс” (End Process). Точно так же можно завершить работу выбранного расширения. После завершения работы расширения его можно удалить, а затем перезапустить браузер. Теперь Вы знаете как избавиться от простейшего javascript майнера без использования какого-либо дополнительного ПО.

«Яндекс» найдет майнеров | ComNews

 «Яндекс.Браузер» внедрил защиту от использования для добычи криптовалют злоумышленниками. Для этого браузер будет анализировать нагрузку на процессор пользовательского устройства и блокировать майнинговые скрипты. В 2017 году атакам майнеров подверглись 2,7 млн пользователей в мире. Среди бесплатных программ от них также могут спасти блокировщики рекламы.

«Яндекс.Браузер» начал автоматически находить и блокировать майнинговые скрипты, которые встраиваются в сайты и позволяют тайно использовать вычислительные ресурсы посетителей для добычи криптовалют, рассказали «Ъ» в «Яндексе». Для этого браузер анализирует, насколько загружен процессор во время просмотра сайтов. Возросшая нагрузка — сигнал, что на сайт могли добавить майнинговый скрипт, объясняют в компании. Если проверка подтвердит наличие скрипта, браузер его заблокирует, при этом сайт продолжит работать, но майнеры не смогут использовать устройство посетителя. «Подобный майнинг зачастую влияет на систему пользователя крайне негативно, потенциально захватывая до 100% мощности каждого ядра процессора»,— отмечает руководитель десктопного «Яндекс.Браузера» Роман Иванов. Защита от майнинга работает на всех платформах, включая компьютеры и мобильные устройства на iOS и Android.

«Яндекс» запустил собственный браузер в 2012 году. По данным LiveInternet, в феврале 2018 года доля «Яндекс.Браузера» на рынке составила 10%, он занимает третью строчку по популярности в России, уступая Google Chrome (56,1%) и мобильной версии Safari (18,6%).

По данным «Лаборатории Касперского», в 2017 году 2,7 млн пользователей в мире подверглись атакам майнеров, что почти на 50% больше, чем в 2016-м (1,9 млн). Они могли стать жертвами рекламного и пиратского ПО, а также контрафактных игр, которые используются преступниками для скрытого заражения компьютеров, сообщила «Лаборатория Касперского». По ее данным, только во втором полугодии 2017 года преступники получили таким образом несколько миллионов долларов.

С майнинговыми скриптами уже борются не только антивирусные программы, подтверждают опрошенные «Ъ» эксперты. В частности, защита в браузерах для пользователей без качественного антивируса стала появляться еще с конца 2017 года, говорит антивирусный эксперт «Лаборатории Касперского» Алексей Маланов: в большинстве случаев для этого используется расширение для браузера. При этом использование загрузки процессора как индикатора может и не дать надежного результата, хотя в принципе использовать ее для информирования «вполне разумно», считает он. «Во-первых, майнинговые скрипты умеют ограничивать загрузку, чтобы вызывать меньше подозрений. Во-вторых, вероятны ложные срабатывания на сайтах, которые используют высокую загрузку в легальных целях,— перечисляет он.— Если компьютер старый, то даже воспроизведение потокового видео может дать ложный сигнал».

По мнению руководителя отдела технического сопровождения продуктов и сервисов Eset Russia Сергея Кузнецова, среди бесплатных инструментов для защиты от майнинга наиболее эффективны широко распространенные блокировщики рекламы. Наиболее эффективный, но платный способ обезвредить JavaScript-майнер — комплексный антивирусный софт, отмечает он. Эффективность блокировщиков рекламы для борьбы с майнингом подтверждают и в Microsoft. C выходом Windows 10 компания фокусируется на развитии собственного браузера Microsoft Edge. Для него доступны расширения, например AdBlock и AdBlock Plus, с помощью которых можно оградить себя от несанкционированного майнинга криптовалют, сообщил «Ъ» представитель Microsoft Артем Минаев.

На сайте Pirate Bay тайно запускается майнер криптовалюты

Когда дело доходит до Pirate Bay, это обычно киностудии, музыкальные продюсеры и разработчики программного обеспечения, которых сайт раздражает – в основном, из-за авторского права. Но в интересном положении теперь оказались и пользователи, которые тоже раздражены и разочарованы самым известным торрент-сайтом в мире.

Так что же случилось? Внезапно Pirate Bay добавила на сайт скрипт майнера, работающего на Javascript. В код сайта входит встроенный криптовалютный майнер из Coinhive. Пользователи, которые заметили увеличение использования ресурсов на своих компьютерах, теперь недовольны.

Проблема новая, и пользователи заметили всплеск активности процессоров, который начался днём 16 сентября. Разумеется, люди негативно отреагировали на это — даже собственные модераторы Pirate Bay. В Reddit есть жалобы на «100% процессор на всех 8 потоках при посещении TPB», а также есть темы на форуме PirateBay.

Как сообщает TorrentFreak, просмотр HTML-файла PirateBay показывает, что именно происходит.

Администратор и «супермодератор» форумf PirateBay, Сид не впечатлён:

«Это действительно серьёзно, надеюсь, мы сможем быстро принять меры. По возможности, обратите внимание на загрузку и комментарии по ошибкам, пока они есть на форуме».

Он предлагает следующий совет для всех, кто обеспокоен таким «обновлением»:

«Пока это не будет исправлено (думаю, что оно будет исправлено раньше, чем позже), заблокировать его от запуска поможет noscript, так как javascript отключится».

Блокирование javascript может скомпрометировать функциональность сайта несколькими способами:

  • прокрутка назад, хотя при этом страницы комментариев не будут работать;
  • публикация комментариев будет невозможна;
  • просмотр списка файлов не будет работать.

Сайт майнера на Javascript даже рекомендует не делать то, что сейчас делает Pirate Bay:

«Coinhive JavaScript Miner позволяет встраивать майнер Monero прямо на ваш сайт. Сам майнер не оснащён пользовательским интерфейсом — вы несёте ответственность за уведомление своих пользователей о том, что происходит, а также за предоставление статистики по хэшу».

Позднее журналисты Torrentfreak связались с руководством Pirate Bay и выяснили, что встроенный майнер тестировали на протяжении 24 часов как новый способ монетизации, который возможно заменит рекламу на сайте.

Хотите больше новостей? Facebook. Быстрее всех? Telegram и Twitter. Подписывайтесь!

Страница не найдена – Information Security Squad

  • 💣 Как отследить IP-адрес с помощью картинки 07.12.2021

    В этом руководстве мы узнаем, как отследить IP-адрес человека, отправив ему изображение. Это руководство может быть использовано в процессе разведки вместе с социальной инженерией для сбора ценной информации о нашей жертве. Мы также сможем определить браузер и операционную систему, которыми пользуется жертва. Мы будем комбинировать различные онлайн-инструменты для отслеживания ip-адреса. Данное руководство предназначено только для […]

  • 🖧 Изменение MAC-адреса в системах Linux [ Временно и постоянно ] 07.12.2021

    Зачем менять MAC-адрес Когда речь заходит о сетевых технологиях, вы, вероятно, часто слышали термин MAC-адрес. MAC-адрес – это физический идентификатор, назначаемый каждому интерфейсу. Теперь вы можете задаться вопросом: если MAC-адрес уже присвоен интерфейсу, то зачем его менять? Здесь может быть несколько сценариев У нас был очень старый стоечный сервер, на котором мы не смогли установить […]

  • 🔬 Повышаем свою защиту, используя инструмент с открытым исходным кодом YARA 03.12.2021

    YARA не заменит антивирусное программное обеспечение, но поможет вам обнаружить проблемы гораздо эффективнее! Далее мы расскажем как установить YARA на Mac, Windows и Linux. Существует множество различных инструментов для обнаружения угроз корпоративной сети. Некоторые из этих средств обнаружения основаны на сетевых сигнатурах, другие – на файлах или поведении на конечных точках или серверах компании. Большинство […]

  • 🤖 ShotDroid – инструмент пентеста для Android 03.12.2021

    ShotDroid – это инструмент пентеста для android и windows, и в нем есть 3 инструмента, которые имеют свои соответствующие функции: Android Files, Android Keylogger и Take Face Webcam. Особенности Скрытие приложений в файлах android. Пользовательский каталог android. Android Keylogger Автоматический html шаблон в take face webcam. Пользовательский html или пользовательская папка html в инструменте take […]

  • 🐳 Docker secret – как использовать в Docker Swarm и Docker Compose 02.12.2021

    Docker secrets – это сущности Docker, которые предназначены для хранения конфиденциальной информации, такой как имя пользователя, пароль, SSL-сертификаты и любые защищенные файлы. Docker Secret был создан и широко использовался в Docker Swarm, а затем был распространен на docker compose начиная с версии 3. Если вы беспокоились о защите своих конфиденциальных данных, Docker Secret будет одним […]

  • Растущая тенденция заражения майнером JavaScript

    1. CharCode JavaScript

    6 декабря 2017 г. FortiGuard Labs обнаружила взломанный веб-сайт acenespargc [.] Com. Заглянув в исходный код, мы заметили подозрительный зашифрованный скрипт, который использует функцию eval () для преобразования всех символов в числа. Мы использовали инструмент под названием CharCode Translator, чтобы преобразовать числа обратно в символы. Затем мы смогли получить ссылку, которая перенаправляет на мошенническую страницу или фишинговый веб-сайт.

    Часть 1 Часть 2

    Это всего лишь простой пример. Злоумышленник может фактически настроить фишинговый контент по географическому положению, и, чтобы лучше избежать обнаружения, он также исчезнет, ​​когда он обнаружит, что вы уже посещали фишинговую страницу раньше.

    Используя этот метод, злоумышленники могут скрыть вредоносные / фишинговые / рекламные URL-адреса от невооруженного глаза.

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

    2. Инструмент Packer скрывает скрипт CoinHive

    28 декабря FortiGuard Labs узнала о другом вредоносном веб-сайте, использующем описанную выше технику запутывания — romance-fire [.] com — по рекомендации клиента. Этот веб-сайт содержал скрытый вредоносный код для майнинга криптовалюты.

    Мы обнаружили закодированный скрипт и, используя упаковщик для его распаковки, обнаружили, что скрипт связан с CoinHive.

    JavaScript из исходного кода Распаковка JavaScript — Часть 1

    Мы заметили, что URL-адрес (hxxp: //3117488091/lib/jquery-3.2.1.min.js? v = 3.2.11) не выглядел как действительный IP-адрес или домен. Мы провели небольшое исследование и обнаружили, что «3117488091» — это десятичный IP-адрес 185.209.23.219 после того, как мы преобразовали его на KLOTH.NET. Ниже результат:

    Этот сайт преобразовал URL-адрес в hxxp: //185.209.23.219/lib/jquery-3.2.1.min.js? V = 3.2.11. Из URL-адреса мы получили тот же шаблон JavaScript, поэтому мы снова распаковали скрипт.

    Распаковка JavaScript — часть 2

    После последнего раунда распаковки мы наконец смогли получить скрипт, который содержит URL-адреса CoinHive:

    Распаковка JavaScript — часть 3

    3.Майнер монет из GitHub

    26 января 2018 года мы обнаружили еще один веб-сайт — sorteosrd [.] Com, который также добывает криптовалюту путем взлома процессора посетителя. Это вредоносное ПО для добычи криптовалют снова позволяет злоумышленникам извлекать выгоду из добычи цифровой валюты без разрешения пользователя компьютера. Мы полагаем, что этот сайт мог быть взломан или использован веб-мастером.

    Исходный код сайта hxxp: //sorteosrd.com: Влияние тайного майнинга на устройство пользователя

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

    4. Взломанный сайт — BlackBerry заражен майнингом CryptoCoin

    Еще один пример скрипта CoinHive был обнаружен на неожиданно взломанном веб-сайте — blackberrymobile.com.

    Даже сайт Blackberry был на короткое время взломан для майнинга криптовалюты Monero.

    5. Взломанный веб-сайт — Milk New Zealand заражен инструментом deepMiner

    Кроме того, мы также обнаружили, что одна из крупнейших групп молочных ферм в Новой Зеландии, Milk New Zealand, также была взломана.Наша антивирусная лаборатория обнаружила вредоносную активность с сайта, поэтому мы проверили исходный код и нашли на github скрипт с использованием инструмента deepMiner для Mine Monero, Electroneum, Sumokoin и т. Д. См. Снимок экрана ниже:

    JavaScript с использованием deepMiner

    Основываясь на данных на скриншоте выше, мы узнали, что этот тип сценария использует DDNS для своего домена и увеличивает загрузку ЦП только на 50%, чтобы быть менее заметным для конечных пользователей.

    6.Даже YouTube показывает рекламу с майнингом монет

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

    Вредоносный криптомайнинг рекламы на YouTube

    Что вы можете сделать, чтобы предотвратить или избежать угона Coin Miner?

    1. Очистите кеш браузера или установите программное обеспечение ccleaner, чтобы найти и удалить ненужные файлы и недопустимые записи реестра Windows с вашего компьютера
    2. Отключите JavaScript в своем браузере или запустите инструмент или расширение для блокировки скриптов.
    3. Установите антивирусное программное обеспечение, такое как FortiClient
    4. Установите и запустите AdBlocker или аналогичные инструменты, например Ghostery

    FortiGuard внес в черный список все URL-адреса, перечисленные в этом блоге, как вредоносные.

    МОК:

    Взломанных сайтов:

    • acenespargc [.] Com
    • www [.] Romance-fire [.] Com
    • milknewzealand [.] Com

    Недавно обнаруженные URL-адреса майнинга монет:

    • hxxp: // coinhive [.] Com
    • hxxp: // minerhills [.] Com
    • hxxp: // крипто-веб-майнер [.] Com
    • hxxp: // sorteosrd [.] Com
    • hxxp: // greenindex [.] Dynamic-dns [.] Net
    • hxxps: // github [.] Com / deepwn / deepMiner

    Подпишитесь на наши еженедельные отчеты FortiGuard Intel или , чтобы стать частью нашей открытой бета-версии службы Fortinet FortiGuard Threat Intelligence.

    Теперь я владею доменом Coinhive. Вот как я борюсь с криптоджекингом и делаю хорошие вещи с помощью политик безопасности контента.

    Если вы попали на эту страницу из-за того, что увидели странное сообщение на совершенно другом веб-сайте, а затем перешли по ссылке здесь, напишите сообщение владельцу сайта и сообщите ему, что произошло. С другой стороны, если вы попали на эту страницу, потому что вам интересно прочитать о незаконном использовании криптомайнинга на взломанных веб-сайтах и ​​о том, как в результате случайных обстоятельств, теперь у меня есть Coinhive.com и делаю с ним что-нибудь полезное, читайте дальше.

    Вы знаете, как людям не нравится реклама? Да, я тоже (по крайней мере, не отслеживающие спам, которые вторгаются как в вашу конфиденциальность, так и в вашу пропускную способность), но мне также нравится бесплатный контент в Интернете, и в этом заключается загвоздка; как производители контента монетизируют свою работу, если они не могут размещать рекламу на страницах? Ну, естественно, вы «монетизируете свой бизнес с помощью мощности процессора ваших пользователей», что было способом работы Coinhives. Это ссылка на последнюю созданную в архиве версию.org, потому что, если вы зайдете на coinhive.com сегодня, вы ничего не увидите. Сайт мертв. Однако теперь он принадлежит мне, и он просто сидит и не делает практически ничего, кроме обслуживания небольшого количества JavaScript. Я вернусь к этому в ближайшее время, давайте вернемся к бизнес-модели Coinhive:

    Итак, вместо показа рекламы вы помещаете криптомайнер на основе JavaScript на свою жертву … извините — посетителей — браузеры, пока они сидя и читая ваш контент, вы собираете монету Monero на их машине.Они платят за циклы процессора, чтобы положить деньги в ваш карман — гениально! Но с этим возникли две серьезные проблемы, и первая из них, вероятно, очевидна: это неряшливая бизнес-модель, которая (обычно неосознанно) использует счета за электричество людей для личной выгоды оператора сайта. Возможно, он лишь немного их использует (сколько мощности действительно может потреблять встроенный в браузер JS криптомайнер?), Но он все равно выглядит очень сомнительным. Вторая проблема заключается в том, что из-за анонимной природы криптовалюты каждый хакер и их собака хотели разместить Coinhive на любых сайтах, на которых они могли запускать собственный произвольный JavaScript.

    Я дам вам прекрасный пример этого последнего пункта: в феврале 2018 года я писал о Парадоксе цепочки поставок JavaScript: SRI, CSP и доверие в сторонних библиотеках, где кто-то взломал файл JS в службе Browsealoud и внедрил Скрипт Coinhive в него. В этом сообщении в блоге я включил код, деобфусцированный Скоттом Хелми, который показал очень простой фрагмент JavaScript, на самом деле просто включение файла .js с coinhive.com и установку 32-байтового ключа. И это все, что нужно сделать злоумышленнику — включить Coinhive JS, добавить свой ключ и, если он желает, переключить несколько конфигураций.Вот и все, работа сделана, мгновенная криптовалюта!

    А потом Coinhive пропал. (Также — «компания зарабатывала примерно 250 000 долларов в месяц» — крик!) Сайт исчез, а домен перестал разрешаться. Каждый сайт, на котором был запущен Coinhive, либо по замыслу владельца сайта, либо по прихоти криптоджекинга, прекращал добычу Monero. Тем не менее, он все еще делал запросы к домену, но без разрешения имени где-либо, единственными признаками исчезновения Coinhive были ошибки в инструментах разработчика браузера.

    В мае 2020 года я получил как основной домен coinhive.com, так и несколько других вспомогательных, связанных с сервисом, например cnhv.co, который использовался для их сокращателя ссылок (что также заставляло браузеры майнить Monero). Я не уверен, насколько человек, который сделал их доступными для меня, хочет поделиться, поэтому единственное, что я сейчас скажу, это то, что они были предоставлены мне бесплатно, чтобы сделать что-то полезное. 2020 год был довольно загруженным, и только совсем недавно я наконец смог вернуться в Coinhive.Я открыл сайт и просто регистрировал запросы. Каждый запрос приводил к ошибке 404, но каждый запрос также записывался в стандартный журнал службы приложений Azure. И тут все стало намного интереснее.

    Во-первых, статистика высокого уровня, и когда я маршрутизировал через Cloudflare, было очень легко сначала посмотреть на объем запросов:

    Это существенное количество запросов ; достигая пика в 3,63 млн в день для услуги, которой больше не существует. Но номер, который меня действительно впечатлил (если «впечатлил» — правильное слово здесь…) количество уникальных посетителей в день:

    Даааамн! Прошло более двух лет после того, как Coinhive исчез, а майнер все еще встроен в достаточное количество мест, чтобы обслуживать более 100 тысяч уникальных посетителей в день. Ого. Интересно, откуда они все?

    Просто для контекста: Have I Been Pwned (который посещает около 200 тысяч человек в день) имеет следующее географическое распределение:

    Я не хочу делать стереотипные выводы об ассоциации хакеров с Россией и Китаем, но это немного здесь неизбежно.Позже, когда я проанализировал различные URL-адреса, которые вводили Coinhive, было (по анекдотам) сильное присутствие российских и китайских веб-сайтов.

    Далее, вот типичная запись в журнале, сделанная после того, как я открыл пустой веб-сайт:

      #Fields: date time s-sitename cs-method cs-uri-stem cs-uri-query s-port cs-username c -ip cs (User-Agent) cs (Cookie) cs (Referer) cs-host sc-status sc-substatus sc-win32-status sc-bytes cs-байты затраченное время
    
    2021-03-27 02:59:32 COINHIVE GET / lib / coinhive.min.js X-ARR-LOG-ID = 061e55e4-6380-4e88-a7f6-d4ea53071b71 443 - 172.69.166.8 Mozilla / 5.0 + (Linux; + Android + 8.0.0; + ATU-LX3) + AppleWebKit / 537.36 + ( KHTML, + like + Gecko) + Chrome / 88.0.4324.181 + Mobile + Safari / 537.36 ARRAffinitySameSite = 0e2a05ba3fa8945356c52a5d6a03ef6078571b96359db7d489b1580040a9fdec https://lookedon05.com/index.html 

    /index.https: //lookedon.com/index.html обычно встраивался в сайт. IP принадлежит Cloudflare (помните, что это обратный прокси-сервер, поэтому веб-сайт получает именно их IP-адрес), а код ответа - 404, так как ресурса для возврата не было.Реферер является интересным, потому что он сообщает нам, откуда был запрошен скрипт, в данном случае с веб-сайта lookon.com. Быстрый взгляд на этот сайт на момент написания, и да, это криптомайнер в источнике HTML:

    Прежде чем мы продолжим углубляться в тонкости криптомайнеров, я, , настоятельно рекомендую посмотреть это видео Хьюго Биджманса и Кристиан Дорр из Делфтского технологического университета, выступающий на симпозиуме по безопасности USENIX пару лет назад.Он длится всего 21 минуту, и он сразу переходит к делу:

    Есть также гораздо более подробный документ от Хьюго и его коллег под названием «Неумышленное обогащение киберпреступников: комплексное исследование кампаний криптоджекинга в масштабе Интернета». Если вы хотите пойти намного глубже, внимательно прочтите это. (Между прочим, я был в контакте с Хьюго, и мы обсуждаем, как наилучшим образом использовать данные, которые я регистрирую, для исследовательских и защитных целей.)

    Я снял несколько дней журналов, начиная с 27 марта 2021 года и импортировал их в БД, где мне было легче анализировать (8.Всего 9М рядов). Сначала я посмотрел на запрашиваемый контент (все последующие цифры не включают домен сокращения ссылок cnhv.co, если не указано иное):

    Распространенность майнеров JavaScript неудивительна, и ребята из Делфта говорят о роли WebAssembly (.wasm) в своей статье. В исходном скрипте Coinhive были ссылки на WASM, но, конечно же, его никто не загружал в течение некоторого времени, поэтому я могу только предположить, что он был встроен другими способами.В журналах нет реферера ни для одной из записей WASM, поэтому неясно, откуда исходят запросы:

      2021-03-27 02:59:42 COINHIVE GET /lib/cryptonight.wasm X-ARR -LOG-ID = 3aebf86b-116e-4ce6-a8a5-2c3d9911a2c4 443 - 162.158.167.112 Mozilla / 5.0 + (Windows + NT + 10.0; + Win64; + x64) + AppleWebKit / 537.36 + (KHTML, + like + Gecko) + apollohobo / 1.0.0 + Chrome / 58.0.3029.110 + Electron / 1.7.9 + Safari / 537.36 - - coinhive.com 404 0 2 470 1205 15  

    Я отправил это Хьюго, и он сделал следующий комментарий:

    Когда монетный улей.Сценарий min.js был загружен с исходного сервера Coinhive, он проанализировал целевую систему, определил количество доступных потоков ЦП, а затем загрузил этот файл WASM для распределения между несколькими WebWorkers (часто такое же количество доступных потоков). В этом файле WASM происходит фактическая добыча, поскольку WebAssembly может выполняться почти так же быстро, как собственный машинный код. Имя этого конкретного файла WASM менялось несколько раз в прошлом, что объясняет, почему запрашивается вариант файлов Wasm.Некоторые веб-сайты обслуживают сценарий coinhive.min.js со своего собственного сервера (для предотвращения обнаружения), но WebWorkers по-прежнему будут запрашивать файл WASM из исходного домена Coinhive, поскольку сценарий JS практически не изменился.

    Далее идет реферер, но из-за того, что на одном и том же сайте, обслуживающем майнер, есть много разных путей, я сгруппировал по хостам и сообщил об этом:

    Я нашел более 41k уникальных доменов в заголовке реферера. Это многие десятки тысяч веб-сайтов, которые все еще пытаются встраивать Coinhive.Взглянув на webtruyenonline.com (корень сайта, часто упоминаемый в реферерах), сайт находится на вьетнамском языке, но, посетив его, я не нашел никаких следов Coinhive. Не в источнике страницы, не запрашивается из подчиненной зависимости, а также не в других более глубоких ссылках в источниках перехода. При внимательном рассмотрении записей журнала обнаружилась закономерность с пользовательскими агентами, поэтому я отфильтровал их и сгруппировал их:

    Это все мобильные устройства. Я изменил строку UA, которую отправлял, на первую, указанную выше, и повторно отправил запрос, но в ответе HTML по-прежнему не было Coinhive.Подбирает ли он ответ в зависимости от местоположения запрашивающего IP-адреса? Я подключил NordVPN к Вьетнаму и попробовал снова. Ничего такого. Я даже проксировал свой iPhone через Fiddler, затем подключился к VPN во Вьетнам, и все равно ничего. Это полностью стандартный UA для Safari и на iOS 14.4.1, поэтому нет никаких подсказок относительно того, какие обстоятельства вызывают эти запросы. У Хьюго тоже были некоторые мысли по этому поводу:

    В ходе нашего последующего исследования криптоджекинга мы обнаружили, что 1,4 миллиона маршрутизаторов MikroTik обслуживают сценарии криптоджекинга, поскольку они маршрутизируют веб-трафик, географически ориентированный на Бразилию и Индонезию.Возможно, вьетнамский маршрутизатор MikroTik все еще заражен и каким-то образом ему удается внедрить скрипт на этот конкретный (популярный) веб-сайт.

    Я воспользуюсь этой возможностью, чтобы быстро перезвонить, чтобы узнать, почему вашему статическому веб-сайту нужен HTTPS. Защита транспортного уровня - это не только защита конфиденциальной информации, но и защита целостности контента, и если предположить, что Хьюго здесь, это прекрасная демонстрация необходимости HTTPS повсюду, .Подробнее об этом в их статье под названием «Только верхушка айсберга: использование маршрутизаторов в масштабе Интернета для криптоджекинга».

    Следующее имя хоста на aahora.org, однако, было совершенно другой историей, и, конечно же, есть Coinhive:

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

    Меня интересовало еще одно - что мы можем сказать о согласованных кампаниях по криптоджекингу на основе данных? Я имею в виду, сколько из этих записей журнала было с сайтов, использующих один и тот же ключ Coinhive, который указывал бы на одного и того же участника, стоящего за каждым сайтом? Итак, я разработал небольшой сценарий краулера и начал сканировать каждый уникальный сайт в поисках Coinhive. Это базовый (он просто ищет ключ Coinhive в источнике HTML, поэтому пропускает ключи, встроенные в другой файл JS или iframe), но его здесь достаточно для моих требований.Я просканировал первые 375 тыс. URI на основе наиболее распространенных в журналах, извлек ключи и записал количество уникальных URI и имен хостов, на которых они появились. Я нашел более 3k уникальных ключей, вот 10 лучших:

    Погуглив немного по ключам, я обнаружил две интересные вещи, и первая связана со вторым ключом («FgW ...»):

    Восемь новые ключи CoinHive на зараженных MikroTik-устройствах; 1/2

    FgWWtJfuvPmrfwjOfgc9Vo55EyvrMBLh: 45+ инфекции
    dqorRUUFnc3SFuNIwYCka4QnICAngtNk: 35+
    BOvlp33stLBwyDob7Hh5FmQg35jx32iv: 35+
    9pFICAsxNfFPjTILDGhD5D3jqkAqDRND: 35+
    куб.см @bad_packets

    - Кира 2.0 (@VriesHd) 14 сентября 2018 г.

    Что ж, это подтверждает более ранний тезис Хьюго. Каким бы распространенным ни был этот ключ на 103 уникальных хостах, это может быть просто один зараженный маршрутизатор. Дальнейшее подтверждение теории MikroTik заключалось в том, что каждый URL-адрес обслуживался незашифрованным через HTTP:

    . В этом конкретном случае был сильный уклон в сторону «сахарных» доменов. Они связаны с Субарта Роем, именем, которое я узнал только после недавнего просмотра сериала Netflix «Плохие парни-миллиардеры», одним из которых, по всей видимости, является он.Есть ли кто-то в коррумпированной организации миллиардеров, использующий зараженный маршрутизатор, который криптоджекирует все их незащищенные запросы? Я подозреваю, что это лишь одна из многих любопытных загадок в наборе данных.

    Этот третий ключ - «w9W ...» - имеет хит Google, который напрямую ссылается на голландский исследовательский документ:

    Трудно сделать какой-либо вывод, кроме того, что остается большое количество взломанных веб-сайтов, на которых размещен Coinhive. даже сейчас, когда Coinhive мертв. Конечно, они больше не занимаются майнингом криптовалюты, однако эти сайты по-прежнему встраивают в них JavaScript из домена I , так что...

    Модальное окно встроено прямо из скрипта, обслуживаемого мной на сайте. Ссылка ведет на это сообщение в блоге, и люди, которые просто хотят просмотреть сайт, могут легко отклонить сообщение. Я тщательно обдумал этот подход; я действительно хотел изменить сайты других людей? Я хочу, чтобы владельцы сайтов знали, что вероятность их взлома высока. Проблема в том, как это сделать в противном случае, когда мы говорим о десятках тысяч сайтов? Я сделал достаточно разоблачений за достаточно много лет, чтобы знать, что даже делать это один раз, - это болезненно, но если бы я вместо этого написал немного JavaScript...

    О, и пока мы здесь, давайте на мгновение позвольте этому погрузиться: теперь я могу запускать любой JavaScript, какой захочу, на огромном количестве веб-сайтов. Итак, что я мог делать с JavaScript? Я мог изменить, куда отправляются формы, добавить регистратор ключей, изменить DOM, сделать внешние запросы, перенаправить на вредоносный файл и много других очень неприятных вещей. Это власть, которую вы передаете, когда встраиваете чужой JS в свой сайт, и именно именно , почему у нас есть целостность субресурсов.Ранее я ссылался на свой пост на SRI, поскольку он был связан с инцидентом с Browsealoud, и эта ситуация здесь, как никогда, является хорошей демонстрацией того, почему так важна проверка целостности внешних ресурсов.

    Итак, что делать? Что ж, это зависит, и чтобы ответить, нам нужно вернуться к preso от ребят из Delft uni, в частности к этому слайду:

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

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

    Давайте возьмем один из наиболее часто встречающихся в моих журналах веб-сайтов, lookon.com. Эта служба позволяет вам «находить интересные изображения» и, как и большинство современных веб-сайтов, по своему дизайну встраивает всевозможные типы контента из разных мест. Например, есть несколько следующих элементов:

    1. Изображения, загруженные с pbs.twimg.com
    2. Скрипт, загруженный с connect.facebook.net
    3. Шрифты с fonts.gstatic.com
    4. Другой контент из собственного домена для примеры таблиц стилей и другие изображения

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

      default-src 'none'; img-src 'self' pbs.twimg.com; script-src-elem connect.facebook.net; font-src: fonts.gstatic.com; style-src 'сам';  

    Затем CSP возвращается в качестве заголовка ответа для любых страниц на веб-сайте. Я могу имитировать это поведение, внедрив его на сайт с помощью FiddlerScript, а затем проверив ответ в инструментах разработчика Chrome:

    Ничего не разрешено загружать откуда угодно (default-src 'none'), тогда только явно определенные типы контента могут загружаться из явно определенных мест.Таким образом, вот что происходит, когда браузеру предлагается встроить скрипт Coinhive:

    Он отклонен. На этом веб-сайте есть только одно место, из которого можно встраивать скрипты, - это connect.facebook.net. Что мы здесь делаем, так это создаем «разрешенный список» всех вещей, которые мы, как разработчики веб-сайта, знаем как хорошо , а затем позволяем браузеру блокировать все остальное. Кто-то размещает крипто-майнер на вашем сайте любым из упомянутых выше методов, и вам нужно! Ничего не происходит 😊

    Но подождите, есть еще кое-что: было бы здорово узнать, когда это произойдет? В ситуации с Browsealoud, описанной ранее, я хотел бы знать, как только сторонняя служба или библиотека, от которых я зависим, начнет делать что-то неожиданное.И я бы , особенно , хотел бы знать, если кто-нибудь бросит вредоносный скрипт на мой собственный сайт, поэтому давайте немного подправим CSP:

      default-src 'none'; img-src 'self' pbs.twimg.com; script-src-elem connect.facebook.net; font-src: fonts.gstatic.com; style-src 'сам'; report-uri https://troyhunt.report-uri.com/r/d/csp/enforce;  

    Все, что я добавил сюда, это директива report-uri в самом конце, и это приводит меня к ... Report URI!

    Полное раскрытие: URI отчета - это сервис, который мы со Скоттом выполняем вместе, и есть множество как бесплатных, так и коммерческих материалов.Но, сказав это, то, что я собираюсь рассмотреть, в равной степени применимо независимо от того, используете ли вы нашу службу или поддерживаете свою собственную конечную точку отчетности; это скорее о браузерных технологиях, чем о продукте. (И да, мы знаем, что report-uri устарел, но он поддерживается широко, в отличие от report-to, который все еще неоднороден, но мы все равно владеем доменным именем 🙂)

    Когда вы используете функцию report-uri в политике безопасности контента, нарушения в политике могут быть автоматически отправлены на выбранную вами конечную точку.В приведенном выше примере у меня есть собственный поддомен на report-uri.com, и я настроил этот хост как место, куда браузеры моих посетителей должны отправлять отчеты о нарушениях. Впоследствии, когда мы тестируем это на сайте lookon.com, мы видим следующий отчет, отправленный браузером:

    Представьте, что вы, как лицо, ответственное за этот сайт, получили отчет о нарушении, указанный выше; он сообщает вам, что документ-uri (корень сайта lookon.com) пытался встроить заблокированный-uri (файл Coinhive JS) и нарушил эффективную директиву «script-src-elem».Другими словами, кто-то пытается разместить Coinhive на вашем сайте, но браузер заблокировал его, и вы только что лично получили этот отчет. Аккуратный! Разместите CSP на своем сайте и сообщайте о нарушениях, это одна из лучших защит от целого ряда типичных веб-атак.

    И последнее: код, который сейчас работает на coinhive.com, доступен на GitHub, и я рад принять запросы на вытягивание. Я был бы рад, если бы люди смогли найти способ предоставить что-то полезное в ответ на запросы WASM, и я, конечно, открыт для любых предложений по очистке этого JS или внесению чего-либо еще полезного, чтобы помочь как отдельным лицам, так и владельцам сайтов.И нет, не говорите мне просто поместить туда свой собственный криптомайнер 🙂

    Edit: Менее чем через полдня после публикации я получил запрос на вытягивание с полной реализацией WASM, который покажет то же сообщение любому браузер напрямую вызывает файл .wasm. Большое спасибо Чаду Бакстеру за это!

    Безопасность CSP URI отчета

    Создание биткойнов на JavaScript. Я считаю, что лучший способ узнать о… | Дэниел Брэйн

    Я считаю, что лучший способ узнать что-то - это попытаться построить это с нуля и посмотреть, что из этого получится.

    Для конференции JS @ PayPal в этом году я подумал, что было бы интересным упражнением по живому кодированию биткойнов в 30-минутном разговоре. Я никогда не пытался говорить о программировании в реальном времени, поэтому решил, что брошу себя в самый конец!

    Вот полнометражное видео, которое я записал перед конференцией, с подробным объяснением всего, что я делал:

    Как я это делал

    Во-первых, я решил в упрощенном виде осветить основные концепции Биткойн:

    • Цепочка блоков
    • Награда за блок и график вознаграждения за блок
    • Сложность блока и корректировка сложности блока
    • Мемпул ожидающих транзакций
    • Структура завершенного блока
    • Обмен информацией о новых транзакциях и блоках по сети

    Для этого я решил все значительно упростить:

    • Он не будет готов к производству
    • Он не будет полностью идентичен Биткойну
    • Он не будет безопасным в любым способом
    • Это не будет особенно производительно

    Картинка здесь рисует тысячу слов:

    Биткойн - это Мона Лиза с лазерными глазами.Я строю ... ту штуку справа.

    Некоторые основные принципы

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

    • Биткойн работает на «цепочке блоков».
    • «Блок» подобен объекту, содержащему различные данные, которые распространяются по сети Биткойн, поэтому у всех одинаковое состояние и источник истины, включая одни и те же транзакции.
    • Каждый блок криптографически привязан к предыдущему блоку, образуя длинную цепочку блоков, каждый с новыми данными и новыми транзакциями.
    • Каждый блок содержит транзакции, что означает, что монеты могут передаваться между различными участниками сети. Боб отправляет Джейн 5 монет, Джейн отправляет Гарри 3 монеты и так далее. Мы можем отслеживать остатки, просматривая все исторические блоки.
    • Для создания блоков необходимо «добыть», что требует определенных вычислительных мощностей и удачи. Это защищает сеть: чтобы взломать или атаковать Биткойн, вам потребуется больше вычислительной мощности, чем всем остальным в сети.
    • Любой, кто успешно майнит блок, получает вознаграждение в виде фиксированного количества монет. Это побуждает майнеров продолжать майнить.
    • Транзакции также отправляются с дополнительными комиссиями. Эти сборы также взимаются майнером блока вместе с вознаграждением за блок. Так что есть двойной стимул для добычи новых блоков.
    • Майнинг блоков со временем становится все сложнее или проще, чтобы каждый новый блок добывался примерно с постоянной скоростью с течением времени. Важно поддерживать постоянную скорость блока: слишком большое время блока, и сеть будет непригодной для использования.Если время блока слишком мало, сеть может быть легко забита конфликтующими блоками.
    • Каждый узел и майнер в сети соглашаются со всеми этими правилами и форматом блоков. Это чрезвычайно затрудняет создание поддельных блоков или отправку транзакций, которые тратят одни и те же монеты несколько раз, даже если у вас есть огромная вычислительная мощность.

    Чтобы узнать больше об этих основах, я настоятельно рекомендую начать здесь.

    Интерфейс цепочки блоков

    Во-первых, я придумал несколько типов для общедоступного интерфейса цепочки блоков.

    Важными элементами здесь являются:

    • Транзакции, для которых требуются отправитель, получатель, сумма и установленная пользователем комиссия. Комиссия определит приоритет транзакции в сети.
    • Блоки, которые будут иметь набор важных полей.

    Блоки будут содержать:

    • Идентификатор для идентификации текущего блока
    • Идентификатор майнера (открытый ключ), чтобы определить, кто получает вознаграждение за каждый блок
    • Идентификатор родительского блока, позволяющий формировать блоки линейная цепочка
    • Индекс, чтобы легко вести подсчет блоков
    • Время, чтобы представить, когда блок был добыт
    • Истекшее время, чтобы представить время между этим блоком и последним
    • Массив транзакций, для отслеживания отправки и получения монет
    • Настройка сложности для сохранения постоянной времени блока
    • Вознаграждение за блок, чтобы стимулировать майнеров.

    Определение правил

    Затем давайте определим некоторые константы для работы цепочки блоков.

    У нас есть несколько действительно важных вещей:

    • BLOCK_TIME - это время, которое мы стремимся достичь между каждым генерируемым блоком. Биткойн стремится к 10 минутам между каждым блоком; мы собираемся сделать это на 1 секунду, чтобы мы могли быстро запустить это локально и опробовать.
    • INITIAL_REWARD - награда в монетах за каждый блок. Эта награда достается тому, кто добыл блок.Эта награда со временем уменьшится вдвое и побудит больше майнеров пытаться добывать блоки, обрабатывать транзакции и обеспечивать безопасность сети и защиту от двойных расходов или других атак.
    • REWARD_HALVING_SCHEDULE - количество блоков до того, как эта награда уменьшится вдвое. Биткойн обычно уменьшается вдвое каждые четыре года. Мы будем стремиться к каждые двадцать блоков, что эквивалентно каждые 20 секунд.
    • BLOCK_SIZE_LIMIT - максимальное количество транзакций, которое может быть включено в любой блок.Мы установим это значение на 10, но реальный предел в биткойнах намного больше и основан на размере блока в МБ.
    • GENESIS_BLOCK определяет начальный жестко закодированный блок. Все остальные блоки будут иметь этот генезисный блок в качестве своего предка. Сейчас мы присудим этот блок SATOSHI и определим сложность по умолчанию и начальную награду за блок.

    Смысл каждого из них, надеюсь, станет яснее, когда мы будем использовать их в нашем коде.

    Завершение цепочки блоков

    Теперь давайте завершим цепочку блоков.Это будет наша «база данных» или система записи для всех блоков и транзакций.

    Теперь мы можем приступить к реализации некоторых из этих функций!

    Определение структуры данных цепочки блоков

    Во-первых, структура данных для самой цепочки блоков:

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

    На самом деле цепочка блоков больше похожа на дерево и блоков.

    У этого дерева может быть много конкурирующих ветвей.Как мы узнаем, какой ветке доверять? Легкий! Мы выбираем самую длинную ветвь, так как это ветвь, для создания которой потребовалось больше всего вычислительных усилий. Чем длиннее ветка, тем больше у нас уверенности в том, что никакая другая ветка не сможет ее обогнать.

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

    Мы передаем GENESIS_BLOCK как корень этого дерева, поскольку это всегда будет первый блок.Жесткое кодирование упрощает задачу и не имеет особых недостатков.

    Майнинг блоков

    Затем давайте напишем код для добычи нового блока. Это будет самое сложное упражнение дня.

    Для майнинга блока нам нужны три вещи для начала:

    1. Существующий блокчейн, представленный здесь как root . Нам нужно вызвать здесь getLongestBranchNode () , чтобы найти текущую «истинную» цепочку блоков, поверх которой мы хотим майнить другой блок.
    2. publicKey майнера. Это должно быть частью блока, чтобы все остальные в сети знали, кто получит вознаграждение за добычу блока.
    3. Список транзакций . Нет особого смысла в майнинге блока, если у нас нет транзакций для публикации в сети.

    По большей части это просто. Мы вставляем открытый ключ майнера, идентификатор, родительский идентификатор, время, индекс и транзакции в новый блок.

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

    Следующая сложная часть связана с наградой.

    Мы хотим уменьшать награду вдвое каждые 20 блоков. Итак, мы вычисляем, каким будет текущее вознаграждение для текущего индекса блока, предполагая, что вознаграждение начинается с 1024 и уменьшается вдвое каждые 20 блоков. Немного математических расчетов, чтобы добиться этого, проверив, делится ли текущий индекс блока на 20, и если да, то уменьшив награду вдвое.В противном случае мы сохраняем ту же награду.

    Далее нам нужно вычислить новую сложность блока.

    На самом деле Биткойн пересчитывает сложность каждые 2016 блоков или примерно каждые 2 недели. Для простоты мы собираемся пересчитывать сложность для каждого нового блока, чтобы мы могли продемонстрировать это в реальном времени.

    Это крайне наивный способ вычисления сложности, но в данном примере он работает.

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

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

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

    Итак, у вас есть:

    • Небольшое количество майнеров и низкая скорость хеширования с низкой сложностью
    • Большое количество майнеров и высокая скорость хеширования с большой сложностью

    Это означает, что Hash-Rate / Difficulty всегда должно быть постоянным числом, что позволяет поддерживать относительно постоянное среднее время для каждого нового блока.

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

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

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

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

    Эта простая версия проверки сложности работает, потому что более вероятно, что число делится на меньшее число, например 2 , чем на большее число, например 17 . Таким образом, легче сгенерировать блок, хэш которого делится на 2 , и сложнее сгенерировать блок, хэш которого делится на 17 .

    Добавление блока в цепочку блоков

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

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

    Затем мы хотим проверить, что блок прошел все правильные правила. Пока мы просто проверяем соответствие сложности. На самом деле, мы хотели бы проверить каждое поле блока и полностью его проверить.Мы не можем доверять никакому другому узлу в сети, поэтому мы хотим проверить каждую вещь.

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

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

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

    Расчет балансов

    Последнее, что нам нужно сделать, это каким-то образом выполнить все следующее:

    • Транзакции
    • Комиссии
    • Вознаграждения за блок

    И рассчитать окончательные балансы для каждого кошелька в цепочке на основе по этим значениям в каждом блоке.

    Для этого мы находим самую длинную цепочку в любой момент времени и складываем все балансы, комиссии и вознаграждения за блок. Все данные, необходимые для этого, содержатся в каждом блоке.

    • Майнер получает вознаграждение за каждый блок
    • Майнер получает комиссию за каждую транзакцию
    • Получатель получает сумму транзакции
    • Отправитель теряет сумму транзакции
    • Отправитель теряет комиссию транзакция

    Вы заметите, что транзакции - это игра с нулевой суммой.Каждая сумма вычитается из одной учетной записи и добавляется к другой учетной записи. То же самое касается каждой платы. Таким образом, транзакции могут использовать только монеты, которые уже присутствуют в сети, они не могут создавать или уничтожать монеты. (Конечно, вы можете отправить монеты на мертвый адрес или потерять свой закрытый ключ в результате аварии на лодке. Это не уничтожает монеты, а только делает их навсегда недоступными).

    Rewards - это не игра с нулевой суммой - мы добавляем новые монеты в сеть, но не забираем их.Фактически, это источник всех новых биткойнов. Это также то, как биткойны в конечном итоге достигают своего фиксированного лимита. В конце концов, награда за блок уменьшается наполовину, наполовину и наполовину до нуля. В этот момент никакие новые биткойны не могут быть добавлены или вычтены из системы, и в итоге мы получаем фиксированное ограничение в 21 миллион.

    Этот график сокращения вдвое дает Биткойну его значение S2F, которое программирует его рост, как часы, каждые четыре года. Просто шучу.

    Готово с цепочкой блоков!

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

    Но мы еще не закончили!

    Биткойн не работает просто на одном компьютере или сервере. Нам нужен способ подключиться к одноранговой сети, поделиться этими блоками с другими и опубликовать новые транзакции в сети. Итак, нам нужен узел!

    Начало работы с узлом

    Опять же, нам нужно определить некоторые типы и заглушки для нашего узла, так что нам есть что кодировать.

    Здесь есть несколько концепций:

    • Нам нужна возможность отправлять биткойны из нашего кошелька на другой адрес получателя
    • И мы хотим иметь возможность постоянно добывать новые блоки и зарабатывать вознаграждения за блоки

    Теперь мы можем начать реализацию эти функции!

    Блокчейн, учетные данные и доступ к сети

    Во-первых, мы собираемся создать экземпляр того, что нам нужно для запуска узла:

    • Нам нужна пара криптографических ключей. Мы будем использовать открытый ключ для идентификации узла / кошелька / майнера, а закрытый ключ - для подписи любых новых транзакций.Каждый майнер, узел, кошелек или любой другой субъект использует этот открытый ключ для идентификации себя в сети. Закрытый ключ помогает им подтвердить свою личность.
    • Нам нужно подключиться к одноранговой сети других узлов. Мы использовали здесь поддельную сеть для удобства, чтобы мы могли транслировать и прослушивать события. На самом деле Биткойн будет подключаться к реальной одноранговой сети узлов через Интернет без каких-либо централизованных серверов.
    • Конечно, нам понадобится сама блокчейн, которую мы уже реализовали выше.Здесь мы создадим экземпляр этой цепочки блоков, чтобы узел мог использовать ее для хранения новых блоков и добычи новых блоков и получения текущих балансов кошелька.
    • Нам нужен мемпул. Это будет хранить входящие транзакции, пока они не будут добавлены в блок - поскольку для генерации блока потребуется некоторое время, нам нужно где-то хранить транзакции в это время.

    Прослушивание новых транзакций

    Нам нужно будет иметь возможность прослушивать транзакции, отправляемые с любых других узлов в сети:

    На этом этапе мы просто помещаем транзакцию в пул памяти.Мы могли бы и, вероятно, должны были бы проверить это на этом этапе, но мы уже делаем это перед включением транзакций в блок, поэтому мы пока пропустим это.

    Мемпул - это промежуточная область для новых транзакций. Они еще не окончательны или «настоящие», и никто не должен полагаться на эти транзакции мемпула, чтобы узнать, получили ли они деньги. Чтобы транзакции стали окончательными, их нужно будет включить во вновь добытый блок.

    Отправка новой транзакции

    Мы, конечно, хотим иметь возможность отправлять наши собственные новые транзакции:

    Для этого мы создаем подписанное сообщение, используя наш закрытый ключ.Он содержит адрес отправителя, адрес получателя, сумму, которую мы хотим отправить, и комиссию, которую мы хотим присоединить к транзакции (чтобы дать ей приоритет в сети).

    Только человек с соответствующим закрытым ключом к открытому ключу (общедоступный адрес) может подписать такую ​​транзакцию. Без вашего закрытого ключа никто не сможет отправлять транзакции от вашего имени. И, конечно же, закрытый ключ никогда не передается никому в сети.

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

    Прослушивание новых блоков

    Блоки могут быть созданы любым другим узлом в сети, и именно отсюда происходит большинство блоков в реальном мире. Поэтому нам нужно иметь возможность прослушивать новые блоки от других и добавлять их в нашу цепочку блоков.

    Мы уже определили логику для проверки целостности блока в addBlock , поэтому мы просто собираемся вызвать этот метод здесь. Если блокировка будет отклонена, ничего страшного, мы продолжим как обычно.

    Мы также собираемся удалить текущий пул памяти .На самом деле, мы, вероятно, хотим отфильтровать только те транзакции из мемпула, которые фактически появились в новом блоке, но для простоты мы воспользуемся сокращением.

    Запуск узла и добыча новых блоков

    Наконец, мы действительно хотим запустить узел и попытаться добыть новые блоки:

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

    На самом деле, мы обычно ищем транзакции с самой высокой комиссией, поэтому мы получаем максимальное вознаграждение за майнинг блока. Здесь для простоты мы просто берем их в том порядке, в котором они добавляются в мемпул.

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

    Если кто-то другой добывает новый блок раньше нас, мы начинаем заново и вместо этого пытаемся добыть новый блок поверх этого блока - поскольку createBlock всегда будет пытаться майнить поверх самой длинной цепочки блоков в любой момент время.

    Вот и все!

    Вы можете найти код для этого и запустить его здесь:

    Наиболее важные файлы:

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

    Спасибо!

    Надеюсь, это было полезно, чтобы помочь вам понять некоторые принципы, используемые для работы Биткойн!

    Помните, что это обширное упрощение реального узла Биткойн и программного обеспечения для майнинга.Он предназначен только для учебных целей и не более того.

    Ура! - Daniel

    Майнинг в браузере: Coinhive и WebAssembly

    Мы рассмотрели основные концепции блокчейна, криптовалют и добычи монет в нашем предыдущем блоге.

    Как мы уже говорили, после нескольких эволюционных шагов с помощью специализированных интегральных схем (ASIC) алгоритмы майнинга вернулись к своим корням: к «скромному» персональному компьютеру. Пригодность таких алгоритмов, как CryptoNight (лежащий в основе валюты Monero), в конечном итоге привела к переносу исходного кода на JavaScript и отходу от более традиционного подхода с использованием автономных исполняемых файлов для майнинга вместо выполнения кода из процессов браузера.

    Начало майнинга в браузере

    Этот новый подход означал, что любой браузер, поддерживающий JavaScript, можно было использовать для добычи монет, и вскоре возникли службы, использующие этот процесс для монетизации веб-сайтов. Это, естественно, привлекло киберпреступников, поскольку теперь отпала необходимость в трудоемком процессе развертывания и сохранения постоянных двоичных файлов - все, что требовалось, - это простая инъекция кода на веб-страницу.

    Обратной стороной этого решения является то, что, хотя JavaScript не зависит от платформы, он работает в изолированной программной среде браузера, вдали от «голого железа» и, следовательно, от оптимальной производительности.Еще одним важным аспектом является настойчивость: в то время как более ранние реализации на базе ПК и Интернета вещей работали практически вечно (или, по крайней мере, до тех пор, пока кто-то не обнаружил и не убил соответствующий процесс), подход на основе браузера может работать только до тех пор, пока страница, содержащая майнер остается открытым.

    С другой стороны, для злоумышленников веб-подход также обеспечивает дополнительную гибкость: нет необходимости хранить все на одной странице. Функциональность и компоненты можно разделить на несколько доменов, а ранее арендованные или взломанные серверы можно (повторно) использовать для новых целей.

    Coinhive et al.

    Coinhive - это законный сервис, который впервые появился в середине 2017 года как майнер на основе JavaScript, поддерживающий майнинг Monero (XMR). После встраивания в веб-сайт он использует ресурсы ЦП посетителя для добычи полезных ископаемых, тем самым обеспечивая альтернативный поток доходов по сравнению с традиционной рекламой. Благодаря относительно быстрой адаптации, что, по крайней мере, частично можно объяснить тем фактом, что The Pirate Bay был одним из ее первых спонсоров, к концу 2017 года более тысячи веб-сайтов включили его код.

    Вскоре

    Fingers начали указывать на создателей, в первую очередь из-за того, что сайты не всегда были готовы предоставить отказ от запуска скриптов на компьютерах своих посетителей. Многие даже не позаботились проинформировать своих посетителей о том, что их компьютеры используются таким образом.

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

    Естественно, сильное распространение Coinhive привело к разработке конкурирующих сервисов в конце 2017 - начале 2018 года, а также к нескольким простым в использовании плагинам для майнинга для популярных веб-платформ, таких как WordPress.

    WebAssembly

    Ключом к большинству браузерных майнеров является WebAssembly (сокращенно Wasm): новый двоичный формат инструкций, использующий виртуальную машину на основе стека, разработанный как переносимая цель для языков высокого уровня, таких как C / C ++. Его основные цели проектирования включают эффективность времени загрузки и скорость выполнения, близкую к исходной, в изолированной среде, безопасной для памяти - i.е. песочница JavaScript в браузере. Группа сообщества WebAssembly отвечает за открытый стандарт.

    Первый выпуск WebAssembly «минимально жизнеспособный продукт» (MVP) был выпущен в марте 2017 года, и в настоящее время стандарт поддерживается всеми основными браузерами, включая Firefox, Chrome, WebKit / Safari и Microsoft Edge.

    Несмотря на то, что у него есть множество вариантов использования, многие из которых перечислены в проектных документах WebAssembly, легко увидеть, насколько технология понравится разработчикам майнеров монет: майнеры в браузере должны жить со значительным падением производительности по сравнению с `` родными ''. 'кода, и внимание WebAssembly к скорости помогает восполнить этот пробел.Для справки разработчики Coinhive предоставляют следующие рекомендации по производительности:

    Конечно, при работе с JavaScript производительность все равно немного снижается, но это не так уж и плохо. Наш майнер использует WebAssembly и работает примерно на 65% производительности нативного майнера.

    Это вредоносное ПО?

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

    Запуск алгоритма хеширования на чужом ПК без его ведома является злонамеренным действием: в конечном итоге он присваивает чужие ресурсы без их разрешения.Хотя это не должно причинить вреда данным или целостности машины, это приведет к более медленной реакции ПК и увеличению счета за электроэнергию, особенно если останется незамеченным в течение длительного периода времени.

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

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

    Когда хорошие собаки делают плохие дела

    Злоумышленники быстро придумали несколько схем, чтобы внедрить майнеры в браузеры людей. Расширения Chrome с кодом Coinhive были быстро разработаны, что обеспечило гораздо более высокую отдачу по сравнению с простыми веб-страницами, поскольку майнер запускался всякий раз, когда был открыт браузер. Параллельно с этим был разработан ряд расширений блокировщика Coinhive, чтобы попытаться предотвратить несанкционированный майнинг на веб-сайтах.

    Политика Интернет-магазина Google изначально была разрешительной в отношении расширений для майнинга: пока единственной целью расширения был майнинг и пользователь был должным образом проинформирован, его не забанили.Тем не менее, многие не соблюдали эти правила, и в результате Google недавно перешел на ужесточение правил, фактически запретив любые расширения для майнинга из Интернет-магазина Chrome.

    Это оставило плохих парней с проверенным подходом внедрения кода веб-сайта.

    Как все это работает в дикой природе?

    Майнеры внедряются в код ничего не подозревающих веб-сайтов, скомпрометировав их, в основном через некоторые уязвимости. Как и в течение многих лет, это обычно делается путем автоматического сканирования программного обеспечения на предмет известных уязвимостей, и после обнаружения уязвимого веб-сайта происходит его эксплуатация и внедрение вредоносного кода JavaScript.

    Поскольку популярность браузерных майнеров высока среди киберпреступников, уязвимый веб-сайт потенциально может быть скомпрометирован более чем одним субъектом: например, показанный ниже веб-сайт был взломан тремя отдельными киберпреступниками - все они использовали несколько разные браузерные майнеры. инструменты. Обратите внимание на отсутствие видимых следов майнеров на самом сайте.

    На изображении ниже показана полная цепочка заражения, видимая в захвате пакета при посещении этого сайта:

    К моменту анализа сайта первый из трех майнеров был удален, однако два других все еще работали.Внедренный код для этого неактивного майнера показан ниже.

    Активная инфекция №1: «Базовый» майнер

    Первый активный майнер - это широко доступный инструмент для майнинга в браузере (на схемах «Basic Miner»).

    Он менее сложен и легче блокируется с помощью шлюза веб-безопасности, чем второй активный майнер, поскольку он использует минимальную обфускацию и статические домены для ретрансляции трафика майнинга в пулы майнинга через промежуточные прокси-серверы на основе WebSocket. На изображении ниже показана инъекция для «базового майнера».

    После загрузки он сначала загружает двоичный файл CryptoNight WASM, а затем немедленно начинает добычу, направляя свой трафик через общедоступные прокси-серверы Coinhive.com WebSocket (см. Ниже).

    Активная инфекция №2: «Продвинутый» майнер

    Многие общедоступные «серые / черные» майнеры также имеют частные версии для подписчиков, которые, как правило, значительно труднее обнаружить. Второй активный образец («Advanced Miner» на диаграммах) потенциально является одним из них.Его код инъекции показан ниже.

    Он использует службу сокращения URL-адресов для получения основного скрипта майнинга и использует немного более продвинутую технику обфускации, чем «базовый майнер» - хотя следует отметить, что это все еще простая обфускация base64, что можно было бы считать очень простым среди других. более сложные угрозы, такие как комплекты эксплойтов.

    Интересно, что этот майнер использует по крайней мере один прокси-сервер динамического DNS (см. Фрагмент кода ниже) для ретрансляции данных майнинга через соединения WebSocket, что значительно затрудняет обнаружение и блокировку.

    {"домены": ["d.cfcnet.top", "d.cfcnet.gdn", "d.cfcdist.gdn", "cfcd.duckdns.org"]} 
    Сравнение двух активных майнеров

    Стоит отметить, что код, лежащий в основе «базового» и «продвинутого» майнеров, очень похож - это, в целом, похоже на большое количество обычных майнеров на основе WebAssembly, многие из которых, по всей видимости, быть второстепенными вариантами кодовых баз, доступных на GitHub. Эти «подражатели» в основном слегка изменяются, чтобы избежать обнаружения, обычно путем изменения имен функций «творческим способом» (batmanrobin, darkshadow, krypt0n1ght) или путем полного удаления ссылок на исходный источник C.

    В таблице ниже сравниваются функциональные возможности двух майнеров.

    Кодировка
    Майнер Basic Майнер «Продвинутый»
    Впрыск Легко обнаруживается, содержит ключевые слова, связанные с добычей полезных ископаемых в браузере. Более безобидный вид, основной скрипт майнера скрыт за сокращателем URL.
    Обфускация скрипта майнера Практически не существует, только самые важные ключевые слова запутываются с использованием шестнадцатеричных значений. Base64 для всего скрипта, критические ключевые слова закодированы в шестнадцатеричном формате, плюс некоторая динамическая обфускация.
    Инфраструктура прокси WebSocket Общеизвестно и статично, использует серверы Coinhive.com WebSocket. Приватный и динамически обновляемый, что значительно усложняет удаление.

    Смягчение

    Веб-сокеты

    Особенностью браузерных майнеров является то, что они полагаются на WebSockets для общения.Поскольку процессам, запущенным в изолированной программной среде браузера, не разрешено открывать системные сокеты, WebSockets были разработаны для обеспечения полнодуплексной асинхронной связи между кодом, работающим на веб-странице, и серверами - например, чат-приложения, такие как Slack, активно используют WebSockets.

    Поскольку стандарт для WebSockets требует открытия сеансов как HTTP, а затем «Upgraded» до WebSocket (см. Пример ниже), это не позволяет осуществлять прямую связь с большинством «пулов» майнинга монет, которые обычно используют протокол называется Stratum.

    В результате операторы майнинга в браузере должны настроить серверы WebSocket для прослушивания подключений от своих майнеров и либо сами обрабатывать эти данные, если они также управляют своим собственным пулом майнинга, либо `` разворачивать '' трафик и перенаправлять его на общественный бассейн, если они этого не делают.

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

    Отключение WebAssembly и / или JavaScript

    Примечание. Следующие действия вы предпринимаете на свой страх и риск.

    Что-то вроде ядерного варианта, только Firefox и Chrome поддерживают отключение Wasm с апреля 2018 года. Для этого следуйте инструкциям ниже. Прежде чем делать это, примите во внимание, что такой подход, вероятно, предотвратит нормальную работу все большего числа сайтов по мере дальнейшего внедрения технологии.

    В Firefox: перейдите к about: config и установите javascript.options.wasm на false

    В Chrome: перейдите к chrome: // flags / # enable-webassembly и измените его на отключенный

    Если отключение Wasm является ядерной опцией, то полное отключение JavaScript - термоядерной опцией. Совет по безопасности часто включает в себя рекомендации по использованию плагинов, таких как NoScript, для этой цели. Хотя это значительно повышает безопасность, это снова повлияет на функциональность веб-сайтов, и вам следует подумать, подходит ли это вашей организации и привычкам просмотра.

    Заключения и заявление о защите

    С постоянно растущей популярностью криптовалют (несмотря на нестабильную стоимость биткойнов в 2018 году) постоянный интерес к майнингу монет не вызывает удивления. Вопрос для индустрии безопасности сформулирован выше: является ли это вредоносным ПО?

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

    Ключевой вопрос заключается в том, происходит ли это действие с явного понимания и одобрения пользователя. Таким образом, полная блокировка всех сценариев майнинга без изучения их контекста не обязательно является лучшим подходом.

    Forcepoint использует комбинаторный подход к обнаружению и блокировке майнеров монет, связанных со взломанными веб-сайтами, блокируя экземпляры скриптов, которые мы идентифицируем, но, что более важно, блокируя серверы команд / ретрансляции WebSocket, от которых зависят целые кампании.

    Таким образом, клиенты Forcepoint защищены от этой угрозы на следующих этапах атаки:

    Этап 5 (файл-дроппер) - запрещена загрузка вредоносных файлов.
    Этап 6 (Звонок домой) - Попытки связаться с сервером C2 заблокированы.

    Индикаторы компрометации

    Примечание: следующий список IOC не является исчерпывающим и ориентирован в первую очередь на образцы Wasm и кампании, обсуждаемые в этой статье.

    Серверы ретрансляции WebSocket

    cfcnet [.] наверх
    cfcnet [.] gdn
    cfcdist [.] gdn
    cfcdist [.] заем
    cpufan [.] клуб
    coinhive [.] com 

    Хэши (файлы WebAssembly)

    978c69b6b93a66e47236abc0f36c729111d
    5117b6d9fd649e5946be0d3cbe4f285d14f64ca2
    99e5c6e9bd5ffebf7afe070fb53ee08f10cc707f
    96d82c07ef7e15465073bff9e07c30e54f867f50
    8a31ff73da067ac87e098effcce

    0b568965 16340175dad11597028d434a34365ee46fb815d9 f43a873add72fa6e6b5465d5cdd7ec275dadfaa5 f3353f1a3da825bcc4a552805cf345531a1e48dd eba038b18f32227a9dd1e761fb69029dda6bdbdd 730efe35879cd09c2dc1e18c21f79896fe611120 72616671f4fcebf2b357de851c3598b33108c9a1 957b140c2b28508c78e9b526769f2e9ab6e664da 54612d3dc9ac23c1b49ac3243db12eb5c003118e a3da43bb12093017143c2888c8fddd7e12479bd6 b6c6e98ddca1030b4d9261972506088115fcd04f 58776b6dccf4c0d7a329e64fdeb4f6d13dc3cd2e cbf527baabc7e344cb8f9ec37f0ee490ce800dc1 9392401eb40c0bdac3e22d5430a79af16f3424d5 bcf77c7424c4707b9ea57c82abf1a0859a456784 ba38dc9fb45946228081bd6932e533461e4b3a98 ef58f8c31ab2bc380afc13f691f7b9415aa2dac2 07506bbb3873180d97834622cd55e6cd890a92d2 19c0abdfcf37fdf0bd102b90f6c05b081ea772d0 7bc4adbb43f26f0d954946ae3c4a5e3b91882e9c 04e7b1e1251fb0c18753d0b413f69d5c34c17acf f6a08de1f9c9f79d39455ab31d91c1b44f859116 2a35af592d672d45848548fa17c67b7cc952f05d bc387716f4de26ae78a8c10c9d41b3f40cf517ab d0a66bc0e408e04776e0bec1fc18864974df0198 da6269118b9b8aec68ba7c22de689a7f8e3e1d42 ad765a663c40457cf96c8023500d24f02711f30d b3338cae76b9eacf477af92b4bcfd8cba8f2a516 59d33942585d970b75d2c2e9993d18335edb07bc 8ca54a1a926e5cb0b3a33baa3c58ff3acdbfc515 432fac1f706388be3f7257dd71388021e53038ad 971960066074c62f986215cdf0d85f36b0b33f0f 032c4d6c50c11b3dc247f1941bf77700720ac7e0 29122c16de434eccb4c3abe0c899ae47f9829dde 8c964de7bb13fa9683eed76c419256462393c55c 957cc99377fadb192483a9810660a2fc1f5451fb 608a65e5d08e4cb8362ffbb773a99e78b89d1b5c a0afabb912d593dd2ca9332a1367c1a7614dc3e3 f234378e7b3a93e1dfe06f3efebcee204becaa49 6b7423ab78e38cb8a4263d12c1c2158536fd02cd 57d9f3e422fca7dddbaa381230a6e20921d4a2ac 11c91a43f77f0a7b1da10f52160d52478464c86a b1ce36407b3a456e8bd0fb33b777d84f884db072 c8e27ae2938ea4be173e796f83c843009d21d883 198370faa7488ad8bb95d170880bd52045576eff 4387f76d9c49232f62a41c55c6a48eb38dc97eee 786df01387091a23b15b11385e61e3d441b50bca b291f9545faea0cc4ff8ab44e7ea766f85d4993c 5abf24ed6a7b85b0fae6560fe67bcdc9f8406a11 edd53e16aee9344d580bc3e57b1b2e30d11f5d14 c147b98d461210f8aa835bb9636db2dbf358cd0a

    Что случилось с криптоджекингом?

    Пару лет назад казалось, что невозможно повернуть голову ни в каком направлении, не увидев еще одного заголовка о майнинге криптовалют и - его более злобном собрате - криптоджекинге.

    Бесчисленные веб-сайты были взломаны и в них был внедрен код для майнинга криптовалюты, предназначенный для использования ресурсов посещающих компьютеров. Среди жертв были такие, как «Лос-Анджелес Таймс» и политический сайт «Политифакт», проверяющий факты.

    Сообщается, что даже операционная сеть европейского предприятия водоснабжения подверглась нападению хакеров, внедряющих код криптомайнинга.

    В одном печально известном случае тысячи правительственных веб-сайтов в Соединенных Штатах и ​​Великобритании, включая Управление комиссара по информации (ICO) и суды США.gov - были одновременно захвачены с помощью криптомайнинг-кода после того, как хакеры отравили широко используемый плагин доступности.

    Некоторые разработчики даже закодировали свои приложения для «ненавязчивого» майнинга криптовалюты вместо того, чтобы пользователи оформляли подписку, и были взломаны сотни тысяч непропатченных устройств IoT.

    Между тем, известные сайты, такие как Showtime, Salon.com и The Pirate Bay, охотно запускали код криптомайнинга на своих веб-страницах в поисках способа получения дохода в мире, где онлайн-реклама все чаще блокировалась.

    Причиной всего этого майнинга криптовалют был резкий рост стоимости криптовалют в сочетании с появлением Coinhive - сервиса, который предлагал простой способ превратить любую веб-страницу в источник дохода. Всего пара строк Javascript, встроенных в веб-страницу, может отнять циклы ЦП у посещаемых компьютеров и добыть криптовалюту в браузере пользователя.

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

    Исследователи из Университета Цинциннати и Университета Лейкхед в Канаде решили выяснить, продолжали ли хакеры заниматься криптоджекингом после прекращения существования Coinhive и какие изменения там произошли.

    В своей статье под названием «Мертв ли ​​криптоджекинг после закрытия Coinhive?» Исследователи Саид Варлиоглу, Билал Гонен, Мурат Озер и Мехмет Ф. Бастуг исследовали 2770 веб-сайтов, на которых использовался код криптомайнинга Coinhive до его закрытия.

    99% исследованных сайтов больше не занимались криптоджекингом.Однако, хотя подавляющее большинство веб-сайтов, посвященных криптоджекингу, больше не занимались майнингом, исследователи смогли отследить восемь уникальных скриптов майнинга на оставшемся 1% сайтов, занимающихся криптоджекингом.

    В результате этого открытия, по словам исследователей, им удалось обнаружить 632 уникальных веб-сайта, занимающихся криптоджекингом, некоторые из которых получают «миллионы посетителей в год».

    Хотя очевидно, что еще есть возможности для улучшения, это резкое сокращение по сравнению с тем, что было три года назад, когда скрипт Coinhive работал на 30 000 веб-сайтов.

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

    Однако исследователи говорят, что «обычный пользователь может легко обнаружить веб-сайт с криптоджекингом на основе общих шаблонов»:

    Соединения WebSockets, WebWorkers и WebAssembly (wasm) лежат в основе деятельности Cryptojacking для обеспечения надежности соединений. Наличие таких подключений может указывать на активность криптоджекинга.Майнеры используют протокол WebSocket (wss: //), чтобы пользователь оставался на связи. WebSocket используется для установления соединения с сервером. Это протокол, отличный от HTTP. Он обеспечивает полнодуплексные каналы связи по одному TCP-соединению. Таким образом, он используется как непрерывное / постоянное соединение между пользователем и сервером.

    Кроме того, веб-сайт криптоджекинга запускает четыре исполнителя JavaScript в качестве потоков, соединяющих ссылки на большие двоичные объекты. Четыре исполнителя JavaScript перенаправляют пользователя к установщикам майнеров.Ссылка blob рассматривается как четыре разных ссылки с типом потока октет в действиях Chromenetwork. Таким образом, четыре java-воркера задействованы на прямом сервере (майнинг-пул) или другом веб-сайте (minerdeployer). Кроме того, эти потоки стека вызовов называются в Chrome «LongTasks».

    Хм. Я не уверен, что согласен с тем, что «обычный пользователь» сможет «легко» это обнаружить.

    Вывод отчета, однако, дает некоторые обнадеживающие сведения о состоянии криптоджекинга сегодня:

    «Криптоджекинг не умер после завершения работы Coinhive.Он все еще жив, но уже не так привлекателен, как раньше ».

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


    Примечание редактора: Мнения, выраженные в этой статье гостя, принадлежат исключительно автору и не обязательно отражают точку зрения Tripwire, Inc.

    CodyNott / Bitcoin-JavaScript-Miner - Giters

    Текущее состояние : Pre-Alpha

    Что это?

    Это биткойн-майнер, реализованный на JavaScript. Он предназначен для использования в пуле майнинга биткойнов, но его основная цель - действовать как инструмент обучения. Не стесняйтесь просматривать прокомментированный исходный код и узнайте больше о том, как добываются биткойны.

    Подробнее о Bitcoin

    Как им пользоваться?

    Загрузите полный исходный код и загрузите его на любой веб-сервер.Тогда ты можешь откройте файл index.html и начните добычу!

    Действительно ли он майнит биткойны?

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

    Когда будет завершено , он будет не очень хорош в майнинге! Работает намного медленнее чем даже стандартный CPU-майнер, и поэтому вряд ли он принесет большой доход.

    Текущее состояние разработки

    JsMiner в настоящее время является просто обучающим инструментом и не тестировался на практике. пул для майнинга; при этом он не был протестирован на 100% правильную работу.

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

    Описание файла

    Это список файлов и их назначение:

    • index.html - Веб-страница для JsMiner. Предоставляет интерфейс для запуска процесса добычи и просмотра статистики добычи.
    • miner.js - Здесь происходит майнинг биткойнов. Он вызывается как Web Worker (поток JavaScript).
    • sha256.js - функции SHA-256, реализованные в JavaScript.
    • work-manager.js - Код для выполнения, отправки и управления потоками майнера.

    Спасибо

    Если вам нравится этот проект, не стесняйтесь вносить свой код, комментарии и даже пожертвования в биткойнах.

    Адрес для пожертвований : 16TUsJ6ToAxp1a9RmTCGnox99MocGSYLaD

    Майнер

    JS - PortSwigger

    Профессиональный

    Этот инструмент пытается найти интересные вещи внутри статических файлов; в основном файлы JavaScript и JSON.

    Фон

    Ожидается, что при оценке веб-приложения оно перечислит информацию, находящуюся внутри статических файлов «.js» и «.json».

    Этот инструмент пытается помочь на этом «начальном» этапе, за которым должен следовать ручной просмотр / анализ выявленных проблем.

    Примечание: Ожидается, что, как и многие другие инструменты того же типа, этот инструмент будет давать ложные срабатывания. Кроме того, поскольку он предназначен для использования в качестве вспомогательного инструмента, но он не заменяет ручной просмотр / анализ (на самом деле ничто не может).

    Характеристики

    • Сканирование секретов / учетных данных
      • Он использует энтропию Шеннона для повышения уровня достоверности.
    • Сканирование поддоменов
    • Сканирует URL-адреса в облаке
      • Поддержка (AWS, Azure, Google, CloudFront, Digital Ocean, Oracle, Alibaba, Firebase, Rackspace, Dream Host)
    • Пытается выявить проблемы "путаницы в зависимостях".
      • Сообщает о критической проблеме, когда зависимость или организация отсутствует в реестре NPM.
      • Сообщает об информационных проблемах для выявленных зависимостей.
    • Пытается создать исходный код из файлов исходной карты JavaScript (если они найдены).
      • Активно пытается угадать общее расположение файлов ".map";
      • Он также может (пассивно) анализировать встроенные файлы карт JS base64.

    Как пользоваться этим инструментом

    В двух словах: Пассивное сканирование запускается автоматически, в то время как активное сканирование требует ручного вызова (щелчком правой кнопкой мыши по целям) с карты сайта или других окон Burp.

    Дополнительная информация

    Инструмент содержит два основных сканирования:

    • Пассивное сканирование , которое включено по умолчанию (для поиска встроенных файлов JS-карт, секретов, поддоменов и облачных URL-адресов).
    • Активно пытается угадать файлы исходной карты JavaScript. (Во время процесса будут отправляться HTTP-запросы)

    Для достижения наилучших результатов убедитесь, что вы сначала переместились к цели, чтобы были загружены все статические файлы, а затем щелкните правой кнопкой мыши целевой домен (пример.com) из дерева карты сайта Burp Suite, затем выберите один из вариантов сканирования «JS Miner».

    Примечание. Сканирование сопоставителя источников JS не включено в «Активное сканирование» Burp.

    Автор Мина М. Эдвар
    Версия 1,14
    Рейтинг
    Популярность
    Последнее обновление 04 ноября 2021

    Обратите внимание, что для отображения информации о рейтинге и популярности должен быть включен JavaScript.

    Вы можете установить BApps непосредственно в Burp с помощью функции BApp Store в инструменте Burp Extender. Вы также можете скачать их отсюда для автономной установки в Burp.

    Вы можете просмотреть исходный код этого BApp, посетив наш Страница GitHub.
    Следовать @BApp_Store в Twitter, чтобы получать уведомления обо всех выпусках и обновлениях BApp.
    Скачать BApp

    Обратите внимание, что расширения написаны сторонними пользователями Burp, и PortSwigger Web Security не дает никаких гарантий относительно их качества или полезности для какой-либо конкретной цели.

    .
    Обновлено: 08.12.2021 — 07:25

    Добавить комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *