Процедура наложения электронной подписи, призванная обеспечить подтверждение целостности подписанного документа и его авторства, сама по себе может быть небезопасной.
Основные атаки на ЭП — это кража ключа и подмена подписываемой информации, а также несанкционированный доступ к средству ЭП (например, 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
Ну и так далее:
sudo su
unsquashfs mnt/casper/filesystem.squashfs
mv squashfs-root editsudo su
cp /etc/resolv.conf edit/etc/
cp /etc/hosts edit/etc/
mount
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
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:
-
-
- -- --
-
+ -.
- - -- > -.
-. -.-
- -.-
- -.-
-.
-. - -
- --- - > -.
-.
-
.
- - - -
. .
- - - -- - - -
. - . --- --
- --- - ..-..---. .
Ubuntu-14.04.1-desktop-i386-rutoken.iso — это наш загрузочный кастомизированный образ (с установлеными смарткарточными драйверами и Рутокен Плагин), который готов к записи на Рутокен ЭЦП Flash.
Создание загрузочного устройства
Первым делом отформатируем Рутокен ЭЦП FLASH специальной утилитой, выставив памяти атрибут read-write (под виндой):
. - - - .
Затем запишем на него ISO, используя UNETBootin (под убунтой):
В качестве размера для preserve file установим 0. Тогда загрузочная Ubuntu будет хранить все изменения в RAM-памяти, а не на FLASH.
После записи образа установим специальными средствами атрибут read-only FLASH-памяти устройства:
. - - - .
Теперь никто без знания PIN-кода устройства не сможет модифицировать записанный на FLASH-памяти образ Ubuntu.
Что получилось
Ниже показан процесс загрузки с Рутокен ЭЦП Flash и подпись документов в браузере в доверенной среде:
1. Boot-меню в bios
2. Выбор нужного пункта в меню загрузчика
3. Ubuntu загрузилась, запускаем браузер, заходим в демо-систему
4. Позволяем плагину «Rutoken» загрузиться
5. F5
6. Авторизация в системе по сертификату, который хранится на Рутокен ЭЦП Flash
Вводим PIN-код:
6. Подпись платежек в личном кабинете