В настоящее время я управляю программным обеспечением, которое используется в моей компании уже более десяти лет, и перефакторинг. Одним из элементов этого приложения является своего рода режим администратора или опытного пользователя, который обеспечивает такие вещи, как некоторый дополнительный / внутренний ввод, а также возможность отключать ограничения ввода.
Исторически этот режим был включен путем помещения файла с определенным именем в определенное место в системном каталоге Windows (оба из которых были жестко запрограммированы в приложении), файл с именем'thing.DLL ', даже если он был пустым ASCII файл, а не DLL.
Поэтому недавно я добавил некоторый код и небольшую модальную форму, которая позволяет пользователю вводить пароль администратора, чтобы включить эту функцию. Это установленный пароль, а не пользовательский. Когда введен правильный пароль, он делает то же самое, создавая «ключевой файл» в корневом каталоге приложений, чтобы программа могла запускаться в режиме администратора, если этот файл присутствует.
Теперь руководителю отдела, для которого это программное обеспечение в основном, не очень нравится эта идея. Он думает, что если у нас будет простой, заранее заданный пароль, он легко «выйдет», и он не хочет, чтобы неопытные пользователи имели доступ к этим дополнительным функциям.
Итак, мой вопрос: какие существуют другие методы для предоставления такого доступа, который был бы несколько более безопасным? Когда дело доходит до обслуживания и управления этим программным обеспечением, это в значительной степени касается меня, поэтому ничего, что почти полностью не встроено или автоматизировано, не поможет (например, отправка запросов на «лицензионные ключи» или что-то подобное).
Примечания. Это приложение написано на VB.NET (.NET 4.0), и в настоящее время я планирую использовать развертывание одним щелчком мыши, когда новая версия будет готова.
Ответы:
Если у вас есть Active Directory, вы можете проверить членство в группе Active Directory:
источник
Менеджер прав насчет пароль вылезая . Это не вопрос, если, но когда.
Поскольку Active Directory не подходит для некоторых пользователей, вы можете создать подписанный текстовый файл со списком имен входа в Windows, которым разрешен доступ суперпользователя. Это предполагает, что люди не делят компьютеры или логины.
Имена пользователей будут просто помещаться в легко распространяемый текстовый файл, который будет помещен в папку приложения. Важной частью является подписание списка имен пользователей. Держите это очень просто. Одно имя пользователя на строку и поместите хеш в последнюю строку. Вставьте какой-нибудь секретный ключ в двоичный файл вашей программы и хэшируйте его с именами пользователей. Секретный ключ не позволит людям изменить файл, а затем самостоятельно вычислить хеш (который, вероятно, неправдоподобен для начала).
Это, конечно, требует, чтобы кто-то где-то действовал как администратор списка авторизованных пользователей. Администратор должен иметь программу (написанную вами!), Которая генерирует файл и хэш. Если ничего другого, он может просто взять текстовый файл с именами пользователей и добавить хеш.
В целях тщательности кто-то, кому был аннулирован доступ, может получить копию файла, в котором все еще есть логин. Когда бы они ни хотели получить доступ, они могли просто поставить свою копию на место. Вероятно, не о чем беспокоиться, хотя.
источник
Так как Active Directory не вариант, я бы хэшировал текущую дату. Сначала используйте элементы с наибольшей энтропией (день месяца) и элементы с наименьшей энтропией последний (год). При необходимости добавьте специфичную для домена соль (идентификатор клиента, название компании и т. Д., Поскольку она используется за пределами вашей компании). Это должно приводить к созданию совершенно нового пароля каждый день, который практически невозможно угадать конечным пользователям, и он может отличаться для разных компаний, использующих программное обеспечение.
По сути, это проблема курицы и яйца, поскольку программное обеспечение должно иметь возможность аутентифицировать пользователя, не звоня домой. Так что сделайте яйцо с действительно непонятным механизмом взлома: хотя безопасность через неизвестность не является реальной безопасностью, это лучшее, что вы дали параметрам вашей проблемы.
Это также лучше, чем помещать текстовый файл где-нибудь: это не лучше, чем статический пароль, потому что как только секрет раскрыт, игра окончена.
источник
Используйте списки контроля доступа .
Быстрый и грязный способ сделать это - удалить все разрешения из каталога приложения (включая разрешение на чтение), а затем добавить эти разрешения для всех пользователей, которым разрешено запускать приложение. Конечно, пользователь с разрешением может так же легко скопировать каталог приложения в общедоступное местоположение, но это вряд ли произойдет случайно, тогда как совместное использование пароля может легко произойти случайно.
Это предполагает, конечно, что соответствующие компьютеры защищены (возможно, с активным каталогом).
источник
Я предпочитаю, как @Dan предложил - использовать активный каталог. Если это невозможно, тогда может пригодиться генератор паролей, основанный на времени. В аналогичной ситуации (очень далекое прошлое) одна моя компания, в которой я работал, использовала 9999-MMDD. Это вышло через пару лет. Если вы добавите hhmm и немного перемешаете, вы можете получить год или два, прежде чем кто-то выпустит кошку из сумки.
Вы всегда можете написать программу, которая генерирует пароль, используя похожую, но более сложную стратегию. Добавьте также использованное имя и имя машины. Ваш менеджер может запустить эту программу, чтобы получить текущий пароль только для этой машины. Сохраните некоторую информацию в файле, чтобы она была недействительной, если она скопирована на другой компьютер или если вошел в систему другой пользователь. Затем ваш менеджер должен обеспечить безопасность программы, а если кошка выйдет, то это его вина.
Эта схема считается слабой и ненадежной с точки зрения кирпто, но она подходит для вашей проблемы.
источник