Правильная флешка с Kali и persistence mode (с сохранением настроек и результатов)[

Discussion in 'Linux, Freebsd, *nix' started by Bad Steve, 25 Aug 2016.

  1. Bad Steve

    Bad Steve Member

    Joined:
    25 Aug 2016
    Messages:
    4
    Likes Received:
    6
    Reputations:
    0
    Правильная флешка с Kali и persistence mode
    (с сохранением настроек и результатов)​

    Приветствую Вас, дорогие жители и гости форума. В этой статье я постараюсь доступным языком рассказать о некоторых тонкостях создания флешки с Kali или чем-то подобным. В результате мы получим загружаемую флешку с самой системой, а также специальным разделом persistence, в котором будут сохраняться результаты работы и настройки. Флешка также будет нормально определяться windows, для чего будет создан ntfs или fat32 раздел, но обо всём по порядку.

    Для начала нам, конечно же, потребуется ISO образ. (Я использовал kali-linux-1.1.0a-i386.iso sha-1: 593f0e5b5db5e65102b12f047a7383740c5d7d7a.)
    Затем нужно, загрузившись из под Linux, проделать определённые действия. (На тот момент, данный образ у меня уже был записан на болванку, и я загрузился с него в Live режиме.) Теперь производим разметку флешки (у меня она определилась, как sdb). (Кстати по поводу флешек, лучше не скупиться и купить что-нибудь компактное и скоростное. Я использовал Transcend TS32GJF710, можно взять её USB2.0 аналог TS32GJF510.)
    Открываем флешку в GParted (gparted /dev/sdb) и создаём чистую таблицу разделов типа ms-dos (Device -> Create Partittion Table). Теперь переходим к созданию разделов. Первым создаём ntfs (если хотите fat32) раздел для windows систем примерно в половину объёма флешки (можете потом, даже, затереть на корпусе 32Gb и написать 16Gb, чтобы никто не догадался :) ). Важно, чтобы раздел для windows был именно первым (sdb1), иначе она его не отобразит. Далее создаём системный ext2 раздел размером чуть больше, чем занимает наш ISO образ. Не забываем указать флаг boot, чтобы раздел был загружаемым. (ext2 - относительно простая файловая система без журналирования. На мой взгляд, это наилучший вариант для статического хранения файлов образа в данной ситуации. Хотя, если отформатируете в ext3 или ext4 - не страшно, тоже будет работать.) На оставшемся месте создаём раздел (желательно без форматирования). Его мы будем использовать под persistence.
    Должно получиться примерно следующее:
    [​IMG]

    Переходим в терминал:
    Code:
    # создаём каталог и монтируем к нему системный раздел флешки
    mkdir /mnt/kali
    mount /dev/sdb2 /mnt/kali
    # при желании можно его совсем почистить
    rm -vRf /mnt/kali/*
    Открываем наш образ менеджером архивов. Выделяем всё кроме [BOOT]. Нажимаем “Extract” и извлекаем выбранное в /mnt/kali.
    [​IMG]

    Бывают ситуации, когда файла образа нет, а есть только диск. Тогда файлы можно скопировать прямо с диска:
    Code:
    # создаём каталог и монтируем к нему привод
    mkdir /mnt/sr0
    mount /dev/sr0 /mnt/sr0
    # копируем файлы kali с привода на раздел
    rsync -av /mnt/sr0/* /mnt/kali
    # размонтируем привод
    umount /mnt/sr0
    Ну что, файлы скопированы. Пришло время заняться загрузчиком. На диске с Kali используется загрузчик isolinux, нам же для загрузки с ext раздела потребуется extlinux. В Kali он уже есть и лежит в /usr/lib/EXTLINUX. Сразу скажу, что isolinux, extlinux, syslinux - это всё загрузчики из одного семейства, так что менять почти ничего не придётся.
    Code:
    # копируем загрузчик в MBR флешки
    dd if=/usr/lib/EXTLINUX/mbr.bin of=/dev/sdb bs=512
    
    # устанавливаем (хотя, скорей настраиваем) загрузчик
    # в каталог live (поскольку там хранится загрузочное ядро (vmlinuz, initrd.img))
    extlinux --install /mnt/kali/live
    Так как загрузчик сменился, нужно кое-что переименовать.
    Code:
    mv /mnt/kali/isolinux /mnt/kali/syslinux
    mv /mnt/kali/syslinux/isolinux.cfg /mnt/kali/syslinux/syslinux.cfg
    mv /mnt/kali/syslinux/isolinux.bin /mnt/kali/syslinux/syslinux.bin
    (Кстати, фоновая картинка при загрузке хранится в syslinux/splash.png, её лучше поменять её на что-то менее вызывающее.)

    Ну вот и всё, мы получили загружаемую флешку с Kali. Раздел sdb2 можно смело размонтировать (umount /dev/sdb2). Не забываем, что раздел sdb2 должен быть помечен, как boot (иначе не стартанёт).


    Переходим ко второй части – persistence.
    Как мной уже было сказано выше, persistence – это специальный раздел, предназначенный для сохранения результатов и настроек. С ним вы можете удалять имеющиеся и устанавливать дополнительные пакеты. Всё это сохранится, и, настроив систему единожды, вам не придётся проделывать это каждый раз. Таких разделов может быть несколько, но мы пока рассмотрим вариант всего с одним. Самый простой вариант создания такого раздела – это отформатировать sdb3 в ext3 (можно и в ext4, но, насколько я знаю, debian, на котором собственно и построена Kali, лучше работает с ext3), и создать в его корне конфигурационный файл.
    Code:
    # форматируем раздел sdb3 в ext3
    mkfs.ext3 -L persistence /dev/sdb3
    
    # создаём каталог и монтируем к нему persistence раздел флешки
    mkdir /mnt/persistence
    mount /dev/sdb3 /mnt/persistence
    
    # создаём конфигурационный файл persistence
    echo "/ union" > /mnt/persistence/persistence.conf
    
    # размонтируем раздел sdb3
    umount /dev/sdb3
    На этом можно было бы поставить точку, но, а если предположить, что этой флешкой может завладеть кто-то, кто ей завладеть никак не должен? И тут на помощь приходит шифрование. Да, Kali (и не только она) поддерживает использование шифрованного persistence раздела.
    Ну что, для начала нужно создать криптоконтейнер. При форматировании система запросит подтверждение, для этого нужно ввести YES большими буквами. Затем вводим парольную фразу первый, и второй раз (парольную фразу лучше придумать заранее).
    Code:
    # форматируем раздел (вывод информации о ходе выполнения, шифрование aes-xts-plain, размер ключа 512 бит, подтвердить парольной фразой)
    cryptsetup --verbose --cipher aes-xts-plain64 --key-size 512 --verify-passphrase luksFormat /dev/sdb3
    
    # проверяем раздел
    cryptsetup isLuks /dev/sdb3 && echo "Sucess ;)"
    
    # смотрим, что получилось
    cryptsetup luksDump /dev/sdb3

    Ну а дальше всё просто.
    Code:
    # открываем получившийся криптоконтейнер
    cryptsetup luksOpen /dev/sdb3 sdb3_crypted
    
    # проверяем открывшийся раздел
    cryptsetup status sdb3_crypted
    
    # создаём файловую систему внутри шифрованного раздела
    mkfs.ext3 -L persistence /dev/mapper/sdb3_crypted
    
    # форматируем раздел sdb3 в ext3
    mkfs.ext3 -L persistence /dev/sdb3
    
    # создаём каталог и монтируем к нему шифрованный раздел
    mkdir /mnt/persistence
    mount /dev/mapper/sdb3_crypted /mnt/persistence
    
    # создаём конфигурационный файл persistence
    echo "/ union" > /mnt/persistence/persistence.conf
    
    # производим размонтирование
    umount /dev/mapper/sdb3_crypted
    
    # закрываем шифрованный раздел
    cryptsetup luksClose sdb3_crypted

    Ещё не устали? А вот я подустал, если честно. Ну ладно, идём дальше.
    Часть третья. Финальные штрихи.
    Зашифровать persistence – это, конечно, хорошо. А как насчёт экстренного пароля самоуничтожения? Да, вот такая ещё фишка есть в Kali.
    Хотя, самоуничтожения – это, однако, громко сказано. Ввод такого пароля просто стирает все кей-слоты. Кей-слот – это своего рода пароль к разделу. Их может быть несколько. Я не буду вдаваться в тонкости работы криптоконтейнеров, но если убить все кей-слоты, то шифрованный раздел будет уже не открыть. При установке такого пароля система сначала запросит любой существующий пароль, затем нужно ввести пароль самоуничтожения. Он вводится один раз, без подтверждения, так что будьте внимательны.
    Code:
    # добавляем пароль самоуничтожения
    cryptsetup luksAddNuke /dev/sdb3
    А теперь, на всякий случай, расскажу, как делать и восстанавливать резервные копии заголовков шифрованного раздела.
    Code:
    # создаём резервную копию заголовка шифрованного раздела
    cryptsetup luksHeaderBackup --header-backup-file luksheader.back /dev/sdb3
    
    # восстанавливаем заголовок шифрованного раздела из резервной копии
    cryptsetup luksHeaderRestore --header-backup-file luksheader.back /dev/sdb3

    Кстати, перед тем, как спрятать резервную копию, её тоже можно зашифровать.
    Code:
    # шифруем файл резервной копии
    openssl enc -e -aes-256-cbc -in luksheader.back -out luksheader.back.enc
    
    # расшифровываем файл
    openssl enc -d -aes-256-cbc -in luksheader.back.enc -out luksheader.back.dec
    
    # выведем для наглядности контрольные суммы
    # исходный и расшифрованный файлы должны быть идентичны
    sha1sum  luksheader.back luksheader.back.dec

    Ну и на этом, пожалуй, можно остановиться.
    Пробуйте. Задавайте вопросы.
     
  2. Bad Steve

    Bad Steve Member

    Joined:
    25 Aug 2016
    Messages:
    4
    Likes Received:
    6
    Reputations:
    0
    P.S. С октября 2015 года прекращена поддержка Kali 1.0.
    Если вы хотите дальше продолжить ей пользоваться, для вас какое-то время будут доступны старые репозитории.
    Для этого отредактируйте файл /etc/apt/sources.list
    Там должно быть что-то вроде:
    Code:
    deb http://http.kali.org/kali kali main contrib non-free
    deb-src http://http.kali.org/kali kali main contrib non-free
    deb http://security.kali.org/kali-security kali/updates main contrib non-free
    deb-src http://security.kali.org/kali-security kali/updates main contrib non-free
    Исправьте поддомены источника с http и security на old, а также смените название kali на moto, чтобы получилось что-то вроде:
    Code:
    deb http://old.kali.org/kali moto main contrib non-free
    deb-src http://old.kali.org/kali moto main contrib non-free
    deb http://old.kali.org/kali-security moto/updates main contrib non-free
    deb-src http://old.kali.org/kali-security moto/updates main contrib non-free
     
Loading...