Как защитить MSI от модификации

Я хотел бы защитить файл MSI от модификации. Это легко сделать с помощью ORCA или MSI API. Это печально, потому что любой может изменить/добавить/удалить пользовательские действия или свойства установщика Windows, у которых есть права администратора.

Есть ли способ установить файл MSI в какой-либо режим только для чтения или как-то защитить его содержимое?

Вот почему цифровые подписи существуют.

Michael Chourdakis 10.07.2019 13:40

Да, но он все еще исполняемый...

slayer69 10.07.2019 13:42

Так ? Вместо синего пользователь получит уродливое желтое предупреждение. Вы не можете запретить изменять и/или выполнять что-либо.

Michael Chourdakis 10.07.2019 13:42

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

slayer69 10.07.2019 14:10

Ты неправ. Если пользователь этого не заметит, он с радостью примет измененный (даже вирусом) элемент.

Michael Chourdakis 10.07.2019 15:12

Обновленный ответ с еще несколькими советами по сканированию вредоносных программ.

Stein Åsmul 10.07.2019 16:42

Наверное, я забыл спросить, в чем на самом деле проблема. Вы пытаетесь помешать людям изменить MSI, а затем запустить его с повышенными правами? В корпоративной обстановке?

Stein Åsmul 10.07.2019 21:46
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
7
728
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Short Answer: You can't really protect it, and you shouldn't either, and the below tries to explain why. You can, however, sign the MSI with a digital certificate in order to ensure the file is unchanged in transit to the customer, hence protecting file integrity and facilitating better security.


Прозрачность: файлы MSI прозрачны по той причине, что упаковщики корпоративных приложений хотят иметь возможность модифицировать пакет в соответствии с корпоративными стандартами. Эта прозрачность на самом деле является основным преимуществом MSI.. Таким образом, я бы не стал защищать MSI. Скомпилированные пользовательские действия по-прежнему являются «черным ящиком» (недоступным для проверки, но их можно отключить).

Документация и комментарии: Если в вашем MSI есть настраиваемые действия, которые являются критическими, вы можете указать это с помощью «встроенных» комментариев в MSI или, возможно, в имени, назначенном для настраиваемого действия. Вы также можете предоставить одностраничный PDF-файл (назовем его Large Scale Deployment Guide.pdf?) вместе со своей настройкой, в котором вы описываете, как лучше всего развернуть свое приложение, и, что особенно важно, чего не следует делать с MSI. Я предпочитаю встраивать этот документ в MSI, чтобы он получил административная установка — механизм извлечения файлов MSI — для просмотра упаковщиком. Первое, что обычно делает корпоративный упаковщик, — это извлекает файлы из MSI с помощью административной установки.

Цифровые подписи: как упоминалось другими, цифровой подписи (подробности из расширенного установщика, подробности из Installshield) помогает гарантировать неизменность MSI при доставке клиентам. Очевидно, что это имеет большое значение с точки зрения безопасности. Это еще большая проблема с новыми функциями, такими как SmartScreen (безопасность на основе репутации - Сертификат подписи кода EV"покупает доверие" - интересная концепция? Кто нюхает рэкет? :-) ). Убедитесь, что ваша установка не содержит вредоносного ПО или что цифровой сертификат является доказательством того, что вы доставили вредоносное ПО (пока его тоже нельзя взломать). И говорить о.... Хм.

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

Такой инструмент, как Обозреватель процессов из SysInternals, также позволяет сканировать вредоносные процессы, запустив приложение и выбрав Options=>VirusTotal.com=>Check VirusTotal.com. Видеоурок здесь (не особо присматривался, не знаком с другими обсуждаемыми продуктами). Use this method to save your application from false-positive nightmares (and also for real malware infections of course).

Application Launch: If you have something you need to run for sure, you could potentially add it to your application launch sequence instead of your setup. This definitely works if you don't need admin rights. If you need to write something to HKLM you can open ACL write access there for regular users - not ideal at all, but possible. Application launch code is just easier to deal with. Easier to debug and no impersonation, sequencing and conditioning concerns (when action runs) like you have in a setup.

Устаревший Setup.exe: Если вы настаиваете на выполнении «секретных вещей» в своей настройке, вы можете использовать устаревший инструмент для создания обычного файла setup.exe (не MSI). Имейте в виду, что с ужесточением сканирования безопасности и обнаружения вредоносных программ ваша установка может быть еще более подвержена проблеме ложные срабатывания для обнаружения вредоносных программ. Очень серьезное препятствие на пути к продаже программного обеспечения. С реальным вредоносным ПО вы говорите клиенту восстановить компьютер, с ложным срабатыванием ты нужно что-то сделать, чтобы решить проблему. Корпоративное принятие также может зависеть от формата MSI или других проверяемых форматов («это наш стандарт»). И вы должны знать, что инструменты захвата в корпоративных настройках подробно увидят, что сделала установка, когда они преобразуют ее в MSI (или другие форматы в наши дни, например AppV и MSIX).

И еще одна проблема: Кроссплатформенные установщики.

Ответ принят как подходящий

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

Чтобы лучше ответить на этот вопрос, нужно уточнить вопрос, который вы задаете. «Защитить» звучит как вопрос безопасности, поэтому он помогает установить хотя бы модель кабинетной угрозы. Например, вот три вещи, которые вы, возможно, пытаетесь предотвратить:

  1. заинтересованный пользователь, изменяющий биты, установленные в системе этого пользователя
  2. корпоративный пользователь, изменяющий то, что его системные администраторы устанавливают на компьютер пользователя
  3. злонамеренная сторона, изменяющая и предоставляющая биты, маскирующиеся под ваше приложение, которое кто-то по ошибке устанавливает

Из этих трех первый на самом деле не является границей безопасности, поэтому вы мало что можете сделать. Либо это установка, требующая прав администратора, и они есть у пользователя, либо установка для каждого пользователя, которая позволяет использовать ее пользователям без прав администратора. В любом случае у файла .msi не больше доступа к системе, чем у пользователя, который его изменил.

Второй пересекает границу, но включает в себя кого-то, кто должен тщательно проверять подписи, и, вероятно, может получить установку из источника, а не от пользователя. В-третьих, это явная проблема безопасности, и, к сожалению, в нее вовлечены люди, от которых нельзя ожидать надежной проверки подписи.

Так что ты можешь сделать?

  • Вы можете подписать файл .msi. Это оставляет признаки того, что файл был изменен, если это было так. Обратите внимание, что преобразовывает (файлы .mst) может изменить то, что делает .msi, не изменяя сам файл; однако это также влияет на представление подписанного статуса.
  • Вы можете попытаться рассказать своим потенциальным пользователям о важности проверки цифровой подписи, прежде чем принимать приглашение UAC. Это не остановит тех, кто пытается подорвать ваше лицензирование, но может помочь кому-то избежать установки вредоносных программ вместо вашей реальной программы.
  • Вы можете обернуть .msi в подписанный загрузчик .exe. Это затрудняет доступ к вещам; попытки использовать обычные инструменты не будут работать напрямую и вместо этого потребуют от изменяющей стороны выяснить, как извлечь файл .msi. Хотя обычно это не очень сложно, это, по крайней мере, еще одно препятствие.
  • Вы можете попробовать внедрить проверки подписи в файл .msi. Как вы говорите, их, вероятно, будет легко победить путем дальнейших изменений в файле .msi, если только вы не сможете соединить их с важным и трудно дублируемым другим кодом. Это, конечно, только затрудняет изменение; но не невозможно. Опять же, вам придется рассмотреть случай .mst и хотите ли вы поддерживать административные установки и установки из этих кешей.
  • Вы можете добавить соответствующую подпись или другие подтверждения в само приложение. Если файл .msi изменен, но это не меняет того, что установлено на машине, волнует ли это ваше приложение? Ответ зависит от того, от чего именно вы пытаетесь защититься; например, это не поможет предотвратить распространение вредоносного ПО.
  • Рассмотрите другие варианты упаковки или развертывания, будь то от Microsoft (например, .appx/.msix) или от третьих лиц. У каждого есть свой набор преимуществ и недостатков, а также свой уровень восприимчивости к каждой вещи, которую я здесь обсуждал.
  • Запустите ваше приложение в другом месте; например, перепишите свое приложение как веб-приложение, чтобы не было установки. Очевидно, что это может работать только для определенных типов приложений, но этот список продолжает расти.

Что ты не можешь сделать?

  • Заставьте всех пользователей уделять достаточно внимания
  • Предотвратите создание злоумышленником установщика, который выдает себя за ваше приложение, но содержит только вредоносную полезную нагрузку.
  • Запретить владельцу машины изменять машину до или после запуска .msi
  • Поддержка все того, как люди используют файлы .msi, не используя только файл .msi (административные установки, преобразования, «переупаковка», различные утилиты развертывания, специфичные для .msi, и т. д. — все это обычные шаблоны использования для определенных классов программного обеспечения).

В конце этого упражнения вам придется решить, является ли это нарушением условий сделки для вас или тем, что вы можете принять. Убедитесь, что вы понимаете, почему кто-то может захотеть изменить ваш файл .msi, и, прежде чем сосредоточиться на самом файле .msi, подумайте, могут ли они добиться того же эффекта с помощью средств, отличных от .msi. Если это специфично для .msi и является нарушителем условий сделки, рассмотрите другие технологии установки. Если ничто не может предотвратить сценарий, который вы пытаетесь предотвратить, возможно, вы сможете найти способы уменьшить стимулы для людей, пытающихся это сделать.

Другие вопросы по теме