powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как защитить зашифрованную в config-файле информацию от расшифровки извне?
25 сообщений из 71, страница 1 из 3
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818888
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Доброго времени суток.

Имеется некоторое приложение TargetApp , в конфигурационных настройках которого хранится строка подключения к БД. Физически, настройки подключений к БД вынесены в отдельный файл connections.config . Т.о. общая картина следующая:

TargetApp.exe.config:
Код: xml
1.
2.
3.
4.
5.
6.
7.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1" />
    </startup>
  <connectionStrings configSource="connections.config"/>
</configuration>



connections.config:
Код: xml
1.
2.
3.
4.
5.
6.
<?xml version="1.0" encoding="utf-8" ?>
<connectionStrings>
  <clear/>
  <add name="crmdev" providerName="System.Data.SqlClient"
       connectionString="тут_некоторая_строка_подключения"/>
</connectionStrings>



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

Написал консольное приложение ConfigTools.exe , задача которого - шифровать/дешифровывать config-файлы того exe, имя которого было передано ему через параметры с одним из ключей: --encrypt, --decrypt.

При помощи ConfigTools.exe выполняю шифрование строк подключения в конфиг-файлах, используемых приложением TargetApp.exe .

Код шифровки/дешифровки достаточно простой:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
static void EncryptConfig(string exeConfigName, bool encrypt)
{
	var resMng = new ResourceManager(typeof(Program));
	// Takes the executable file name without the
	// .config extension.

	// Open the configuration file and retrieve 
	// the connectionStrings section.
	var config = ConfigurationManager.
		OpenExeConfiguration(exeConfigName);

	var section = config.GetSection("connectionStrings")
		as ConnectionStringsSection;

	if (section == null)
	{
		Console.WriteLine(
			resMng.GetString("connectionStringsNotFound"));
		resMng.ReleaseAllResources();
		return;
	}

	if (encrypt && !section.SectionInformation.IsProtected)
	{
		// Encrypt the section.
		section.SectionInformation.ProtectSection(
			"DataProtectionConfigurationProvider");
		Console.WriteLine(resMng.GetString("connectionStringsEncrypted"));
		config.Save();
	}
	else if (!encrypt && section.SectionInformation.IsProtected)
	{
		// Remove encryption.
		section.SectionInformation.UnprotectSection();
		Console.WriteLine(resMng.GetString("connectionStringsDecrypted"));
		config.Save();
	}
	else
	{
		Console.WriteLine(resMng.GetString("connectionStringsDoNothing"));
	}
	resMng.ReleaseAllResources();
}



TargetApp.exe успешно извлекает из настроек строки подключения, не зависимо от того зашифрованы они или нет. Т.е. одно приложение шифрует/расшифровывает config-файл, но при этом оба приложения успешно считывают строки подключения (платформа .net framework сама автоматом всё расшифровывает при обращении к соответствующей записи, хранящей строку подключения).

Т.е. с одной стороны вроде всё нормально - открыв в Notepad мой config-фай, юзер увидит зашифрованную строку подключения... Но вот с другой стороны всё же возникает большой вопрос о надёжности такой защиты... Ведь получается, что любой желающий может написать подобный код, запустить его на целевой машине и с лёгкостью расшифровать строки подключения... Может я чего-то упускаю из вида?

Как защитить шифруемую информацию от подобных случаев?

С уважением, Андрей
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818898
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,

если так рассуждать, то защиты вообще не существует и в целом, так и есть. Можно запустить отладчик на целевой машине и перехватить пароли в незашифрованном виде, рано или поздно они всё равно расшифруются.
данная операция (шифрование\дешифрование) секции конфигурационного файла требует права администратора с повышением, то есть, если пользователь захочет зашифровать или расшифровать файл на компьютере у него не получится.
если злоумышленник скопирует файл, то расшифровать он его уже не сможет.
Ну, а если злоумышленник обладает правами администратора на целевом компьютере, то его уже ничего не остановит, это картблашн на любые действия.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818914
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositum,
Если ты админ то никак или слишком дорого.
Защита не дороже стоимости защищаемых данных (с)
Сколько твои стоят?
Или теория?
Ну и защита это комплексные мероприятия. А не строка Пароль.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818929
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще пароли можно хранить в Credential Manager'е ОС Windows, довольно удобно
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818938
BlackEric
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для работы с кредами есть такая штука:
https://www.vaultproject.io/

Шарповая либа к ней: https://github.com/rajanadar/VaultSharp
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818951
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlackEricДля работы с кредами есть такая штука:
https://www.vaultproject.io/

Шарповая либа к ней: https://github.com/rajanadar/VaultSharp
очередной велосипед?
Код: c#
1.
2.
3.
4.
5.
            [DllImport("Advapi32.dll", EntryPoint = "CredReadW", CharSet = CharSet.Unicode, SetLastError = true)]
            internal static extern bool CredRead(string target, CredentialType type, int reservedFlag, out IntPtr CredentialPtr);

            [DllImport("Advapi32.dll", EntryPoint = "CredWriteW", CharSet = CharSet.Unicode, SetLastError = true)]
            internal static extern bool CredWrite([In] ref CREDENTIAL userCredential, [In] uint flags);
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818973
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesданная операция (шифрование\дешифрование) секции конфигурационного файла требует права администратора с повышением, то есть, если пользователь захочет зашифровать или расшифровать файл на компьютере у него не получится.
Увы... Проверил с правами рядового пользователя - всё успешно расшифровалось, к сожалению безо всяких админских прав.
Roman MejtesСколько твои стоят?
Или теория?
Не теория. Стоят прилично. Данные не мои, а компании. Предлагаю флуд не разводить.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818981
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumПредлагаю флуд не разводить.это не флуд. Это в ВУЗЕ преподают.

CompositumПроверил с правами рядового пользователяпользователь Иванов расшифровал свой пароль или чужой?
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818982
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На тот случай, если будет интересно проверить - во вложении архив, в котором инструкция и два подопытных кролика: консолька шифровки\расшифровки строки подключения в конфиг-файле, и другая консолька, над конфиг-файлом которой выполняются опыты (согласно инструкции, обозначенной в readme.txt).

К сожалению, шифровка\расшифровка без проблем выполняется из под обычного юзера. ☹
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818983
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Compositumесли будет интересноникому не интересно. В конфиге юзаеря не хранятсе все пароли.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818986
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123пользователь Иванов расшифровал свой пароль или чужой?
Оба варианта успешно отработали.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818987
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumPetro123пользователь Иванов расшифровал свой пароль или чужой?
Оба варианта успешно отработали.откуда в конфиге чужие пароли?
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818990
Фотография Compositum
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123откуда в конфиге чужие пароли?
Не "чужие", а специальные учётные записи, от имени которых должны выполняться определённые операции на различных серверах.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39818993
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumPetro123откуда в конфиге чужие пароли?
Не "чужие", а специальные учётные записи, от имени которых должны выполняться определённые операции на различных серверах.тебе решать.
Нужна безопасность? Раздели конфиги. Не нужна? Не дели.
Ваш КЭП.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819017
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я что-то не пойму цель - спрятать пароль пользователя от самого этого пользователя? :))
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819020
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Roman Mejtes, сегодня, 16:55 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312991&msg=21895038][21895038]
>...Ну, а если злоумышленник обладает правами администратора на целевом компьютере…
< Поместил файл в шифроконтейнер WinRAR и записал на целевой компьютер, злоумышленник обладает правами администратора на нем и ...
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819022
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fkthat, сегодня, 23:50 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312991&msg=21895267][21895267]
>Я что-то не пойму цель - спрятать пароль пользователя от самого этого пользователя? :))
<Можно попытаться спрятать строку соединения и от самого пользователя
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819024
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеев>fkthat, сегодня, 23:50 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312991&msg=21895267][21895267]
>Я что-то не пойму цель - спрятать пароль пользователя от самого этого пользователя? :))
<Можно попытаться спрятать строку соединения и от самого пользователя

Зачем? Пользователь либо может коннектиться к БД со своего хоста, либо не может. И, если может, то никакими ухищрениями ты на 100% ему не запретишь делать это как угодно.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819029
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
User расшифровывает LocalMachine секции конфигов? что то не верится
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819039
ВМоисеев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>fkthat, сегодня, 00:15 https://www.sql.ru/forum/actualutils.aspx?action=gotomsg&tid=1312991&msg=21895274][21895274]
>Зачем? Пользователь либо может коннектиться к БД со своего хоста, либо не может…
<Вообще говоря, коннектится приложение, пользователю строка соединения по барабану
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819040
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ВМоисеевВообще говоря, коннектится приложение, пользователю строка соединения по барабану
Да, но оно коннектится с логином и паролем того пользователя, который его использует (потому что иначе это вообще какой-то треш), поэтому какой смысл там прятать что-то - прятать от пользователя его же собственные логин и пароль?
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819041
stenford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
для начала пароли в строке подключения вообще нельзя держать (к тому-же там скорее всего у тебя пароль админа лежит), должна использоваться виндовая аутентификация. Во-вторых, велосипеды по шифрованию конфигов писать не надо, они уже есть, например aspnet_regiis, все что нужно сделать - скопировать на пользовательские машины ключ, пользователький конкекст конечно-же должен иметь доступ к нему иначе как он его расшифрует
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819042
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
CompositumНе "чужие", а специальные учётные записи, от имени которых должны выполняться определённые операции на различных серверах.
Треш угар и содомия. Выходит, что к бесценным данным компании куча пользователей имеет доступ с использованием одного и того же логина и пароля. У тебя в консерватории защиты данных изначально не так, а твои ухишрения с шифрованием это как в том самом борделе кровати переставлять.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819043
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
stenford,

В двузвенке (а речь, как я понял, идет именно о двузвенке), ни логин ни пароль не следует держать нигде, в принципе. У каждого пользователя должен быть свой персональный логин и пароль, который он должен помнить и вводить для коннекта к БД. Ну, или, как правильно сказали, и вообще следовало было бы сделать - виндовая аутентификация.
...
Рейтинг: 0 / 0
Как защитить зашифрованную в config-файле информацию от расшифровки извне?
    #39819059
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Roman Mejtesданная операция (шифрование\дешифрование) секции конфигурационного файла требует права администратора с повышением, то есть, если пользователь захочет зашифровать или расшифровать файл на компьютере у него не получится
С чего бы это? DataProtectionConfigurationProvider - это DpapiProtectedConfigurationProvider, т.е. используется DPAPI, причем уровня хоста, а не приложения. Им может пользоваться кто угодно.

Compositum,
При использовании DataProtectionConfigurationProvider шифрование можно перенести с уровня хоста на уровень приложения - см. здесь: https://stackoverflow.com/questions/21336455/protect-config-file-with-user-level-dpapi-winforms
Но я всё же присоединяюсь к предыдущим ораторам. Неправильно это. Раз используется MSSQL, то вин-аутентификация, и права на сервере строго в рамках выполняемой задачи (а то некоторые админы как писать grant-скрипты не знают, тыкать галки на объектах в SSMS им долго, поэтому сделают на сервере логин, дадут ему sa - и можно пить чай, такого супергероя даже на соответствующих пользователей в базе мапить не нужно).
...
Рейтинг: 0 / 0
25 сообщений из 71, страница 1 из 3
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как защитить зашифрованную в config-файле информацию от расшифровки извне?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]