В предыдущей статье я на примере реализованной в Windows Vista новой функции Icacls, управляемой из командной строки, демонстрировал эксперименты с уровнями целостности, которые представляют новую концепцию обеспечения безопасности, предусматривающую назначение меток процессам, пользователям и объектам (файлам, папкам, ключам регистрации). Теперь мы можем нейтрализовать недостатки Icacls с помощью другого бесплатного инструмента. Утилита Chml обогатит наши эксперименты с уровнями целостности новыми функциональными возможностями.

Краткий обзор

Напомню, что Vista использует пять уровней целостности — Untrusted, Low, Medium, High и System — для указания степени доверия к объектам. Администраторы получают уровень целостности High, а обычные пользователи — Medium. По умолчанию Windows применяет политику ‘no write up’, согласно которой при любой попытке изменения какого-либо объекта в ходе какого бы то ни было процесса Windows проверяет уровни целостности этого процесса и этого объекта. Если процесс выполняется с меньшим уровнем целостности, чем тот, что назначен объекту, Windows блокирует попытку внесения изменения, даже если данный пользователь обладает полномочиями Full Control по отношению к данному объекту.

Icacls позволяет менять уровни целостности в пределах вариантов Low, Medium и High, но не позволяет управлять уровнями Untrusted или System, что делает невозможным изменение предусмотренной по умолчанию политики no write up. Это существенный недостаток, поскольку Windows предусматривает возможность применения политики no read up, согласно которой для любого процесса с низким уровнем целостности блокируется возможность чтения объекта. Возможность менять политику no write up на no read up может оказаться чрезвычайно полезной, так как позволяет обеспечить дополнительную защиту персональных файлов путем назначения им уровня целостности High и применения политики no read up. Поскольку большинство приложений выполняется с уровнем целостности Medium, такая установка сделает неудачной любую попытку вредоносной программы получить доступ, скажем, к файлу, содержащему пароли или данные кредитной карты.

Свободно распространяемая программа

Я решил исследовать политики no read up и поэкспериментировать с уровнями целостности Untrusted и System, для чего написал программу под названием Chml, доступную для загрузки с моего сайта (http://www.minasi.com/vista/chml.htm ). Загрузите файл chml.exe и скопируйте его в свою папку WindowsSystem32, т. е. в системный каталог, чтобы обеспечить его неизменную доступность из командной строки. Убедитесь, что вы обладаете пользовательской привилегией Modify an object label. Откройте командную строку с расширенными полномочиями и перейдите в папку C:stuff, которую мы создали ранее. Все готово к работе с Chml.

Создайте текстовый файл произвольного содержания и назовите его test1.txt. Попросите Chml выдать вам текущий уровень целостности файла:

chml test1.txt

В ответ вы получите информацию о том, что файл не содержит метки (unlabeled). Однако определение unlabeled означает, что операционная система обрабатывает этот файл так, как если бы он имел уровень целостности Medium. Теперь нужно повысить уровень целостности файла до High:

chml test1.txt -i:h

Ключ -i: может принимать значения u, l, m, h или s, и эти значения зависят от регистра (как и все ключи Chml). Программа Chml выдаст подтверждение об успешной установке уровня целостности High для файла test1.txt. В ответ на команду

icacls tes1t.txt

Icacls выдаст подтверждение, что файл имеет метку Mandatory LabelHigh Mandatory Level, а это означает, что файл имеет уровень целостности High.

Теперь применим к файлу test1.txt политику no read up:

chml test1.txt -i:h -nr

Для назначения политик no read up, no write up или no execute up используются ключи -nr, -nw и -nx. Для политики no execute up я пока не нашел применения.

После этого результат работы функции Icacls изменится, а именно: Mandatory LabelHigh Mandatory Level:(NR). Эта метка отличается от меток, выдававшихся ранее, окончанием, поскольку прежние метки оканчивались на (NW). Как многие, вероятно, догадались, NW означает применение политики no write up, а NR — no read up.

Теперь откройте окно командной строки с расширенными полномочиями и попытайтесь исследовать содержимое файла test1.txt:

type test1.txt

Система выдаст отказ в доступе (Access Denied), несмотря на то что вы являетесь владельцем данного объекта. Это — политика no read up в действии. Прочие возможности программы Chml мы рассмотрим в следующей статье.

Марк Минаси - Редактор Windows IT Pro, MCSE и автор книги Mastering Windows Server 2003 (издательство Sybex). mark@minasi.com