Цифровая подпись исполняемого файла, доверие к его запросам на сервере

Я создаю кроссплатформенное приложение, которое будет взаимодействовать с сервером. Безопасность очень важна.

Существует ли схема, которая позволит мне «довериться» тому, что исполняемый файл является подлинным и не был подделан, и что запросы действительно исходят от моего подписанного исполняемого файла, а не от подражателя? Похоже на традиционную атаку «человек посередине». Как я могу предотвратить это?

Я понимаю, что могу подписать исполняемый файл доверенным ЦС под Windows. Это гарантирует, что исполняемый файл не был подделан на компьютере пользователя. Тем не менее, целевой вирус все еще может заменить исполняемый файл (в отличие от его изменения) имитатором, и Windows не будет жаловаться.

Может ли мой подлинный исполняемый файл подписывать запросы, которые он отправляет на сервер, и могу ли я проверять эти запросы на сервере? Наивным решением является встраивание «частного сертификата» в подписанный исполняемый файл. Однако я подозреваю, что этот частный сертификат можно извлечь даже из подписанного исполняемого файла.

Наконец, существуют ли исполняемые механизмы подписи в OSX и Linux?


person Nick Zalutskiy    schedule 08.06.2011    source источник
comment
3 самых важных правила безопасности клиент/сервер: (1) Никогда не доверяйте клиенту. (2) Никогда не доверяйте клиенту. (3) Никогда не доверяйте клиенту.   -  person John Douthat    schedule 31.10.2012


Ответы (2)


Для подписи кода на Mac есть некоторая ссылка в StackOverflow здесь и здесь. Я видел разные вещи для Linux, такие как signelf, bsign (используется digsig), elfsign.

Как упомянул Николай О., подпись кода ничего не сделает против декомпиляции. Подписание кода не предотвращает посредника и не является решением для демонстрации серверу, что клиент не был подделан.

person Mathias Brossard    schedule 18.06.2011
comment
Оцените ссылки. Знаете ли вы какой-либо подход, который может гарантировать, что клиент не был закален? - person Nick Zalutskiy; 18.06.2011

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

person Nickolay Olshevsky    schedule 08.06.2011