Microsoft лажанулся?
От: o.kostya  
Дата: 04.10.13 22:48
Оценка:
Узнал давеча, что Microsoft разрешил править свои длл-ки. Эта возможность появилась начиная с 3.5 SP1.
Для примера написал такой код:

OracleConnectionStringBuilder b = new OracleConnectionStringBuilder();
b.Pooling = false;
b.DataSource = "go";
Console.WriteLine(b.ConnectionString);


Взял длл-ку System.Data.OracleClient.dll из GAC, открыл в hex редакторе и "Pooling" заменил на "Looling".
Возвратил ее на место, запускаю программу и вуаля — вместо ошибки

Data Source=go;Looling=False


А что можно мутить используя IL редакторы?
Re: Microsoft лажанулся?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 04.10.13 23:04
Оценка: 4 (2) +3 :))
Здравствуйте, o.kostya, Вы писали:

OK>Взял длл-ку System.Data.OracleClient.dll из GAC, открыл в hex редакторе и "Pooling" заменил на "Looling".


* А если попробовать зареференсить её из проекта со строгим именем?
* DLL в GAC ты патчил под административным аккаунтом? А знаешь, что администратор ещё может установить на машину свою реализацию CLR, которая вообще все строки меняет на "Looling"?
Re: Microsoft лажанулся?
От: eqw  
Дата: 04.10.13 23:54
Оценка: 1 (1) +1 :)))
Здравствуйте, o.kostya, Вы писали:

OK>А что можно мутить используя IL редакторы?

можно еще в бутсектор всякой фигни записать, ну или по пальцам себе молотком ударить
Re: Microsoft лажанулся?
От: TK Лес кывт.рф
Дата: 05.10.13 06:08
Оценка:
Здравствуйте, o.kostya, Вы писали:

OK>Узнал давеча, что Microsoft разрешил править свои длл-ки.

OK>Взял длл-ку System.Data.OracleClient.dll из GAC, открыл в hex редакторе и "Pooling" заменил на "Looling".
OK>Возвратил ее на место, запускаю программу и вуаля — вместо ошибки


Так всегда было — целостность сборки проверяется перед ее помещением в GAC.
Если у Вас нет паранойи, то это еще не значит, что они за Вами не следят.
Re[2]: Microsoft лажанулся?
От: o.kostya  
Дата: 05.10.13 06:31
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, o.kostya, Вы писали:


OK>>Взял длл-ку System.Data.OracleClient.dll из GAC, открыл в hex редакторе и "Pooling" заменил на "Looling".


N>* А если попробовать зареференсить её из проекта со строгим именем?


так и делал

N>* DLL в GAC ты патчил под административным аккаунтом? А знаешь, что администратор ещё может установить на машину свою реализацию CLR, которая вообще все строки меняет на "Looling"?


вирусня часто под админским и пролазит на комп.

если раньше чтобы подделать какую-то длл надо было всю цепочку перевыдавать, то сейчас в этом надобности уже нету.
Re[2]: Microsoft лажанулся?
От: o.kostya  
Дата: 05.10.13 06:41
Оценка:
Здравствуйте, TK, Вы писали:

TK>Так всегда было — целостность сборки проверяется перед ее помещением в GAC.


Если отключить Strong Name Bypass, то обычные длл-ки проверяются, а длл-ки из GAC не валидируются, а заменить длл в GAC можно обойдя проверку Strong Name.
Re[3]: Microsoft лажанулся?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 05.10.13 17:14
Оценка:
Здравствуйте, o.kostya, Вы писали:

N>>* DLL в GAC ты патчил под административным аккаунтом? А знаешь, что администратор ещё может установить на машину свою реализацию CLR, которая вообще все строки меняет на "Looling"?


OK>вирусня часто под админским и пролазит на комп.

OK>если раньше чтобы подделать какую-то длл надо было всю цепочку перевыдавать, то сейчас в этом надобности уже нету.

Не надо без необходимости работать под администратором, особенно с выключенным UAC. Full Control есть Full Control.
Проверку строгого имени сборки всегда можно было легко отключить, имея административные права. Я часто такое делаю на виртуальных машинах, для упрощения тестирования некоторых сценариев. Также, программа запущенная под администратором, может приаттачиться как дебаггер почти к любому процессу и наменять там чего угодно, включая code injection, независимо от строгости имён сборок.
Re[4]: Microsoft лажанулся?
От: Tom Россия http://www.RSDN.ru
Дата: 05.10.13 20:11
Оценка:
Здравствуйте, nikov, Вы писали:

N>Здравствуйте, o.kostya, Вы писали:


N>>>* DLL в GAC ты патчил под административным аккаунтом? А знаешь, что администратор ещё может установить на машину свою реализацию CLR, которая вообще все строки меняет на "Looling"?


OK>>вирусня часто под админским и пролазит на комп.

OK>>если раньше чтобы подделать какую-то длл надо было всю цепочку перевыдавать, то сейчас в этом надобности уже нету.

N>Не надо без необходимости работать под администратором, особенно с выключенным UAC. Full Control есть Full Control.

N>Проверку строгого имени сборки всегда можно было легко отключить, имея административные права. Я часто такое делаю на виртуальных машинах, для упрощения тестирования некоторых сценариев. Также, программа запущенная под администратором, может приаттачиться как дебаггер почти к любому процессу и наменять там чего угодно, включая code injection, независимо от строгости имён сборок.

Как я понимал топик стартер хотел сказать что он поменял подписанную сборку и при этом она без проблем загрузилась.
Как мне кажется это как то по крайней мере странно.
Народная мудрось
всем все никому ничего(с).
Re[5]: Microsoft лажанулся?
От: o.kostya  
Дата: 05.10.13 20:20
Оценка:
Здравствуйте, Tom, Вы писали:


Tom>Как я понимал топик стартер хотел сказать что он поменял подписанную сборку и при этом она без проблем загрузилась.

Tom>Как мне кажется это как то по крайней мере странно.

Так и есть, для примера была выбрана сборка выпущенная Microsoft. Причем такое дефолтное поведение появилось только с .Net 3.5 SP1
Re[5]: Microsoft лажанулся?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 05.10.13 20:48
Оценка: +6
Здравствуйте, Tom, Вы писали:

Tom>Как я понимал топик стартер хотел сказать что он поменял подписанную сборку и при этом она без проблем загрузилась.

Tom>Как мне кажется это как то по крайней мере странно.

В GAC без административных прав не залезешь. А с административными можно сделать что угодно. Ничего странного в этом нет.
Re[6]: Microsoft лажанулся?
От: koodeer  
Дата: 06.10.13 12:12
Оценка: -2
Здравствуйте, nikov, Вы писали:

N>В GAC без административных прав не залезешь. А с административными можно сделать что угодно. Ничего странного в этом нет.


Всё-таки strong name для того и предназначалось, чтобы гарантировать идентичность сборок в любом случае.
Ну то есть отныне можно считать, что затея с подпиской сборок строгими именами провалилась?
Или всё-таки есть надежда, что сотрудники MS починят баг, вместо того чтобы писать отписки?
Re[7]: Microsoft лажанулся?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 06.10.13 17:41
Оценка: 15 (1)
Здравствуйте, koodeer, Вы писали:

k> Или всё-таки есть надежда, что сотрудники MS починят баг, вместо того чтобы писать отписки?


В системах с дискреционным контролем доступа, да из-под привилегированных записей... и не такие чудеса возможны. Для полноты картины: http://www.codeproject.com/Articles/463508/NET-CLR-Injection-Modify-IL-Code-during-Run-time

Это не баг, а фича принятой в винде модели контроля доступа. Пофиксить ее, не меняя при этом модель — теоретически невозможно.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[7]: Microsoft лажанулся?
От: nikov США http://www.linkedin.com/in/nikov
Дата: 06.10.13 19:03
Оценка: 3 (1)
Здравствуйте, koodeer, Вы писали:

K>Всё-таки strong name для того и предназначалось, чтобы гарантировать идентичность сборок в любом случае.


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

Очевидно, что имея административные привилегии, можно подменить нативную DLL, в которой реализован алгоритм проверки строгих имён, или скомпрометировать его другими способами. Механизм строгих имён никогда не предназначался и не разрабатывался, чтобы быть устойчивым в таких сценариях.

K>Ну то есть отныне можно считать, что затея с подпиской сборок строгими именами провалилась?


Нет, затея была успешно реализована и прекрасно работает в тех сценариях, для которых она предназначалась.

K>Или всё-таки есть надежда, что сотрудники MS починят баг, вместо того чтобы писать отписки?


Как я объяснил выше, это не баг.
Re[8]: Microsoft лажанулся?
От: koodeer  
Дата: 06.10.13 20:41
Оценка:
Здравствуйте, nikov.

Всё-таки я не до конца понял. Почему же тогда до .Net 3.5 SP1 нельзя было такое сделать?
Re[9]: Microsoft лажанулся?
От: NetDeveloper  
Дата: 06.10.13 20:46
Оценка:
Здравствуйте, koodeer, Вы писали:

K>Здравствуйте, nikov.


K>Всё-таки я не до конца понял. Почему же тогда до .Net 3.5 SP1 нельзя было такое сделать?


А с чего вы решили, что нельзя?
Re[10]: Microsoft лажанулся?
От: o.kostya  
Дата: 07.10.13 05:52
Оценка: +1
Здравствуйте, NetDeveloper, Вы писали:

ND>А с чего вы решили, что нельзя?


http://msdn.microsoft.com/en-us/library/cc713694.aspx
Re[9]: Microsoft лажанулся?
От: hardcase Пират http://nemerle.org
Дата: 07.10.13 06:58
Оценка: 15 (1) +1
Здравствуйте, koodeer, Вы писали:

K>Всё-таки я не до конца понял. Почему же тогда до .Net 3.5 SP1 нельзя было такое сделать?


Оптимизация скорости запуска приложения.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[9]: Microsoft лажанулся?
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 07.10.13 08:27
Оценка: 15 (1)
Здравствуйте, koodeer, Вы писали:

k> Здравствуйте, nikov.

k> Всё-таки я не до конца понял. Почему же тогда до .Net 3.5 SP1 нельзя было такое сделать?

Starting with the .NET Framework version 3.5 Service Pack 1 (SP1), strong-name signatures are not validated when an assembly is loaded into a full-trust AppDomain object, such as the default AppDomain for the MyComputer zone.


Потому что с т.з. идеологии CAS, контроль целостности сборок в full-trust окружении — такой же оксюморон, как и с точки зрения идеологии DAC в привилегированном окружении системы.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.