DALC и процесс

Тема в разделе "WASM.WIN32", создана пользователем stoneman, 27 окт 2010.

  1. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    Может тогда как вариант хучить NtTerminateProcess и выключать принудительно перед этим SeDebugPrivilege и затем возвращать обратно какая была? потому что в local group policy по умолчанию группе администраторов разрешено запрашивать эту привилегию. правда весь смысл теряется в таком случае с правами раз хук ставим.
     
  2. stoneman

    stoneman New Member

    Публикаций:
    0
    Регистрация:
    27 окт 2010
    Сообщения:
    10
    Я думаю буду копать в сторону хуков.
    Есть еще один вопрос по схожей теме. Нужно поменять права для сервиса, т.е чтобы отключить возможность останавливать\перезапускать и менять режим запуска. Как я понял подход тот же: создаем DALC, добавляем в него правила и добавлем новые DALC в сервис. Для обновления DALC я использую SetSecurityInfo(), но после этого с сервисом вообще ничего нельзя сделать, при любых действиях возвращает "Отказоно в доступе". Приходится руками лезть в реестр, искать сервис и грохать ключ security.
    Вот код заполнения ACE
    Код (Text):
    1. if (!AddAccessDeniedAce(
    2.     lpDacl,          // адрес DACL
    3.     ACL_REVISION,    // версия DACL
    4.     SERVICE_STOP|SERVICE_CHANGE_CONFIG,    
    5.     lpSd))          // адрес SID
    6.   {
    7.     dwRetCode = GetLastError();
    8.     perror("Add access denied ace failed.\n");
    9.     printf("The last error code: %u\n", dwRetCode);
    10. getchar();
    11.     return dwRetCode;
    12.   }
    13.  
    14.  
    15.   if (!AddAccessAllowedAce(
    16.     lpDacl,        // адрес DACL
    17.     ACL_REVISION,  // версия DACL
    18.     SERVICE_ALL_ACCESS,  
    19.     lpSd))        // адрес SID
    20.   {
    21.     dwRetCode = GetLastError();
    22.     perror("Add access allowed ace failed.\n");
    23.     printf("The last error code: %u\n", dwRetCode);
    24. getchar();
    25.     return dwRetCode;
    26.   }
    Вызов SetSecurityInfo
    Код (Text):
    1. SetSecurityInfo(hService,SE_SERVICE,DACL_SECURITY_INFORMATION,NULL,NULL,lpDacl,NULL)
     
  3. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    я думаю всё просто. дело в том, что мы создаем новый список доступа для определенного SID. а ведь мы должны расширить старый список (скопировать разрешения и для других SID которые были) и добавить в него элемент запрета вот и весь сказ.

    либо самое простое решение - берем Well-known SID World S-1-1-0 (Everyone) в качестве параметра к lpSid и его проще всего сконвертить из строки через ConvertStringSidToSid
    и получаем Allow to Everyone SERVICE_ALL_ACCESS + Deny to Everyone SERVICE_STOP|SERVICE_CHANGE_CONFIG
    хотя тут все же надо похимичить чтобы не давать лишних разрешений всем пользователям
     
  4. Deyton

    Deyton Member

    Публикаций:
    0
    Регистрация:
    7 мар 2007
    Сообщения:
    94
    Защититься от администратора в общем случае невозможно. Только крутые программисты думают, что можно защитить администратора от администратора с помощью хуков. В остальных случаях почти всегда можно обойтись без хуков, правильно разработав модель.
    Насчет сервиса, в структуре SERVICE_STATUS.dwControlsAccepted можно манипулировать флажками SERVICE_ACCEPT_PAUSE_CONTINUE, SERVICE_ACCEPT_STOP. RTFM, в общем.
     
  5. BaGiE

    BaGiE New Member

    Публикаций:
    0
    Регистрация:
    27 мар 2005
    Сообщения:
    84
    Адрес:
    Mordor
    ну да, кстати. тоже решение и наверное самое верное. и по поводу хуков согласен и по поводу защититься в юзермоде от админа вообще.
     
  6. z0mailbox

    z0mailbox z0

    Публикаций:
    0
    Регистрация:
    3 фев 2005
    Сообщения:
    635
    Адрес:
    Russia СПБ
    хехе ... лично видел где-то в кишках толи lsasrv.dll толи samsrv.dll - if(!strncmpi(username, "Administrator")) ... ;')
     
  7. RET

    RET Well-Known Member

    Публикаций:
    17
    Регистрация:
    5 янв 2008
    Сообщения:
    789
    Адрес:
    Jabber: darksys@sj.ms
    Для юзермода можно покопать в сторону заданий (JobObject/JobObjectSecurityLimitInformation/JOB_OBJECT_SECURITY_NO_ADMIN)