Не получается переименовать файл в %PF%\WindowsApp
От: пффф  
Дата: 11.06.23 23:15
Оценка:
Привет!

В %PF%\WindowsApp лежит приложуха. Я стал овнером её папочки, отключил наследование разрешений, и разрешил всем всё на этой папке и её содержимом. Но при попытке переименовать там файлик получаю отлуп — в первом диалоге запрашивает повышение прав (но оно, судя по всему, не происходит), и потом говорит, что попросите права у такого-то пользователя, и всё

Запустил CMD из-под админа, пробую там REN — отказано в доступе.

Обратил внимание, что WindowsApp имеет установленный атрибут ReadOnly. Пытаюсь сбросить — требует права админа, потом что-то шуршит, типа делает, потом заходишь опять в свойства — а там оно снова стоит.

Попробовал удалить файл — он удалился. Хочу скопировать из сохраненной копии — не даёт, недостаточно прав.

Что я не так делаю?
Отредактировано 12.06.2023 4:52 пффф . Предыдущая версия . Еще …
Отредактировано 12.06.2023 3:08 пффф . Предыдущая версия .
Re: Не получается переименовать файл в %PF%\WindowsApp
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.06.23 06:39
Оценка:
Здравствуйте, пффф, Вы писали:

П>Что я не так делаю?


Боюсь, Вы взялись за нечто уникальное и грандиозное, не изучив прежде матчасть должным образом. И в таких случаях, конечно, бывает, что проблемы решаются по ходу дела, но как бы не получилось у Вас нечто уродливое и глючное.
Re[2]: Не получается переименовать файл в %PF%\WindowsApp
От: пффф  
Дата: 12.06.23 11:43
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

П>>Что я не так делаю?


ЕМ>Боюсь, Вы взялись за нечто уникальное и грандиозное, не изучив прежде матчасть должным образом. И в таких случаях, конечно, бывает, что проблемы решаются по ходу дела, но как бы не получилось у Вас нечто уродливое и глючное.


Ничего уникального или грандиозного. Хочу подменить DLL-ку в UWP приложении. Матчасть да, изучаю по ходу дела. А где почитать про все-все ограничения UWP приложений? И как их можно обойти? Может получится что-то уродливое и глючное, но я это никому отдавать не буду, так что никаких проблем. Лучше по существу вопроса бы подсказали
Re[3]: Не получается переименовать файл в %PF%\WindowsApp
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.06.23 11:53
Оценка:
Здравствуйте, пффф, Вы писали:

П>где почитать про все-все ограничения UWP приложений?


В данном случае UWP ни при чем. В Windows учетка Administrator — просто одна из возможных, отнюдь не всесильная. Откройте свойства каталога WindowsApps, любого подкаталога/файла в нем, и посмотрите список разрешений.
Re[4]: Не получается переименовать файл в %PF%\WindowsApp
От: пффф  
Дата: 12.06.23 12:52
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

П>>где почитать про все-все ограничения UWP приложений?


ЕМ>В данном случае UWP ни при чем. В Windows учетка Administrator — просто одна из возможных, отнюдь не всесильная. Откройте свойства каталога WindowsApps, любого подкаталога/файла в нем, и посмотрите список разрешений.


Я вообще всем дал полный доступ, как для группы "Все", так и отдельно всем пользователям/группам, которые там в списке разрешений указаны. Ещё я зашел на вкладку "Действующие права доступа" и проверил их для текущего пользователя — всё разрешено, никаких запрещений нет
Re[5]: Не получается переименовать файл в %PF%\WindowsApp
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 12.06.23 18:11
Оценка:
Здравствуйте, пффф, Вы писали:

П>Я вообще всем дал полный доступ


Прошу прощения, мозг зацепился за "из-под админа" и "требует права админа".

Там дело явно не только в ACL. Похоже, какой-то системный процесс и/или фильтр ФС отслеживает обращения. Возможно, проще будет не трогать каталоги, и обойтись динамическими средствами (отладочные функции, внедрение в процесс, DLL redirection и т.п.).
Re[6]: Не получается переименовать файл в %PF%\WindowsApp
От: пффф  
Дата: 12.06.23 21:13
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

ЕМ>Там дело явно не только в ACL. Похоже, какой-то системный процесс и/или фильтр ФС отслеживает обращения.


Угу, похоже на то


ЕМ>Возможно, проще будет не трогать каталоги, и обойтись динамическими средствами


Пробовал, не очень. Момент инициализации приложения не перехватить, я попробовал инжектить DLL с перехватом при помощи Detours нескольких функций, которые скорее всего могут быть вызваны, но то ли детурс не фурычит (или я его нправильно готовлю), то ли всё происходит на старте, и потом функции не вызываются — но мои перехватчики ничего не выдают. Я решил попробовать подсунуть DLL с полной копией всех вызовов, чтобы посмотреть, что и как и в какие моменты вызывается. Но тоже не прокатывает пока


ЕМ>отладочные функции,


Можно тут поподробнее?


ЕМ>внедрение в процесс,


Это делал, не помогло


ЕМ>DLL redirection


Это что за зверь?


ЕМ>и т.п.


Что еще можно попробовать? Любые идеи пригодяться
Re[6]: Не получается переименовать файл в %PF%\WindowsApp
От: m2user  
Дата: 12.06.23 22:42
Оценка: 19 (2)
П>>Я вообще всем дал полный доступ

ЕМ>Прошу прощения, мозг зацепился за "из-под админа" и "требует права админа".


ЕМ>Там дело явно не только в ACL. Похоже, какой-то системный процесс и/или фильтр ФС отслеживает обращения. Возможно, проще будет не трогать каталоги, и обойтись динамическими средствами (отладочные функции, внедрение в процесс, DLL redirection и т.п.).


Не, там все-таки ACL. Просто надо смотреть security descriptor программным способом, т.к. UI далеко не все ACE из SACL показывает.
Если включить аудит файлового доступа (например через Global Object Access Auditing), то в windows security log видно, что у процесса нет прав на запись в %PF%\WindowsApp и подкаталоги по причине "Denied by Process Trust Label ACE".
Это тип ACE (SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE) появился в Win8.1 и плохо документирован.

Вот в этой презентации более-менее объясняется как работает ACE:
http://publications.alex-ionescu.com/Recon/Recon%202018%20-%20Unknown%20Known%20DLLs%20and%20other%20code%20integrity%20trust%20violations.pdf

Что интересно, похоже что SeRestorePrivilege не срабатывает против этого ACE на перезапись файла
Re[7]: Не получается переименовать файл в %PF%\WindowsApp
От: пффф  
Дата: 13.06.23 04:55
Оценка:
Здравствуйте, m2user, Вы писали:

M>Не, там все-таки ACL. Просто надо смотреть security descriptor программным способом, т.к. UI далеко не все ACE из SACL показывает.

M>Если включить аудит файлового доступа (например через Global Object Access Auditing), то в windows security log видно, что у процесса нет прав на запись в %PF%\WindowsApp и подкаталоги по причине "Denied by Process Trust Label ACE".
M>Это тип ACE (SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE) появился в Win8.1 и плохо документирован.

Таки и чего делать-то? Есть какая-нибудь идея?


M>Вот в этой презентации более-менее объясняется как работает ACE:

M>http://publications.alex-ionescu.com/Recon/Recon%202018%20-%20Unknown%20Known%20DLLs%20and%20other%20code%20integrity%20trust%20violations.pdf

Полистал, нифига не понял


M>Что интересно, похоже что SeRestorePrivilege не срабатывает против этого ACE на перезапись файла


Т.е. через backup/restore пролезть не получится? Ну, вроде бы логично
Re[7]: Не получается переименовать файл в %PF%\WindowsApp
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.06.23 11:01
Оценка:
Здравствуйте, пффф, Вы писали:

П>Момент инициализации приложения не перехватить


Через AppInit_DLLs не получается?

ЕМ>>отладочные функции,


П>Можно тут поподробнее?


Я про DebugActiveProcess и прочее. Но, если Вы хотите внедряться и при стороннем запуске тоже, это не поможет.

ЕМ>>DLL redirection


П>Это что за зверь?


Dynamic-link library redirection.

П>Что еще можно попробовать?


WMI Events, kernel-mode notifications.
Re[7]: Не получается переименовать файл в %PF%\WindowsApp
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.06.23 11:47
Оценка:
Здравствуйте, m2user, Вы писали:

M>Это тип ACE (SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE) появился в Win8.1 и плохо документирован.


Странно, что cacls, icacls, AccessEnum, AccessChk про него ничего не знают.
Re[8]: Не получается переименовать файл в %PF%\WindowsApp
От: m2user  
Дата: 13.06.23 14:06
Оценка:
П>Таки и чего делать-то? Есть какая-нибудь идея?

Проблемный ACE типа SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE — на каталоге с приложением и некоторых файлах внутри.
На каталоге WindowsApps помимо обычного DACL есть только ACE типа SYSTEM_MANDATORY_LABEL_ACE_TYPE, но его можно при необходимости через icacls поменять (icacls /setintegritylevel medium).
Поэтому можно сделать копию папки с приложением, при этом у копии уже нет проблемного ACE, т.е. можно редактировать все файлы. Оригинальный каталог — удалить или переименовать.

Работоспособность приложения после этой процедуры я не проверял.
Re[9]: Не получается переименовать файл в %PF%\WindowsApp
От: Евгений Музыченко Франция https://software.muzychenko.net/ru
Дата: 13.06.23 14:26
Оценка:
Здравствуйте, m2user, Вы писали:

M>Проблемный ACE типа SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE — на каталоге с приложением и некоторых файлах внутри.


Чем его можно там увидеть? Не может же такого быть, чтоб никакой готовый софт не показывал его наличия.
Re[10]: Не получается переименовать файл в %PF%\WindowsApp
От: m2user  
Дата: 13.06.23 17:27
Оценка: +1
M>>Проблемный ACE типа SYSTEM_PROCESS_TRUST_LABEL_ACE_TYPE — на каталоге с приложением и некоторых файлах внутри.

ЕМ>Чем его можно там увидеть? Не может же такого быть, чтоб никакой готовый софт не показывал его наличия.


Я смотрю через этот powershell модуль https://www.powershellgallery.com/packages/NtObjectManager/1.1.33/
(https://github.com/googleprojectzero/sandbox-attacksurface-analysis-tools)

Пример кода:
Import-Module C:\ntobjmanager\NtObjectManager.psm1
Set-NtTokenPrivilege SeSecurityPrivilege
$path = "\global??\c:\Program Files\WindowsApps\Microsoft.BingFoodAndDrink_3.0.4.212_x64__8wekyb3d8bbwe\"
$bing = Get-NtFile -Path $path  -Access 0x810D0000 #-Share Read, Write, Delete
$sd=$bing.SecurityDescriptor
$sd.ToSddl()
$sd
$bing.Close()

Пример вывода:
(DACL и некоторые лишние поля из вывода убраны. В System ACL как раз два ACE — mandatory label и process trust label.)

O:BAG:SYS:AI(ML;OICIID;NW;;;HI)(TL;OICI;0x1f01a9;;;S-1-19-512-4096)

Sacl                 : {Mandatory Label - Flags ObjectInherit, ContainerInherit, Inherited - Policy NoWriteUp - IntegrityLevel High, Type ProcessTrustLabel - Flags ObjectInherit, 
                       ContainerInherit - Mask 001F01A9 - Sid S-1-19-512-4096}
Owner                : S-1-5-32-544 - Defaulted: False
Group                : S-1-5-18 - Defaulted: False
Control              : DaclPresent, SaclPresent, DaclAutoInherited, SaclAutoInherited
Revision             : 1
RmControl            : 
NtType               : Name = File - Index = 30
MandatoryLabel       : Mandatory Label - Flags ObjectInherit, ContainerInherit, Inherited - Policy NoWriteUp - IntegrityLevel High
ProcessTrustLabel    : Type ProcessTrustLabel - Flags ObjectInherit, ContainerInherit - Mask 001F01A9 - Sid S-1-19-512-4096
AccessFilters        : {}
Re[8]: Не получается переименовать файл в %PF%\WindowsApp
От: пффф  
Дата: 15.06.23 08:49
Оценка:
Здравствуйте, Евгений Музыченко, Вы писали:

П>>Момент инициализации приложения не перехватить


ЕМ>Через AppInit_DLLs не получается?


Не получается


ЕМ>>>DLL redirection


П>>Это что за зверь?


ЕМ>Dynamic-link library redirection.


Интересно, но, похоже, это не поможет. Вернее, не получится сделать


П>>Что еще можно попробовать?


ЕМ>WMI Events, kernel-mode notifications.


Ну, вот второе вроде как и используется в продукте, но я туда пока не хотел залезать, надеялся на халяву
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.