Зачем нужна защита для сервиса?

Тема в разделе "LANGS.C", создана пользователем k3rnl, 19 фев 2021.

  1. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    53
    Приветствую уважаемые!
    Все мы знаем про защищенные процессы (Protected и ProtectedLite). Чтобы создать защищенный процесс нужны подпись и сертификат. Прочитать DACL (и частично SACL) таких процессов без драйвера нельзя.
    Но зачем нужны защищенные сервисы\службы?
    Впервые они появились в Windows 8.1 в виде структуры SERVICE_LAUNCH_PROTECTED_INFO https://docs.microsoft.com/en-us/windows/win32/api/winsvc/ns-winsvc-service_launch_protected_info
    которая применяется через ChangeServiceConfig2.
    На сайте MS есть небольшое пояснение
    чтобы применить тип защиты к сервису, сервис должен быть подписан соответствующим сертификатом.
    И ещё такое
    Из этого я сделал вывод, что сервисы под защитой точно такие же "неубиваемые" как и процессы.
    Дальше решил немного поэкспериментировать.
    Подопытный - процесс SgrmBroker.exe (тип Protected и подпись WinSystem).
    Он имеет одноименный сервис SgrmBroker (Брокер мониторинга среды выполнения System Guard).
    Открываю и получаю инфу из SERVICE_LAUNCH_PROTECTED_INFO - сервис имеет тип SERVICE_LAUNCH_PROTECTED_WINDOWS.
    Затем, открываю PH как Elevated процесс с включенным драйвером, и пытаюсь изменить защиту сервиса на любое другое значение. В итоге получаю "Отказано в доступе". Аналогичный ответ даёт мне PH и на попытку удалить данный сервис. Чтож, защита работает.
    Пишу код. Запускаю свой процесс под LocalSystem с токеном учётной записи NT SERVICE\TrustedInstaller (одна из самых "мощных" учёток, которой практически везде установлен FullControl).
    Снова проделываю фокус с сервисом SgrmBroker и.. всё работает!
    Я спокойно меняю защиту сервиса на какую захочу без какого-либо драйвера.
    Даже создал простенький сервис, выставил ему SERVICE_LAUNCH_PROTECTED_WINDOWS и спокойно удалил через свою софтину.

    Собственно вопрос вот в чём. Это какой-то косяк в защите windows, или защищенными сервисами действительно можно управлять под LocalSystem без драйвера?
     
    Последнее редактирование: 25 фев 2021
  2. MaKaKa

    MaKaKa Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2020
    Сообщения:
    53
    k3rnl нравится это.
  3. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    53
    MaKaKa, спасибо за ссылку на блог, на досуге изучу более углубленно.
    А сейчас быстро пробежался по этому блогу и вроде как там затронута тема именно процессов PP и PPL.
    Я хотел разобраться касаемо сервисов. Т.е. я не вскрываю именно процесс, а только его сервис.
    И вот здесь мне непонятно - зачем введена защита сервисов, если она обходится простым юзермодным кодом?
     
  4. MaKaKa

    MaKaKa Member

    Публикаций:
    0
    Регистрация:
    25 ноя 2020
    Сообщения:
    53
    k3rnl, судя по статье особой разницы нет, разве что для некоторых сервисов, запущенных как PPL, могут требоваться права админа. Автор же выбрал PPL процесс, который можно было инжектить от непривилегированного пользователя для пущей убедительности.
     
    k3rnl нравится это.
  5. sl0n

    sl0n Мамонт дзена **

    Публикаций:
    0
    Регистрация:
    26 сен 2003
    Сообщения:
    703
    ну сервисы это как смесь длл и екзе,только ентрипоинт более странный ну и защита чтобы всякие шакалы в них не инжектились как я в 2004
    --- Сообщение объединено, 23 фев 2021 ---
    Ну еще раньше можно позакрывать все хендлы сервиса кильнуть его и файл на диске заменить своим, ну а винда из-за того что реестр не менялся думала что это ориинальный вот от таких трюков и добавили подписи
    --- Сообщение объединено, 23 фев 2021 ---
    если что пока я грущу задавйте свои ответ только новые темы создавайте ато синт и вас и меня забанит
     
  6. k3rnl

    k3rnl Member

    Публикаций:
    0
    Регистрация:
    28 янв 2021
    Сообщения:
    53
    Если речь про сборку Windows, то в 20H2 (2009) после снятия защиты с сервиса тоже можно внедрять свой код без использования драйвера.

    В общем вот у этих сервисов AppIDSvc, AppXSvc, DoSvc, WaaSMedicSvc, wscsvc (под WindowsLight), и два сервиса дефолтового антивируса WdNisSvc, WinDefend (под AntimalwareLight) спокойно снимается защита как с них самих, так и с их процесса.
    Сперва сервис останавливается, меняется его защита, и снова запускается. Процесс при этом запускается также без защиты.

    А вот эти сервисы ClipSVC, SecurityHealthService, Sense, SgrmBroker, sppsvc такую фишку с собой не дают проделывать. В частности SecurityHealthService и SgrmBroker банально не имеют флага SERVICE_CONTROL_STOP в accept control

    PS: был удивлён, когда PH не смог поменять защиту (отказано в доступе) даже под драйвером..
     
    MaKaKa нравится это.