Integrity Levels

Support 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), він не буде автоматично запускатися з високим рівнем цілісності (якщо ви викликаєте його з середнього рівня цілісності -- за замовчуванням -- він буде запускатися з середнім рівнем цілісності).

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

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

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

Support HackTricks

Last updated