Page 1 of 1
Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 11:12 am
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, что тоже ненормально.
Re: Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 12:15 pm
by Admin
Подписывать файл нужно уже после обработки в VMProtect. А вот почему bsign делает из 100 Мб файл на 702 байт - это лучше спросить разработчиков этой утилиты.
Re: Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 2:23 pm
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.
Как раз отсутствие хэдера, судя по всему, и мешает нормально подписать файл для Астры. Почему так происходит?
Re: Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 3:09 pm
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
Re: Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 3:30 pm
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
И далее идет пропуск этого файла. Т.е. все ломает препроцессинг
Re: Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 5:05 pm
by DiklosGroupLtd
Ну вот мои опасения и подтвердились. По сути протект мешает работе bsign.
По логам если судить, даже если бы bsign подписал файл, ваше ПО не запустилось, так как произошла модификация, чеки vmp не прошли бы...
Честно сказать, моей компании тоже нужно будет bsign заводить.
Admin wrote: ↑Tue Nov 14, 2023 12:15 pm
Подписывать файл нужно уже после обработки в VMProtect. А вот почему bsign делает из 100 Мб файл на 702 байт - это лучше спросить разработчиков этой утилиты.
Следовательно вопрос: Есть ли вариант в VMP (хотя-бы в Linux версии) подружить с bsign?
Просто сами понимаете какая ситуация вырисовывается...
Re: Подписывание исполняемого файла Astra Linux
Posted: Tue Nov 14, 2023 5:21 pm
by Admin
Судя по
исходным кодам автор вообще не сильно знаком с ELF форматом и видимо не знает, что секции не являются обязательными для запуска бинарника (ядро при проекции файла в память оперирует исключительно program header-ами). Поэтому отсутствует даже минимальная проверка на ibHdrSection == 0 и весь дальнейший процесс "подписывания" приводит к тупому затиранию заголовка самого файла.
Следовательно вопрос: Есть ли вариант в VMP (хотя-бы в Linux версии) подружить с bsign?
По хорошему bsign нужно дописывать (хотя бы в составе Astra Linux), т.к. он банально сырой.
P.S. Приложите к топику какой-нить подписанный "hello world" и оригинал.
Re: Подписывание исполняемого файла Astra Linux
Posted: Wed Nov 15, 2023 3:03 pm
by Enreyz
Во вложении архив с "hello world" и он же, подписанный VMP
Re: Подписывание исполняемого файла Astra Linux
Posted: Wed Nov 15, 2023 3:50 pm
by Admin
Я не вижу в вашем архиве подписанный bsign-ом оригинальный hello_world.
Re: Подписывание исполняемого файла Astra Linux
Posted: Wed Nov 15, 2023 9:56 pm
by Enreyz
А это те же файлы, но подписанные bsign'ом (оригинал все еще работает, а версия, обработанная vmprotect'ом, подтёрта)
Re: Подписывание исполняемого файла Astra Linux
Posted: Thu Nov 16, 2023 6:35 am
by Admin
Чтобы обойти баги в bsign попробуйте следующее:
1. Подпишите приложение bsign-ом (bsign создаст секцию с типом 0x80736967)
2. Обработайте VMProtect (секции с типами >= 0x80000000 не удаляются)
3. Подпишите защищенное приложение bsign-ом
Re: Подписывание исполняемого файла Astra Linux
Posted: Thu Nov 16, 2023 3:49 pm
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
[Запрашиваемый интерпретатор программы: ]
т.е. отсутствует информация об интерпретаторе.
Re: Подписывание исполняемого файла Astra Linux
Posted: Thu Nov 16, 2023 4:05 pm
by Admin
Пишите в поддержку Astra Linux - пусть правят баги в своем ПО.
P.S. Приложил к сообщению оригинальный hello_world у которого нет секций. Передайте его разработчикам Astra Linux, пусть доводят свою утилиту до ума.
Re: Подписывание исполняемого файла Astra Linux
Posted: Mon Aug 26, 2024 4:04 pm
by Admin
Для версии 3.9 можно использовать следующий скрипт:
Code: Select all
function OnBeforeSaveFile()
local file = vmprotect.core():outputArchitecture()
local section = file:sections():itemByName('.shstrtab')
if section then
section:setExcludedFromStrip(true)
end
end
При этом в файле останется как минимум одна секция даже если выбрана опция "Удалять отладочную информацию".