Подписывание исполняемого файла Astra Linux

Issues related to VMProtect
Post Reply
Enreyz
Posts: 6
Joined: Tue Nov 14, 2023 10:58 am

Подписывание исполняемого файла Astra Linux

Post by Enreyz »

Добрый день! Возможно кто-то сталкивался со следующей проблемой. Есть ПО для unix, которое я подписываю через "VMProtect_con.exe %appname %new_appname -pf %projectname.vmp". И есть необходимость запускать его на Astra Linux с включенной замкнутой программной средой. Для этого подписываю его через bsign, указывая uid приватного ключа в параметрах и пароль. Как итог, вместо x-executable получаю octet-stream файл, т.е. файл ломается (100 мб становятся 702 байтами). Если сначала подписать файл через bsign, а потом уже использовать vmprotect_con, то получаю обработанный VMP исполняемый файл, но с неправильной подписью (invalid hash). Если не обрабатывать через vmprotect_con, а просто подписать bsign'ом, то все хорошо, но файл будет требовать VMProtectSDK64.so, что тоже ненормально.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by Admin »

Подписывать файл нужно уже после обработки в VMProtect. А вот почему bsign делает из 100 Мб файл на 702 байт - это лучше спросить разработчиков этой утилиты.
Enreyz
Posts: 6
Joined: Tue Nov 14, 2023 10:58 am

Re: Подписывание исполняемого файла Astra Linux

Post by Enreyz »

С помощью команды file я пытаюсь получить информацию об исполняемом файле до и после обработки через vmprotect_con.
До:
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux, 3.2.0, BuildID[sha1]=***, stripped
После:
ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, no section header.
Как раз отсутствие хэдера, судя по всему, и мешает нормально подписать файл для Астры. Почему так происходит?
DiklosGroupLtd
Posts: 12
Joined: Fri May 27, 2022 12:49 pm
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by DiklosGroupLtd »

А bsign закрывается с каким return value?
Я про это: https://manpages.debian.org/testing/bsi ... TURN_VALUE

На днях проверю сам на AstraLinux (ФСТЭК 4 уровень). Если у вас не будет доступа обратиться к ТП, могу попробовать сам спросить в чём проблема.
It embeds a secure hash of the file contents in the file and optionally signs this hash value.
(https://manpages.debian.org/testing/bsi ... ESCRIPTION)
Скорее всего тут может и зарываться проблема.
До протекта, bsign спокойно и вставит свой securehash, но вот протект меняет ваш файл и толку 0.
А после протекта, bsign скорее всего не может обработать ваш ELF файл, так как он запротекчен.
Пробуйте вырубать защиту в VMP и смотреть что вам поможет...

UPD: Скорее всего вам прилетит Exitcode, судя по сурсам:
https://github.com/digsig-ng/bsign-mirr ... lf.cc#L531
Enreyz
Posts: 6
Joined: Tue Nov 14, 2023 10:58 am

Re: Подписывание исполняемого файла Astra Linux

Post by Enreyz »

DiklosGroupLtd wrote: Tue Nov 14, 2023 3:09 pm А bsign закрывается с каким return value?
Завершается с 0.
Запустил с выводом подробной информации. Сначала идет этап процессинга, потом на этапе самой подписи оказывается, что файл уже не ELF формата.
Лог вот такой:
section '(null)' [0x0], update size 0x0 ->0xa
section header table offset moved 0x0 -> 0x10
section '(null)' [0x0], update size 0x0 -> 0x200
section header table offset moved 0x10 -> 0x200
bsign: file '%appname' is not an ELF object
И далее идет пропуск этого файла. Т.е. все ломает препроцессинг
DiklosGroupLtd
Posts: 12
Joined: Fri May 27, 2022 12:49 pm
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by DiklosGroupLtd »

Ну вот мои опасения и подтвердились. По сути протект мешает работе bsign.
По логам если судить, даже если бы bsign подписал файл, ваше ПО не запустилось, так как произошла модификация, чеки vmp не прошли бы...
Честно сказать, моей компании тоже нужно будет bsign заводить.
Admin wrote: Tue Nov 14, 2023 12:15 pm Подписывать файл нужно уже после обработки в VMProtect. А вот почему bsign делает из 100 Мб файл на 702 байт - это лучше спросить разработчиков этой утилиты.
Следовательно вопрос: Есть ли вариант в VMP (хотя-бы в Linux версии) подружить с bsign?
Просто сами понимаете какая ситуация вырисовывается...
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by Admin »

Судя по исходным кодам автор вообще не сильно знаком с ELF форматом и видимо не знает, что секции не являются обязательными для запуска бинарника (ядро при проекции файла в память оперирует исключительно program header-ами). Поэтому отсутствует даже минимальная проверка на ibHdrSection == 0 и весь дальнейший процесс "подписывания" приводит к тупому затиранию заголовка самого файла.
Следовательно вопрос: Есть ли вариант в VMP (хотя-бы в Linux версии) подружить с bsign?
По хорошему bsign нужно дописывать (хотя бы в составе Astra Linux), т.к. он банально сырой.

P.S. Приложите к топику какой-нить подписанный "hello world" и оригинал.
Enreyz
Posts: 6
Joined: Tue Nov 14, 2023 10:58 am

Re: Подписывание исполняемого файла Astra Linux

Post by Enreyz »

Во вложении архив с "hello world" и он же, подписанный VMP
Attachments
hello_world.zip
(6.19 MiB) Downloaded 257 times
Last edited by Enreyz on Wed Nov 15, 2023 9:56 pm, edited 1 time in total.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by Admin »

Я не вижу в вашем архиве подписанный bsign-ом оригинальный hello_world.
Enreyz
Posts: 6
Joined: Tue Nov 14, 2023 10:58 am

Re: Подписывание исполняемого файла Astra Linux

Post by Enreyz »

А это те же файлы, но подписанные bsign'ом (оригинал все еще работает, а версия, обработанная vmprotect'ом, подтёрта)
Attachments
hello_world.zip
(3.29 KiB) Downloaded 242 times
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by Admin »

Чтобы обойти баги в bsign попробуйте следующее:
1. Подпишите приложение bsign-ом (bsign создаст секцию с типом 0x80736967)
2. Обработайте VMProtect (секции с типами >= 0x80000000 не удаляются)
3. Подпишите защищенное приложение bsign-ом
Enreyz
Posts: 6
Joined: Tue Nov 14, 2023 10:58 am

Re: Подписывание исполняемого файла Astra Linux

Post by Enreyz »

К сожалению это не помогло. Да, теперь файл не затирается полностью, весит он столько же, сколько и до подписи. Но теперь он не запускается с ошибкой "unable to execute: отказано в доступе". Сравнение файла до подписи и после с помощью утилиты readelf говорит о том, что bsign подтирает динамический раздел.
До:

Code: Select all

Динамический раздел со смещением 0x7e92ee0 содержит 51 элемент: 
 Тег                Тип                  Имя/Знач 
0x0000000000000001 (NEEDED)             Совм. исп. библиотека: [libX11.so.6]

***

0x0000000000000000 (NULL)               0x0 
После:

Code: Select all

Динамический раздел со смещением 0x7e92ee0 содержит 1 элемент: 
 Тег                Тип                  Имя/Знач 
0x0000000000000000 (NULL)               0x0 
Также есть разница в заголовке программы.
До:

Code: Select all

[Запрашиваемый интерпретатор программы: /lib64/ld-linux-x86-64.so.2] 
После:

Code: Select all

[Запрашиваемый интерпретатор программы: ] 
т.е. отсутствует информация об интерпретаторе.
Admin
Site Admin
Posts: 2586
Joined: Mon Aug 21, 2006 8:19 pm
Location: Russia, E-burg
Contact:

Re: Подписывание исполняемого файла Astra Linux

Post by Admin »

Пишите в поддержку Astra Linux - пусть правят баги в своем ПО.

P.S. Приложил к сообщению оригинальный hello_world у которого нет секций. Передайте его разработчикам Astra Linux, пусть доводят свою утилиту до ума.
hello_world_no_sections.zip
(2.9 KiB) Downloaded 59 times
Post Reply