Сейчас на форуме: Rio, tyns777, zombi-vadim (+7 невидимых)

 eXeL@B —› Программирование —› Возможна ли имперсонация ?
Посл.ответ Сообщение


Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 15:09 · Поправил: Rainbow
· Личное сообщение · #1

Дано:
1. Процесс от имени локального юзера, с определенными неявными привилегиями
2. Токен пользователя с большими привилегиями, чем в п.1
3. Диспетчер задач.

Необходимо:
Изменить отображаемую в диспетчере учетку (с установкой новых привилегий) "на лету", т.е не прибегая к встроенному в win наследованию прав родительского процесса , завершению исполняющегося процесса, и созданию еще одного процесса "AS USER". Может ли процесс сам себя имперсонировать таким образом со всеми вытекающими ?




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 17 февраля 2014 15:17
· Личное сообщение · #2

Rainbow
Чтобы имперсонировать надо логиниться LogonUser или надо знать пароль или надо чтобы в реестре в ветке (если пароль пустой) HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa в параметре LimitBlankPasswordUse должен быть 0

-----
aLL rIGHTS rEVERSED!





Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 15:20
· Личное сообщение · #3

OnLyOnE пишет:
Чтобы имперсонировать надо логиниться LogonUser или надо знать пароль или надо чтобы в реестре в ветке (если пароль пустой) HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa в параметре LimitBlankPasswordUse должен быть 0


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




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 17 февраля 2014 15:22
· Личное сообщение · #4

Rainbow пишет:
Ну насколько я понял, LogonUser служит для получения токена необходимого юзера. Однако этот токен имеется по условию задачи.


Ок. Значит вам ничего не помешает использовать ImpersonateLoggedOnUser ;)

-----
aLL rIGHTS rEVERSED!


| Сообщение посчитали полезным: Rainbow


Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 15:33
· Личное сообщение · #5

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 февраля 2014 15:38
· Личное сообщение · #6

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




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 15:41
· Личное сообщение · #7

Archer пишет:
Поток можно заимперсонировать на токене со всеми вытекающими, но в диспетчере вряд ли что изменится


Тогда теряется смысл этой функции, т.к. я так понимаю, в момент запуска он опрашивает систему и получает список, а значит система диктует правила игры, а не диспетчер.




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 февраля 2014 15:47
· Личное сообщение · #8

Ты отличай поток и процесс. Поток имперсонировать можно. Но диспетчер показывает процессы.
И определись, что нужно. Просто имперсонироваться-не вопрос, имперсонируй поток. Изменить показания диспетчера-я думаю, не выйдет.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 15:52
· Личное сообщение · #9

Archer пишет:
Ты отличай поток и процесс


То есть ты хочешь сказать, что все имперсонирующие функции предназначаются для потоков ? Че-то с трудом верится.

Кстати да, цитата из MSDN:

The ImpersonateLoggedOnUser function lets the calling thread impersonate the security context of a logged-on user. The user is represented by a token handle.

Похоже эта функа реально к потокам относится.




Ранг: 462.8 (мудрец), 468thx
Активность: 0.280
Статус: Участник
Only One!

Создано: 17 февраля 2014 16:03
· Личное сообщение · #10

Rainbow пишет:
Похоже эта функа реально к потокам относится.


Все верно к потокам. думаю тебя одного потока хватить?)
Ты можешь имперсонировать и текущий поток, в приципе..

-----
aLL rIGHTS rEVERSED!





Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 февраля 2014 16:07
· Личное сообщение · #11

Если есть сомнения, что для потоков, можно глянуть в мсдн http://msdn.microsoft.com/en-us/library/windows/desktop/aa376391(v=vs.85).aspx
Impersonation is the ability of a thread to execute using different security information than the process that owns the thread.
Вообще говоря, этого вполне достаточно. В конце концов процесс код не выполняет, это делают потоки.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 16:09
· Личное сообщение · #12

Ну так-то, конечно сделать темное дело хватить .

Хм. То есть право устанавливать UserName процесса, как я понял монопольно, и принадлежит системному загрузчику ? Но он же КАК-ТО это делает один хрен?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 февраля 2014 16:28
· Личное сообщение · #13

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




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 16:34
· Личное сообщение · #14

Archer пишет:
Ты определись, чего хочешь для начала. А потом, что для этого есть.


1. Ну давайте не будем хамить. Это мы все умеем
2. Задача по-моему поставлена предельно корректно.

Archer пишет:
Ну можно сделать махровый андок и лезть в ядерные структуры, но прав не хватит, видимо, исходя из задачи.


Будем считать что хватит.

Archer пишет:
А загрузчик ставит банально при создании процесса, там либо наследование токена, либо создание процесса с токеном/от другого юзера.


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




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 17 февраля 2014 16:49
· Личное сообщение · #15

SetNamedSecurityInfo видимо мой случай...

Похоже, что флаг OWNER_SECURITY_INFORMATION, и задает именованную правовую информацию. Кто-нибудь сталкивался ?




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 17 февраля 2014 16:50
· Личное сообщение · #16

Хамства тут и не было. По крайней мере не имелось в виду.
Если считается, что прав хватит, ну тогда проще всего отдизасмить, откуда диспетчер берёт инфу, и подменять её там. Полагаю, что будет в итоге нативная апи, которая уходит в ядро и берёт инфу откуда-нить из EPROCESS.
SetNamedSecurityInfo связана с DACL/SACL и к текущему вопросу отношения вообще не имеет.



Ранг: 419.0 (мудрец), 647thx
Активность: 0.460.51
Статус: Участник
"Тибериумный реверсинг"

Создано: 17 февраля 2014 17:41
· Личное сообщение · #17

Archer пишет:
откуда диспетчер берёт инфу

если имена юзеров под процессами: помнится эта фитча не работает, если остановлена служба терминалов.
Archer пишет:
нативная апи

NtQuerySystemInfromation?



Ранг: 5.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 01 декабря 2014 15:29
· Личное сообщение · #18

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

| Сообщение посчитали полезным: Rainbow

Ранг: 262.5 (наставник), 337thx
Активность: 0.340.25
Статус: Участник

Создано: 01 декабря 2014 15:42
· Личное сообщение · #19

17 февраля 2014
1 декабря 2014




Ранг: 5.0 (гость), 1thx
Активность: 0=0
Статус: Участник

Создано: 01 декабря 2014 17:57
· Личное сообщение · #20

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




Ранг: 2014.5 (!!!!), 1278thx
Активность: 1.340.25
Статус: Модератор
retired

Создано: 01 декабря 2014 18:11
· Личное сообщение · #21

Тут 80% тем незакрытых. Не надо только во все добавлять. Особенно ту информацию, что уже и так в топике была.




Ранг: 110.8 (ветеран), 104thx
Активность: 0.090.01
Статус: Участник

Создано: 01 декабря 2014 19:25 · Поправил: Rainbow
· Личное сообщение · #22

TryAga1n пишет:
17 февраля 2014
1 декабря 2014


Проблема может оставаться актуальной и спустя 2 года. В данном случае все именно так.

P.S. Спасибо всем, кто откликнулся здесь и в ПМ. Т.к. возникали небольшие непонятки, уточню: речь идет об XP, юзер - юзер/гость, токен - система.


 eXeL@B —› Программирование —› Возможна ли имперсонация ?
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати