Не удалось прогрузить медиа
Введение
Теория
Для начала пробежимся по основам, чтобы освежить память.Оперативная память, она же Random Access Memory (RAM) - Память зависимая от электричества, используемая для хранения программ и процессов операционной системы. С момента включения компьютера в оперативную память попадает большое количество данных, таких как:
- Пароли
- Переписки
- История браузера
- Сетевые подключения
- Логи системы и тп
Данные в оперативной памяти хранятся в шестнадцатеричной форме счисления (Hex), где используются только цифры от 0 до 9 и буквы от A до F. Для примера приведу фотографию:
Не удалось прогрузить медиа
AVML (for linux) - Консольная утилита созданная корпорацией microsoft. Предназначена для создания дампов RAM с дистрибутивов Linux.
DumpIT (universal) - Консольная утилита специализирующаяся на дампах RAM с Linux и windows.
LiME (for linux) - Консольная программа специализирующаяся на дампах RAM с Linux дистрибутивов.
Belkasoft ram capturer (for win) - Графическое ПО для создания дампов RAM с операционной системы windows.
FTK Imager (for win) - Графическое ПО специализирующееся на создании и анализе RAM с операционной системы windows.
Volatility (universal) - Фреймворк специализирующийся для анализа дампов RAM созданных на Linux, windows, macos.
Bulk Extractor (for win) - консольная утилита для извлечения артефактов RAM.
strings (universal) - Утилита для извлечения текстовых строк.
grep (universal) - Утилита для поиска по конкретным значениям.
Подготовка
Для удобства я рекомендую использовать flash накопитель. Когда вы на целевом ПК, то нужно всё делать быстро, как можно меньше взаимодействовать с ПК. Если на целевом ПК вы будете устанавливать любое ПО, то будете терять время и затирать RAM новым процессом. На накопитель можно установить сразу всё необходимое и когда вы будете рядом с целевым ПК, то есть возможность сразу же приступать к созданию слепка.Рекомендую использовать накопители с USB 3.0 и высокой скоростью записи и чтения данных.
Приступим к установке ПО на накопитель:
AVML (Linux) - https://github.com/microsoft/avml
Bash:
cd /путь/к/накопителю && mkdir AVML && cd AVML
wget https://github.com/microsoft/avml/releases/latest/download/avml
Bash:
sudo apt update
sudo apt install git sudo build-essential curl liblzma-dev pkg-config -y
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
git clone https://github.com/MagnetForensics/dumpit-linux.git
cd dumpit-linux
cargo build --release && mkdir /путь/к/накопителю/DumpIT
cd /target/release && cp dumpitforlinux /путь/к/накопителю/DumpIT
cd /путь/к/накопителю/DumpIT && mkdir lib && cp /lib/x86_64-linux-gnu/libgcc_s.so.1 /путь/к/накопителю/DumpIT/lib && cp /lib/x86_64-linux-gnu/libc.so.6 /путь/к/накопителю/DumpIT/lib && cp /lib64/ld-linux-x86-64.so.2 /путь/к/накопителю/DumpIT/lib
Модуль для дампа нужно собрать заранее под конкретное ядро. Если мы знаем, что нужно будет создать дамп на debian 13, то заранее создаем виртуальную машину и на ней компилируем .ko модуль.
Bash:
sudo apt update
sudo apt install gcc make linux-headers-$(uname -r) build-essential lime-forensics-dkms -y
cd /путь/к/накопителю/ && mkdir LiME && cd LiME
git clone https://github.com/504ensicsLabs/LiME
cat /etc/*-releases
uname -r
cd /LiME/src/
make
Belkasoft (Windows) - https://belkasoft.com/ram-capturer
Заходим по ссылке https://belkasoft.com/get?product=ram и выбираем Belkasoft Live RAM Capturer, заполняем форму и на почту в течении дня придет ссылка для скачивания.
Bash:
mkdir /путь/к/накопителю/Belkasoft
cd /путь/к/накопителю/Belkasoft
FTK imager (Windows) - https://www.exterro.com/
Заходим на оффициальный сайт по ссылке https://www.exterro.com/digital-forensics-software/ftk-imager и заполняем форму. Ссылка для скачивания установщика придёт на почту. Установщик в формате .exe, а значит нам придется воспользоваться Windows. Запускаем установщик
Не удалось прогрузить медиа
Соглашаемся с условиями
Не удалось прогрузить медиа
Установщик предлагает выбрать путь, куда будет установлено ПО. В Change выбираем путь к накопителю, нажимаем Next и в следующем окне Install.
Volatility (Linux) - https://github.com/volatilityfoundation
Bash:
sudo apt update
sudo apt install python3 python3-pip python3-venv python3-full -y
cd /путь/к/накопителю/
git clone https://github.com/volatilityfoundation/volatility3.git
Bash:
cd /путь/к/накопителю && mkdir BulkExtractor && cd BulkExtractor
wget https://github.com/simsong/bulk_extractor/releases/download/v2.0.0-beta1/bulk_extractor-2.0.0-beta1-win.zip
unzip bulk_extractor-2.0.0-beta1-win.zip
sudo rm bulk_extractor-2.0.0-beta1-win.zip
Grep (Linux) - Базовая утилита в Linux, уже установлена по умолчанию.
С установкой необходимого ПО на накопитель мы разобрались и пора двигаться дальше, ближе к практике по созданию и исследованию дампов.
Практика создания дампов
В данной части статьи мы создадим дампы каждой программой, сравним скорость записи, размер, удобство и тп.Создание дампов в Linux
AVMLВставляем накопитель в ПК и проводим следующие мероприятия:
Bash:
cd /путь/к/накопителю/AVML
sudo ./avml dump.mem #или .lime
DumpIT
После подключения накопителя к целевому ПК, выполняем команды:
Bash:
cd /путь/к/накопителю/DumpIT
sudo LD_LIBRARY_PATH=./lib ./dumpitforlinux -r dump.mem #либо .lime
LiME
Как только накопитель вставлен в целевое устройство, прописываем:
Bash:
cd /путь/к/накопителю/LiME/LiME/src
sudo insmod ./lime-6.12.48+deb13-amd64.ko path=/путь/к/накопителю/LiME/dump.mem format=raw
sudo rmmod lime
сравнение и пояснение
Я хотел бы напомнить про необходимость создания какого-либо доказательства подлинности файла. Мы должны проверить, что во время переноса файла с накопителя до машины на которой проводится анализ, файл не был как либо поврежден или не был как-либо изменен. Я покажу вам стандартный пример, это sha256 hash. В Linux это делается командой sha256sum fileНе удалось прогрузить медиа
На целевом компьютере после дампа мы командой узнаем и записываем хеш файла, а на устройстве где будем анализировать проверяем соответствует хеш тому который был изначально.
Для определения перриода работы программ мы будем использовать предустановленную системой утилиту time. По примеру:
Я проводил тесты на двух физических машинах под управлением Debian 13 с одинаковым количеством оперативной памяти (8Гб).time командаAVML
Debian13-A - 19 minute 8 seconds
DumpITDebian13-B - 17 minute 3 seconds
Debian13-A - 19 minute 13 seconds
LiMEDebian13-B - 16 minute 27 seconds
Debian13-A - 19 minute 6 seconds
Во всех случаях LiME выходит победителем с небольшим отрывом. Скорость создания дампов отличается на 7 секунд на машине A и на 43 секунды на машине B.Debian13-B - 16 minute 20 seconds
Теперь пришло время разобраться каким образом работают программы которые мы только что использовали.
AVML - работает от root, суть его работы незамысловатая. В командной строке вы можете указать путь к источнику памяти, если же путь не будет указан, за источники памяти будут считаться пути
- /dev/crash
- /proc/kcore
- /dev/mem
/proc/kcore, там находятся как системные процессы, так и данные пользователя.DumpIT - принцип работы очень сильно похож на AVML, но в отличие от него, DumpIT не будет перебирать стандартные пути. Опирается программа только на один путь -
/proc/kcoreLiME - в корне отличается своим подходом от двух предыдущих программ. LiME использует LKM (Loadable Kernel Module) - работает в пространстве ядра, имеет повышенные привилегии.
Я рекомендую вам изучить эту программу, она является одной из самых популярных решений для работы в цифровой форензике для дистрибутивов Linux. Ее сложность только в компиляции модуля который подходит к конкретному ядру. Возможность создания дампов будет поддерживаться большинством дистрибутивов. На официальном GitHub объявлено, о том, что проект менее активно поддерживается командой разработчиков.
Теперь поговорим о ПО
Почему я не рекомендую использовать только AVML или DumpIT без связки с LiME, для цифровой форензики? - Допуск программ, в том числе от root к "чувствительным" данным, это проблема безопасности. Начиная с версии ядра 2.4 Linux, была начата работа по созданию изоляции: были использованы не стандартные пути, добавлена функция kernel_lockdown (с версии ядра 5.4) и secure boot. Из-за всех принятых мер заниматься цифровой форензикой стало сложнее.- Нестандартные пути - в программах AVML и DumpIT изначально прописаны пути, которые программа будет проверять, и если пути отличны от стандартных, то программы ничего не найдут. Вы можете изменить пути в командной строке или же пересборкой бинарника.
- kernel_lockdown - защищает виртуальные адреса физической памяти от считывания программами без соответсвующих привилегий (например путь /proc/kcore будет не доступен как группе програм user, так и программам группы root)
- secure boot - защищает ядро от не подписанного кода, тоесть загружать модуль ядра lime бесполезно из-за отсутствия подписи.
Давайте углубимся чуть глубже в работу LiME, почему он может обходить kernel_lockdown? - Все дело как раз в самом LKM, это код загружаемый в ядро Linux. Он имеет повышенные привилегии (Ring 0), и в отличии от двух предыдущих программ, он читает физическую оперативную память, а не ее виртуальный образ.
Не удалось прогрузить медиа
LiME работает на уровне ядра (Ring 0) с максимальными привилегиями, в то время как AVML и DumpIT работают на уровне обычных приложений.
Как раз, за счет этих повышенных привилегий LiME имеет доступ к физической памяти устройства и за счет этого может создавать дамп. Так же я хотел бы напомнить, что после создания дампа необходимо выгрузить модуль ядра
sudo rmmod lime не особо желательно чтобы программа с таким уровнем привилегий надолго оставалась в системе.Варианты контрфорензики мы уже рассмотрели, теперь рассмотрим как же действовать при них. Я рассмотрю три сценария: включен только secure boot, включен только kernel_lockdown, включены оба.
1) Secure boot enabled - Используем AVML или DumpIT, они работают в пространстве пользователя, а не ядра и не требуют подписи.
2) Kernel_lockdown enabled - Используем LiME, он работает в пространстве ядра и ограничения пространства пользователя на него не распространяются.
3) Secure boot enable, kernel_lockdown enabled - Можно заранее подготовить live USB с легкой операционной системой, с предворительно отключенным lock_down. Перезагрузиться в live USB и использовать AVML/DumpIT.
Во время перезагрузки часть данных будет неизбежно потеряна.
Создание дампов в windows
Belkasoft - В проводнике находим наш накопитель, заходим в \Belkasoft, два раза кликаем на иконку.Не удалось прогрузить медиа
Нас просят выбрать путь куда будет сохранен дамп. После нажатия Cupture! дамп появится по указанному пути. Программа легковесная, дамп делается быстро.
FTK Imager - В проводнике наш накопитель, заходим в \FTKimager, два раза кликаем на иконку.
Не удалось прогрузить медиа
Выбираем Capture memory.
Не удалось прогрузить медиа
В Destination path указываем путь куда будет сохранен дамп и нажимаем Capture Memory.
DumpIt - Заходим в проводник, выбираем 64 битную версию, два раза кликаем на DumpIt.exe, в появившемся окне нажимаем "y"
Не удалось прогрузить медиа
Дополнительная информация
В отличии от Linux дистрибутивов, Windows меньше вставляет палки в колеса. Дистрибутивы Linux обычно всегда различаются друг от друга: разные пути, разные init системы, разное количество колец безопасности (обычно либо 2 либо 4). В Windows архитектура более едина: один путь, одна модель защиты.Дампы в Windows создаются более предсказуемо, но трудности также могут присутствовать. Среди них secureboot, аппаратное шифрование RAM, и контрфорензитические драйвера.
secureboot - как я уже упоминал защищает ядро от неподписанного кода, а BelkaSoft, FTK Imager и DumpIt как раз работают на уровне ядра (Ring0).
аппаратное шифрование - спасает от дампа вне сессии. Тоесть при физическом извлечении (например при извлечении с помощью CO2) или при перезагрузке потому, что шифрует данные в микросхемах, а ключ дешифровки хранится в материнской плате и при перезагрузке удаляется. Если дамп делается внутри сессии (на разблокированном целевом ПК) то аппаратное шифрование не поможет так как Windows работает внутри сессии с уже расшифрованными данными.
Контрфорензитические драйвера - например в VeraCrypt при установке разворачивается драйвер и когда появляются определенные патерны (например попытка чтения RAM) то система аварийно останавливается и появляется BSOD (синий экран смерти).
Теперь поговорим о скорости, работе и удобстве. По скольку у меня не было возможности проводить тесты на физической машине, я проводил на виртуальной. Я создал 2 дампа каждой из програм. Результаты получились такие
Belkasoft первый дамп - 2:15
Belkasoft второй дамп - 2:10
FTK Imager первый дамп - 2:40
FTK Imager второй дамп - 2:50
DumpIt первый дамп - 3:10
По скорости Belkasoft намного быстрее чем FTK Imager и DumpIt. С Belkasoft приходится меньше взаимодействовать для создания дампа, что является плюсом, ведь чем меньше взаимодействия - тем меньше следов в памяти она оставит.DumpIt второй дамп - 3:55
Все программы работают по одинаковому принципу, используя Kernel Module.
Я уже упоминал про sha256 hash и для чего он нужен. Теперь хочу показать как создавать hash sum в ОС Windows. Это делается командой
Get-FileHash -Algorithm SHA256 -Path "дамп"Пример:
Win + R
Вводим powershell
В появившееся окно вписываем
Get-FileHash -Path "C:\путь\к\файлу" -Algorithm SHA256Не удалось прогрузить медиа
С созданием дампов мы закончили.
Анализ дампов
FTK Imager
Первым на очереди будет FTK Imager. Он скорее предназначен для создания дампов, чем для их анализа, но все же некоторые полезные функции в нем имеются.Не удалось прогрузить медиа
Чтобы загрузить файл в верхнем левом углу нажимаем на File и Add Evidence Item после чего нас программа нас спросит какой тип мы хотим загрузить
Не удалось прогрузить медиа
В открывшемся окне выбираем Image File, после появится окно где от нас потребуют путь к файлу. И мы загрузились
Не удалось прогрузить медиа
По ctrl + F мы можем искать конкретные значения или же искать сигнатуры, просто вписываем значения и если оно есть FTK Imager покажет.
Хотел бы сразу рассказать про сигнатуры и паттерны.
Полезные источники:(https://gist.github.com/leommoore/f9e57ba2aa4bf197ebc5) сигнатуры форматов файлов
(https://en.wikipedia.org/wiki/List_of_file_signatures) популярные файловые сигнатуры
Например:
54 44 46 24 TDF$ - Telegram Desktop FileНе удалось прогрузить медиа
Паттерны
Существуют также и паттерны. Приведу пример: "pass=", "key=". По паттернам очень часто удается найти полезную информацию, поэтому про них не стоит забывать.Наиболее полезные паттерны:
"USER" "PASS" "LOGIN"
"password" "pass" "pwd" "passwd"
"api_key" "apikey" "secret" "token"
"id" "http" "path" "key"
Если есть возможность то следует искать вне зависимости от регистра.
По user я смог найти имя пользователя:
Не удалось прогрузить медиа
По pass был найден пароль:
Не удалось прогрузить медиа
Volatility
Данный фреймворк очень многогранен. В статье уместить все я не смогу, поэтому покажу основыWindows dump
Дампы на ОС Windows поддаются цифровой форензике намного лучше, так как в отличие от Linux систем, Windows логирует большое количество действий пользователя и системы. Volatility отлично работает с Windows, не нужно устанавливать доп компоненты или подбирать символы.python3 vol.py -f /путь/к/дампу/dump.dmp windows.info.InfoКоманда выше выведет небольшой фрагмент данных о системе:
Не удалось прогрузить медиа
Плагин windows.info.Info выводит базовую информацию о системе, конкретно для нас интересно:
- SystemTime - точное время создания дампа
- ls64Bit - информация о архитектуре (64бит/32бит)
- KeNumberProcessors - количество cpu
python3 vol.py -f /путь/к/дампу/dump.dmp windows.pslistДанная команда выводит не только имена процессов (ImageFileName), но еще и
- PID - уникальный идентификатор процесса
- PPID - родительский процесс
- Offset (V) - виртуальный адресс. В hex формате
- Threads - количество потоков
- Handles - количество открытых файлов/соединений
- SessionID - айди сессии пользователя
- Wow64 - версия процесса (True - 32бита, False - 64бита)
- Create/Exit Time - время создания/завершения процесса
- File output - путь к процессу на диске
Не удалось прогрузить медиа
В моем случае оказались интересными процессы с идентификаторами (PID) 8752 и 8872. Это Gajim и Tor Browser. Родительским для Gajim является explorer.exe с идентификатором 4536, а для Tor firefox.exe с идентификатором 8036.
Займемся для начала Tor browser, создадим дамп процесса командой
python3 vol.py -f /путь/к/дампу/dump.mem windows.memmap --pid 8872 --dump и извлечем строки командой strings pid.8872.dmp > tor.txt процесс займет какое-то времяМы получили конечный файл, в котором информация связанна только с процессом 8872, в нем много мусора, зато используя поиск в блокноте по ctrl + F или утилитой grep, по принципу grep "искомое значение" "имя файла":
- grep .onion:443 tor.txt
- grep .onion tor.txt
- grep SOCKS_USER tor.txt
LIMBb3wqm7ik3pjnaboubapqt3hmzniuj7tqyoq5ij7jxqvowwqd.onion:443
SOCKS_USERNAME="LIMBb3wqm7ik3pjnaboubapqt3hmzniuj7tqyoq5ij7jxqvowwqd.onion:0"
Далее приступим к анализу Gajim.
Создадим дамп процесса
python3 vol.py -f /путь/к/дампу/dump.mem windows.memmap --pid 8752 --dumpи извлечем строки
strings pid.8752.dmp > xmpp.txtВоспользуемся утилитой grep для поиска по патернам:
grep "text='" "xmpp.txt"Не удалось прогрузить медиа
Вывод я очистил от важных данных и метаинформации. Мы можем видеть сообщения помеченные как text и названия клиентов resource. Если мы анализировали клиент gajim, то можем предположить, что второй участник переписки использует c0nnectPRO. Ипользуя паттерны to= и from= мы сможем узнать участников переписки.
Плагин pstree отображает связи между родительскими и дочерними процессами, он как и pslist выводит список активных процессов в памяти(наподобие Диспетчера задач).
python3 vol.py -f /путь/к/дампу/dump.mem windows.pstree
Не удалось прогрузить медиа
Вывод напоминает pslist.
Плагин windows.registry.userassist позволяет увидеть процессы закрытые до создания дампа, которые открывал пользователь.
Команда:
python3 vol.py -f /путь/к/дампу/dump.mem windows.registry.userassistНе удалось прогрузить медиа
В выводе мы можем увидеть программы которыми полльзовался пользователь VeraCrypt, Tor Browser, TrueCrypt, Telegram, Edge Browser.
Существует также полезные опции для анализа драйверов. Rootkit маскируются под драйвера и модули ядра.
Команда:
python3 vol.py -f /путь/к/дампу/dump.mem windows.driverscanНе удалось прогрузить медиа
Команда:
python3 vol.py -f /путь/к/дампу/dump.mem windows.modulesНе удалось прогрузить медиа
В обоих выводах мы можем наблюдать RamCaptureDriver, это подтверждает, что для захвата физической памяти BelkaSoft которым был сделан дамп, работает на уровне ядра (Ring0).
Плагин cmdline позволяет узнать как запускались программы, их пути, PID.
пример команды:
./vol.py -f /путь/к/дампу/dump.mem windows.cmdlineНе удалось прогрузить медиа
Ознакомиться с полным списком плагинов для Windows вы можете командой python3 vol.py -h | grep "windows"
Linux dump
На анализ дампов Linux я потратил большое количество времени, дело в том, что конкретно в моем случае с Debian13, LiME создавал неполный дамп и Volatility не мог корректно с ним работать. Я проводил тесты с Ubuntu 22.04, Ubuntu 21.04, Arch linux, с ними получалось корректно.Я продемонстрирую что я имел ввиду:
попытаемся получить базовую информацию о дампах:
python3 vol.py -f /путь/к/дампу/dump.mem banners.BannersНе удалось прогрузить медиа
В выводе плагина banners.Banners у дампа сделанного AVML (dumpavml.lime) мы можем четко увидеть версию ядра 6.12.48+deb13-amd64. В дампе dump.lime сделанным LiME мы не увидели ничего. Если у вас banners.Banners ничего не выводит как и у меня, то попробуйте создать дамп при помощи другого инструмента.
Теперь, когда мы знаем ядро, нам нужно создать символы для него:
Bash:
sudo apt install golang-go
sudo apt update && sudo apt install linux-headers-$(uname -r) linux-image-$(uname -r)-dbg
deb http://security.debian.org/debian-security trixie-security/main amd64 Packages в /etc/apt/sources.list. Если у вас не Debian13, то репозиторий будет другим. Мой конфиг выглядит такНе удалось прогрузить медиа
Bash:
git clone https://github.com/volatilityfoundation/dwarf2json.git
cd dwarf2json
go build
./dwarf2json linux --elf /usr/lib/debug/boot/vmlinux-(uname -r) | xz > /home/debian/Desktop/volatility3/symbols.json.xz
Нам нужно очистить кеш плагинов --clear-cache и плагином -s указать путь к дериктории с символами:
sudo python3 vol.py --clear-cache -f /путь/к/дампу/dump.lime -s /путь/к/символам/ linux.pslist.PsList--clear-cache - очистка кеша
-s - путь к дериктории с символами
-f - путь к файлу с дампом
Не удалось прогрузить медиа
Вывод команды похож на windows. Здесь мы так же можем наблюдать PID, PPID, OFFSET (V) и тп. После первого успешного применения если все считалось корректно, плагин --clear-cache больше не понадобится.
Плагин linux.pstree.PsTree позволяет увидеть дерево процессов
Не удалось прогрузить медиа
При помощи плагина linux.boottime.Boottime мы сможем узнать точное время последнего включения ПК по UTC (всемирному координатному времени).
sudo python3 vol.py -f /путь/к/дампу/dump.mem -s /путь/к/символам/ linux.boottime.Boottime
Не удалось прогрузить медиа
С полным списком плагинов для Linux вы можете ознакомиться командой
python3 vol.py -h | grep "linux"Bulk Extractor
Данная утилита работает из powershell. Bulk Extractor не требует подключения символов или сложной настройки. Все что от вас требуется - это указать создаваймую деректорию, в которую будут сохранены результаты и путь к дампу. По окончании работы утилиты в деректории будут созданы файлы с названием найденного.Нажимаем win + R, в появившемся окне набираем powershell.
Команда:
.\bulk_extractor-2.0.0-beta1.exe -o C:\Users\makasin\Desktop\new_folder C:\Users\makasin\Desktop\dump.mem-o - Путь к деректории и название папки, которая будет созданна.
Не удалось прогрузить медиа
Утилита будет работать продолжительное время, это нормально. В моем случае, это заняло около часа.
Не удалось прогрузить медиа
После завершения в указанной деректории будут находится готовые файлы с найденными артефактами.
Не удалось прогрузить медиа
Некоторые файлы могут оказаться пустыми, если соответствуйщих данных в дампе не окажется.
На этом все.
Благодарю за прочтение статьи!
👍31
🔥6
😮8
🤔8
LIMB