Технологии безопасности

Сайт посвященный вопросам безопасности

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash

Процедура наложения электронной подписи, призванная обеспечить подтверждение целостности подписанного документа и его авторства, сама по себе может быть небезопасной.
Основные атаки на ЭП — это кража ключа и подмена подписываемой информации, а также несанкционированный доступ к средству ЭП (например, USB-токену) посредством кражи его PIN-кода.

Реализуются данные атаки различными способами и на различных уровнях. На уровне ОС это внедрение вредоносного ПО (вирусы, программы-шпионы, руткиты и т.п.), которое способно похищать ключи, PIN-коды и делать подмену документов посредством чтения и/или подмены данных в памяти системного процесса, используя различные механизмы «хака», заложенные в ОС.
Если мы говорим о подписи в браузере, то к данным атакам добавляется возможность проведения атаки man-in-the-middle, направленной на модификацию подписываемых данных на web-странице или на кражу PIN-кода или на перехват secure token для возможности злоумышленнику прикинуться абонентом системы. Кроме того, на сайтах возможна атака типа CSS, обусловленная безалаберностью разработчиков сайта.

Очевидно, что максимально защитить клиента при проведении процедуры ЭП возможно лишь комплексом мер.
К данным мерам можно отнести:

применение для электронной подписи криптографических смарт-карт/USB-токенов с неизвлекаемыми ключами
использование правильной реализации протокола TLS на сайте
правильное конфигурирование этой правильной реализации протокола TLS
использование специальных аппаратных средств для визуализации подписываемых данных перед наложением подписи (trustscreen)
корректная реализация браузерных плагинов и расширений, которые обеспечивают ЭП в браузере
регламентирование процедуры подписи для пользователя с учетом встроенных в браузер механизмов безопасности

проверка сертификата TLS-сервера пользователем перед ЭП
запуск браузерных плагинов и расширений только на доверенном сайте (сейчас правильно настроенные браузеры предупреждают пользователя о запуске)
ввод PIN-кода токена по запросу только доверенного сайта

защита ОС от вредоносного ПО (создание доверенной среды)

Некоторое время назад наша компания выпустила новый Рутокен ЭЦП Flash. Это устройство «два в одном» — криптографический токен и управляемая FLASH-память в едином корпусе. При этом контроллер позволяется настраивать FLASH-память таким образом, что атрибуты настройки нельзя изменить без знания PIN-кода к устройству.

В данной статье мы сделаем кастомную Ubuntu 14.04 LTS, в которую «упакуем» смарткарточные драйвера и Рутокен Плагин. Эту ОС запишем на FLASH-память Рутокен ЭЦП Flash (USB-live) и специальными средствами сделаем ее read-only, так, что без знания PIN-кода злоумышленник не сможет снять этот атрибут.

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

Модификация образа Ubuntu

В качестве станка для кастомизации Ubuntu у меня был тоже Ubuntu.

Подготовка:

sudo su
apt-get install squashfs-tools genisoimage

Скачиваем ISO-образ Ubuntu 14.04 и складируем его куда надо:

mkdir ~/livecdtmp
mv ubuntu-14.04.1-desktop-i386.iso ~/livecdtmp
cd ~/livecdtmp

Монтируем ISO-образ:

sudo su
mkdir mnt
mount -o loop ubuntu-14.04.1-desktop-i386.iso mnt

Делаем экстракт образа:

sudo su
mkdir extract-cd
rsync —exclude=/casper/filesystem.squashfs -a mnt/ extract-cd

Ну и так далее:

sudo su
unsquashfs mnt/casper/filesystem.squashfs
mv squashfs-root editsudo su
cp /etc/resolv.conf edit/etc/
cp /etc/hosts edit/etc/
mount —bind /dev/ edit/dev
chroot edit
mount -t proc none /proc
mount -t sysfs none /sys
mount -t devpts none /dev/pts
export HOME=/root
export LC_ALL=C
dbus-uuidgen > /var/lib/dbus/machine-id
dpkg-divert —local —rename —add /sbin/initctl
ln -s /bin/true /sbin/initctl

Собственно кастомизация — установка смарткарточного драйвера и плагина:

pt-get install libccid libpcsclite1 pcscd
mkdir /home/ubuntu/.mozilla
mkdir /home/ubuntu/.mozilla/plugins
chmod 776 /home/ubuntu/.mozilla
chmod 776 /home/ubuntu/.mozilla/plugins
cp npCryptoPlugin.so /home/ubuntu/.mozilla/plugins
cp librtpkcs11ecp.so /home/ubuntu/.mozilla/plugins

И технические работы по созданию нового ISO:

apt-get clean
rm /var/lib/dbus/machine-id
rm /sbin/initctl
dpkg-divert —rename —remove /sbin/initctl
umount /proc || umount -lf /proc
umount /sys
umount /dev/pts
exit
sudo su
umount edit/dev
sudo su
chmod +w extract-cd/casper/filesystem.manifest
chroot edit dpkg-query -W —showformat=’${Package} ${Version}n’ > extract-cd/casper/filesystem.manifest
cp extract-cd/casper/filesystem.manifest extract-cd/casper/filesystem.manifest-desktop
sed -i ‘/ubiquity/d’ extract-cd/casper/filesystem.manifest-desktop
sed -i ‘/casper/d’ extract-cd/casper/filesystem.manifest-desktop
rm extract-cd/casper/filesystem.squashfs
mksquashfs edit extract-cd/casper/filesystem.squashfs -comp xz -e edit/boot
printf $(sudo du -sx —block-size=1 edit | cut -f1) > extract-cd/casper/filesystem.size
nano extract-cd/README.diskdefines
cd extract-cd
rm md5sum.txt
find -type f -print0 | sudo xargs -0 md5sum | grep -v isolinux/boot.cat | sudo tee md5sum.txt
mkisofs -D -r -V "$IMAGE_NAME" -cache-inodes -J -l -b isolinux/isolinux.bin -c isolinux/boot.cat -no-emul-boot -boot-load-size 4 -boot-info-table -o ../ubuntu-14.04.1-desktop-i386-rutoken.iso .

Ubuntu-14.04.1-desktop-i386-rutoken.iso — это наш загрузочный кастомизированный образ (с установлеными смарткарточными драйверами и Рутокен Плагин), который готов к записи на Рутокен ЭЦП Flash.

Создание загрузочного устройства

Первым делом отформатируем Рутокен ЭЦП FLASH специальной утилитой, выставив памяти атрибут read-write (под виндой):

rtadmin.exe -F 1 30000 u rw -o 87654321 -z rtPKCS11ECP.dll

Затем запишем на него ISO, используя UNETBootin (под убунтой):
Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 1Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 1

В качестве размера для preserve file установим 0. Тогда загрузочная Ubuntu будет хранить все изменения в RAM-памяти, а не на FLASH.
После записи образа установим специальными средствами атрибут read-only FLASH-памяти устройства:

rtadmin.exe -C 1 ro p -c 12345678 -z rtPKCS11ECP.dll

Теперь никто без знания PIN-кода устройства не сможет модифицировать записанный на FLASH-памяти образ Ubuntu.

Что получилось

Ниже показан процесс загрузки с Рутокен ЭЦП Flash и подпись документов в браузере в доверенной среде:

1. Boot-меню в bios

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 2Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 2

2. Выбор нужного пункта в меню загрузчика

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 3Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 3

3. Ubuntu загрузилась, запускаем браузер, заходим в демо-систему

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 4Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 4

4. Позволяем плагину «Rutoken» загрузиться

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 5Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 5

5. F5

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 6Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 6

6. Авторизация в системе по сертификату, который хранится на Рутокен ЭЦП Flash

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 7Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 7

Вводим PIN-код:

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 8Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 8

6. Подпись платежек в личном кабинете

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 9Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 9

Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 10Электронная подпись в доверенной среде на базe загрузочной Ubuntu 14.04 LTS и Рутокен ЭЦП Flash — 10