LIMB
Вход Регистрация

тема

форензика

makasin · · 2 ответов · 587 просмотров

Форензитический анализ файла подкачки.
данная статья будет интересна для начинающих исследователей в области ИБ. Все эксперементы выполняются базовыми инструментами GNU/Linux (grep, dd, cryptsetup и тп) без использования сложного специализированного ПО.
Дисклеймер: 

ПРЕДУПРЕЖДЕНИЕ И ОТКАЗ ОТ ОТВЕТСТВЕННОСТИ Настоящая статья подготовлена исключительно в образовательных и исследовательских целях. Все эксперименты проводились на изолированной тестовой системе Debian GNU/Linux 13.Правовые аспекты: Материалы статьи НЕ являются призывом к действию. Применение описанных методов к системам третьих лиц без письменного разрешения владельца является нарушением законодательства (ст. 272, 273 УК РФ). Модификация системных конфигураций может привести к необратимой потере данных. Отказ от ответственности: Автор НЕ несет ответственности за любой ущерб, потерю данных, повреждение оборудования или нарушение законодательства третьими лицами при использовании информации из данной статьи. Перед воспроизведением экспериментов: Используйте виртуальную машину или тестовую систему Создайте резервную копию данных Убедитесь в достаточной квалификации Продолжая чтение, вы принимаете на себя полную ответственность за любые действия на основе изложенной информации.​


Начало​
Многие знают, что можно снимать дампы оперативной и долговременной памяти, но задумывались ли вы о файле подкачки (swap)? Файл подкачки редко упоминается в форензике, хотя в отличии от оперативной памяти, файл подкачки при перезагрузке не очищается. Swap работает по другой технологии, данные хранятся по кругу: старые данные затираются новыми по мере поступления.
Теория​
Файл подкачки swap - изначально был придуман и использован для снижения нагрузки на оперативную память. Swap просто выгружал неактивный процесс целиком, тем самым освобождая ОЗУ. Когда процесс заново активировался диспетчер памяти загружал образ процесса обратно.
После 60х годов 20 века swap был улучшен. С появлением VM (Virtual Memory), свап стал убирать из ОЗУ не весь процесс, а отдельные части памяти.
В системах с VM  каждая программа работает с виртуальными адресами, которые аппаратная часть процессора преобразует в физические адреса. Теперь при переполнении оперативной памяти, лишь часть данных попадала в файл подкачки. Таким образом swap стал быстрее и удобнее по сравнению со своей предыдущей версией.
Из-за того что нет строгих стандартов, в файл подкачки могут попадать любые данные, в том числе и полезные для форензики:
скриншоты, фото со страниц браузера
фрагменты куки и история браузера (даже очищенная в самом браузере)
сид фразы, токены игр
пароли и кеш.
  • В линукс, при помощи vm.swappiness можно управлять "агресивностью" файла подкачки. Значение можно выставлять в пределах от 0 до 100, значение по умолчанию равно 60. Чем больше значение, тем "агресивнее" становится swap. Пример команды:
  • sudo sysctl vm.swappiness=70
  • Практика​
  • Инструменты/утилиты которые будут использованы при анализе:
  • dd, swap_digger, grep.
  • Установка:
  • dd - установлен по умолчанию
  • swap_digger -
Bash:
git clone https://github.com/sevagas/swap_digger.git
cd swap_digger
sudo chmod +x swap_digger.sh
  • grep - установлен по умолчанию.
  • Предназначение:
  • dd - сам дамп swap,
  • swap_digger - преобразование дампа в удобный .txt формат,
  • grep - поиск конкретных значений из дампа.
Для начала я увеличу агресивность свап:
sudo sysctl vm.swappiness=100
  • Теперь мы заполним свап той информацией, которую в последствии будем извлекать:
  •  
    Не удалось прогрузить медиа
Создадим контейнер в VeraCrypt,
Не удалось прогрузить медиа
 
Войдем в режим суперпользователя (root),
Не удалось прогрузить медиа

Создадим поисковой запрос в браузере.
Дальше нам предстоит эти данные извлечь. Устанавливаем swap_digger если еще не сделали этого:
Не удалось прогрузить медиа


Для создания самого дампа нам необходимо выянить где именно находится файл подкачки:
sudo swapon --show
или 
sudo cat /proc/swaps

Не удалось прогрузить медиа


У меня файл подкачки находится по пути /dev/dm-2, у вас расположение может отличаться.
Когда мы узнали расположение файла, то нам ничего не мешает создать дамп. Создаем: 
Bash:
sudo swapoff -a #временно выключаем свап

sudo if=/путь/к/свап of=/путь/куда/сохранить.img bs=4M status=progress

sudo swapon -a #включаем обратно

Не удалось прогрузить медиа


После успешного дампа на рабочем столе появится образ с расширением .img. Если открыть данный образ и просмотреть содержимое то мы увидим 80% ненужных символов и артефактов которые в данном анализе нам не понадобятся. Для приображения файла в более читаемый и понятный формат, воспользуемся swap_digger:
Bash:
cd swap_digger

sudo ./swap_digger.sh -v -a -l -s /путь/к/дампу.img

Не удалось прогрузить медиа

Вы можете покапаться в выводе программы, но в рамках данной статьи нас интересует, куда программа сохранила преобразованный дамп. Из вывода мы видим, что дамп находится по пути /tmp/swap_dig/swap_dump.txt и размер файла составил 38М.
Чтобы не работать из дерриктории /tmp я рекомендую перенести файл на рабочий стол, это можно сделать командой:
sudo cp /tmp/swap_dig/swap_dump.txt /home/user/Desktop
теперь начинаем извлекать при помощи grep:
grep "searchrequest" "swap_dump.txt" #запрос с браузера

Не удалось прогрузить медиа

Видим что наш поисковой запрос множество раз попал в файл подкачки.
Теперь проверим есть ли в дампе имя пользователя и пароль администратора:
grep "SUDO_USER="$"" "swap_dump.txt"

Не удалось прогрузить медиа


grep -A 5 -B 5 "p@ssw0rd" "swap_dump.txt"
(флаг -A означает кол-во вывода снизу искомой фразы, -B кол-во строк сверху)

Не удалось прогрузить медиа


Как мы видим в дамп попала вся история команд включая и пароль суперпользователя.
Пришло время к самой интересной части - VeraCrypt. VeraCrypt по умолчанию защищает пароли в своей памяти от попадания в ОЗУ и файл подкачки.
В основном, при создании контейнера в VC есть два случая:
1) Пароль вводился без просмотра содержимого.

Не удалось прогрузить медиа


попытка извлечь пароль из дампа в данном случае и вывод grep:

Bash:
debian@debian:~/Desktop$ grep "dfghjkc" swap_dump.txt
dfghjkc
dfghjkc
debian@debian:~/Desktop$

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

grep -A 10 -B 10 "dfghjkc" swap_dump.txt

вывод:

x86_64-linux-gnu/gio/modules/libdconfsettings.so: undefined symbol: g_io_dconfsettings_load
file:///home/debian/Desktop/swap_analysis_report/06_veracrypt_encryption.txt
Verdana
?333333
dfghjkc
?uuuuuu
?^^^^^^

Во второй раз мы видим пароль но с пометкой "Password":

Password:
!120,119
l: rgb(245,1Q
MTA2MjUgMC4zQ
MC4zOTA2!
NDM3IC0w!
dfghjkc
/usr/share/locale/en_US.UTF-8.utf8/LC_MESSAGES/xfconf.mo
/desktop-menu/show-icons
xfce4-desktop"

p.s. - пароль вводился однократно (только в поле VeraCrypt), галочка Display Password не была активна, взаимодействия с полем не было (не выделял, не копировал), скриншот интерфейса сделан после дампа. 
Я уже говорил что Vera Crypt защищает пароль в своей памяти от попадания в оперативную память и файл подкачки, но почему же пароль оказался в дампе?
"xfce4-desktop", "xfconf.mo" - логи свапа наталкивают на мысль...
Пароль попал туда из графического окружения xfce, за которым Vera Crypt уследить не может.
2) С паролями было взаимодействие

Не удалось прогрузить медиа

Пароль был просмотрен/выделен(без копирования)/поставлен курсор в поле ввода и тп. В данном случае увидеть пароль в дампе возрастает.
Проверяем:
grep "zxcvbn" "swap_dump.txt"

Первый случай: 

Bash:
.fini_array
.data.rel.ro
.dynamic
.got.plt
.gnu_debuglink
rectory
zxcvbn
/run/user/1000/dconf

Пароль попал в дамп из XFCE.

Второй случай:

Bash:
VeraCrypt Website
Beginner's Tutorial
gtk-new
gtk-open
Settin_gs
veracrypt
Preferences...
zxcvbn
en.UTF-8

Пароль попал в дамп из графического окружения VeraCrypt.

Третий случай:

Bash:
/home/debian/.icons
16x16/actions
16x16/actions
Fallback icon theme
emoji-people-symbolic
emoji-travel-symbolic
48x48/devices
zxcvbn
48x48/devices
48x48/emblems

Пароль попал в дамп из каталога иконок окружения.

Четвертый случай:

Bash:
"https://static.adsafeprotected.com/firefox-etp-js", "*://*.adsafeprotected.com/*.gif*", "*://*.adsafeprotected.com/*.png*", "*://*.adsafeprotected.com/*.js*", "*://*.adsafeprotected.com/*/adj*", "*://*.adsafeprotected.co
ipMode:22,
DjO_j3q
&);QMv
resource:///modules/asrouter/CFRPageActions.sys.mjs
c*`ObU
zxcvbn
en.UTF-8

Парралельно работал браузер и пароль попал в его процесс
Защита
​
Просматриваем где именно храниться swap:
sudo swapon --show
или 
sudo cat /proc/swaps

Не удалось прогрузить медиа


Swap находится по пути /dev/dm-2
Первый способ - переодически или после важный дел очищать swap
Bash:
sudo swapoff -a

sudo dd if=/dev/zero of=/путь/к/swap bs=1M status=progress

sudo mkswap /путь/к/swap

sudo swapon /путь/к/swap

Не удалось прогрузить медиа


Второй способ - это полное отключение swap
Полное отключение файла подкачки это удачное решение только если у вас большое кол-во оперативной памяти. Если у вас как и у меня оперативки мало, то без swap система может виснуть и работать медленее.
Bash:
sudo swapoff -a

sudo nano /etc/fstab #Тут нужно закоментировать строку автозагрузки

sudo rm /путь/к/swap #По желанию, не рекомендую

sudo swapon --show #проверка

Не удалось прогрузить медиа


Третий способ - zram (сжатый swap)

Bash:
sudo apt install zram-tools

sudo nano /etc/default/zramswap # PERCENT - Количество в % выделяемой RAM под zram

sudo systemctl enable zramswap

sudo systemctl start zramswap

Проверяем командой sudo swapon --show и видим:
Bash:
NAME       TYPE      SIZE USED PRIO
/dev/dm-2 partition 3.9G   0B   -2
/dev/zram0 partition 1.9G 256K  100

zram находится не на жестком диске и при перезагрузке очищается. zram является альтернативой swap только более быстрой.
Как это будет работать? - приоритет у zram больше и в первую очередь будет использован он, но если zram закончится то далее будет использован стандартный swap. Если у вас большое количество оперативной памяти то вы можете выключить основной swap чтобы работал только zram:
sudo swapoff /путь/к/swap
sudo nano /etc/fstab #закоментировать строку как во втором способе
проверяем командой sudo swapon --show
Четвертый способ - это шифрование swap
Этот способ примерно такой же как и с zram, swap остается но будет улучшен. Данные будут зашифрованы, ключ для дешифрования после перезагрузки всегда разный. После перезагрузки данные будет проблемно анализоровать из за смены ключей.
Этот способ самый сложный и опасный(можно сломать загрузчик)
Нам нужно запомнить название существующего раздела:
sudo nano /etc/fstab

Не удалось прогрузить медиа


У меня это "debian--vg-swap_1"

Bash:
sudo apt install cryptsetup
#если у вас как и у меня LVM 
echo "cryptswap /dev/mapper/debian--vg-swap_1 /dev/urandom swap,cipher=aes-xts-plain64,size=256" | sudo tee -a /etc/crypttab # /dev/mapper/debian--vg-swap_1 - ваш путь

sudo nano /etc/fstab

Не удалось прогрузить медиа


меняем наш существующий раздел на /dev/mapper/cryptswap

Bash:
sudo swapoff -a

sudo cryptsetup open --type plain --cipher aes-xts-plain64 --key-size 256 --key-file /dev/urandom /dev/mapper/debian--vg-swap_1 cryptswap # вместо debian--vg-swap_1 должен идти ваш путь

sudo mkswap /dev/mapper/cryptswap

sudo swapon /dev/mapper/cryptswap

sudo update-initramfs -u -k all

sudo swapon --show

free -h

reboot

Спасибо за прочтение статьи!​
👍36 ❤️6 🔥4 👏9 🤔4 😢4
:thumbsup:
👍2
Ответmakasin

Форензитический анализ файла подкачки. данная статья будет интересна для начинающих исследователей в области ИБ. Все эксперементы выполняются базовыми инструментами GNU/Linux (grep, dd, cryptsetup и тп) без…

Думаю понятно что дамп файла подкачки был не один. Я проводил большое количество одинаковых действий (для чистоты). Время ввода данных тоже отличается и это нормально.
Таблица:
файл с паролем:dfghjkczxcvbnразмер образа3.9Гб3.9Гбразмер файла50Мб32Мбкол-во строк14025351169213
Размер образа дампов обычно одинаковый, вне зависимости от данных, которые там находятся, - он может быть забит нулями, но размер будет 3.9Гб (мой случай).
Командами md5sum и sha256sum я получил хеши:
grep "pass" file.txt | sha256sum
sha256sum file
swap_dfghjkc_10102025.txt (пароль скрыт)
dd86a7956aec3635d371397e3715af89d69efe74abdea8b77ca93d0d662bb685 (хеш целостности файла)
3b15a73c7872382be0dd30b0142454c5bbd0c40393abfb7c4a896db204d277cd (хеш пароля)
временная метка: 2025-10-10 22:44:06
swap_zxcvbn_10102025.txt (с паролем взаимодействовали)
e192c31a0d83081cf391b7bf93ceeb32173790cc13f62b1e015ad923b9e2b2fc (хеш целостности файла)
9bcb0a62cb8d9b92cf832f09fe70293b0ea5be055fdbddf9ed6170fb3e97f2d2 (хеш пароля)
временная метка: 2025-10-10 10:49:28

Смещения:
Пароль был скрыт:
49930190:dfghjkc - 0x2F9DFCE
50289405:dfghjkc - 0x2FF5AFD
С паролем взаимодействовали:
9313860:zxcvbn - 0x8E1E44
10632581:zxcvbn - 0xA23D85
10932307:zxcvbn - 0xA6D053
30677297:zxcvbn - 0x1D41931
p.s: префикс (приставка) 0x обозначает, что число записано в шестнадцатиричной форме (используются цифры от 0 до 9 и буквы A "10", B "11", C "12" и т.д до F "15"), в форензике часто приходится работать с данной системой счисления.

Чтобы сильно не захламлять статью я единожды покажу как выглядит вхождение пароля в swap:
Bash:
00a6d020: 656f 706c 652d 7379 6d62 6f6c 6963 0a65  eople-symbolic.e
00a6d030: 6d6f 6a69 2d74 7261 7665 6c2d 7379 6d62  moji-travel-symb
00a6d040: 6f6c 6963 0a34 3878 3438 2f64 6576 6963  olic.48x48/devic
00a6d050: 6573 0a7a 7863 7662 6e0a 3438 7834 382f  es.zxcvbn.48x48/
00a6d060: 6465 7669 6365 730a 3438 7834 382f 656d  devices.48x48/em
00a6d070: 626c 656d 730a 3438 7834 382f 6361 7465  blems.48x48/cate
00a6d080: 676f 7269 6573 0a65 6d6f 6a69 2d66 6f6f  gories.emoji-foo
Это третий пример вхождения пароля с которым было взаимодействие, но как же он выглядит в файле подкачки? - в файле подкачки данные хранятся в байтовом виде который обычно выводится в шестнадцатиричной форме:
0x65 это e, 0x6f это o, 0x70 это p и ТП. В такой форме работать не очень быстро и удобно.
(и именно поэтому файл нужно преобразовывать в более понятный формат).

Статистика:
способпарольвхожденияскрытыйdfghjkc2взаимодействиеzxcvbn4
При взаимодействии с паролем шанс его найти увеличивается в два раза (значение взятое в рамках данной статьи), и это отражается в таблице, а при галочке Display password создаются дополнительные буферы которые в основном связаны с графическим окружением XFCE, сама VeraCrypt в этом не виновата.

Мой вывод:
Скажу свою позицию относительно попадания в дамп пароля VeraCrypt.
Мы наглядно видели что пароль чаще попадал в swap именно когда с ним было взаимодействие, появлялись различные стили, другие процессы могли его прочитать. Когда пароль скрыт "*" то он более защищен и при малой загруженности RAM, вероятность попадания в swap снижается.
Что сделать чтобы обезопасить ключи шифрования: после создания контейнера можно очистить файл подкачки и перезагрузить ПК (Чтобы RAM тоже очистилась).
Для эксплуатации swap нужен root, и если он есть, то злоумышленник может прочитать или скопировать данные файла подкачки как физически, так и удаленно. Это может быть опасно для почти каждого ПК и что будет в swap предугадать достаточно сложно, там может быть все: от иконок графического окружения до важных переписок и паролей.
👍3

Гостевой просмотр. Чтобы отвечать и ставить реакции, войдите или зарегистрируйтесь.