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

Также мы с тобой рассмотрим, как защитить и анонимизировать сетевой трафик. Про Tor слышали практически все, многие даже использовали его как прокси для отдельных приложений; мы же посмотрим, как эффективно пользоваться им для полной анонимизации целой операционной системы.

 

Требования к системе

Начнем мы наш рассказ с шифрования. Для начала давай сформулируем основные требования к системе, то есть что бы хотелось получить на выходе. Будем считать, что хорошая криптосистема должна шифровать абсолютно всё содержимое жесткого диска так, чтобы его содержимое нельзя было отличить от случайных данных. Загрузчик системы должен состоять из двух частей и находиться на флешке или другом сьёмном носителе. Первая, незащищенная часть, по паролю расшифровывает вторую, в которой находится ядро системы и ключи от жесткого диска. Система должна допускать быструю смену ключей и паролей без потери данных, а работа с разделами должна быть такой же, как и обычно.

 

Алгоритм работы

С требованиями определились. Теперь давай подумаем о том, как будем этого добиваться. Итак, наша схема будет работать следующим образом:

  • при включении компьютера мы вставляем в него флешку,
  • она запускает загрузчик,
  • мы вводим пароль,
  • после загрузки ОС флешка вынимается,
  • дальше работа с компьютером идёт как обычно.

В то время как обычные средства шифрования защищают только домашний раздел или оставляют загрузчик на жестком диске — наша схема делает выключенный компьютер практически неуязвимым к снятию информации и протрояниванию компонентов системы, а для уничтожения всех данных на нём достаточно просто уничтожить флешку. Когда компьютер включен, ключи от диска находятся в оперативной памяти, поэтому для надёжной защиты от cold-boot атак необходимо использовать пароль на BIOS/UEFI и входить в режим гибернации, если нет возможности контролировать доступ к компьютеру.

 

Подготовка диска

Ну а теперь перейдем непосредственно к действиям.

Для осуществления задуманного нам понадобятся:

  1. Live-DVD с любым дистрибутивом Linux (все команды в статье даны для Debian/Ubuntu);
  2. Любая свободная флешка размером более 128 Мб;
  3. Прямые руки.

Если ты хочешь защитить уже существующую систему, а не ставить новую, необходимо сначала сделать её полный бэкап.

Для начала нам нужно загрузиться с Live-DVD и определиться с носителями, на которые будем ставить систему. В нашем примере мы работаем с дистрибутивом Debian, а наши носители — жесткий диск /dev/sda и флеш-карта /dev/sdb. После загрузки нам необходимо открыть консоль с правами root и установить необходимые программы — полнодисковое шифрование cryptsetup и загрузчик grub2:

apt-get install cryptsetup grub2

Если на жестком диске была какая-то незашифрованная информация, его необходимо полностью перезаписать случайными данными. Для этого сначала определим его размер в байтах:

fdisk -l /dev/sda

А затем затрем диск случайными данными:

openssl rand $размер_в_байтах | dd of=/dev/sda bs=512K

Теперь нам необходимо сгенерировать ключ шифрования и положить его в /root/key:

dd if=/dev/random of=/root/key bs=1 count=32

Итак, форматируем жесткий диск:

cryptsetup luksFormat /dev/sda key

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

cryptsetup luksHeaderBackup /dev/sda --header-backup-file /root/header.luks
dd if=/dev/urandom of=/dev/sda bs=1 count=1052672

Открываем наш зашифрованный диск:

cryptsetup -d=key --header=header.luks luksOpen /dev/sda rootfs

Далее с /dev/mapper/rootfs можно работать как с обычным жестким диском. При необходимости можно использовать RAID, LVM и даже создать swap-раздел.

Устанавливаем систему или копируем защищаемую:

mkdir /mnt/root
mkfs.ext4 /dev/mapper/rootfs
mount /dev/mapper/rootfs /mnt/root
 

Установка системы

В рамках статьи мы будем устанавливать Debian Jessie с помощью debootstrap, утилиты для развёртывания базовой debian-based системы в папке другой системы (а скопировать уже существующую систему можно rsync-ом):

apt-get install debootstrap
debootstrap --arch amd64 jessie /mnt/root http://http.debian.net/debian

Теперь chroot-имся в неё, ставим необходимый софт и настраиваем initramfs:

chroot /mnt/root
apt-get install vim locales linux-image-3.16.0-4-amd64(или более новую версию) cryptsetup
cp /usr/share/initramfs-tools/hooks/cryptroot /etc/initramfs-tools/hooks
CRYPTSETUP=y update-initramfs -k all -u

Обязательно нужно установить пароль на систему, если она новая:

passwd
 

Настройка системы

Так как теперь корневая ФС системы при загрузке теперь будет находиться в /dev/mapper/rootfs, надо поправить информацию о файловых системах в fstab:

vim /etc/fstab
/dev/mapper/rootfs / ext4 errors=remount-ro 0 1

Следующим шагом выходим из chroot и делаем копию initrd:

cp /mnt/rootfs/boot/initrd-(текущая версия) /tmp/initrd
mkdir /tmp/newinitrd
cd /tmp/newinitrd

Распаковываем его:

zcat ../initrd | cpio -idv

И подправляем скрипты, запускаемые при загрузке системы до монтирования основных файловых систем. В файле ./scripts/local-top/ORDER необходимо заменить cryptroot на crypto. Содержимое файла ./scripts/local-top/crypto нужно заменить на скрипт, открывающий наш полностью зашифрованный диск:

prereqs()
{
  echo "$PREREQ"
}
case $1 in
prereqs)
prereqs
exit 0
;;
esac
modprobe -b dm_crypt
modprobe -b aes_generic
modprobe -b sha256
/sbin/cryptsetup -d=/etc/key --header=/etc/header.luks \
luksOpen /dev/disk/by-id/$DISK_ID$ rootfs

$DISK_ID можно узнать, используя ls -l /dev/disk/by-id/ | grep sda. После этого делаем скрипт исполняемым:

chmod +x ./scripts/local-top/crypto

Затем кладём в initrd ключ и заголовок тома:

cp /root/key /mnt/rootfs/initrd/etc/key
cp /root/header.luks /mnt/rootfs/initrd/header.luks

Собираем получившийся initrd и кладём его в папку /root:

find . | cpio -H newc -o > ../initrd
cd ..
gzip initrd
mv initrd.gz /root/initrd
 

Подготовливаем флешку

Пришло время заняться флешкой, без которой наш зашифрованный диск будет представлять собой несвязанный набор байт. Начинаем с ее разметки:

parted
(parted) select /dev/sdb
(parted) mklabel msdos
(parted) mkpart primary 5 100 # Раздел с любой файловой системой, например fat32
(parted) mkpart primary 100 200 # раздел с initrd и ядром, защищен luks
(parted) mkpart primary 200 250 #раздел с grub

Теперь шифруем раздел и устаналиваем на него пароль (как ты помнишь, мы разбиваем флешку на два раздела):

cryptsetup luksFormat /dev/sdb2

Остается настроить загрузчик. Для этого открываем /etc/default/grub и добавляем в конец файла строку GRUB_ENABLE_CRYPTODISK=1. После этого форматируем раздел под загрузчик:

mkfs.ext2 /dev/sdb3

И монтируем его:

mkdir /mnt/grub
mount /dev/sdb3 /mnt/grub

Устанавливаем GRUB на флеш-карту. Значение --target следует выбрать в зависимости от параметров твоего компьютера. Наиболее универсальный вариант — i386-pc:

grub-install --target=i386-pc --root-directory /mnt/grub/ /dev/sdb

Теперь создадим файл конфигурации /mnt/grub/grub.cfg:

set timeout=5
set default=0
menuentry "Linux" {
  insmod cryptodisk
  insmod luks
  cryptomount hd0,msdos2
  set root=(crypto0)
  linux /vmlinuz root=/dev/mapper/rootfs ro quiet
  initrd /initrd
}
Загрузчик системы теперь выглядит так
Загрузчик системы теперь выглядит так

В этом файле мы задаем одну строку меню «Linux», при запуске которой после ввода пароля открывается зашифрованный раздел флешки с ядром системы и ключами от жесткого диска.

Ввод пароля от флешки
Ввод пароля от флешки

После этого открываем защищенный раздел на флешке:

cryptsetup luksOpen /dev/sdb2 cryptboot

Форматируем его и монтируем:

mkfs.ext2 /dev/mapper/cryptboot
mkdir /mnt/cryptboot
mount /dev/mapper/cryptboot /mnt/cryptboot

После чего копируем в него ядро и initrd:

cp /root/initrd /mnt/cryptboot/initrd
cp /mnt/rootfs/boot/vmlinuz-(вставьте сюда свою версию) /mnt/cryptboot/vmlinuz
sync

Всё готово!

Hex-дамп заголовка диска и флешки
Hex-дамп заголовка диска и флешки

Размонтируем диски и перезагружаемся:

umount /mnt/*
cryptsetup luksClose /dev/mapper/cryptboot
cryptsetup luksClose /dev/mapper/rootfs
sync
shutdown -r now
 

Анонимизация ОС

С шифрованием разобрались. Теперь пришло время поговорить об анонимизации системы.

Во многих случаях (например, при анализе вредоносного программного обеспечения) необходимо изолировать всю операционную систему и анонимизировать её трафик таким образом, чтобы никакие действия в ней не привели к раскрытию нашего ip-адреса или утере важных данных. Для этого воспользуемся схемой на основе связки Whonix (виртуальной машины, выступающей в качестве шлюза, перенаправляющего трафик в Tor) и любой другой виртуальной машины.

 

Настройка

По шагам:

  • Скачиваем Virtualbox, Whonix Gateway и Kali;
  • Проверяем ova-файл, устанавливаем и обновляем Whonix по инструкции на сайте;
  • Для отключения графического интерфейса — выделяем виртуальной машине 120 Мб оперативной памяти;
  • Затем проверяем файл с образом диска Kali и создаём под него новую виртуальную машину;
  • В настройках сетевого адаптера VM выбираем внутреннюю сеть whonix;
  • Включаем систему;
  • Настраиваем сеть вручную или с помощью Network Manager-а:
    • ip 10.152.152.11
    • шлюз 10.152.152.10
    • dns-сервер 10.152.152.10

Перед началом работы необходимо убедиться, что сеть работает нормально, и только потом обновить ОС и установить все необходимые приложения. Разумеется, не отключая Tor. При этом ни в коем случае нельзя устанавливать Guest Additions, так как они синхронизируют время на реальной и виртуальной машине, расшаривают буфер обмена, могут получить доступ к микрофону и вообще содержат в себе довольно много потенциально опасной функциональности.

Кстати говоря, в нашем случае для усложения отслеживания лучше использовать Tor Browser с правами обычного пользователя, так как стандартный браузер Kali довольно редок и запускается от рута. Для этого устанавливаем sux, который позволит нам запускать графические приложения от имени другого пользователя:

wget http://ftp.us.debian.org/debian/pool/main/s/sux/sux_1.0.1-6_all.deb
dpkg -i sux_1.0.1-6_all.deb

Скачиваем браузер с официальной страницы проекта. Опять же на всякий случай проверяем целостность скачанного файла (по данной инструкции). Затем создаём пользователя torbrowser, логинимся в него через su и
распаковываем архив с правами этого пользователя:

tar xf tor-browser-linux64-4.5.3_en-US.tar.xz

Далее отключаем в нём Tor, так как весь трафик уже анонимизируется на виртуальной машине с Whonix, а Tor через Tor - это вредно и очень медленно. Как это сделать, можно посмотреть тут. Ну и, наконец, запускаем torbrowser:

sux torbrowser tor-browser_en-US/Browser/start-tor-browser

Настройка ssh и sshfs для включенной машины

Для подключения к гостевой машине через ssh нужно сначала подключиться к Whonix-Gateway, пробросив порт, а потом из Whonix-Gateway подключиться к ssh-серверу, запущенному на Kali. Аналогичным способом можно получить доступ к файлам на Kali с помощью двойного sshfs.

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

 

Во время работы

Перед запуском Whonix Gateway и Kali рекомендую включить VPN и поставить на закачку несколько произвольных торрентов с большим количеством сидов — например, с популярными дистрибутивами Linux-a. Это сильно затруднит проведение атак, основанных на статистическом анализе трафика. Кроме того, чтобы избежать случайной утечки информации, желательно закрыть все посторонние программы.

Сам же порядок запуска такой: сначала запускаем Whonix, дожидаемся завершения первичной настройки и затем запускаем Kali. При необходимости — перед запуском Kali восстанавливаем её чистый снимок. По окончании работы необходимо, в обратном порядке, выключить сначала виртуальную машину с Kali, затем Whonix.

Tips & Tricks

Несколько советов, которые обязательно пригодятся тебе в будущем:

Совет 1. Чтобы сменить цепочку Tor-серверов и выходную ноду, необходимо запустить в консоли Whonix Gateway утилиту arm и нажать клавишу "n".

Совет 2. Для безопасного обмена данными с выключенной виртуальной машиной можно монтировать её диски с помощью vdfuse:

sudo apt-get install vdfuse (для других дистрибутивов может быть иное)
sudo vdfuse -t VMDK -f /path/Kali-Linux.vmdk /mnt/mountpoint1
sudo mount /mnt/mountpoint1/Partition /mnt/mountpoint2

Совет 3. При подключении по ssh из реальной машины можно использовать tmux для одновременной работы с терминалом изнутри и снаружи VM. Для этого необходимо запустить tmux в Kali, подключиться к ней по ssh и выполнить tmux a. Можно также смонтировать папки виртуальной машины с помощью sshfs:

sshfs root/user@VM:/ /mnt/mountpoint

Совет 4. Для приватной анонимной связи и передачи файлов я рекомендую torchat. Его стоит запускать в основной системе, чтобы предотвратить сценарий Tor-over-Tor, утечку и потерю данных. Для связи с группой лиц можно использовать свои irc- или jabber-серверы в качестве onion-ресурсов: рекомендуемый клиент — Pidgin, система криптографической защиты чатов — otr.

Совет 5. В случае если необходимо анонимно работать с не-TCP-шными протоколами, можно воспользоваться VPN (желательно — не требующей регистрации). Для этого обычно нужно скачать соответствующий конфигурационный файл и использовать команду sudo openvpn config.ovpn.

 

Меры предосторожности

Хотя рассмотренная схема и гарантирует защиту от утечки ip-адреса из виртуальной машины, для настоящей анонимности необходимо соблюдать следующие правила:

  • Нельзя подключаться к своим ресурсам;
  • Нельзя заходить в аккаунты, которые использовались тобой без Tor-а;
  • Нужно помнить, что все нешифрованные данные могут перехватываться exit nod-ой;
  • Нельзя допускать прохождение трафика Tor-a через Tor, так ноды двух цепочек могут случайно совпасть, тем самым сокращая эффективную длину цепочки вплоть до 1 машины;
  • При передаче файлов нужно защищать их криптографическими и стеганографическими методами, используя утилиты 'gpg' и 'steghide', и анонимизировать их метаданные, например с помощью mat (Metadata Anonymisation Toolkit).
 

Итого

Ну вот и все, чем я хотел поделиться с тобой сегодня. Надеюсь, данная небольшая статья-инструкция поможет тебе защитить свои данные и личную жизнь от чужих глаз. Удачи и до новых встреч!

  • Подпишись на наc в Telegram!

    Только важные новости и лучшие статьи

    Подписаться

  • Подписаться
    Уведомить о
    8 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии