Мне кажется, что я упускаю что-то очевидное здесь, но я не вижу, чтобы это было написано где-либо.
Я подписываю свои исполняемые файлы с использованием сертификата Authenticode, но, как только я начал учиться немного большеоб этом я подвергаю сомнению ценность как есть.
- Подписанный exe-файл имеет цифровой сертификат, который отображается как «действительный» сертификат.Когда вы загружаете такой файл из Интернета, в Windows отображается предупреждение о том, что вы собираетесь запустить программу из потенциально небезопасного места, опубликованного корпорацией Xyz.
- Без подписи загруженный файл выдаст совершенно другое окно с предупреждением о том, что файл не заслуживает доверия
Теперь, что касается меня, это:
Если подписанный exe-файл изменяется, когда вы заходите в Свойства> Цифровые подписи> Выберите подпись> Подробно ... отображается «Эта цифровая подпись недействительна».Это довольно непонятный способ увидеть, что, вероятно, является серьезной проблемой, и это огромный показатель, по которому вы не должны запускать файл.
- Если вы запустите этот файл из Windows (не загружен), он будет работать нормально.Нет предупреждений или указаний на то, что что-то не так
- Я не проверял, что произойдет, если вы загрузите файл, а затем попытаетесь запустить его.
Если вы удалите подпись из файла (используя delcert ), то нет никаких признаков того, что что-то не так.Опять же, вы можете запустить файл, и в диалоговом окне свойств не отображается сертификат.
Чтобы сделать это более полезным, я думаю, что подписанный файл долженпроверить себя.После запуска следует проверить наличие действительной подписи и, возможно, что отпечаток sha1 подписи соответствует ожидаемой подписи для сертификата Xyz Corporation.
(Конечно, это по-прежнему не обрабатывает ситуацию, когда кто-то извлекает сертификат, а затем редактирует файл, чтобы удалить проверку сертификата)
Я не могу найти никого, говорящегоо том, как это сделать (по крайней мере, не в .NET, и, конечно, не с простым вызовом API, как я ожидал) - так что это приводит к нескольким вопросам:
- Есть ли причинаподпись не проверена?Какие еще преимущества есть в подписании без этой проверки?
- Пытается ли проверить подпись как средство обнаружения взлома, настолько бесполезно, что пытаться бессмысленно?
- Как проверить сертификаттекущий исполняемый файл в .NET?