Форензитический анализ файла подкачки.
данная статья будет интересна для начинающих исследователей в области ИБ. Все эксперементы выполняются базовыми инструментами GNU/Linux (grep, dd, cryptsetup и тп) без использования сложного специализированного ПО.
Дисклеймер:
После 60х годов 20 века swap был улучшен. С появлением VM (Virtual Memory), свап стал убирать из ОЗУ не весь процесс, а отдельные части памяти.
В системах с VM каждая программа работает с виртуальными адресами, которые аппаратная часть процессора преобразует в физические адреса. Теперь при переполнении оперативной памяти, лишь часть данных попадала в файл подкачки. Таким образом swap стал быстрее и удобнее по сравнению со своей предыдущей версией.
Из-за того что нет строгих стандартов, в файл подкачки могут попадать любые данные, в том числе и полезные для форензики:
скриншоты, фото со страниц браузера
фрагменты куки и история браузера (даже очищенная в самом браузере)
сид фразы, токены игр
пароли и кеш.
Войдем в режим суперпользователя (root),
Создадим поисковой запрос в браузере.
Дальше нам предстоит эти данные извлечь. Устанавливаем swap_digger если еще не сделали этого:
Для создания самого дампа нам необходимо выянить где именно находится файл подкачки:
или
У меня файл подкачки находится по пути /dev/dm-2, у вас расположение может отличаться.
Когда мы узнали расположение файла, то нам ничего не мешает создать дамп. Создаем:
После успешного дампа на рабочем столе появится образ с расширением .img. Если открыть данный образ и просмотреть содержимое то мы увидим 80% ненужных символов и артефактов которые в данном анализе нам не понадобятся. Для приображения файла в более читаемый и понятный формат, воспользуемся swap_digger:
Вы можете покапаться в выводе программы, но в рамках данной статьи нас интересует, куда программа сохранила преобразованный дамп. Из вывода мы видим, что дамп находится по пути /tmp/swap_dig/swap_dump.txt и размер файла составил 38М.
Чтобы не работать из дерриктории /tmp я рекомендую перенести файл на рабочий стол, это можно сделать командой:
теперь начинаем извлекать при помощи grep:
Видим что наш поисковой запрос множество раз попал в файл подкачки.
Теперь проверим есть ли в дампе имя пользователя и пароль администратора:
(флаг -A означает кол-во вывода снизу искомой фразы, -B кол-во строк сверху)
Как мы видим в дамп попала вся история команд включая и пароль суперпользователя.
Пришло время к самой интересной части - VeraCrypt. VeraCrypt по умолчанию защищает пароли в своей памяти от попадания в ОЗУ и файл подкачки.
В основном, при создании контейнера в VC есть два случая:
1) Пароль вводился без просмотра содержимого.
попытка извлечь пароль из дампа в данном случае и вывод grep:
Но что нам дает вывод grep? Мы просто увидели что пароль находится в дампе, но не увидели как он там оказался.
вывод:
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) С паролями было взаимодействие
Пароль был просмотрен/выделен(без копирования)/поставлен курсор в поле ввода и тп. В данном случае увидеть пароль в дампе возрастает.
Проверяем:
Первый случай:
Второй случай:
Третий случай:
Четвертый случай:
или
Swap находится по пути /dev/dm-2
Первый способ - переодически или после важный дел очищать swap
Второй способ - это полное отключение swap
Полное отключение файла подкачки это удачное решение только если у вас большое кол-во оперативной памяти. Если у вас как и у меня оперативки мало, то без swap система может виснуть и работать медленее.
Третий способ - zram (сжатый swap)
Проверяем командой
zram находится не на жестком диске и при перезагрузке очищается. zram является альтернативой swap только более быстрой.
Как это будет работать? - приоритет у zram больше и в первую очередь будет использован он, но если zram закончится то далее будет использован стандартный swap. Если у вас большое количество оперативной памяти то вы можете выключить основной swap чтобы работал только zram:
проверяем командой sudo swapon --show
Четвертый способ - это шифрование swap
Этот способ примерно такой же как и с zram, swap остается но будет улучшен. Данные будут зашифрованы, ключ для дешифрования после перезагрузки всегда разный. После перезагрузки данные будет проблемно анализоровать из за смены ключей.
Этот способ самый сложный и опасный(можно сломать загрузчик)
Нам нужно запомнить название существующего раздела:
У меня это "debian--vg-swap_1"
меняем наш существующий раздел на /dev/mapper/cryptswap
данная статья будет интересна для начинающих исследователей в области ИБ. Все эксперементы выполняются базовыми инструментами 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- Теперь мы заполним свап той информацией, которую в последствии будем извлекать:
-
Не удалось прогрузить медиа
Не удалось прогрузить медиа
Войдем в режим суперпользователя (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 /путь/к/swapsudo 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
LIMB