Процедура наложения электронной подписи, призванная обеспечить подтверждение целостности подписанного документа и его авторства, сама по себе может быть небезопасной.
Основные атаки на ЭП — это кража ключа и подмена подписываемой информации, а также несанкционированный доступ к средству ЭП (например, 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 (под убунтой):
В качестве размера для 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
2. Выбор нужного пункта в меню загрузчика
3. Ubuntu загрузилась, запускаем браузер, заходим в демо-систему
4. Позволяем плагину «Rutoken» загрузиться
5. F5
6. Авторизация в системе по сертификату, который хранится на Рутокен ЭЦП Flash
Вводим PIN-код:
6. Подпись платежек в личном кабинете
Автор: cryptoman