Подключение разделов TrueCrypt с помощью сервера Asterisk

Предисловие

Частью моей работы является ежедневное монтирование контейнеров TrueCrypt на удаленном сервере (1С с «серыми» базами… ну, вы понимаете).

Утренний порядок действий меня напрягал: включить ноутбук, подключиться к серверу, ввести 70-тизначный пароль в TrueCrypt, отключиться от сервера, выключить ноутбук, собраться и ехать на работу.

Мысль об использовании Asterisk пришла сразу. Необходимо было это реализовать.

Решение

Конфигурация оборудования такая:

  1. сервер Asterisk — Ubuntu Server 10.04, Asterisk v1.6.
  2. терминальный сервер — Windows Server 2003 R2, TrueCrypt v6.1a, два жестких диска с разделами TrueCrypt.

Логическая цепочка размышлений была такая:

  1. TrueCrypt позволяет управлять собой из командной строки.
  2. Asterisk позволяет запускать любые скрипты, достаточно прописать их в extensions.conf.
  3. Есть виндовая утилита psexec.exe, позволяющую запускать процессы на удаленном виндовом компьютере из командной строки.
  4. Asterisk стоит на Ubunte, значит необходим аналог psexec для линукса — найден winexe.

Дальше привожу сами скрипты.

extentions.conf:

... exten => 777777,1,Playback(beep) exten => 777777,n,Read(auth,,3,5) exten => 777777,n,GotoIf($["${auth}" = "123"]?m:u) exten => 777777,n(m),System(/etc/asterisk/scripts/mount.sh) exten => 777777,n,Goto(end) exten => 777777,n(u),GotoIf($["${auth}" = "321"]?ok:end) exten => 777777,n(ok),System(/etc/asterisk/scripts/umount.sh) exten => 777777,n(end),Playback(vm-goodbye) exten => 777777,n,Hangup ...

Пояснение:

звоним на внутренний номер 777777, вводим пароль 123, выполняется скрипт mount.sh (монтирование разделов) либо вводим пароль 321 и выполняется скрипт umount.sh (размонтирование разделов, так называемая «КРАСНАЯ КНОПКА»)

mount.sh:

#!/bin/sh /etc/asterisk/scripts/winexe -U DOMAIN\LOCALROOT%PASS //IPADDRESS 'c:\Progra~1\TrueCrypt\TrueCrypt.exe /v \Device\Harddisk1\Partition1 /lE /a /p "CJIo}i{HbIU'napoJIb" /q /s' /etc/asterisk/scripts/winexe -U DOMAIN\LOCALROOT%PASS //IPADDRESS 'c:\Progra~1\TrueCrypt\TrueCrypt.exe /v \Device\Harddisk2\Partition1 /lF /a /p "CJIo}i{HbIU'napoJIb" /q /s'

/etc/asterisk/scripts/winexe — путь к утилите winexe, которая находится в папке со скриптами.
DOMAIN — имя вашего домена,
LOCALROOT — локальный админ на терминальном сервере,
PASS — пароль локального админа,
IPADDRESS — IP-адрес терминального сервера,
дальше путь к TrueCrypt.exe на терминально сервере с параметрами
\Device\Harddisk1\Partition1 — жесткий диск 1 (для того, чтобы определить путь к разделу, запустите TrueCrypt и щелкните Выбрать устройство / Select Device),
/lE — закрепляемая за диском буква (E:\)
/p «CJIo}i{HbIU’napoJIb» — пароль к разделу TrueCrypt,
\Device\Harddisk2\Partition1 — жесткий диск 2 и дальше по аналогии с первым диском.

umount.sh

#!/bin/sh /etc/asterisk/scripts/winexe -U "DOMAIN\LOCALROOT%PASS" //IPADDRESS 'c:\Progra~1\TrueCrypt\TrueCrypt.exe /d E /q /s /w /f' /etc/asterisk/scripts/winexe -U "DOMAIN\LOCALROOT%PASS" //IPADDRESS 'c:\Progra~1\TrueCrypt\TrueCrypt.exe /d F /q /s /w /f' # Варианты удаления либо перезаписи содержимого файлов со скриптами: # 1. Использование urandom # dd if=/dev/urandom of=/etc/asterisk/scripts/mount.sh bs=512 count=1 # dd if=/dev/urandom of=/etc/asterisk/scripts/umount.sh bs=512 count=1 # 2. Использование shred, который забивает файл случайными числами из /dev/urandom (рекомендуется) shred -f /etc/asterisk/scripts/{mount,umount}.sh # или полное удаление скриптов (не рекомендуется) # rm -f /etc/asterisk/scripts/*mount.sh

Здесь происходит форсированное тихое размонтирование разделов E:\ и F:\ и рандомная запись в содержимое скриптов для скрытия информации.

Все скрипты и winexe находятся в папке scripts (/etc/asterisk/scripts/)

Итог

В результате этих манипуляция в любое время и из любого места можно позвонить на рабочий телефон, набрать добавочный 777777 и подключить/отключить разделы TrueCrypt.

Применение связки Asterisk+скрипты может существенно упростить жизнь и расширить возможности системного администратора, например, создание бэкапа или перезапуск служб по звонку.
Лень толкает на подвиги!

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

http://habrahabr.ru/blogs/sysadm/127997/

Использование Truecrypt

Загрузка

http://www.truecrypt.org/download/truecrypt-7.1-linux-console-x64.tar.gz

# tar xzvf truecrypt-7.1-linux-console-x64.tar.gz

Получаем исполняемый файл truecrypt-7.1-linux-console-x64.

Установка Truecrypt

Для работы truecrypt’а надо установить дополнительные пакеты:

# aptitude install libfuse2 fuse-utils dmsetup

После установки запускаем, ранее извлечённый из архива, файл truecrypt-7.1-linux-console-x64:

# ./truecrypt-7.1-setup-console-x64
TrueCrypt 7.1 Setup
____________________

Installation options:

 1) Install truecrypt_7.1_console_amd64.tar.gz
 2) Extract package file truecrypt_7.1_console_amd64.tar.gz and place it to /tmp

To select, enter 1 or 2: 1

Before you can use, extract, or install TrueCrypt, you must accept the
terms of the TrueCrypt License.

Press Enter to display the license terms...

Press Enter or space bar to see the rest of the license.

TrueCrypt License Version 3.0

Читаем лицензионное соглашение до самого конца и вводим yes

Do you accept and agree to be bound by the license terms? (yes/no): yes

Requirements for Running TrueCrypt:
-----------------------------------

 - FUSE library and tools
 - device mapper tools

Press Enter to continue...

Uninstalling TrueCrypt:
-----------------------

To uninstall TrueCrypt, please run 'truecrypt-uninstall.sh'.

Installing package...
usr/bin/truecrypt
usr/bin/truecrypt-uninstall.sh
usr/share/truecrypt/doc/License.txt
usr/share/truecrypt/doc/TrueCrypt User Guide.pdf

Press Enter to exit...

Шифрование раздела и создание контейнера

Шифрование раздела и создание контейнера мало чем отличаются. В первом случае, как аргумент команды, указывается раздел, а во втором случае — файл.

При шифровании раздела все данные на нём уничтожаются.

Раздел не надо форматировать перед шифрованием.

Пример:

Шифрование файла:

# truecrypt -c /var/file.txt

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

# truecrypt -c /dev/sda8
Volume type:
1) Normal
2) Hidden
Select [1]: 1

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

Encryption algorithm:
1) AES
2) Serpent
3) Twofish
4) AES-Twofish
5) AES-Twofish-Serpent
6) Serpent-AES
7) Serpent-Twofish-AES
8) Twofish-Serpent
Select [1]:

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

Hash algorithm:
1) RIPEMD-160
2) SHA-512
3) Whirlpool
Select [1]:

Просто нажимаю Enter. Первая хэш-функция в самый раз.

Filesystem:
1) None
2) FAT
3) Linux Ext2
4) Linux Ext3
5) Linux Ext4
Select [2]: 5

Файловая система для нового тома. Выбрал ext4.

Enter password:
Re-enter password:

Вводим достаточно длинный пароль. Надо заметить, что лучший пароль это действительно случайный набор символов или псевдослучайный.

Enter keyfile path [none]:

Хорошая мысль создать ключевой файл на удаленном носителе и указать его при шифровании. Главное в дальнейшем его не потерять. Но можно в качестве ключевого файла использовать простой текстовый файл с широко известным текстом.

Please type at least 320 randomly chosen characters and then press Enter:

Done: 100.000%  Speed:   58 MB/s  Left: 0 s

The TrueCrypt volume has been successfully created.

При первом использовании у меня возникла ошибка:

Error: fuse: device not found, try 'modprobe fuse' first

Решается все, соответственно:

# modprobe fuse
# modprobe -l | grep fuse
kernel/fs/fuse/fuse.ko
kernel/fs/fuse/cuse.ko

Процесс завершился и зашифрованный том создан.

Монтирование зашифрованного файла или раздела

Монтирование зашифрованного файла:

# truecrypt /var/file.txt /mnt/secure
Enter password for /var/file.txt:
Enter keyfile [none]:
Protect hidden volume (if any)? (y=Yes/n=No) [No]: n

Монтирование зашифрованного раздела:

# truecrypt /dev/sda8 /mnt

Раздел или файл зашифрован?

Некоторые задают этот вопрос приводя в пример, например, строку из статьи википедии посвящённой Truecrypt’у: Ни один том TrueCrypt не может быть идентифицирован (тома TrueCrypt невозможно отличить от набора случайных данных, то есть файл нельзя связать с TrueCrypt как с программой, его создавшей, ни в какой форме и рамках).

Ещё раз отвечаю, что в этой фразе заключён другой смысл. Тут ясно написано, что увидев раздел или файл со случайными данными нельзя сказать, что он точно зашифрован с применением программы Truecrypt. Просто читать надо до конца фразы.

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

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

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

Вариант использования

Свои разделы для фото- и видео-архивов закриптованы с помощью truecrypt на основе ключевого файла; ключевой файл лежит, например, на постоянно подсоединённой флэшке; в rc.local помещена команда truecrypt для монтирования томов.

Монтирование томов случилось только при явном указании отсутствия пароля и hidden-раздела:

$ /usr/bin/truecrypt -t -p "" --protect-hidden=no --keyfiles=/media/flashka/file /dev/sdc2 /media/photos
$ /usr/bin/truecrypt -t -p "" --protect-hidden=no --keyfiles=/media/flashka/file /dev/sdc3 /media/videos