Подписывание исполняемого файла Astra Linux
Подписывание исполняемого файла Astra Linux
Добрый день! Возможно кто-то сталкивался со следующей проблемой. Есть ПО для 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
Подписывать файл нужно уже после обработки в VMProtect. А вот почему bsign делает из 100 Мб файл на 702 байт - это лучше спросить разработчиков этой утилиты.
Re: Подписывание исполняемого файла Astra Linux
С помощью команды 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.
Как раз отсутствие хэдера, судя по всему, и мешает нормально подписать файл для Астры. Почему так происходит?
До:
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.
Как раз отсутствие хэдера, судя по всему, и мешает нормально подписать файл для Астры. Почему так происходит?
-
- Posts: 15
- Joined: Fri May 27, 2022 12:49 pm
- Contact:
Re: Подписывание исполняемого файла Astra Linux
А bsign закрывается с каким return value?
Я про это: https://manpages.debian.org/testing/bsi ... TURN_VALUE
На днях проверю сам на AstraLinux (ФСТЭК 4 уровень). Если у вас не будет доступа обратиться к ТП, могу попробовать сам спросить в чём проблема.
Скорее всего тут может и зарываться проблема.
До протекта, bsign спокойно и вставит свой securehash, но вот протект меняет ваш файл и толку 0.
А после протекта, bsign скорее всего не может обработать ваш ELF файл, так как он запротекчен.
Пробуйте вырубать защиту в VMP и смотреть что вам поможет...
UPD: Скорее всего вам прилетит Exitcode, судя по сурсам:
https://github.com/digsig-ng/bsign-mirr ... lf.cc#L531
Я про это: https://manpages.debian.org/testing/bsi ... TURN_VALUE
На днях проверю сам на AstraLinux (ФСТЭК 4 уровень). Если у вас не будет доступа обратиться к ТП, могу попробовать сам спросить в чём проблема.
(https://manpages.debian.org/testing/bsi ... ESCRIPTION)It embeds a secure hash of the file contents in the file and optionally signs this hash value.
Скорее всего тут может и зарываться проблема.
До протекта, bsign спокойно и вставит свой securehash, но вот протект меняет ваш файл и толку 0.
А после протекта, bsign скорее всего не может обработать ваш ELF файл, так как он запротекчен.
Пробуйте вырубать защиту в VMP и смотреть что вам поможет...
UPD: Скорее всего вам прилетит Exitcode, судя по сурсам:
https://github.com/digsig-ng/bsign-mirr ... lf.cc#L531
Re: Подписывание исполняемого файла Astra Linux
Завершается с 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
И далее идет пропуск этого файла. Т.е. все ломает препроцессинг
-
- Posts: 15
- Joined: Fri May 27, 2022 12:49 pm
- Contact:
Re: Подписывание исполняемого файла Astra Linux
Ну вот мои опасения и подтвердились. По сути протект мешает работе bsign.
По логам если судить, даже если бы bsign подписал файл, ваше ПО не запустилось, так как произошла модификация, чеки vmp не прошли бы...
Честно сказать, моей компании тоже нужно будет bsign заводить.
Просто сами понимаете какая ситуация вырисовывается...
По логам если судить, даже если бы bsign подписал файл, ваше ПО не запустилось, так как произошла модификация, чеки vmp не прошли бы...
Честно сказать, моей компании тоже нужно будет bsign заводить.
Следовательно вопрос: Есть ли вариант в VMP (хотя-бы в Linux версии) подружить с bsign?
Просто сами понимаете какая ситуация вырисовывается...
Re: Подписывание исполняемого файла Astra Linux
Судя по исходным кодам автор вообще не сильно знаком с ELF форматом и видимо не знает, что секции не являются обязательными для запуска бинарника (ядро при проекции файла в память оперирует исключительно program header-ами). Поэтому отсутствует даже минимальная проверка на ibHdrSection == 0 и весь дальнейший процесс "подписывания" приводит к тупому затиранию заголовка самого файла.
P.S. Приложите к топику какой-нить подписанный "hello world" и оригинал.
По хорошему bsign нужно дописывать (хотя бы в составе Astra Linux), т.к. он банально сырой.Следовательно вопрос: Есть ли вариант в VMP (хотя-бы в Linux версии) подружить с bsign?
P.S. Приложите к топику какой-нить подписанный "hello world" и оригинал.
Re: Подписывание исполняемого файла Astra Linux
Во вложении архив с "hello world" и он же, подписанный VMP
- Attachments
-
- hello_world.zip
- (6.19 MiB) Downloaded 474 times
Last edited by Enreyz on Wed Nov 15, 2023 9:56 pm, edited 1 time in total.
Re: Подписывание исполняемого файла Astra Linux
Я не вижу в вашем архиве подписанный bsign-ом оригинальный hello_world.
Re: Подписывание исполняемого файла Astra Linux
А это те же файлы, но подписанные bsign'ом (оригинал все еще работает, а версия, обработанная vmprotect'ом, подтёрта)
- Attachments
-
- hello_world.zip
- (3.29 KiB) Downloaded 446 times
Re: Подписывание исполняемого файла Astra Linux
Чтобы обойти баги в bsign попробуйте следующее:
1. Подпишите приложение bsign-ом (bsign создаст секцию с типом 0x80736967)
2. Обработайте VMProtect (секции с типами >= 0x80000000 не удаляются)
3. Подпишите защищенное приложение bsign-ом
1. Подпишите приложение bsign-ом (bsign создаст секцию с типом 0x80736967)
2. Обработайте VMProtect (секции с типами >= 0x80000000 не удаляются)
3. Подпишите защищенное приложение bsign-ом
Re: Подписывание исполняемого файла Astra Linux
К сожалению это не помогло. Да, теперь файл не затирается полностью, весит он столько же, сколько и до подписи. Но теперь он не запускается с ошибкой "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
Пишите в поддержку Astra Linux - пусть правят баги в своем ПО.
P.S. Приложил к сообщению оригинальный hello_world у которого нет секций. Передайте его разработчикам Astra Linux, пусть доводят свою утилиту до ума.
P.S. Приложил к сообщению оригинальный hello_world у которого нет секций. Передайте его разработчикам Astra Linux, пусть доводят свою утилиту до ума.
Re: Подписывание исполняемого файла Astra Linux
Для версии 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