Защищенные процессы в vista

Тема в разделе "WASM.WIN32", создана пользователем Rel, 21 сен 2009.

  1. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    доброго времени суток! у меня такая проблема... я реализовывал алгоритм получения хендла процесса через дублирование одного их хендлов, хранящихся в csrss.exe... сделал, оттестировал на xp - все работает, как часы... стал тестировать на vista и бац)) "эксесденайд"... подумал, что можно что-нить с привилегиями покрутить, но ничего не вышло... стал копать по поводу доступа к процессам в vista, узнал, что "даже администраторы не имеют доступа к защищенным процессам"... фактически защищенные процессы не возможно открывать со следующими правами:

    PROCESS_ALL_ACCESS
    PROCESS_CREATE_PROCESS
    PROCESS_CREATE_THREAD
    PROCESS_DUP_HANDLE
    PROCESS_QUERY_INFORMATION
    PROCESS_SET_INFORMATION
    PROCESS_SET_QUOTA
    PROCESS_VM_OPERATION
    PROCESS_VM_READ
    PROCESS_VM_WRITE

    а мне то всего надо было открыть процесс на дублирование хендлов(((

    может кто-нить знает, как это обойти? а то я за вчера и за сегодняшнее утро уже "обгуглился"...



    ЗЫ на паре форумов наткнулся на темы о том, что в vista очень легко снимать и устанавливать флаг "защищенности" процесса, но кроме фраз "ах, какие же в майкрософт тупые кодеры" ничего интересного там не нашел((((
     
  2. Sol_Ksacap

    Sol_Ksacap Миша

    Публикаций:
    0
    Регистрация:
    6 мар 2008
    Сообщения:
    623
    PROCESS_DUP_HANDLE – это далеко не "всего-то", ибо можно сдублировать псевдоописатель целевого процесса [HANDLE(-1)], указав в качестве целевых прав PROCESS_ALL_ACCESS, например.

    Мы полагаем, что один напоролся не на "защищённость" процесса, а всего лишь на Integrity Level. Integrity Level для csrss – "System", тогда как пользовательские процессы обыкновенно имеют уровни Low, Medium, High.

    Код (Text):
    1. cmd> windbg -kl
    2.  
    3. lkd> !process 0 0 csrss.exe
    4. PROCESS fffffa80020e8c10                                       ; <------- (1)
    5.     SessionId: 0  Cid: 0244    Peb: 7fffffdd000  ParentCid: 0238
    6.     DirBase: 69f26000  ObjectTable: fffff8800bb65800  HandleCount: 519.
    7.     Image: csrss.exe
    8.  
    9. PROCESS fffffa8002e65ae0                                       ; <------- (2)
    10.     SessionId: 1  Cid: 0274    Peb: 7fffffd5000  ParentCid: 026c
    11.     DirBase: 68c21000  ObjectTable: fffff8800bca2a80  HandleCount: 651.
    12.     Image: csrss.exe
    13.  
    14. lkd> !process 0 0 audiodg.exe
    15. PROCESS fffffa80033f7c10                                       ; <------- (3)
    16.     SessionId: 0  Cid: 0524    Peb: 7fffffd5000  ParentCid: 00dc
    17.     DirBase: 5bf28000  ObjectTable: fffff8800c034790  HandleCount: 131.
    18.     Image: audiodg.exe
    19.  
    20. lkd> dt _EPROCESS Prote*
    21. nt!_EPROCESS
    22.    +0x36c ProtectedProcess : Pos 11, 1 Bit
    23.  
    24. lkd> ?? ((_EPROCESS*)0xfffffa80020e8c10)->ProtectedProcess     ; <– (1) csrss не протектед
    25. unsigned long 0
    26. lkd> ?? ((_EPROCESS*)0xfffffa8002e65ae0)->ProtectedProcess     ; <- (2) csrss не протектед
    27. unsigned long 0
    28. lkd> ?? ((_EPROCESS*)0xfffffa80033f7c10)->ProtectedProcess     ; <- (3) audiodg протектед
    29. unsigned long 1
    30. lkd> ?? ((_EPROCESS*)0xfffffa80033f7c10)->ProtectedProcess = 0 ; <- (3) audiodg становится анпротектед
    31. unsigned long 0
    Можно овладевать System Integrity Level, если сделать службу. Для эксперимента же может быть достаточно "psexec.exe -s -i your_application.exe" (psexec от Sysinternals).
     
  3. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    да, ты прав... причем если мою программу запускать под админом (хай интегрити левел), то открыть хендл csrss.exe получается без проблем... спасибо, теперь хотя бы точно знаю проблему)) весь косяк в том, что надо все из под юзера делать... вчера гуглил на тему обхода Integrity Level и UAC, так ничего толком и не нашел(((
     
  4. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    все! тема закрыта... нашел обходные пути... Sol_Ksacap, большой спасибо за указание на реальную проблему! а то, я думаю, я бы еще долго мучался))
     
  5. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    скажи, хоть, что нашёл.
     
  6. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    ну смысл в том, что Виста ругается на OpenProcess с правами PROCESS_ALL_ACCESS, хоть процесс находится на одном Integrity Level с моей прогой... однако можно открыть сам целевой процесс (не csrss.exe, а именно целевой процесс) на PROCESS_DUP_HANDLE и скопировать хендл целевого процесса себе с теме же правами на него, что и в целевом процессе... таким образом мы получаем хендл процесса с полными правами на него, минуя Виставский контроль... это может быть просто, но работает без проблем (тестировалось на лицензионных Ultimate серии x32 и x64)... антивирь вроде тож молчит...
     
  7. maksim_

    maksim_ New Member

    Публикаций:
    0
    Регистрация:
    15 июл 2009
    Сообщения:
    263
    пасиб.
     
  8. Partner

    Partner Павел

    Публикаций:
    0
    Регистрация:
    28 фев 2008
    Сообщения:
    917
    Адрес:
    Los Angeles
    Rel
    А ну-ка попробуй сдублировать хендл процесса audiodg.exe
     
  9. Rel

    Rel Well-Known Member

    Публикаций:
    2
    Регистрация:
    11 дек 2008
    Сообщения:
    5.323
    зачем он мне нужен по твоему? у меня все нужные мне процессы на одном Integrity Level с моим приложением, зачем мне в защищенные процессы лезть?