Шифрование данных и настройки приватности в Linux

Шифрование данных и защита приватности на сегодняшний день является практически первоочередной задачей. Масса приложений собирают нашу информацию и сохраняют ее на своих серверах. Сегодня мы раскажем как можно защитить свою информацию с исползованием системы Linux.

шифрование данных

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

АЛГОРИТМ РАБОТЫ
С требованиями определились. Теперь давай подумаем о том, как будем этого добиваться. Итак, наша схема будет работать следующим образом:
• при включении компьютера мы вставляем в него флешку,
• она запускает загрузчик,
• мы вводим пароль,
• после загрузки ОС флешка вынимается,
• дальше работа с компьютером идёт как обычно.

В то время как обычные средства шифрования защищают только домашний раздел или оставляют загрузчик на жестком диске — наша схема делает выключенный компьютер практически неуязвимым к снятию информации и протрояниванию компонентов системы, а для уничтожения всех данных на нём достаточно просто уничтожить флешку. Когда компьютер включен, ключи от диска находятся в оперативной памяти, поэтому для надёжной защиты от 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 # Раздел с любой файловой системой
(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
Hex-дамп заголовка диска и флешки
Hex-дамп заголовка диска и флешки

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

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

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

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).

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

Также вам может быть интересно:

Анонимность в сети – обзор дистрибутивов Linux.

Как проверить свою анонимность в сети интернет

Как обеспечить себе максимальную анонимность в сети.

Бесплатный VPN в любой стране.

Как быть анонимным в сети.

Как быть анонимным в сети. Часть 2

Анонимности в сети нет… (Steven Rambam)

Click to rate this post!
[Total: 4 Average: 5]

Специалист в области кибер-безопасности. Работал в ведущих компаниях занимающихся защитой и аналитикой компьютерных угроз. Цель данного блога - простым языком рассказать о сложных моментах защиты IT инфраструктур и сетей.

Leave a reply:

Your email address will not be published.