ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > ИНФО > Статьи > Авторские статьи
   
 
 
Опции темы Поиск в этой теме Опции просмотра

Продвинутый способ шифрования разделов в Linux, или мной овладела паранойя.
  #1  
Старый 19.10.2007, 19:13
Аватар для BMaster
BMaster
Познающий
Регистрация: 12.01.2006
Сообщений: 52
Провел на форуме:
297990

Репутация: 140
Отправить сообщение для BMaster с помощью ICQ
По умолчанию Продвинутый способ шифрования разделов в Linux, или мной овладела паранойя.

Содержание

Введение
Постановка задачи
1. Шифрование разделов
1.1 Подготовим ядро Linux
1.2 Переходим к шифрованию
2. Загрузчик на usb флешке (grub)
2.1 Подготовим флешку
2.2 Переходим к загрузчику
2.3 Автоматизация монтирования шифрованных разделов при загрузке
2.4 Уничтожение загрузчика
2.5 Шифрование swap раздела
3. Паранойя
3.1. Ставим на флешку линукс (Gentoo)
3.2. Доводим дело до конца

Введение

Чтобы не тратить напрасно ваше время, отмечу сразу, что к Windows данная статья не имеет никакого отношения, все действия описаны исключительно для OS Linux.
Со второго пункта описываются действия, для которых требуется иметь поддержку загрузки с hdd-usb или flash на материнской плате. Думаю сейчас это не проблема, даже моя не новая Gigabyte GA-8PE800-RS имеет поддержку загрузки с hdd-usb.

Каждый рано или поздно начинает задумываться о безопасности своих данных. Эта статья именно для тех, кто уже задумался, либо задумается после ее прочтения.

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

Имеется винчестер на котором установлена OS Linux, множество винчестеров с конфиденциальной информацией.
Цель: Зашифровать конфиденциальные данные, сделать возможным загрузку OS только с usb флешки, затереть все следы "рабочего" жесткого диска.

Определения принятые в этой статье:
Основной винчестер - понимается винчестер, на котором установлена загружаемая OS Linux, под это определение попадает единственный в системе винчестер.
Прочий винчестер - понимается второй, третий, либо любой другой, с которого не производится загрузка OS Linux.
Раздел - если обозначается точкой монтирования (например: раздел /home/vasya), понимать как блочное устройство из /dev смонтированное в определенную точку монтирования. Иначе (например: раздел /dev/hda2), просто блочное устройство из /dev.
Бэкап - копия данных, временно сохраненная на другом разделе, либо другом носителе информации.

Все вводимые команды заключены в тег [code], если перед командой присутствует символ # - значит команда вводится с правами суперпользователя (root).

1. Шифрование разделов

Желательно на загрузочном винчестере отделить и зашифровать разделы /home и /var.
На разделе /home находятся домашние папки пользователей, а следовательно все личные конфигурационные файлы, cookies браузеров, история оболочки bash (по умолчанию).
На разделе /var могут находиться логи сервера apache, логи ftp сервера, системные логи, также там может находиться папка tmp. Папка tmp находится еще и в корневом разделе, поэтому желательно сделать симлинк /tmp на папку /var/tmp2 - чтобы шифровалось содержание обоих. Но симлинк лучше сделать с помощью LiveCD, предварительно удалив папку /tmp.

Код:
# rm -r /tmp
# mkdir /var/tmp2 
# ln -s /var/tmp2 /tmp
1.1 Подготовим ядро Linux

Необходимо, чтобы в ядре были включены следующие опции:

Цитата:
Device Drivers --->
Block devices --->
<*> Loopback device support
<*> Cryptoloop Support
Cryptographic options --->
<*> HMAC support
<M> Null algorithms
<M> MD4 digest algorithm
<M> MD5 digest algorithm
<M> SHA1 digest algorithm
<M> SHA256 digest algorithm
<M> SHA384 and SHA512 digest algorithms
<M> Whirlpool digest algorithms
<M> DES and Triple DES EDE cipher algorithms
<*> Blowfish cipher algorithm
<M> Twofish cipher algorithm
<M> Serpent cipher algorithm
<*> AES cipher algorithms (i586)
<M> CAST5 (CAST-128) cipher algorithm
<M> CAST6 (CAST-256) cipher algorithm
<M> TEA and XTEA cipher algorithms
<M> ARC4 cipher algorithm
<M> Khazad cipher algorithm
<M> Anubis cipher algorithm
<*> Deflate compression algorithm
<M> Michael MIC keyed digest algorithm
<M> CRC32c CRC algorithm
Алгоритмы, которыми будем пользоваться необходимо собрать в ядре (*), остальные можно модулем (M).
Пересобрать ядро просто:

Код:
# cd /usr/src/linux
# make xconfig или make menuconfig
# make && make modules_install
# cp ./arch/i386/boot/bzImage /boot/bzImage
В случае необходимости, подправить конфиг загрузчика. Об этом ниже.
В случае возникновения вопросов по сборке ядра, всегда пожалуйста: Ставим ядро 2.6, или Ядерная физика для домохозяйки. Версия 2.0

1.2 Переходим к шифрованию

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

Код:
# dd if=/dev/urandom of=/dev/hda2
Теперь ждать, для больших объемов (раздел на 250Гб и более) эта операция может достигать нескольких суток, для небольших объемов (раздел 20-50 Гб) нескольких часов.
Посмотреть прогресс можно так:

Код:
# kill -USR1 pid
Здесь pid - цифровое значение.
Узнать pid процесса dd можно так:

Код:
# ps ax|grep "dd if"
Суть операции: забиваем раздел рандомным значением, т.е. мусором, для того чтобы нельзя было отличить какая часть раздела зашифрована.

После выполнения этой операции приступаем непосредственно к шифрованию:

Код:
# losetup -e blowfish-128 -T /dev/loop0 /dev/hda2
Здесь:
blowfish-128 - алгоритм шифрования.
T - параметр указывает на то, чтобы мы дважды ввели парольную фразу, т.е. повторили ее.
/dev/hda2 - раздел который шифруем.
/dev/loop0 - блочное устройство, к которому мы в дальнейшем должны обратиться чтобы получить доступ к зашифрованному разделу. По умолчанию ожно использовать от 0 до 7 петлевых устройств, при необходимости можно добавить еще, выполнив скрипт add_loop:

Цитата:
#!/bin/bash
for i in 8 9 10 11 12 13 14 15
do
mknod /dev/loop$i c 7 $i
done
Код:
# chmod +x add_loop
# ./add_loop
За подробностями по команде losetup, можно обратиться к мануалу:

Код:
# man losetup
Итак, ввели команду, придумали парольную фразу - минимум 20 символов, чтобы не ошибиться ввели ее дважды. Все. Теперь можно работать с зашифрованным разделом.
Создадим на нем файловую систему:

Код:
# mkfs.ext3 /dev/loop0
Здесь мы указываем /dev/loop0 - блочное устройство которое связано с нашим разделом /dev/hda2. Про /dev/hda2 можно забыть, теперь все операции осуществляем только с /dev/loop0.

Монтируем:

Код:
# mkdir /mnt/crypt_part
# mount /dev/loop0 /mnt/crypt_part
Теперь открываем любимый файловый менеджер, либо просто консольной командой cp возвращаем предварительно сохраненный бекап на место. Т.е. копируем данные:

Код:
# cp -rp /mnt/backup/* /mnt/crypt_part
/mnt/backup - папка в которой был сохранен бэкап.

Все, данные надежно защищены.
Как проверить?
Например консольным hex редактором hexedit:

Код:
# hexedit /dev/loop0
Увидим вначале нули, что свойственно файловой системе ext3.
Теперь посмотрим на сам раздел:

Код:
# hexedit /dev/hda2
Увидим кучу мусора, неотформатированное пространство, что-то неизвестное, и самое главное - никаких признаков наличия зашифрованных данных. Просто обыкновенный мусор, который неизвестно откуда и как образовался

После того как все скопировали, если не собираемся пользоваться этим разделом до лучших времен, просто делаем следующее:
a) Отмонтируем его

Код:
# umount /dev/loop0
b) И удалим связь /dev/loop0 с /dev/hda2

Код:
# losetup -d /dev/loop0
Все. Сохранив парольную фразу в надежном месте, можно не волноваться за свои данные.
Проверка:

Код:
# hexedit /dev/loop0
Увидим что файл пуст.
Теперь посмотрим на сам раздел:

Код:
# hexedit /dev/hda2
Таже куча мусора что и была.

Как только появится необходимость поработать со своими данными, повторяем:

Код:
# losetup -e blowfish-128 -T /dev/loop0 /dev/hda2
# mount /dev/loop0 /mnt/crypt_part
Работаем, закрываем все:

Код:
# umount /dev/loop0
# losetup -d /dev/loop0
Но этот способ хорош в том случае, если мы работаем с зашифрованным разделом крайне редко. О том как автоматизировать процесс монтирования зашифрованных разделов при загрузке, написано в следующей части статьи.

2. Загрузчик на usb-flash

Понятие шифрованный раздел /dev/hdXX - означает то, что для этого раздела вы проделали операцию шифрования, описанную в первой части статьи.

Постановка задачи

Имеется один или несколько винчестеров содержащие шифрованные разделы, обыкновенная usb флешка более 5 Мб
Цель: Затереть загрузчик на загрузочном винчестере, автоматизировать монтирование шифрованных разделов.

Рассмотрим следующий пример:

Имеется флешка на 1 Гб.

Имеется загрузочный винчестер 60Гб с зашифрованными разделами:
/dev/hda3 - точка монтирования /var
/dev/hda4 - точка монтирования /home
/dev/hda6 - точка монтирования /mount/crypt_data

Не зашифрованные разделы (эти разделы не будут иметь никакого отношения к дальнейшим манипуляциям):
/dev/hda1 - корневой раздел /
/dev/hda5 - точка монтирования /mount/opensource_files

Имеется прочий винчестер 120Гб с двумя зашифрованными разделами:
/dev/hdb1 - точка монтирования /mount/1
/dev/hdb2 - точка монтирования /mount/2

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

Все usb флешки определяются в системе как sata устройства, т.е. /dev/sdXX.
Работа с ними аналогична работе с жестким диском.

В нашем примере флешка доступна при обращении к блочному устройству /dev/sda.
Разобьем ее на 2 раздела: sda1 = 20Мб и sda2 = остальное пространство.

В случае, если на ней имеются другие разделы, то удалить их можно командой d:

Код:
Command (m for help): d
Partition number (1-4): 1

Command (m for help): d
Selected partition 2

Command (m for help): p

Disk /dev/sda: 1027 MB, 1027603456 bytes
32 heads, 62 sectors/track, 1011 cylinders
Units = cylinders of 1984 * 512 = 1015808 bytes

   Device Boot      Start         End      Blocks   Id  System

Command (m for help):
А теперь создадим разделы:

Код:
# fdisk /dev/sda

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 1
First cylinder (1-1011, default 1):
Using default value 1
Last cylinder or +size or +sizeM or +sizeK (1-1011, default 1011): +20M

Command (m for help): n
Command action
   e   extended
   p   primary partition (1-4)
p
Partition number (1-4): 2
First cylinder (22-1011, default 22):
Using default value 22
Last cylinder or +size or +sizeM or +sizeK (22-1011, default 1011):
Using default value 1011

Command (m for help):
В итоге:

Код:
Command (m for help): p

Disk /dev/sda: 1027 MB, 1027603456 bytes
32 heads, 62 sectors/track, 1011 cylinders
Units = cylinders of 1984 * 512 = 1015808 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1          21       20801   83  Linux
/dev/sda2              22        1011      982080   83  Linux

Command (m for help):
После чего сохраняем таблицу разделов:

Код:
Command (m for help): w
Создадим на всех разделах файловую систему ext3:

Код:
# mkfs.ext3 /dev/sda1
# mkfs.ext3 /dev/sda2
2.2 Переходим к загрузчику

Предполагается что grub у вас установлен в системе.
Скопируем папку /boot/grub на раздел /dev/sda1, предварительно смонтировав его в /mount/f1:

Код:
# mkdir /mount/f1
# mount /dev/sda1 /mount/f1
# cp -r /boot/grub /mount/f1
Подправим наш файл конфигурации grub:

Код:
# nano -w /mount/f1/boot/grub/grub.conf
Цитата:
timeout 5 # через 5 секунд автоматически начнется загрузка системы
default 0 # по умолчанию грузить первую систему в списке
fallback 1 # иначе грузить вторую
color light-green/black light-green/green # моя цветовая тема
password --md5 $1$t6Sq7$9P8wqrePDfVzvuyQSnbvl # хеш пароля "123456"

title LINUX # название системы в списке
password --md5 $1$8QRq7$GxAxBGVlEb3VDDnZxLMe/0 # хеш пароля "qqqqqq"
root (hd0,0) # /hda1 - на этом разделе находится ядро (папка /boot)
kernel (hd0,0)/boot/bzImage root=/dev/hda1 video=vesafb:1024x768 # путь к ядру

#Для мастдая в случае наличия
title Windows
lock # необходимо авторизоваться
rootnoverify (hd1,0) # Предполагается, что Windows установлен на другом жестком диске /dev/hdb1
makeactive
chainloader +1
Хеш пароля можно сгенерировать так:

Код:
# grub
    GNU GRUB  version 0.97  (640K lower / 3072K upper memory)

 [ Minimal BASH-like line editing is supported.  For the first word, TAB
   lists possible command completions.  Anywhere else TAB lists the possible
   completions of a device/filename. ]

grub> md5crypt

Password: ******
Encrypted: $1$uRKm8$2TToFr6o/wDpC54hBaBTo/

grub> quit
При выборе в списке LINUX, необходимо ввести пароль qqqqqq, для загрузки Windows в меню необходимо нажать "p" и ввести пароль 123456. За это отвечает опция lock.

Чтобы загрузка системы протекала с разрешением экрана 1024x768, к опциям загрузчика добавлена строка: video=vesafb:1024x768 , но необходимо чтобы в ядре была включена поддержка Frame Buffer:

Цитата:
Device Drivers --->
Graphics support --->
<*> Support for frame buffer devices
<*> VESA VGA graphics support
VESA driver type (vesafb-tng) --->

Device Drivers --->
Graphics support --->
Console display driver support --->
--- VGA text console
<*> Framebuffer Console support
Теперь произведем установку загрузчика на /dev/sda:

Код:
# grub

grub> root (hd<TAB>
 Possible disks are:  hd0 hd1 hd2

grub>root (hd2,0)
grub>setup (hd2)
grub>quit
Все, загрузчик установлен. Здесь, hd2 - наша флешка, 0 - первый раздел, тот где находится /boot на флешке - /dev/sda1.
В биосе поставьте загрузку с usb-hdd либо непосредственно с flash, если ваша м/п поддерживает эту опцию.
Ядро можно разместить и на флешке, но т.к. оно считывается с flash довольно долго (зависит от размера ядра), я оставил его на винчестере.
 
Ответить с цитированием
 



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Linux books nerezus *nix 68 23.01.2010 00:31
большой обзор программ для шифрования и защиты данных BlackCats Soft - Windows 15 25.11.2007 23:28
Прослушка мобильного. Рельность или миф? rijy Авторские статьи 10 24.07.2007 08:23
Алгоритмы. Применение шифрования. yeti Авторские статьи 4 31.03.2007 22:51
Криптографический Словарь bobob Чужие Статьи 5 15.08.2006 00:51



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ