Integrity Levels

Вивчайте хакінг AWS від нуля до героя з htARTE (HackTricks AWS Red Team Expert)!

Інші способи підтримки HackTricks:

Рівні цілісності

У Windows Vista та пізніших версіях всі захищені об'єкти мають мітку рівня цілісності. Ця настройка в основному призначена для присвоєння "середнього" рівня цілісності файлам та ключам реєстру, за винятком певних папок та файлів, до яких Internet Explorer 7 може записувати на низькому рівні цілісності. Стандартна поведінка полягає в тому, що процеси, ініційовані стандартними користувачами, мають середній рівень цілісності, тоді як служби зазвичай працюють на рівні цілісності системи. Високий рівень цілісності захищає кореневий каталог.

Ключове правило полягає в тому, що об'єкти не можуть бути змінені процесами з нижчим рівнем цілісності, ніж рівень об'єкта. Рівні цілісності такі:

  • Ненадійний: Цей рівень призначений для процесів з анонімними входами. %%%Приклад: Chrome%%%

  • Низький: Головним чином для взаємодії в Інтернеті, особливо в захищеному режимі Internet Explorer, що впливає на пов'язані файли та процеси, а також на певні папки, наприклад, Тимчасовий каталог Інтернету. Процеси з низьким рівнем цілісності стикаються зі значними обмеженнями, включаючи відсутність доступу до запису в реєстр та обмежений доступ до профілю користувача.

  • Середній: Стандартний рівень для більшості дій, призначений для стандартних користувачів та об'єктів без конкретних рівнів цілісності. Навіть члени групи Адміністраторів працюють на цьому рівні за замовчуванням.

  • Високий: Зарезервований для адміністраторів, що дозволяє їм змінювати об'єкти на нижчих рівнях цілісності, включаючи ті, що знаходяться на високому рівні цілісності.

  • Система: Найвищий операційний рівень для ядра Windows та основних служб, недосяжний навіть для адміністраторів, забезпечуючи захист важливих системних функцій.

  • Інсталятор: Унікальний рівень, що перебуває вище за всі інші, дозволяючи об'єктам на цьому рівні видаляти будь-який інший об'єкт.

Ви можете отримати рівень цілісності процесу, використовуючи Process Explorer від Sysinternals, звернувшись до властивостей процесу та переглянувши вкладку "Безпека":

Ви також можете отримати ваш поточний рівень цілісності, використовуючи whoami /groups

Рівні цілісності в файловій системі

Об'єкт всередині файлової системи може потребувати мінімального рівня цілісності і якщо процес не має цього рівня цілісності, він не зможе взаємодіяти з ним. Наприклад, давайте створимо звичайний файл з консолі звичайного користувача та перевіримо дозволи:

echo asd >asd.txt
icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)

Зараз давайте призначимо мінімальний рівень цілісності Високий для файлу. Це повинно бути зроблено з консолі, яка працює в режимі адміністратора, оскільки звичайна консоль працюватиме на рівні цілісності Середній і не матиме дозволу призначити рівень цілісності Високий для об'єкта:

icacls asd.txt /setintegritylevel(oi)(ci) High
processed file: asd.txt
Successfully processed 1 files; Failed processing 0 files

C:\Users\Public>icacls asd.txt
asd.txt BUILTIN\Administrators:(I)(F)
DESKTOP-IDJHTKP\user:(I)(F)
NT AUTHORITY\SYSTEM:(I)(F)
NT AUTHORITY\INTERACTIVE:(I)(M,DC)
NT AUTHORITY\SERVICE:(I)(M,DC)
NT AUTHORITY\BATCH:(I)(M,DC)
Mandatory Label\High Mandatory Level:(NW)

Це те, де речі стають цікавішими. Ви можете побачити, що користувач DESKTOP-IDJHTKP\user має ПОВНІ привілеї до файлу (справді, це був користувач, який створив файл), однак, через встановлений мінімальний рівень цілісності він більше не зможе змінювати файл, якщо він не працює на рівні високої цілісності (зверніть увагу, що він зможе читати його):

echo 1234 > asd.txt
Access is denied.

del asd.txt
C:\Users\Public\asd.txt
Access is denied.

Отже, коли файл має мінімальний рівень цілісності, для його зміни потрібно працювати принаймні на цьому рівні цілісності.

Рівні цілісності в бінарних файлів

Я зробив копію cmd.exe у C:\Windows\System32\cmd-low.exe та встановив рівень цілісності на низький з адміністраторської консолі:

icacls C:\Windows\System32\cmd-low.exe
C:\Windows\System32\cmd-low.exe NT AUTHORITY\SYSTEM:(I)(F)
BUILTIN\Administrators:(I)(F)
BUILTIN\Users:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL APPLICATION PACKAGES:(I)(RX)
APPLICATION PACKAGE AUTHORITY\ALL RESTRICTED APP PACKAGES:(I)(RX)
Mandatory Label\Low Mandatory Level:(NW)

Тепер, коли я запускаю cmd-low.exe, він працюватиме на низькому рівні цілісності замість середнього:

Для цікавих осіб, якщо ви призначите високий рівень цілісності для виконуваного файлу (icacls C:\Windows\System32\cmd-high.exe /setintegritylevel high), він не буде автоматично запускатися з високим рівнем цілісності (якщо ви викликаєте його з середнім рівнем цілісності - за замовчуванням, він буде працювати на середньому рівні цілісності).

Рівні цілісності в процесах

Не всі файли та папки мають мінімальний рівень цілісності, але всі процеси працюють під рівнем цілісності. І, подібно до того, що відбулося з файловою системою, якщо процес хоче записати всередину іншого процесу, він повинен мати принаймні той самий рівень цілісності. Це означає, що процес з низьким рівнем цілісності не може відкрити дескриптор з повним доступом до процесу з середнім рівнем цілісності.

Через обмеження, про які йшлося в цьому та попередньому розділах, з точки зору безпеки завжди рекомендується запускати процес на найнижчому можливому рівні цілісності.

Last updated