Проверка подлинности подписи при запуске приложения .NET - PullRequest
5 голосов
/ 14 июля 2010

Мне кажется, что я упускаю что-то очевидное здесь, но я не вижу, чтобы это было написано где-либо.

Я подписываю свои исполняемые файлы с использованием сертификата Authenticode, но, как только я начал учиться немного большеоб этом я подвергаю сомнению ценность как есть.

  • Подписанный exe-файл имеет цифровой сертификат, который отображается как «действительный» сертификат.Когда вы загружаете такой файл из Интернета, в Windows отображается предупреждение о том, что вы собираетесь запустить программу из потенциально небезопасного места, опубликованного корпорацией Xyz.
  • Без подписи загруженный файл выдаст совершенно другое окно с предупреждением о том, что файл не заслуживает доверия

Теперь, что касается меня, это:

  • Если подписанный exe-файл изменяется, когда вы заходите в Свойства> Цифровые подписи> Выберите подпись> Подробно ... отображается «Эта цифровая подпись недействительна».Это довольно непонятный способ увидеть, что, вероятно, является серьезной проблемой, и это огромный показатель, по которому вы не должны запускать файл.

    • Если вы запустите этот файл из Windows (не загружен), он будет работать нормально.Нет предупреждений или указаний на то, что что-то не так
    • Я не проверял, что произойдет, если вы загрузите файл, а затем попытаетесь запустить его.
  • Если вы удалите подпись из файла (используя delcert ), то нет никаких признаков того, что что-то не так.Опять же, вы можете запустить файл, и в диалоговом окне свойств не отображается сертификат.


Чтобы сделать это более полезным, я думаю, что подписанный файл долженпроверить себя.После запуска следует проверить наличие действительной подписи и, возможно, что отпечаток sha1 подписи соответствует ожидаемой подписи для сертификата Xyz Corporation.

(Конечно, это по-прежнему не обрабатывает ситуацию, когда кто-то извлекает сертификат, а затем редактирует файл, чтобы удалить проверку сертификата)


Я не могу найти никого, говорящегоо том, как это сделать (по крайней мере, не в .NET, и, конечно, не с простым вызовом API, как я ожидал) - так что это приводит к нескольким вопросам:

  1. Есть ли причинаподпись не проверена?Какие еще преимущества есть в подписании без этой проверки?
  2. Пытается ли проверить подпись как средство обнаружения взлома, настолько бесполезно, что пытаться бессмысленно?
  3. Как проверить сертификаттекущий исполняемый файл в .NET?

1 Ответ

0 голосов
/ 14 июля 2010

Посмотрите на этот вопрос.Один комментатор сказал, что есть параметр политики, позволяющий запускать только подписанные исполняемые файлы.

Являются ли приложения с кодовой подписью Windows менее уязвимыми для вирусных инфекций?

Кроме того, этоВопрос очень похож: Предотвращение запуска исполняемых файлов с недействительными сигнатурами Authenticode

...