Самый простой способ предотвратить загрузку моей управляемой сборки?

Нуб безопасности.Net здесь... Какой самый простой способ предотвратить загрузку моей сборки кем-то другим?

Предыстория: хотя я действительно ищу просто "достаточно хорошую" защиту (с достаточным количеством времени / денег / умов, которые кто-то может успешно взломать, взломать и атаковать), похоже, что это уже должна быть решенная проблема, и я просто упускаю ее.

Вот что я (думаю) знаю:

  1. Несмотря на то, что строгое именование может использоваться как уровень безопасности, оно не обязательно должно быть таковым, согласно этой документации Microsoft (см. Предупреждение: не полагайтесь на строгие имена для обеспечения безопасности. Они предоставляют только уникальную идентификацию).

    На этом примечании я столкнулся с ситуациями, когда я не мог загрузить стороннюю сборку (Aspose, я думаю, что это было), потому что они не подписывали свои сборки, какими бы ни были мои. Поэтому я должен был ildasm их сборки, подписать его с нашим собственным snk, а затем ilasm обратно), чтобы использовать их библиотеку. Таким образом, сильные имена не кажутся мне хорошим механизмом безопасности. ОДНАКО... как насчет простой проверки в коде, чтобы убедиться, что вызывающая сборка подписана токеном моего открытого ключа? Это достаточно эффективно?

  2. Если строгие имена не должны использоваться для того, что я пытаюсь выполнить, реализует ли проверка цифровой подписи Authenticode на dll лучший маршрут (кажется, wintrust.dll может помочь в этом)?

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

Итак, вернемся к вопросу: как проще всего запретить загрузку моей сборки?

4 ответа

Фактически, вы не можете предоставить 100% гарантию того, что ваша сборка не будет загружена и использована не по назначению. Но некоторые меры могут помочь вам:

  1. Подписание вашего установочного пакета (msi). Вам нужен для этого сертификат SSL. Пользователи увидят издателя загруженных файлов в процессе установки. Если ваш установочный пакет изменен - ​​подпись будет нарушена, и пользователь во время установки увидит, что это приложение от Неизвестного издателя или другого издателя, кроме вас.
  2. Сильное именование сборок позволяет предотвратить подстановку библиотеки на другую "плохую" библиотеку. Давайте рассмотрим следующий сценарий: вы развернули свое приложение с библиотекой A на каком-либо сервере, или пользователь установил ваше приложение на своем компьютере. Без строгого имени библиотека A или любые другие могут быть заменены или изменены каким-либо кодом на другую версию. Эта новая версия, например, может отправлять все пароли пользователей куда-либо или выполнять другие вредоносные действия. Если одна библиотека была изменена.Net во время загрузки, она выдаст исключение проверки строгого имени. Итак, ваше приложение будет сломано. Вредоносный код должен перекомпилировать все библиотеки приложений, чтобы приложение работало. Это сложнее.
  3. Запутывание также очень важная вещь, которая позволяет очень трудно или даже невозможно понять, что происходит внутри сборки (переименование кода, шифрование строк и т. Д.).
  4. Если у вас есть очень критический интеллектуальный код, лучше переписать его в нативный (C/C++) код.
  5. Если ваше приложение является мобильным или настольным приложением и выполняет внутренний запрос, вы можете переместить важный код на серверную часть.

Очевидно, но, возможно, не очень полезно: самый простой способ - удалить сборку.

Я думаю, что вы хотите, чтобы люди не перепроектировали вашу сборку, верно? Такие инструменты, как JustDecompiler, могут легко получить ваш код сборки. Чтобы запутать ваш код, вы всегда можете прибегнуть к какому-либо платному продукту ( Eazfuscator) или к другому с открытым исходным кодом ( Obfuscar или ConfuserEx).

Один вариант (который может или не может быть осуществимым) состоит в том, чтобы не давать им сборку. Если вы можете сделать свое приложение веб-ориентированным (например, " Программное обеспечение как услуга"), то (с правильно защищенными серверами) ваши клиенты не будут иметь доступа к сборкам.

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