P.S. я соавтор, о чем и было сказано в видео, но не являюсь человеком на видео
link to file
Знаю как все любят текст, специально для XSS много текста))
Почему нужно отказаться от использования VPS, то есть виртуальных приватных серверов. Я покажу, какие атаки может совершить каждый хостер в отношении серверов, и продемонстрирую, насколько сложно или даже невозможно защититься от этих атак. В частности, я покажу, каким образом хостер получит доступ к вашим файлам и паролям, даже если вы будете использовать полно-дисковое шифрование файловой системы LUKS, криптоконтейнеры VeraCrypt, TrueCrypt и т.д. Я покажу, насколько легко это делается и насколько критически важная информация легко попадает в чужие руки.
Ниже спойлер: как в ОЗУ хранится пароль LUKS
Давайте разберемся в терминах: VPS — это ВИРТУАЛЬНЫЙ сервер, не стоит путать его с ВЫДЕЛЕННЫМ сервером. В примере, выделенный сервер — это когда вы получаете в аренду полный компьютер, тогда как виртуальный — это когда вы получаете лишь часть мощностей этого компьютера.
Все тесты я буду показывать на VirtualBox. Да, VirtualBox не используется в гипервизорах хостинг-провайдеров, они используют Proxmox VE, ESXi или Microsoft Hyper-V. По сути, разницы никакой нет, потому что каждый гипервизор дает возможности дампа ОЗУ. Абсолютно каждый. Я показываю на примере VirtualBox, потому что исследовать дамп я буду под операционной системой Windows. Но, поверьте, все то же самое можно сделать под любым гипервизором. Я приведу примеры, как это делается на других гипервизорах:
Vbox:
ESXi:
Virt-manager Qemu/KVM:
Proxmox VE:
Microsoft Hyper-V и VMware Workstation: через создание снапшота
В рамках видео я покажу, как хостер может перехватить пароль от LUKS. LUKS — это шифрование файловой системы на Linux. Также покажу на примере Windows, какие атаки может проводить хостер на арендованную у него VM, насколько это просто и насколько эти атаки могут быть опасны, и как сложно от них защититься.
Начнем с Linux-систем и шифрования LUKS.
В качестве тестового диструбутива выбираем Ubuntu, и доходим до выбора, где нужно включить LUKS, соответственно включаем его и задаем тестовый пароль LUKS 123456@54321
В качестве рута задаем 123@321 и продолжаем установку.
И пока идет установка делаем 2 дампа ОЗУ
На видео было отлично видно, что для клиента эти дампы создаются практически незаметно. В теории, для опытных хостеров не составит труда сделать скрипт систематического авто-дампа ОЗУ с модифицированного "специалистами" гипервизора.
При помощи FTK Imager далее производим в дампах поиск паролей:
Что лично меня удивило, это то, насколько легко доступном виде в ОЗУ пароль хранится, взят в кавычки и с пометкой от чего пароль)) в дампе он встречается несколько раз, первый раз в неразборчивом виде без контекста, видимо это были нажатия клавиатуры, дальше уже все понятно
Пароль рута конечно же тоже удалось в дампе обнаружить, ему особо внимания не удаляю:
Теперь давайте представим ситуацию, что у хостера не было дампа ОЗУ при создании LUKS, но ему очень интересно посмотреть VPS.
Дождался установки Ubuntu, перезагрузился и вижу окно LUKS, 1 раз специально ввожу неправильный пароль, и следом правильный, интересно посмотреть как это будет отображаться в дампе ОЗУ:
Делаю пару дампов:
Пару - просто на всякий случай, как показала практика, не в каждом дампе можно найти пароль, в отличии от ключа.
Итого поиск пароля в ОЗУ на скринах ниже, в некоторых местах фейковый пароль от настоящего идут подрят. В целом можно выделить какую-то сигнатуру для их поиска в ОЗУ.
Как и сказал ранее, не всегда получается в ОЗУ найти пароль LUKS, поэтому отдельно покажу как я извлекал ключ из ОЗУ, воспользовался для этого утилитой findaes-1.2 (https://sourceforge.net/projects/findaes/files/), она отлично ищет ключи в ОЗУ:
Ключ LUKS имеет размер 512 бит, что соответственно 2 по 256 )) тут нужно теперь взять эти значения, которые нашел findaes, оставить только те, которые встречаются 1 раз, без повторений и пробовать их комбинировать.
К примеру (упрощенный пример) имеем следующие 3 значения:
123
345
567
из них у нас получится 6 ключей (123345, 345123, 345567, 567345, 123567, 567123), т.е. нужно пробовать их соединять разными сторонами))
и да, нужно удалить пробелы, чтоб получить что-то около того:
Теперь нужно привести этот ключ (dd8ea32cb3b1ee904cc19abf4604626032cbf96a2089ab80f0c922f50df1d90cc7e23cd38d61e17b60fc2bd143c51382f328a32acae527685db32024c6f1afa3), и соответственно другие тоже в бинарный формать, т.к. сейчас он находиться в шестнадцатеричном формате, делается это очень просто командой:
это же проделываем со всеми ключами
Для того что бы расшифровать LUKS нам нужен сам виртуальный диск с файловой системой LUKS VM, на видео я это сделал прям с горячей системы, чтоб показать что не обязательно даже выключать или ставить на паузу VM, чтоб сделать копию виртуального диска, я делал это через FTK Imager, это криминалистический софт который очень многое позволяет сделать внутри системы, им же можно и файлы подкачки прям с запущенной системы копировать, и многое другое, поэтому сделать копию запущенного виртуального диска не составило проблемы.
Входной формат дисков может быть разный в зависимости от источника. Например, на Qemu/KVM — «Qcow2», в VirtualBox — VDI, в ESXi — VMDK. Это не создает никаких сложностей, потому что все эти форматы можно преобразовать в RAW формат, а RAW в абсолютно любой формат. Для криминалистики RAW, он же DD, — это идеальный формат. Если вы занимаетесь криминалистикой, старайтесь все образы, за исключением E01, преобразовывать в RAW, а не использовать их в исходном оригинальном формате. Исключение, конечно, если нативный софт и нативный формат.
Ниже несколько примеров, как преобразовать разные форматы дисков гипервизоров в RAW:
Для LVM (XEN):
В моем случае я буду использовать VirtualBox. Представим, что входной формат диска у меня был нейтральный — RAW. RAW формат сразу я не могу подключить, поэтому у меня есть два варианта: создать файл дескриптор — VMDK либо преобразовать в формат, который без проблем воспримет VirtualBox.
Первый вариант через дескриптор:
Второй вариант: RAW to VDI
LUKS можно расшифровать как самим паролем, так и ключем
Для того чтобы расшифровать ключом LUKS, нужно знать адрес устройства, его видно на скриншоте ниже
И теперь имея ключи и зная устройство пробуем расшифровать:
На скрине ниже отлично видно что не каждый ключ подошел, и все же нужный ключ был найден))
Что мы и видим
Это не конец, следующим постом (ниже) будет текстовая версия Windows форензики
link to file
Знаю как все любят текст, специально для XSS много текста))
Почему нужно отказаться от использования VPS, то есть виртуальных приватных серверов. Я покажу, какие атаки может совершить каждый хостер в отношении серверов, и продемонстрирую, насколько сложно или даже невозможно защититься от этих атак. В частности, я покажу, каким образом хостер получит доступ к вашим файлам и паролям, даже если вы будете использовать полно-дисковое шифрование файловой системы LUKS, криптоконтейнеры VeraCrypt, TrueCrypt и т.д. Я покажу, насколько легко это делается и насколько критически важная информация легко попадает в чужие руки.
Ниже спойлер: как в ОЗУ хранится пароль LUKS
Давайте разберемся в терминах: VPS — это ВИРТУАЛЬНЫЙ сервер, не стоит путать его с ВЫДЕЛЕННЫМ сервером. В примере, выделенный сервер — это когда вы получаете в аренду полный компьютер, тогда как виртуальный — это когда вы получаете лишь часть мощностей этого компьютера.
Все тесты я буду показывать на VirtualBox. Да, VirtualBox не используется в гипервизорах хостинг-провайдеров, они используют Proxmox VE, ESXi или Microsoft Hyper-V. По сути, разницы никакой нет, потому что каждый гипервизор дает возможности дампа ОЗУ. Абсолютно каждый. Я показываю на примере VirtualBox, потому что исследовать дамп я буду под операционной системой Windows. Но, поверьте, все то же самое можно сделать под любым гипервизором. Я приведу примеры, как это делается на других гипервизорах:
Vbox:
Код:
VBoxManage debugvm "Win10_tests" dumpvmcore --filename "C:\Users\admin\Desktop\Forensics\Test_Win\dump.elf"
ESXi:
Код:
vim-cmd vmsvc/snapshot.create <VMID> "MemoryDumpSnapshot" "Snapshot with memory dump" 1 0
Virt-manager Qemu/KVM:
Код:
sudo virsh dump --memory-only --domain win10 '/home/user/Рабочий стол/forensics/win10_ram_dump.raw'
Proxmox VE:
Код:
qm snapshot VMID snapshot_name --dumpdir /path/to/dumpdir
Microsoft Hyper-V и VMware Workstation: через создание снапшота
В рамках видео я покажу, как хостер может перехватить пароль от LUKS. LUKS — это шифрование файловой системы на Linux. Также покажу на примере Windows, какие атаки может проводить хостер на арендованную у него VM, насколько это просто и насколько эти атаки могут быть опасны, и как сложно от них защититься.
Начнем с Linux-систем и шифрования LUKS.
В качестве тестового диструбутива выбираем Ubuntu, и доходим до выбора, где нужно включить LUKS, соответственно включаем его и задаем тестовый пароль LUKS 123456@54321
В качестве рута задаем 123@321 и продолжаем установку.
И пока идет установка делаем 2 дампа ОЗУ
Код:
VBoxManage debugvm "ubuntu" dumpvmcore --filename "C:\Users\admin\Desktop\Forensics\Ubuntu\LUKS_install.elf"
VBoxManage debugvm "ubuntu" dumpvmcore --filename "C:\Users\admin\Desktop\Forensics\Ubuntu\LUKS_install_2.elf"
На видео было отлично видно, что для клиента эти дампы создаются практически незаметно. В теории, для опытных хостеров не составит труда сделать скрипт систематического авто-дампа ОЗУ с модифицированного "специалистами" гипервизора.
При помощи FTK Imager далее производим в дампах поиск паролей:
Что лично меня удивило, это то, насколько легко доступном виде в ОЗУ пароль хранится, взят в кавычки и с пометкой от чего пароль)) в дампе он встречается несколько раз, первый раз в неразборчивом виде без контекста, видимо это были нажатия клавиатуры, дальше уже все понятно
Пароль рута конечно же тоже удалось в дампе обнаружить, ему особо внимания не удаляю:
Теперь давайте представим ситуацию, что у хостера не было дампа ОЗУ при создании LUKS, но ему очень интересно посмотреть VPS.
Дождался установки Ubuntu, перезагрузился и вижу окно LUKS, 1 раз специально ввожу неправильный пароль, и следом правильный, интересно посмотреть как это будет отображаться в дампе ОЗУ:
Делаю пару дампов:
Код:
VBoxManage debugvm "ubuntu" dumpvmcore --filename "C:\Users\admin\Desktop\Forensics\Ubuntu\LUKS_boot_1.elf"
VBoxManage debugvm "ubuntu" dumpvmcore --filename "C:\Users\admin\Desktop\Forensics\Ubuntu\LUKS_boot_2.elf"
Пару - просто на всякий случай, как показала практика, не в каждом дампе можно найти пароль, в отличии от ключа.
Итого поиск пароля в ОЗУ на скринах ниже, в некоторых местах фейковый пароль от настоящего идут подрят. В целом можно выделить какую-то сигнатуру для их поиска в ОЗУ.
Как и сказал ранее, не всегда получается в ОЗУ найти пароль LUKS, поэтому отдельно покажу как я извлекал ключ из ОЗУ, воспользовался для этого утилитой findaes-1.2 (https://sourceforge.net/projects/findaes/files/), она отлично ищет ключи в ОЗУ:
Ключ LUKS имеет размер 512 бит, что соответственно 2 по 256 )) тут нужно теперь взять эти значения, которые нашел findaes, оставить только те, которые встречаются 1 раз, без повторений и пробовать их комбинировать.
К примеру (упрощенный пример) имеем следующие 3 значения:
123
345
567
из них у нас получится 6 ключей (123345, 345123, 345567, 567345, 123567, 567123), т.е. нужно пробовать их соединять разными сторонами))
и да, нужно удалить пробелы, чтоб получить что-то около того:
Код:
dd8ea32cb3b1ee904cc19abf4604626032cbf96a2089ab80f0c922f50df1d90cc7e23cd38d61e17b60fc2bd143c51382f328a32acae527685db32024c6f1afa3
Теперь нужно привести этот ключ (dd8ea32cb3b1ee904cc19abf4604626032cbf96a2089ab80f0c922f50df1d90cc7e23cd38d61e17b60fc2bd143c51382f328a32acae527685db32024c6f1afa3), и соответственно другие тоже в бинарный формать, т.к. сейчас он находиться в шестнадцатеричном формате, делается это очень просто командой:
Код:
xxd -r -p key1.txt key1.bin
это же проделываем со всеми ключами
Для того что бы расшифровать LUKS нам нужен сам виртуальный диск с файловой системой LUKS VM, на видео я это сделал прям с горячей системы, чтоб показать что не обязательно даже выключать или ставить на паузу VM, чтоб сделать копию виртуального диска, я делал это через FTK Imager, это криминалистический софт который очень многое позволяет сделать внутри системы, им же можно и файлы подкачки прям с запущенной системы копировать, и многое другое, поэтому сделать копию запущенного виртуального диска не составило проблемы.
Входной формат дисков может быть разный в зависимости от источника. Например, на Qemu/KVM — «Qcow2», в VirtualBox — VDI, в ESXi — VMDK. Это не создает никаких сложностей, потому что все эти форматы можно преобразовать в RAW формат, а RAW в абсолютно любой формат. Для криминалистики RAW, он же DD, — это идеальный формат. Если вы занимаетесь криминалистикой, старайтесь все образы, за исключением E01, преобразовывать в RAW, а не использовать их в исходном оригинальном формате. Исключение, конечно, если нативный софт и нативный формат.
Ниже несколько примеров, как преобразовать разные форматы дисков гипервизоров в RAW:
Код:
qemu-img convert -f vmdk -O raw /path/to/source.vmdk /path/to/destination.raw
qemu-img convert -f qcow2 -O raw /path/to/source.qcow2 /path/to/destination.raw
qemu-img convert -f vpc -O raw /path/to/source.vhd /path/to/destination.raw
qemu-img convert -f vhdx -O raw /path/to/source.vhdx /path/to/destination.raw
Для LVM (XEN):
Код:
sudo qemu-img convert -f raw /dev/vgname/lvname -O raw /path/to/destination.raw
sudo dd if=/dev/vgname/lvname of=/path/to/destination.raw bs=64K conv=noerror,sync
В моем случае я буду использовать VirtualBox. Представим, что входной формат диска у меня был нейтральный — RAW. RAW формат сразу я не могу подключить, поэтому у меня есть два варианта: создать файл дескриптор — VMDK либо преобразовать в формат, который без проблем воспримет VirtualBox.
Первый вариант через дескриптор:
Код:
VBoxManage internalcommands createrawvmdk -filename /path/to/your/disk.vmdk -rawdisk /path/to/your/disk.raw
Второй вариант: RAW to VDI
Код:
"C:\Program Files\Oracle\VirtualBox\VBoxManage.exe" convertdd C:\raw\disk.raw C:\vdi\disk.vdi --format VDI
LUKS можно расшифровать как самим паролем, так и ключем
Для того чтобы расшифровать ключом LUKS, нужно знать адрес устройства, его видно на скриншоте ниже
И теперь имея ключи и зная устройство пробуем расшифровать:
Код:
sudo cryptsetup --master-key-file key1.bin luksOpen /dev/sdb3 bHDD
На скрине ниже отлично видно что не каждый ключ подошел, и все же нужный ключ был найден))
Что мы и видим
Это не конец, следующим постом (ниже) будет текстовая версия Windows форензики
Вложения
Последнее редактирование:
explained